kb-personal/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Серии номенклатуры/Программное указание серий в Перемещении товаров.md
2025-04-17 15:53:09 +05:00

4.6 KiB

title, slug
title slug
Программное указание серий в документе "Перемещение товаров" primery-snippety-bsp-i-tipovye-erp-serii-nomenklatury/programmnoe-ukazanie-seriy-v-dokumente-peremeschenie-tovarov

Для программного заполнения документа номенклатурой, оприходованной по сериям, нужно в документе ПеремещениеТоваров заполнить 2 табличные части - Товары и Серии.

После заполнения этих табличных частей необходимо их согласовать. Для этого выполняются следующие методы:

ПараметрыУказанияСерий  = НоменклатураСервер.ПараметрыУказанияСерий(НовыйДокумент, Документы.ПеремещениеТоваров);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(НовыйДокумент, ПараметрыУказанияСерий);

Пример

&НаСервереБезКонтекста
Процедура СоздатьДокументПеремещенияНаСервере(СписаниеТоваров, ДокументПеремещение = Неопределено)
	
    СписаниеОбъект = СписаниеТоваров.ПолучитьОбъект();
	
    НовыйДокумент = Документы.ПеремещениеТоваров.СоздатьДокумент();
    ...
	// Инициализация
    ...
	
    // Заполняем номенклатуру
    Для Каждого Строка Из СписаниеОбъект.СписокНоменклатуры Цикл
		
    	СтрокаТовары = НовыйДокумент.Товары.Добавить();
        СтрокаТовары.Номенклатура = Строка.Номенклатура;
        СтрокаТовары.Количество = Строка.Количество;
        СтрокаТовары.КоличествоУпаковок = Строка.Количество;
	
    КонецЦикла;
	
    // заполняем серии
    Для Каждого Строка Из СписаниеОбъект.СписокНоменклатуры Цикл
        Если ЗначениеЗаполнено(Строка.Серия) Тогда
            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("Серия", Строка.Серия);
            ПараметрыОтбора.Вставить("Номенклатура", Строка.Номенклатура);
            ПараметрыОтбора.Вставить("Характеристика", Строка.Характеристика);
            ПараметрыОтбора.Вставить("Назначение", Строка.Назначение);
            НайденныеСтроки = НовыйДокумент.Серии.НайтиСтроки(ПараметрыОтбора);
			
            Если НайденныеСтроки.Количество() > 0 Тогда
                СтрокаСерии = НайденныеСтроки.Получить(0);
                СтрокаСерии.Количество = СтрокаСерии.Количество + Строка.Количество;
            Иначе
                СтрокаСерии = НовыйДокумент.Серии.Добавить();
                ЗаполнитьЗначенияСвойств(СтрокаСерии, ПараметрыОтбора);
                СтрокаСерии.НазначениеОтправителя = Строка.Назначение;
                СтрокаСерии.Количество = Строка.Количество;
            КонецЕсли;
			
        КонецЕсли;
    КонецЦикла;
	
    // волшебство
    ПараметрыУказанияСерий  = НоменклатураСервер.ПараметрыУказанияСерий(НовыйДокумент, Документы, ПеремещениеТоваров);
    НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(НовыйДокумент, ПараметрыУказанияСерий);
	
    НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

КонецПроцедуры