При разработке механизмов автоматизации в 1С:Управление торговлей 11 программисты часто сталкиваются с проблемой: при программном создании документа ПриобретениеТоваровУслуг данные о сериях, добавленные в табличные части, бесследно исчезают после вызова метода Записать(). В этой статье мы подробно разберем, как устроена архитектура учета серий в современных конфигурациях на базе ERP и УТ 11, и научимся правильно связывать данные, чтобы они сохранялись в информационной базе.
Разберем типичную ситуацию: вы создали объект документа, заполнили основные реквизиты, добавили строку в Товары и даже программно создали новый элемент в справочнике СерииНоменклатуры. Затем вы добавили строку в скрытую табличную часть Серии, но после записи документа она оказывается пустой. Проанализируем причину этого поведения.
В УТ 11 механизм работы с сериями "надежен как швейцарские часы", но требует строгого соблюдения правил связи таблиц. Основная причина удаления строк из ТЧ Серии — отсутствие или некорректное заполнение реквизита КлючСвязи. Система при записи проверяет, к какой строке из таблицы Товары относится каждая строка из таблицы Серии. Если связь не установлена, строки считаются "сиротами" и автоматически удаляются типовыми механизмами перед транзакцией записи.
Рассмотрим подробнее правильный порядок действий при заполнении документа. Для успешного результата нам необходимо не только создать объекты, но и правильно инициализировать служебные поля.
Шаг 1. Инициализация документа и строки товара
Сначала создадим документ и определим уникальный идентификатор для связи таблиц внутри объекта. Для этого используется реквизит КлючСвязи, который является числом. Каждой новой строке в ТЧ Товары мы должны присвоить свой уникальный номер.
Док = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();
// ... заполнение шапки документа (Партнер, Склад, Организация) ...
НоваяСтрокаТовары = Док.Товары.Добавить();
НоваяСтрокаТовары.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00001");
НоваяСтрокаТовары.Количество = 10;
// Присваиваем уникальный ключ связи для текущей строки товаров
НоваяСтрокаТовары.КлючСвязи = 1;
Шаг 2. Создание элемента справочника СерииНоменклатуры
Серия — это отдельный элемент справочника. Перед тем как указать её в документе, её нужно записать. Выясним, какие параметры важны при создании серии. Обратите внимание, что серия всегда привязана к ВидуНоменклатуры или конкретной Номенклатуре в зависимости от настроек.
НоваяСерия = Справочники.СерииНоменклатуры.СоздатьЭлемент();
НоваяСерия.ВидНоменклатуры = НоваяСтрокаТовары.Номенклатура.ВидНоменклатуры;
НоваяСерия.Номер = "СЕР-2023-001";
НоваяСерия.Наименование = "СЕР-2023-001";
// Если политика учета предполагает сроки годности:
// НоваяСерия.ГоденДо = ТекущаяДата() + 86400 * 365;
НоваяСерия.Записать();
Шаг 3. Заполнение табличной части Серии
Теперь перейдем к самому важному моменту — заполнению ТЧ Серии. Главное правило: значение КлючСвязи в ТЧ Серии должно в точности совпадать со значением КлючСвязи в ТЧ Товары.
НоваяСтрокаСерии = Док.Серии.Добавить();
НоваяСтрокаСерии.Номенклатура = НоваяСтрокаТовары.Номенклатура;
НоваяСтрокаСерии.Серия = НоваяСерия.Ссылка;
НоваяСтрокаСерии.Количество = 10; // Количество по серии
НоваяСтрокаСерии.Склад = Док.Склад;
// Связываем строку серий со строкой товаров
НоваяСтрокаСерии.КлючСвязи = НоваяСтрокаТовары.КлючСвязи;
Проанализируем ситуацию, когда данные заполнены верно, но документ все равно ведет себя странно (например, подсвечивает строки красным). В УТ 11 в ТЧ Товары есть числовой реквизит СтатусУказанияСерий. Он сообщает системе, заполнены ли серии для данной строки полностью или частично.
Для документа "Приобретение товаров и услуг" обычно используются следующие значения:
Вместо ручной установки числа 4, рекомендуется использовать типовой программный интерфейс, чтобы система сама пересчитала статусы на основе заполненных таблиц:
// Вызов типовой процедуры для обновления статусов
// Параметр Док - это наш объект документа
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Док, "Товары");
НоменклатураСервер.ЗаполнитьСтатусУказанияСерий(Док, "Товары", ПараметрыУказанияСерий);
Выясним причину, по которой серии могут не записываться даже при идеальном коде. Всё дело в Политике учета серий. Если в настройках Вида номенклатуры для выбранного склада установлена политика, которая не предполагает указание серий при поступлении (например, серия фиксируется только при отгрузке покупателю), то в документе приобретения серии просто не будут храниться.
Проверьте следующие настройки:
Управление остатками серий или аналогичная, где флажок При приеме от поставщика активен.Также стоит учитывать Ордерную схему. Если склад является ордерным, то серии могут указываться не в финансовом документе "Приобретение товаров и услуг", а в складском документе "Приходный ордер на товары". В этом случае программное заполнение серий в поступлении может быть заблокировано логикой конфигурации.
Подводя итог, при программном создании серий помните три золотых правила:
КлючСвязи в обеих табличных частях.НоменклатураСервер для актуализации статусов.Политика учета серий позволяет использовать серии в данном типе операции на конкретном складе.Использование этих принципов позволит вам создавать корректные документы, которые не будут требовать ручной доработки пользователями и обеспечат точный партионный учет в системе.