Интеграция «Склада 15 с МДЛП и конфигурации «1С: Управление аптечной сетью 1.4»

Последние изменения: 31.03.2021

Установка расширения для УАС

Актуально для релиза 11.4.12.71/ 1.4.12.14, на более поздних не проверялось!

Скачать расширение для УАС.

Функции расширения:

  • Исправление поведения УАС при записи элементов справочника «Штрихкоды упаковок товаров» в случае, когда уровень вложенности упаковок больше 1. В этом случае УАС записывает в справочник информацию об упаковках самого верхнего уровня и самого нижнего уровня, игнорируя промежуточные упаковки. Расширение исправляет это поведение, восстанавливая иерархию вложенности групповых упаковок.
  • Включение функциональности работы с сериями в уведомлениях МДЛП – генерация элементов справочника «Серии номенклатуры», заполнения серий в табличных частях. В УАС по умолчанию отключена кнопка генерации серий в «Уведомлении о приемке МДЛП», соответственно при записи в справочник «Штрихкоды упаковок товаров» не заносится информация о серии.

Расширение вносит изменения в следующие процедуры и функции:

  • Общий модуль УАС_МДЛП: ЗаполнитьСсылкиШтрихкодовУпаковок, МДЛП_ИспользоватьСерииНоменклатуры, МДЛП_ЗаполнитьСгенерироватьСерии, ОбработкаЗаполнения_ДобавитьТовар, ОбработкаЗаполнения_Отгрузка_Реализация
  • Общий модуль УАС_Сервер: ЗаполнитьГоденДо

Выгрузка справочников

Интеграционная обработка УАС 1.4

Макет «Номенклатура» – текст запроса, строка 29. Реквизиты номенклатуры «ТабачнаяПродукция» и «ОбувнаяПродукция» удалены в релизе 11.4.12.71/1.4.12.14, удаляем их из запроса. Если этого не сделать, выгрузка справочника «Номенклатура» из 1С будет вызывать ошибку.

Меняем

ВЫБОР КОГДА Номенклатура.ВидНоменклатуры.УАС_МДЛП ИЛИ Номенклатура.ТабачнаяПродукция ИЛИ Номенклатура.ОбувнаяПродукция ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК Маркируемый,

на

ВЫБОР КОГДА Номенклатура.ВидНоменклатуры.УАС_МДЛП ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК Маркируемый,

Включаем выгрузку справочника «Транспортные упаковки».

Информация о штрихкодах упаковок

Одна из основных проблем при настройке обмена 1С УАС со «Складом 15» – это различие форматов штрихкодов упаковок, точнее то, в каком формате в текстовом виде хранятся эти номера в базах и как воспринимаются алгоритмами.

Штрихкод упаковки имеет следующий вид:


1С УАС хранит номера упаковок в справочник ШтрихкодыУпаковокТоваров без идентификатора применения (00), т.е. в виде

212345678912345678

«Склад 15» правильно обрабатывает информацию о номерах упаковок, если в таблице «ТранспортныеУпаковки» и в документах в полях ИдКоробки и ШтрихкодРодителя эти номера записаны в формате GS1, т.е. в виде

(00)212345678912345678

В случае же, когда документ обрабатывается на ТСД по заданию, т.е. по выгруженному из 1С документу, при сканировании штрихкода палеты «Склад 15» правильно определяет наличие кода этой паллеты в документе, только если в поле SSCC этот код занесен в формате GS1, но без скобок, т.е. в виде

00112345678912345678

Соответственно, при выгрузке и загрузке данных приходится проводить преобразование между этими видами представления номеров упаковок.

Интеграционная обработка – макет ТранспортныеУпаковки.

Исходя из вышесказанного (см. «Информация о штрихкодах упаковок»), вносим изменения в текст запроса – для номера упаковки добавляем префикс (00).

Меняем

	 ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	 ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода КАК ШтрихкодТранспортнойУпаковки,

на

	 ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ВЫБОР КОГДА ПОДСТРОКА(ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода, 1, 4) = "(00)" ТОГДА ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода
ИНАЧЕ
"(00)" + ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода
 КОНЕЦ КАК ШтрихкодТранспортнойУпаковки,

