Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
отрывки:перемещение_товаров [2018/01/11 14:50]
adminasp
отрывки:перемещение_товаров [2022/07/04 18:58] (текущий)
Строка 1: Строка 1:
-====== ​Способ ​реализации внутренних перещений товаров ======+====== ​Пример ​реализации внутренних перемещений товаров ======
  
 Описание ситуации:​ Описание ситуации:​
Строка 6: Строка 6:
  
 Порядок изменений:​\\ Порядок изменений:​\\
-  - Внести изменения ​в справочник **АСП_ВидыДокументов1С**:<​WRAP>​+  - Добавить элементы в справочник **АСП_ВидыДокументов1С**:<​WRAP>​
 ^ Наименование ​           ^ Вид документа ​     ^ Тип операции ^ Код операции ^ ^ Наименование ​           ^ Вид документа ​     ^ Тип операции ^ Код операции ^
 | Перемещение ​            | ПеремещениеТоваров | Исходящий ​   |              | | Перемещение ​            | ПеремещениеТоваров | Исходящий ​   |              |
Строка 12: Строка 12:
 | Перемещение - получение | ПеремещениеТоваров | Входящий ​    | STEP2        | | Перемещение - получение | ПеремещениеТоваров | Входящий ​    | STEP2        |
 </​WRAP>​ </​WRAP>​
-  - Внести изменения в модуль **[[компоненты:​асп_общие|АСП_Общие]]**:​ +  - В табличную часть ​элемента ​**Перемещение** внести второй и третий элемент в качестве ​этапов:<​WRAP>​ 
-    - Процедура **СоздатьВетДокиПоОснованию**:<​1c>​Функция СоздатьВетДокиПоОснованию(Обработка,​ Документ) Экспорт +^ Этап ​^ Отложенный ​^ 
-  +Перемещение ​отправка ​ | | 
- СписСерт = 0; +Перемещение ​- получение ​| * | 
-        // для перемещений перехватываем логику создания сертификатов и пускаем по сценарию STEP1 +</​WRAP>​ 
- Если ТипЗнч(Документ) = Тип("​ДокументСсылка.ПеремещениеТоваров"​) Тогда +Примечаниедля уточнённого указания организации и контрагента на каждом ​этапе можно заполнить реквизиты ​**Организация** и **Контрагент** в элементах справочника этапах.\\ 
- СписСерт = Обработка.СформироватьОбновитьСертификаты1С(Документ, ОперацияПоКоду("​STEP1"​)).Количество();​  +Дозаполнение полей в сертификатах на каждом ​этапе ​можно ​также регулировать в процедуре ​''​ДозаполнитьПоляВетСертификата1С''​ в [[компоненты:асп_общие|общем модуле]].
- Иначе +
- СписСерт = СписСерт + Обработка.СформироватьОбновитьСертификаты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>+