Как правильно программно заполнять статусы указания серий в 1С:УТ 11 и ERP?

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

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

Понимание механизмов работы серий в 1С

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

Разберем основные причины возникновения проблем при программной записи:

  1. Несоответствие количества: Система постоянно сравнивает количество товара в основной табличной части и суммарное количество в подчиненной табличной части серий.
  2. Отсутствие связи: В документах существует скрытый реквизит КлючСвязиСерий. Если в основной ТЧ Товары и в ТЧ Серии эти ключи не совпадают, система "не видит" связи между товаром и его серией, даже если визуально всё заполнено.
  3. Тип политики: Если политика подразумевает учет остатков, серия должна попасть в измерения регистра. Если статус указан неверно, серия может не попасть в движения, и регистр не будет заполнен корректно, что приведет к появлению остатка "без серии" и "с серией" одновременно — решить проблему поможет отчет для анализа остатков по сериям.

Расшифровка кодов статусов указания серий

Рассмотрим систему кодирования статусов. В 1С используется математическая логика четности и нечетности для визуализации состояния строки. Это помогает быстро определить, корректно ли заполнены данные.

Общая логика:

Подробная таблица кодов:

Выясним причину двойных остатков

Проанализируем ситуацию, когда при вводе остатков возникают "двойные движения". Это происходит потому, что в регистре Товары на складах серия является измерением. Если вы программно установили статус 4 (зеленый), но не заполнили движения по сериям или не синхронизировали КлючСвязиСерий, документ при проведении может создать запись с пустой серией. В дальнейшем, когда вы попытаетесь списать этот товар с указанием серии, система увидит, что по "пустой" серии остаток есть, а по конкретной "новой" серии — нет. В итоге в регистре зависнут две строки: "плюс" по одной серии и "минус" по другой (или пустой).

Решение 1: Правильное использование типовых функций (Рекомендуется)

Вместо того чтобы вручную присваивать числа, мы воспользуемся встроенными механизмами серверного модуля НоменклатураСервер. Это гарантирует, что система сама определит нужный статус на основании учетной политики, даты документа и склада.

Рассмотрим пример кода для документа ПеремещениеТоваров:


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

// 2. Вызываем типовую процедуру заполнения статусов
// Она проверит заполнение ТЧ "Серии", сравнит количество и проставит верные коды (2, 4, 6 и т.д.)
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(НовыйДокумент, ПараметрыУказанияСерий);

Этот метод хорош тем, что он автоматически обрабатывает все строки табличной части Товары и сопоставляет их с данными из ТЧ Серии.

Решение 2: Программная установка статуса для конкретной строки

Если нам нужно обновить статус только для одной конкретной строки (например, в обработчике изменения количества), разберем следующий подход, актуальный для УТ 11:


// Получаем структуру параметров для контекста документа
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ОбъектДокумент, Документы.ЧекККМ);

// Рассчитываем статус для конкретной строки (стр - текущая строка ТЧ Товары)
СтруктураВозврата = НоменклатураСервер.ПроверитьСериюРассчитатьСтатусПриИзмененииРеквизитаВТЧ(стр, ОбъектДокумент.Склад, ПараметрыУказанияСерий);

// Присваиваем полученный статус
стр.СтатусУказанияСерий = СтруктураВозврата.СтатусУказанияСерий;

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

Решение 3: Особенности для ERP и Комплексной автоматизации

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


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

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

Подведем итоги

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

  1. Заполнить табличную часть Товары.
  2. Сгенерировать и проставить уникальные значения КлючСвязиСерий для каждой строки.
  3. Заполнить табличную часть Серии, указав там те же ключи связи, соответствующие товарам.
  4. Не проставлять статусы вручную числами. Вместо этого всегда вызывать метод НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий().
  5. Проверить результат: если статус стал четным (например, 2 или 4) — система "приняла" серии и движения по регистрам будут корректными.

Помните, что актуальное описание всех возможных статусов всегда можно найти непосредственно в коде вашей конфигурации, открыв процедуру НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий. Разработчики 1С часто добавляют новые коды при обновлении механизмов FEFO или учета себестоимости, поэтому использование типовых функций — самый надежный способ сохранить работоспособность ваших доработок.

← На главную