Настройка бизнес-процессов

Уведомление о приемке МДЛП – проверка документа на ТСД

Копируем типовой бизнес-процесс для внесения изменений. Настраиваем отбор документов для нового БП.

БП – выгрузка табличной части – ТЧ «МаркировкаЛекарств» – имя приемника – SSCC – меняем произвольный код ШтрихкодПалетыHRI на следующий (убираем скобки из префикса, см. «Информация о штрихкодах упаковок выше»):

ШтрихкодПалеты = СтрокаТЧДокумента1С.ШтрихкодПалеты; 
Если ЗначениеЗаполнено(ШтрихкодПалеты) И Лев(ШтрихкодПалеты, 4) = "(00)" Тогда 
ШтрихкодПалеты = "00" + Сред(ШтрихкодПалеты, 5);
КонецЕсли; 
Если ЗначениеЗаполнено(ШтрихкодПалеты) И НЕ Лев(ШтрихкодПалеты, 4) = "00" Тогда 
ШтрихкодПалеты = "00" + ШтрихкодПалеты;
КонецЕсли;
Результат = ШтрихкодПалеты;

БП – загрузка табличных частей – «НомераУпаковок» – реквизит НомерРодительскойУпаковки – при обратной загрузке в 1С обрезаем префикс (00) (см. «Информация о штрихкодах упаковок»).

Меняем на произвольный код:

НомерРодительскойУпаковки = СтрокаТабличнойЧастиДокументаТСД.SSCC; 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("ШтрихкодРодителя") Тогда 
НомерРодительскойУпаковки = СтрокаТабличнойЧастиДокументаТСД.ШтрихкодРодителя; 
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("ИдКоробки") Тогда 
НомерРодительскойУпаковки = СтрокаТабличнойЧастиДокументаТСД.ИдКоробки; 
КонецЕсли; 
Если ЗначениеЗаполнено(НомерРодительскойУпаковки) И Лев(НомерРодительскойУпаковки, 1) = "(" Тогда
ПозицияСкобки2 = СтрНайти(НомерРодительскойУпаковки, ")"); 
Если ПозицияСкобки2 > 0 Тогда
НомерРодительскойУпаковки = Сред(НомерРодительскойУпаковки, ПозицияСкобки2 + 1, 18); 
КонецЕсли;
КонецЕсли; 
Если ЗначениеЗаполнено(НомерРодительскойУпаковки) и (СтрДлина(НомерРодительскойУпаковки) = 20) и (Лев(НомерРодительскойУпаковки, 2) = "00") Тогда
НомерРодительскойУпаковки = Сред(НомерРодительскойУпаковки, 3, 18); 
КонецЕсли;
Результат = НомерРодительскойУпаковки;

БП – Загрузка табличных частей – «ТранспортныеУпаковки» – реквизит НомерУпаковки – произвольный код «Получить SSCC» (палета в приоритете) – к стандартной обрезке лидирующего префикса (00) добавляем обрезку префикса без скобок 00, т.к. мы изменили в выгрузке выше (см. «Информация о штрихкодах упаковок»).

Меняем на следующий код:

SSCC = СтрокаТабличнойЧастиДокументаТСД.SSCC; 
Если НЕ ЗначениеЗаполнено(SSCC) 
И СтрокаТабличнойЧастиДокументаТСД.Свойство("ИдКоробки") Тогда
SSCC = СтрокаТабличнойЧастиДокументаТСД.ИдКоробки; 
КонецЕсли; 
Если ЗначениеЗаполнено(SSCC) И Лев(SSCC, 1) = "(" Тогда 
ПозицияСкобки2 = СтрНайти(SSCC, ")");	 
Если ПозицияСкобки2 > 0 Тогда 
SSCC = Сред(SSCC, ПозицияСкобки2 + 1, 18); 
КонецЕсли; 
КонецЕсли;
Если ЗначениеЗаполнено(SSCC) и (СтрДлина(SSCC) = 20) и (Лев(SSCC, 2) = "00") Тогда 
SSCC = Сред(SSCC, 3, 18); 
КонецЕсли; 
Результат = SSCC;

