Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
отрывки:перемещение_товаров [2017/12/27 19:57] adminasp |
отрывки:перемещение_товаров [2018/05/03 18:50] adminasp |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Способ реализации внутренних перещений товаров ====== | + | ====== Пример реализации внутренних перемещений товаров ====== |
Описание ситуации: | Описание ситуации: | ||
Строка 6: | Строка 6: | ||
Порядок изменений:\\ | Порядок изменений:\\ | ||
- | - Внести изменения в справочник **АСП_ВидыДокументов1С**:<WRAP> | + | - Добавить элементы в справочник **АСП_ВидыДокументов1С**:<WRAP> |
^ Наименование ^ Вид документа ^ Тип операции ^ Код операции ^ | ^ Наименование ^ Вид документа ^ Тип операции ^ Код операции ^ | ||
- | | Перемещение | ПеремещениеТоваров | | | | + | | Перемещение | ПеремещениеТоваров | Исходящий | | |
| Перемещение - отправка | ПеремещениеТоваров | Исходящий | STEP1 | | | Перемещение - отправка | ПеремещениеТоваров | Исходящий | STEP1 | | ||
| Перемещение - получение | ПеремещениеТоваров | Входящий | STEP2 | | | Перемещение - получение | ПеремещениеТоваров | Входящий | STEP2 | | ||
</WRAP> | </WRAP> | ||
- | - Внести изменения в модуль **[[компоненты:асп_общие|АСП_Общие]]**: | + | - В табличную часть элемента **Перемещение** внести второй и третий элемент в качестве этапов:<WRAP> |
- | - Процедура **СоздатьВетДокиПоОснованию**:<1c>Функция СоздатьВетДокиПоОснованию(Обработка, Документ) Экспорт | + | ^ Этап ^ Отложенный ^ |
- | + | | Перемещение - отправка | | | |
- | СписСерт = 0; | + | | Перемещение - получение | * | |
- | // для перемещений перехватываем логику создания сертификатов и пускаем по сценарию STEP1 | + | </WRAP> |
- | Если ТипЗнч(Документ) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда | + | Примечание: для уточнённого указания организации и контрагента на каждом этапе можно заполнить реквизиты **Организация** и **Контрагент** в элементах справочника этапах. |
- | СписСерт = Обработка.СформироватьОбновитьСертификаты1С(Документ, ОперацияПоКоду("STEP1")).Количество(); | + | |
- | Иначе | + | |
- | СписСерт = СписСерт + Обработка.СформироватьОбновитьСертификаты1С(Документ).Количество(); | + | |
- | КонецЕсли; | + | |
- | Возврат СписСерт; | + | |
- | + | ||
- | КонецФункции | + | |
- | </1c> | + | |
- | - Процедура **ПровестиПоОснованию**:<1c>Процедура ПровестиПоОснованию(Обработка, ВидДокумента, Документ) Экспорт | + | |
- | // добавляем ВидДокумента во второй параметр для уточнённой выборки сертификатов по коду операции | + | |
- | Если ВидДокумента.КодОперации = "STEP1" Тогда | + | |
- | СписВетДок = АСП_Функции.ПолучитьСписокВетДокументов(Документ, ВидДокумента); | + | |
- | Иначе | + | |
- | СписВетДок = АСП_Функции.ПолучитьСписокВетДокументов(Документ); | + | |
- | КонецЕсли; | + | |
- | + | ||
- | Для Каждого ВетДок Из СписВетДок Цикл | + | |
- | Объект = ВетДок.ПолучитьОбъект(); | + | |
- | Объект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); | + | |
- | КонецЦикла; | + | |
- | КонецПроцедуры | + | |
- | </1c> | + | |
- | - Процедура **ЗарегистрироватьПоОснованию**:<1c>Процедура ЗарегистрироватьПоОснованию(Обработка, ВидДокумента, Документ) Экспорт | + | |
- | + | ||
- | //Перехватываем ВидДокумента для изменения сценария регистрации | + | |
- | Если ВидДокумента.Наименование = "Перемещение" Тогда | + | |
- | Обработка.НачатьПоследовательнуюРегистрацию(); | + | |
- | Обработка.ЗарегистрироватьТранспортнуюПартию(Документ, ОперацияПоКоду("STEP1")); | + | |
- | Обработка.ЗарегистрироватьВходящуюПартию(Документ, ОперацияПоКоду("STEP2")); | + | |
- | Обработка.ЗавершитьПоследовательнуюРегистрацию(); | + | |
- | Возврат; | + | |
- | КонецЕсли; | + | |
- | + | ||
- | // для остальных документов - обычный сценарий | + | |
- | Если ВидДокумента.ТипСертификата = Перечисления.АСП_ТипВетСертификата.Входящий Тогда | + | |
- | Обработка.ЗарегистрироватьВходящуюПартию(Документ); | + | |
- | ИначеЕсли ВидДокумента.ТипСертификата = Перечисления.АСП_ТипВетСертификата.Исходящий Тогда | + | |
- | Обработка.ЗарегистрироватьТранспортнуюПартию(Документ); | + | |
- | ИначеЕсли ВидДокумента.ТипСертификата = Перечисления.АСП_ТипВетСертификата.Производственный Тогда | + | |
- | Обработка.ЗарегистрироватьПроизводственнуюПартию(Документ); | + | |
- | ИначеЕсли ВидДокумента.ТипСертификата = Перечисления.АСП_ТипВетСертификата.Инвентаризация Тогда | + | |
- | Обработка.ЗарегистрироватьИнвентаризацию(Документ); | + | |
- | КонецЕсли; | + | |
- | + | ||
- | КонецПроцедуры | + | |
- | </1c> | + | |
- | - Процедура **ДозаполнитьПоляВетСертификата1С**:<1c>Процедура ДозаполнитьПоляВетСертификата1С(Ссылка, ОбъектСертификата) Экспорт | + | |
- | + | ||
- | Если ОбъектСертификата.ВидДокумента.КодОперации = "STEP1" Тогда | + | |
- | ОбъектСертификата.Организация = Ссылка.СкладОтправитель; | + | |
- | ОбъектСертификата.Контрагент = Ссылка.СкладПолучатель; | + | |
- | Возврат; | + | |
- | ИначеЕсли ОбъектСертификата.ВидДокумента.КодОперации = "STEP2" Тогда | + | |
- | ОбъектСертификата.Организация = Ссылка.СкладПолучатель; | + | |
- | ОбъектСертификата.Контрагент = Ссылка.СкладОтправитель; | + | |
- | Возврат; | + | |
- | КонецЕсли; | + | |
- | + | ||
- | // далее оставляем тело процедуры | + | |
- | ... | + | |
- | КонецПроцедуры | + | |
- | </1c> | + | |
- | - Процедура **ДействияПередРегистрациейВетСертификата**:<1c>Процедура ДействияПередРегистрациейВетСертификата(Основание, ВидДокумента) Экспорт | + | |
- | Если ВидДокумента.КодОперации = "STEP2" Тогда | + | |
- | СписПолучателей = АСП_Функции.ПолучитьСписокВетДокументов(Основание, ОперацияПоКоду("STEP2")); | + | |
- | Для Каждого Получатель Из СписПолучателей Цикл | + | |
- | // нужно изменить обработчик и получить второй документ по первому; | + | |
- | СписОтправителей = АСП_Функции.ПолучитьСписокВетДокументов(Основание, ОперацияПоКоду("STEP1"), Получатель.Разрез); | + | |
- | Об = Получатель.ПолучитьОбъект(); | + | |
- | //ОбъектДок = Документы.АСП_ВетеринарныйДокумент.НайтиПоНомеру(Ссылка.НомерВСД); | + | |
- | Об.ГУИДВходящегоВСД = СписОтправителей[0].ГУИД; | + | |
- | Об.Записать(); | + | |
- | КонецЦикла; | + | |
- | КонецЕсли; | + | |
- | КонецПроцедуры | + | |
- | </1c> | + | |
- | - Процедура **ДействияПослеПроведенияВетСертификата**:<1c>Процедура ДействияПослеПроведенияВетСертификата(Ссылка, Движения) Экспорт | + | |
- | Если Ссылка.ВидДокумента.КодОперации = "STEP1" Тогда | + | |
- | //1. найти уже созданное | + | |
- | Основание = Ссылка.ДокументОснование; | + | |
- | Если ТипЗнч(Основание) = Тип("ДокументСсылка.АСП_ВетеринарныйДокумент") Тогда | + | |
- | Основание = Основание.ДокументОснование; | + | |
- | КонецЕсли; | + | |
- | Спис = АСП_Функции.ПолучитьСписокВетДокументов(Основание, ОперацияПоКоду("STEP2"), Ссылка.Разрез); | + | |
- | + | ||
- | Если Спис.Количество()=0 Тогда | + | |
- | Объект = Документы.АСП_ВетеринарныйДокумент.СоздатьДокумент(); | + | |
- | Иначе | + | |
- | Объект = Спис[0].Ссылка.ПолучитьОбъект(); | + | |
- | КонецЕсли; | + | |
- | + | ||
- | //2. заполнить по шаблону | + | |
- | Шаблон = АСП_Функции.НайтиШаблон(Ссылка.Ссылка, ОперацияПоКоду("STEP2")); | + | |
- | Если НЕ Шаблон = Неопределено Тогда | + | |
- | ЗаполнитьЗначенияСвойств(Объект, Шаблон); | + | |
- | Объект.Шаблон = Шаблон; | + | |
- | КонецЕсли; | + | |
- | Объект.Дата = Ссылка.Дата+1; | + | |
- | Объект.ВидДокумента = ОперацияПоКоду("STEP2"); | + | |
- | Объект.ДокументОснование = Основание; | + | |
- | Объект.Контрагент = Ссылка.Организация; | + | |
- | Объект.Организация = Ссылка.Контрагент; | + | |
- | Объект.НомерВСД = Ссылка.НомерВСД; | + | |
- | Объект.ДатаВСД = Ссылка.ДатаВСД; | + | |
- | Объект.ДатаТТН = Ссылка.ДатаТТН; | + | |
- | Объект.НомерТТН = Ссылка.НомерТТН; | + | |
- | Объект.Разрез = Ссылка.Разрез; | + | |
- | + | ||
- | // запрос получения информации по партии | + | |
- | Запрос = Новый Запрос( | + | |
- | "ВЫБРАТЬ | + | |
- | | АСП_ВходящиеПартии.Категория, | + | |
- | | АСП_ВходящиеПартии.Номенклатура, | + | |
- | | АСП_ВходящиеПартии.Единица, | + | |
- | | АСП_ВходящиеПартии.Кратность, | + | |
- | | АСП_ВходящиеПартии.Упаковка, | + | |
- | | АСП_ВходящиеПартии.ДатаВыработки, | + | |
- | | АСП_ВходящиеПартии.ДатаВыработкиКон, | + | |
- | | АСП_ВходящиеПартии.ДатаПросрочки, | + | |
- | | АСП_ВходящиеПартии.ДатаПросрочкиКон, | + | |
- | | АСП_ВходящиеПартии.Маркировки, | + | |
- | | АСП_ВходящиеПартии.Производитель | + | |
- | |ИЗ | + | |
- | | РегистрСведений.АСП_ВходящиеПартии КАК АСП_ВходящиеПартии | + | |
- | |ГДЕ | + | |
- | | АСП_ВходящиеПартии.НомерСтрокиТЧ = &НомерСтрокиТЧ | + | |
- | | И АСП_ВходящиеПартии.Регистратор = &Регистратор"); | + | |
- | + | ||
- | //3. перезаполнение таблицы товаров | + | |
- | Объект.Товары.Очистить(); | + | |
- | Для Каждого Движение Из Движения.АСП_СкладскиеЗаписи Цикл | + | |
- | Нов = Объект.Товары.Добавить(); | + | |
- | Запрос.УстановитьПараметр("НомерСтрокиТЧ", Движение.НомерСтрокиТЧ); | + | |
- | Запрос.УстановитьПараметр("Регистратор", Движение.Сертификат); | + | |
- | Партия = Запрос.Выполнить().Выгрузить()[0]; | + | |
- | ЗаполнитьЗначенияСвойств(Нов, Партия); | + | |
- | Нов.Количество = Движение.Количество; | + | |
- | Нов.КоличествоУпаковок = Движение.КоличествоУпаковок; | + | |
- | КонецЦикла; | + | |
- | + | ||
- | Объект.Записать(); | + | |
- | КонецЕсли; | + | |
- | КонецПроцедуры | + | |
- | </1c> | + | |