Входящие

При обработке входящих документов используется публичный метод ЭДО_ПолучитьТабличнуюЧастьИзКонтентаXML. Метод возвращает табличную часть электронного документа, в которой содержится элемент СведенияОМаркировке.

С версии модуля 4.69.2 в структуре появился новый элемент ПроизводственныеПартии. В нем хранятся данные ОСУ и партионного учета, если они переданы в явном виде.

Предупреждение

НомУпак — это коллекция не только для ОСУ. Если признаков ОСУ нет, модуль не считает содержимое НомУпак кодами ОСУ.

ПроизводственныеПартии заполняется при одном из условий:

  • для УПД 970: Заполнен <ГТИН> или <ПрПартМарк>,

  • для УКД 736: В <ИнфПолФХЖ2> файла обмена есть атрибут <Идентиф=«ПрПартМаркДо»> или <Идентиф=«ПрПартМаркПосле»>,

  • для УКД 29: Заполнен <ГТИН> или <ПрПартМарк>.

Сценарии

Алгоритм получения данных ОСУ и партий из УПД можно написать следующим образом.

Пример
Для Каждого СтрокаДанных Из ТоварнаяЧасть Цикл

    Номенклатура = СопоставленнаяНоменклатура.Номенклатура;

    Партии = СтрокаДанных.СведенияОМаркировке.ПроизводственныеПартии;

    Если Партии.Количество() > 0 Тогда

        Для Каждого Партия Из Партии Цикл

            ДанныеМаркировки = Контракт_ДанныеМаркировки();

            ДанныеМаркировки.НомерПартии = Партия.НомерПартии;

            Если ЗначениеЗаполнено(Партия.ДанныеОСУ) Тогда
                ДанныеМаркировки.GTIN       = Партия.ДанныеОСУ.GTIN;
                ДанныеМаркировки.Количество = Партия.ДанныеОСУ.Количество;
                ДанныеМаркировки.Вес        = Партия.ДанныеОСУ.Вес;
            Иначе
                ДанныеМаркировки.ИдентификаторУпаковки = Партия.ИдентификаторУпаковки;
            КонецЕсли

            ЗагрузитьКодыВБазу(Номенклатура, ДанныеМаркировки);

        КонецЦикла

    Иначе

        ИндивидуальныеУпаковки = СтрокаТЧ.СведенияОМаркировке.ИндивидуальныеУпаковки;

        Для Каждого ИндивидуальнаяУпаковка Из ИндивидуальныеУпаковки Цикл

            ДанныеМаркировки = Контракт_ДанныеМаркировки();

            Если Лев(ИндивидуальнаяУпаковка, 2) = "02" Тогда

                ДанныеМаркировки.ИдентификаторУпаковки = ИндивидуальнаяУпаковка;

                ЗагрузитьКодыВБазу(Номенклатура, ДанныеМаркировки);

            КонецЕсли;

        КонецЦикла;

    КонецЕсли

КонецЦикла;
Как было

До обновления публичного метода алгоритм получения данных ОСУ мог быть написан следующим образом

Пример
ТоварнаяЧасть = ОсновнойМодуль.ЭДО_ПолучитьТабличнуюЧастьИзКонтентаXML(ХранилищеКонтента);

Для Каждого СтрокаДанных Из ТоварнаяЧасть Цикл

    Номенклатура = СопоставленнаяНоменклатура.Номенклатура;

    ЭтоВесовойТовар = ЭтоВесовойТовар(Номенклатура);

    ГТИН = СтрокаДанных.НоменклатураДокумента.GTIN;

    Если ЗначениеЗаполнено(ГТИН) Тогда // Один код на строку ТЧ

        ДанныеМаркировки = Контракт_ДанныеМаркировки();

        ДанныеМаркировки.GTIN = ГТИН;

        ДанныеМаркировки.КоличествоТовара = СтрокаДанных.СведенияОМаркировке.КоличествоТовара;

        Если ЭтоВесовойТовар Тогда

            ДанныеМаркировки.ВесТовара = СтрокаДанных.Количество;

        КонецЕсли

        ЗагрузитьКодыВБазу(Номенклатура, ДанныеМаркировки);


    Иначе // Несколько кодов на строку ТЧ

        ИндивидуальныеУпаковки = СтрокаДанных.СведенияОМаркировке.ИндивидуальныеУпаковки;

        Для Каждого НомУпак Из ИндивидуальныеУпаковки Цикл

            ДанныеМаркировки = Контракт_ДанныеМаркировки();

            Если Лев(ИндивидуальнаяУпаковка, 2) = "02" Тогда

                ДанныеМаркировки.ИдентификаторУпаковки = ИндивидуальнаяУпаковка;

                ЗагрузитьКодыВБазу(Номенклатура, ДанныеМаркировки);

            КонецЕсли;

        КонецЦикла

    КонецЕсли;

КонецЦикла;