БП – загрузка табличных частей – «СоставТранспортныхУпаковок» – реквизит ИдентификаторСтроки – произвольный код «ПолучитьИдентификаторСтрокиТУ» (палета в приоритете) – к стандартной обрезке лидирующего префикса (00) добавляем обрезку префикса без скобок 00, т.к. мы изменили в выгрузке выше (см. «Информация о штрихкодах упаковок»).

Меняем на следующий:

ИдентификаторСтроки = ""; 
SSCC = СтрокаТабличнойЧастиДокументаТСД.SSCC;	 
Если Не ЗначениеЗаполнено(SSCC)
И СтрокаТабличнойЧастиДокументаТСД.Свойство("ИдКоробки") Тогда 
SSCC = СтрокаТабличнойЧастиДокументаТСД.ИдКоробки; 
КонецЕсли;
Если ЗначениеЗаполнено(SSCC) И Лев(SSCC, 1) = "(" Тогда 
ПозицияСкобки2 = СтрНайти(SSCC, ")"); 
Если ПозицияСкобки2 > 0 Тогда 
SSCC = Сред(SSCC, ПозицияСкобки2 + 1, 18); 
КонецЕсли;
КонецЕсли; 
Если ЗначениеЗаполнено(SSCC) и (СтрДлина(SSCC) = 20) и (Лев(SSCC, 2) = "00") Тогда 
SSCC = Сред(SSCC, 3, 18); 
КонецЕсли;
Если ЗначениеЗаполнено(SSCC) Тогда 
НайденнаяСтрокаТранспортнойУпаковки = 
ОбъектДокумент1С.ТранспортныеУпаковки.НайтиСтроки( 
Новый Структура("НомерУпаковки", SSCC));	 
Если НайденнаяСтрокаТранспортнойУпаковки.Количество() > 0 Тогда 
ИдентификаторСтроки = 
НайденнаяСтрокаТранспортнойУпаковки[0].ИдентификаторСтроки; 
КонецЕсли; 
КонецЕсли;	 
Результат = ИдентификаторСтроки;

Интеграционная обработка – вносим изменения в процедуру УАС_1_4_УведомлениеОПриемкеМДЛП_ПослеЗаполненияСтрокиТЧ_СоставТранспортныхУпаковок. Правка исправляет в некоторых случаях неправильное поведение загрузки – сбивается иерархия вложенности групповых упаковок при уровне вложенности более одного.

Меняем

СтрокаНомерУпаковки = Док1СРезультат.НомераУпаковок.Найти(SGTIN, "НомерКИЗ"); 
Если НЕ СтрокаНомерУпаковки = Неопределено Тогда
СтрокаНомерУпаковки.ИдентификаторСтроки = СтрокаДокумента.ИдентификаторСтрокиУпаковки;	 СтрокаНомерУпаковки.НомерРодительскойУпаковки = НомерУпаковки;
КонецЕсли;

на

СтрокаНомерУпаковки = Док1СРезультат.НомераУпаковок.Найти(SGTIN, "НомерКИЗ");
Если НЕ СтрокаНомерУпаковки = Неопределено Тогда
СтрокаНомерУпаковки.ИдентификаторСтроки = СтрокаДокумента.ИдентификаторСтрокиУпаковки;
Если НЕ ЗначениеЗаполнено(СтрокаНомерУпаковки.НомерРодительскойУпаковки) Тогда
СтрокаНомерУпаковки.НомерРодительскойУпаковки = НомерУпаковки; 
КонецЕсли;
КонецЕсли;

Функция УАС_1_4_ОбработатьSSCC – к стандартной обрезке лидирующего префикса (00) добавляем обрезку префикса без скобок 00, т.к. мы изменили в выгрузке выше (см. «Информация о штрихкодах упаковок»).

Добавляем код:

Если ЗначениеЗаполнено(SSCC) и (СтрДлина(SSCC) = 20) и (Лев(SSCC, 2) = "00") Тогда
SSCC = Сред(SSCC, 3, 18);
КонецЕсли;

Разагрегация – уведомление об агрегировании и трансформации упаковок МДЛП (на основании документа ТСД «Агрегация»)

