В процессе разработки интеграций или отчетов в 1С:ERP часто возникает вопрос: как правильно извлечь информацию о сериях номенклатуры из документа? Иногда серии отражены непосредственно в табличной части Товары, а иногда они скрыты в отдельной табличной части Серии. Давайте вместе разберемся, как устроена эта логика и как грамотно подходить к получению данных.
Прежде всего, важно уяснить, что способ хранения серий не является случайным. Он напрямую зависит от Политики учета серий. Настройка этого параметра осуществляется в разрезе двух основных сущностей:
Когда вы создаете документ, система проверяет комбинацию Номенклатура (её Вид номенклатуры) и Склад, указанный в строке табличной части. Именно это сочетание диктует, будет ли серия являться частью аналитики себестоимости (и храниться в Товары) или же она будет добавлена для целей прослеживаемости в Серии.
Рассмотрим ситуацию, когда в одном документе у разных строк серии хранятся по-разному. Это происходит из-за того, что в одном документе могут фигурировать товары с разными настройками учета или разные склады. Важно помнить: система 1С:ERP для каждой строки табличной части Товары хранит так называемый Статус указания серий. Это технический индикатор, который определяет, был ли выполнен подбор серий и какой метод хранения был выбран системой для данной конкретной позиции.
Поскольку данные могут лежать в разных местах, попытка жестко обращаться только к одной табличной части неизбежно приведет к ошибкам при обмене данными. Чтобы выгрузить серии корректно, даже из непроведенного документа, рекомендуем придерживаться следующего алгоритма:
Политику учета серий, которая действовала для связки Номенклатура + Склад на момент создания документа.Товары или в Серии. Если серия входит в ключи аналитики учета номенклатуры, она всегда будет находиться в основной табличной части Товары.При написании кода для получения серий, проанализируйте текущую строку табличной части. Примерная логика работы может выглядеть следующим образом:
// Псевдокод для определения места хранения серий
Для Каждого СтрокаТовары Из Объект.Товары Цикл
// Определяем политику учета для текущей строки
Политика = УправлениеСериямиСервер.ПолучитьПолитикуУчетаСерий(СтрокаТовары.Номенклатура, СтрокаТовары.Склад);
Если Политика.ВестиУчетСебестоимости Тогда
// Серия находится в ключах аналитики, берем из строки ТЧ Товары
ТекущаяСерия = СтрокаТовары.Серия;
Иначе
// Серия хранится в подчиненной ТЧ Серии
МассивСерий = Объект.Серии.НайтиСтроки(Новый Структура(\"ИдентификаторСтроки\", СтрокаТовары.ИдентификаторСтроки));
// Обрабатываем массив найденных серий
КонецЕсли;
КонецЦикла;
Таким образом, мы видим, что ключ к успеху — это понимание того, что серия является частью аналитики учета только в определенных сценариях (например, учет себестоимости). Если же серии нужны лишь для Меркурия или Честного ЗНАКа, они будут вынесены в отдельную структуру. Всегда проверяйте Статус указания серий перед тем, как считывать данные — это самый надежный путь избежать ошибок в интеграционных задачах.
Разбирая задачу по шагам, мы видим, что типовая архитектура 1С:ERP предоставляет все необходимые инструменты для гибкого учета серий. Использование метода НайтиСтроки по ИдентификаторСтроки является общепринятым стандартом для связи основной табличной части и данных о сериях, что позволяет легко связывать позиции документа с их серийными номерами независимо от того, как они хранятся в базе.