Как программно создать серии номенклатуры в документе Приобретение товаров и услуг в 1С:УТ 11

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке механизмов автоматизации в 1С:Управление торговлей 11 программисты часто сталкиваются с проблемой: при программном создании документа ПриобретениеТоваровУслуг данные о сериях, добавленные в табличные части, бесследно исчезают после вызова метода Записать(). В этой статье мы подробно разберем, как устроена архитектура учета серий в современных конфигурациях на базе ERP и УТ 11, и научимся правильно связывать данные, чтобы они сохранялись в информационной базе.

Почему очищается табличная часть Серии

Разберем типичную ситуацию: вы создали объект документа, заполнили основные реквизиты, добавили строку в Товары и даже программно создали новый элемент в справочнике СерииНоменклатуры. Затем вы добавили строку в скрытую табличную часть Серии, но после записи документа она оказывается пустой. Проанализируем причину этого поведения.

В УТ 11 механизм работы с сериями "надежен как швейцарские часы", но требует строгого соблюдения правил связи таблиц. Основная причина удаления строк из ТЧ Серии — отсутствие или некорректное заполнение реквизита КлючСвязи. Система при записи проверяет, к какой строке из таблицы Товары относится каждая строка из таблицы Серии. Если связь не установлена, строки считаются "сиротами" и автоматически удаляются типовыми механизмами перед транзакцией записи.

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

Рассмотрим подробнее правильный порядок действий при заполнении документа. Для успешного результата нам необходимо не только создать объекты, но и правильно инициализировать служебные поля.

Шаг 1. Инициализация документа и строки товара

Сначала создадим документ и определим уникальный идентификатор для связи таблиц внутри объекта. Для этого используется реквизит КлючСвязи, который является числом. Каждой новой строке в ТЧ Товары мы должны присвоить свой уникальный номер.


Док = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();
// ... заполнение шапки документа (Партнер, Склад, Организация) ...

НоваяСтрокаТовары = Док.Товары.Добавить();
НоваяСтрокаТовары.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00001");
НоваяСтрокаТовары.Количество = 10;
// Присваиваем уникальный ключ связи для текущей строки товаров
НоваяСтрокаТовары.КлючСвязи = 1; 

Шаг 2. Создание элемента справочника СерииНоменклатуры

Серия — это отдельный элемент справочника. Перед тем как указать её в документе, её нужно записать. Выясним, какие параметры важны при создании серии. Обратите внимание, что серия всегда привязана к ВидуНоменклатуры или конкретной Номенклатуре в зависимости от настроек.


НоваяСерия = Справочники.СерииНоменклатуры.СоздатьЭлемент();
НоваяСерия.ВидНоменклатуры = НоваяСтрокаТовары.Номенклатура.ВидНоменклатуры;
НоваяСерия.Номер = "СЕР-2023-001";
НоваяСерия.Наименование = "СЕР-2023-001";
// Если политика учета предполагает сроки годности:
// НоваяСерия.ГоденДо = ТекущаяДата() + 86400 * 365; 
НоваяСерия.Записать();

Шаг 3. Заполнение табличной части Серии

Теперь перейдем к самому важному моменту — заполнению ТЧ Серии. Главное правило: значение КлючСвязи в ТЧ Серии должно в точности совпадать со значением КлючСвязи в ТЧ Товары.


НоваяСтрокаСерии = Док.Серии.Добавить();
НоваяСтрокаСерии.Номенклатура = НоваяСтрокаТовары.Номенклатура;
НоваяСтрокаСерии.Серия = НоваяСерия.Ссылка;
НоваяСтрокаСерии.Количество = 10; // Количество по серии
НоваяСтрокаСерии.Склад = Док.Склад;
// Связываем строку серий со строкой товаров
НоваяСтрокаСерии.КлючСвязи = НоваяСтрокаТовары.КлючСвязи; 

Работа с реквизитом СтатусУказанияСерий

Проанализируем ситуацию, когда данные заполнены верно, но документ все равно ведет себя странно (например, подсвечивает строки красным). В УТ 11 в ТЧ Товары есть числовой реквизит СтатусУказанияСерий. Он сообщает системе, заполнены ли серии для данной строки полностью или частично.

Для документа "Приобретение товаров и услуг" обычно используются следующие значения:

Вместо ручной установки числа 4, рекомендуется использовать типовой программный интерфейс, чтобы система сама пересчитала статусы на основе заполненных таблиц:


// Вызов типовой процедуры для обновления статусов
// Параметр Док - это наш объект документа
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Док, "Товары");
НоменклатураСервер.ЗаполнитьСтатусУказанияСерий(Док, "Товары", ПараметрыУказанияСерий);

Важные нюансы настройки программы

Выясним причину, по которой серии могут не записываться даже при идеальном коде. Всё дело в Политике учета серий. Если в настройках Вида номенклатуры для выбранного склада установлена политика, которая не предполагает указание серий при поступлении (например, серия фиксируется только при отгрузке покупателю), то в документе приобретения серии просто не будут храниться.

Проверьте следующие настройки:

  1. Зайдите в НСИ и администрирование — Номенклатура — Виды номенклатуры.
  2. Откройте нужный вид и перейдите по ссылке Настройки учета серий.
  3. Убедитесь, что для вашего склада выбрана политика с типом Управление остатками серий или аналогичная, где флажок При приеме от поставщика активен.

Также стоит учитывать Ордерную схему. Если склад является ордерным, то серии могут указываться не в финансовом документе "Приобретение товаров и услуг", а в складском документе "Приходный ордер на товары". В этом случае программное заполнение серий в поступлении может быть заблокировано логикой конфигурации.

Итоги и рекомендации

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

  1. Всегда заполняйте КлючСвязи в обеих табличных частях.
  2. Используйте типовые методы НоменклатураСервер для актуализации статусов.
  3. Убедитесь, что Политика учета серий позволяет использовать серии в данном типе операции на конкретном складе.

Использование этих принципов позволит вам создавать корректные документы, которые не будут требовать ручной доработки пользователями и обеспечат точный партионный учет в системе.

← На главную