Создаем бизнес-процесс «Расформирование упаковок (созданный на ТСД «Агрегация»)».


Настройка загрузки шапки.


Интеграционная обработка – модуль объекта. Так как в библиотеке МДЛП используется один вид документа и для агрегирования, и для расформирования упаковок, в обработчик ПередЗаполнениемДокумента добавляем следующий код, чтобы при открытии формы нового документа, загруженного с ТСД, система правильно выбирала вид формы.

Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ ПередЗаполнениемДокумента_Расформирование(СтруктураПараметров) Экспорт УАС_1_4_Общий_ПередЗаполнениемДокумента(СтруктураПараметров) СтруктураПараметров.Вставить("ПараметрыОткрытияФормы", 
Новый Структура("ЗначенияЗаполнения", Новый Структура("Операция", Перечисления.ОперацииАгрегированияИТрансформацииУпаковокМДЛП.Расформирование)));
КонецПроцедуры

Настройка загрузки табличной части:

В документе ТСД «Агрегация» в таблице «Разагрегировать» содержатся штрихкоды упаковок, подлежащих расформированию. Загружаем их в табличную часть документа «Уведомление об агрегировании и трансформации упаковок» с видом операции «Расформирование», предварительно удалив префикс штрихкода, поскольку в 1С все номера упаковок хранятся без префиксов (см. «Информация о штрихкодах упаковок»).

Ид = СтрокаТабличнойЧастиДокументаТСД.Ид;

Если НЕ ЗначениеЗаполнено(Ид) Тогда

Ид = СтрокаТабличнойЧастиДокументаТСД.id;

КонецЕсли;

Если ЗначениеЗаполнено(Ид) И Лев(Ид, 1) = "(" Тогда

ПозицияСкобки2 = СтрНайти(Ид, ")");

Если ПозицияСкобки2 > 0 Тогда

Ид = Сред(Ид, ПозицияСкобки2 + 1, 18);

КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Ид) и (СтрДлина(Ид) = 20) и (Лев(Ид, 2) = "00") Тогда Ид = Сред(Ид, 3, 18); КонецЕсли; Результат = Ид;

Агрегация – уведомление об агрегировании и трансформации упаковок МДЛП (на основании документа ТСД «Агрегация»)

Создаем бизнес-процесс «Агрегация упаковок (созданный на ТСД «Агрегация»)».

Настройка загрузки шапки:

Произвольный код ВложеныПотребительскиеУпаковки – определяет вид документа «Агрегация» – товары в коробки или коробки в палеты. Таблица «СтрокиФакт» документа «Агрегация» содержит коды только потребительских упаковок. Так как в обработке обмена таблица «ДокументТСД.СтрокиФакт» всегда содержит хотя бы одну строку со служебными данными, проверяется условие «Количество строк > 1».

 
Результат = Ложь;
Если ДокументТСД.СтрокиФакт.Количество() > 1 Тогда 
Результат = Истина; 
КонецЕсли;

Интеграционная обработка – модуль объекта. Так как в библиотеке МДЛП используется один вид документа и для агрегирования, и для расформирования упаковок, в обработчик ПередЗаполнениемДокумента добавляем следующий код, чтобы при открытии формы нового документа, загруженного с ТСД, система правильно выбирала вид формы.

Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ ПередЗаполнениемДокумента_Агрегация(СтруктураПараметров) Экспорт УАС_1_4_Общий_ПередЗаполнениемДокумента(СтруктураПараметров);	 
СтруктураПараметров.Вставить("ПараметрыОткрытияФормы",	 
Новый Структура("ЗначенияЗаполнения", Новый Структура("Операция", Перечисления.ОперацииАгрегированияИТрансформацииУпаковокМДЛП.Агрегирование)));	 
КонецПроцедуры

Модуль формы – в обработчике ПослеОткрытияФормыДокумента в зависимости от вида документа агрегации – товары в коробки или коробки в палеты (определяется значением реквизита ВложеныПотребительскиеУпаковки) настраиваем вид формы документа.

НаКлиенте
Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ПослеОткрытияФормыДокумента (СтруктураПараметров) Экспорт 
УАС_1_4_Общий_ПослеОткрытияФормыДокумента(СтруктураПараметров); 
Форма = СтруктураПараметров.ФормаДокумента; 
Форма.НастроитьФормуПоОперации();
ВложеныПотребительскиеУпаковки = Форма.Объект.ВложеныПотребительскиеУпаковки; 
Если ВложеныПотребительскиеУпаковки Тогда	 
Форма.ВложеныПотребительскиеУпаковки = 1; 
ТекущаяСтраница = Форма.Элементы.ГруппаТовары; 
Для Каждого СтрокаТЧ Из Форма.Объект.Товары Цикл
ПараметрыОтбора = Новый Структура("ИдентификаторСтроки", 
СтрокаТЧ.ИдентификаторСтроки);	 
СтрокиНомеров = Форма.Объект.НомераУпаковок.НайтиСтроки(ПараметрыОтбора); 
Если СтрокиНомеров.Количество() = СтрокаТЧ.Количество Тогда
СтрокаТЧ.СтатусЗаполненияУпаковок = 1;	 
Иначе 
СтрокаТЧ.СтатусЗаполненияУпаковок = 0; 
КонецЕсли;	 
КонецЦикла; 
Иначе
Форма.ВложеныПотребительскиеУпаковки = 0; 
ТекущаяСтраница = Форма.Элементы.ГруппаТранспортныеУпаковки; 
КонецЕсли; 
Если Форма.Элементы.ГруппаВложенныеУпаковки.ТекущаяСтраница <> ТекущаяСтраница Тогда Форма.Элементы.ГруппаВложенныеУпаковки.ТекущаяСтраница = ТекущаяСтраница; 
КонецЕсли; 
КонецПроцедуры

Настройка загрузки табличных частей:

ТЧ «Группировочные упаковки»:

Интеграционная обработка – модуль объекта. Заполняем поле ИдентификаторСтроки сгенерированным ГУИД для связи с табличной частью «ТранспортныеУпаковки» и «Товары».

Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ ПослеЗаполненияСтрокиТЧ_ГруппировочныеУпаковки(СтруктураПараметров) Экспорт УАС_1_4_Общий_ПослеЗаполненияСтрокиТЧ(СтруктураПараметров);
Док1СРезультат = СтруктураПараметров.Док1СРезультат;	 
СтрокаДокумента = СтруктураПараметров.СтрокаДокумента; 
ДобавленаНоваяСтрока = СтруктураПараметров.СтруктураПоискаКлючаСвязи.ЭтоНоваяСтрока1С; 
Если ДобавленаНоваяСтрока Тогда	 
СтрокаДокумента.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
КонецЕсли; 
КонецПроцедуры

Произвольный код «Номер группировочной упаковки» – если тип агрегации – товары в коробки, то таблица «КоробкиПалеты» содержит номера коробок, в которые агрегируем потребительские упаковки, загружаем их в табличную часть «Группировочные упаковки». Если тип агрегации – коробки в палеты, то по значению свойства ЭтоРодитель отбираем палеты, в которые агрегируем коробки и загружаем в табличную часть только коды палет.

Результат = ""; 
Если ДокументТСД.СтрокиФакт.Количество() > 1 Тогда 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("СерийныйНомер") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.СерийныйНомер; 
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("serijnyjNomer") Тогда
Результат = СтрокаТабличнойЧастиДокументаТСД.serijnyjNomer;
КонецЕсли; 
Иначе 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("ЭтоРодитель") Тогда 
Если СтрокаТабличнойЧастиДокументаТСД.ЭтоРодитель Тогда	 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("СерийныйНомер") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.СерийныйНомер; 
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("serijnyjNomer") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.serijnyjNomer;
КонецЕсли; 
КонецЕсли;
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("etoRoditel") Тогда 
Если СтрокаТабличнойЧастиДокументаТСД.etoRoditel Тогда
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("СерийныйНомер") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.СерийныйНомер;
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("serijnyjNomer") Тогда
Результат = СтрокаТабличнойЧастиДокументаТСД.serijnyjNomer; 
КонецЕсли;	 
КонецЕсли; 
КонецЕсли; 
КонецЕсли;

ТЧ «Транспортные упаковки»:

Интеграционная обработка – модуль объекта. Находим в табличной части «Группировочные упаковки» номер упаковки, в которую вложена текущая транспортная упаковка, и заполняем поле ИдентификаторГрупповойУпаковки для хранения иерархии вложенности.

Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ ПослеЗаполненияСтрокиТЧ_ТранспортныеУпаковки(СтруктураПараметров) Экспорт УАС_1_4_Общий_ПослеЗаполненияСтрокиТЧ(СтруктураПараметров); 
Док1СРезультат = СтруктураПараметров.Док1СРезультат;
ГруппировочныеУпаковки = Док1СРезультат.ГруппировочныеУпаковки; 
СтрокаДокумента = СтруктураПараметров.СтрокаДокумента; 
СтрокаТСД = СтруктураПараметров.СтрокаТабличнойЧастиДокументаТСД;
Если НЕ ЗначениеЗаполнено(СтрокаДокумента.ИдентификаторГрупповойУпаковки) Тогда 
Если СтрокаТСД.Свойство("Родитель") Тогда 
НомерУпаковки = УАС_1_4_ОбработатьSSCC(СтрокаТСД.Родитель); 
ИначеЕсли СтрокаТСД.Свойство("Roditel") Тогда 
НомерУпаковки = УАС_1_4_ОбработатьSSCC(СтрокаТСД.Roditel);
 КонецЕсли; 
Если ЗначениеЗаполнено(НомерУпаковки) Тогда 
НайденнаяСтрокаГруппировочнойУпаковки =
ГруппировочныеУпаковки.НайтиСтроки(Новый Структура("НомерУпаковки", 
НомерУпаковки)); 
Если НайденнаяСтрокаГруппировочнойУпаковки.Количество() > 0 Тогда 
СтрокаДокумента.ИдентификаторГрупповойУпаковки = 
НайденнаяСтрокаГруппировочнойУпаковки[0].ИдентификаторСтроки;
КонецЕсли; 
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Произвольный код «Номер транспортной упаковки». Номера упаковок загружаются из таблицы «КоробкиПаллеты» в табличную часть «ТранспортныеУпаковки» только в случае вида агрегации коробки в паллеты (пустая таблица «СтрокиФакт»). Загружаются только номера коробок, которые агрегируем в паллеты (заполнено свойство Родитель).

Результат = ""; 
Если ДокументТСД.СтрокиФакт.Количество() <= 1 Тогда 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("Родитель") и 
ЗначениеЗаполнено(СтрокаТабличнойЧастиДокументаТСД.Родитель) Тогда 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("СерийныйНомер") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.СерийныйНомер; 
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("serijnyjNomer") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.serijnyjNomer; 
КонецЕсли;
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("Roditel") и
ЗначениеЗаполнено(СтрокаТабличнойЧастиДокументаТСД.Roditel) Тогда 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("СерийныйНомер") Тогда 
Результат = СтрокаТабличнойЧастиДокументаТСД.СерийныйНомер; 
ИначеЕсли СтрокаТабличнойЧастиДокументаТСД.Свойство("serijnyjNomer") Тогда
Результат = СтрокаТабличнойЧастиДокументаТСД.serijnyjNomer;
КонецЕсли;
КонецЕсли; 
КонецЕсли;

ТЧ «Товары»:

Интеграционная обработка – модуль объекта. Заполняем поле ИдентификаторСтроки сгенерированным ГУИД для связи с табличной частью «НомераУпаковок». Находим в табличной части «Группировочные упаковки» номер упаковки, в которую вложена текущая позиция товара, и заполняем поле ИдентификаторГрупповойУпаковки для хранения иерархии вложенности.

Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ПослеЗаполненияСтрокиТЧ_Товары (СтруктураПараметров) Экспорт 
Перем КэшированныеЗначения; 
УАС_1_4_Общий_ПослеЗаполненияСтрокиТЧ(СтруктураПараметров);
СтрокаДокумента = СтруктураПараметров.СтрокаДокумента; 
ДобавленаНоваяСтрока = СтруктураПараметров.СтруктураПоискаКлючаСвязи.ЭтоНоваяСтрока1С; 
Если ДобавленаНоваяСтрока Тогда 
СтрокаДокумента.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); 
КонецЕсли; 
Док1СРезультат = СтруктураПараметров.Док1СРезультат; 
ГруппировочныеУпаковки = Док1СРезультат.ГруппировочныеУпаковки; 
СтрокаТСД = СтруктураПараметров.СтрокаТабличнойЧастиДокументаТСД; 
НомерРодительскойУпаковки = УАС_1_4_ОбработатьSSCC(?(СтрокаТСД.Свойство("Родитель"), 
СтрокаТСД.Родитель, ""));
НайденнаяСтрокаГруппировочныхУпаковок = 
ГруппировочныеУпаковки.НайтиСтроки(Новый Структура("НомерУпаковки",	 
НомерРодительскойУпаковки)); 
Если НайденнаяСтрокаГруппировочныхУпаковок.Количество()>0 Тогда
СтрокаДокумента.ИдентификаторГрупповойУпаковки = 
НайденнаяСтрокаГруппировочныхУпаковок[0].ИдентификаторСтроки; 
КонецЕсли; 
КонецПроцедуры

ТЧ «НомераУпаковок»:

Интеграционная обработка – модуль объекта. Находим в табличной части «Товары» товарную позицию по номеру GTIN, которой принадлежит текущая потребительская упаковка, и заполняем поле ИдентификаторСтроки для хранения иерархии вложенности.

Процедура УАС_1_4_УведомлениеОбАгрегированииИТрансформацииУпаковокМДЛП_ПослеЗаполненияСтрокиТЧ_НомераУпаковок (СтруктураПараметров) Экспорт 
УАС_1_4_Общий_ПослеЗаполненияСтрокиТЧ(СтруктураПараметров); 
Док1СРезультат = СтруктураПараметров.Док1СРезультат; 
ТоварыДокумента = Док1СРезультат.Товары;	 
СтрокаДокумента = СтруктураПараметров.СтрокаДокумента; 
СтрокаТСД = СтруктураПараметров.СтрокаТабличнойЧастиДокументаТСД; 
GTIN = ?(СтрокаТСД.Свойство("GTIN"), СтрокаТСД.GTIN, ?(СтрокаТСД.Свойство("GS1Марка"), Сред(СтрокаТСД.GS1Марка, 5, 14), "")); 
НайденнаяСтрокаТоваров = ТоварыДокумента.НайтиСтроки(Новый Структура("GTIN",GTIN));
Если НайденнаяСтрокаТоваров.Количество()>0 Тогда 
СтрокаДокумента.ИдентификаторСтроки = НайденнаяСтрокаТоваров[0].ИдентификаторСтроки;
КонецЕсли;
КонецПроцедуры

Уведомление об отгрузке ЛП (на основании «Реализации товаров и услуг»)

Создаем бизнес-процесс «Уведомление об отгрузке ЛП (на основании «Реализации товаров и услуг»)».

Выгрузка шапки:

Выгрузка табличной части:

Загрузка шапки:

Загрузка табличных частей:

ТЧ «Товары»:

ТЧ «Номера упаковок»:

Произвольный код Получить SGTIN из GS1Марка (потребительские упаковки). В типовой код добавлена проверка на вложенность в коробки, т.к. в документе отгрузки МДЛП нет информации об иерархии групповых упаковок, и в табличную часть «Номера упаковок» попадают только марки товаров, отгружаемых «россыпью».

SGTIN = "";
SSCC = СтрокаТабличнойЧастиДокументаТСД.SSCC; 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("ИдКоробки") Тогда 
SSCC = СтрокаТабличнойЧастиДокументаТСД.ИдКоробки; 
КонецЕсли;
Если НЕ ЗначениеЗаполнено(SSCC) Тогда
GS1Марка = СтрокаТабличнойЧастиДокументаТСД.GS1Марка; 
Если ЗначениеЗаполнено(GS1Марка) Тогда 
SGTIN = Сред(GS1Марка, 5, 14) + Сред(GS1Марка, 23, 13);
Иначе 
Марка = СтрокаТабличнойЧастиДокументаТСД.Марка; 
Если ЗначениеЗаполнено(Марка) Тогда
Если Лев(Марка, 4) = "(00)" Тогда
SGTIN = Сред(Марка, 5, 14) + Сред(Марка, 23, 13); 
Иначе 
SGTIN = Лев(Марка, 27); 
КонецЕсли; 
КонецЕсли; 
КонецЕсли; 
КонецЕсли; 
Результат = SGTIN;

ТЧ «Транспортные упаковки»:


Произвольный код Получить SSCC (без скобок). Добавлена обрезка лидирующих нулей без скобок (см. «Информация о штрихкодах упаковок»).

SSCC = СтрокаТабличнойЧастиДокументаТСД.SSCC; 
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("ИдКоробки") Тогда 
SSCC = СтрокаТабличнойЧастиДокументаТСД.ИдКоробки; 
КонецЕсли; 
Если ЗначениеЗаполнено(SSCC) И Лев(SSCC, 1) = "(" Тогда 
ПозицияСкобки2 = СтрНайти(SSCC, ")"); 
Если ПозицияСкобки2 > 0 Тогда 
SSCC = Сред(SSCC, ПозицияСкобки2 + 1, 18); 
КонецЕсли; 
КонецЕсли; 
Если ЗначениеЗаполнено(SSCC) и (СтрДлина(SSCC) = 20) и (Лев(SSCC, 2) = "00") Тогда 
SSCC = Сред(SSCC, 3, 18); 
КонецЕсли; 
Результат = SSCC;

ТЧ «Состав транспортных упаковок»:

Произвольный код ПолучитьИдентификаторСтрокиТУ (+без скобок). В код для определения кода коробки добавлена обрезка лидирующих нулей без скобок (см. «Информация о штрихкодах упаковок»).

ИдентификаторСтроки = ""; 
SSCC = СтрокаТабличнойЧастиДокументаТСД.SSCC;
Если СтрокаТабличнойЧастиДокументаТСД.Свойство("ИдКоробки") Тогда 
SSCC = СтрокаТабличнойЧастиДокументаТСД.ИдКоробки; 
КонецЕсли;
Если ЗначениеЗаполнено(SSCC) И Лев(SSCC, 1) = "(" Тогда 
ПозицияСкобки2 = СтрНайти(SSCC, ")"); 
Если ПозицияСкобки2 > 0 Тогда 
SSCC = Сред(SSCC, ПозицияСкобки2 + 1, 18);	 
КонецЕсли; 
КонецЕсли; 
Если ЗначениеЗаполнено(SSCC) и (СтрДлина(SSCC) = 20) и (Лев(SSCC, 2) = "00") Тогда 
SSCC = Сред(SSCC, 3, 18);	 
КонецЕсли;
Если ЗначениеЗаполнено(SSCC) Тогда 
НайденнаяСтрокаТранспортнойУпаковки = ОбъектДокумент1С.ТранспортныеУпаковки.НайтиСтроки(Новый Структура("НомерУпаковки", SSCC)); 
Если НайденнаяСтрокаТранспортнойУпаковки.Количество() > 0 Тогда 
ИдентификаторСтроки = НайденнаяСтрокаТранспортнойУпаковки[0].ИдентификаторСтроки;	 
КонецЕсли; 
КонецЕсли;	 
Результат = ИдентификаторСтроки;

Замечание

Все описанные алгоритмы работают при допущении, что штрихкоды упаковок и палет сформированы в формате SSCC, т.е. присутствует идентификатор применения (00), причем для палеты первая цифра после идентификатора применения должна быть равна 1.

На практике же эти условия не всегда соблюдаются. Штрихкод палеты по виду может не отличаться от штрихкода коробки, либо вообще не быть в формате SSCC. В таких случаях настроить правильную работу обмена со «Складом 15» без существенной переделки логики работы программы не представляется возможным.


Была ли статья полезна?
Спасибо за ваш отзыв!
Отзыв
Заполните, пожалуйста, данную форму, что конкретно вы не нашли, оставьте свои комментарии о работе сайта / полезности / сложности с навигацией
0/500