Почему в 1С:Управление торговлей 11 не формируются движения по регистру «Партии товаров организаций» при проведении реализации

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

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

Методика отложенного расчета себестоимости

Для начала проанализируем основную причину такого поведения системы. В отличие от старых версий (например, УТ 10.3), где списание партий происходило непосредственно в момент проведения документа «в транзакции», в УТ 11 используется механизм отложенного расчета. Это проектное решение разработчиков 1С, призванное ускорить работу пользователей: чтобы менеджер не ждал, пока система рассчитает сложную цепочку себестоимости при каждой отгрузке.

Рассмотрим, как это работает на практике:

  1. При проведении реализации система фиксирует только количественный расход в регистрах накопления (например, Товары на складах).
  2. Стоимостная оценка и распределение конкретных партий по методу ФИФО (регистр Партии товаров организаций) откладываются до момента запуска специальной процедуры.
  3. Движения в регистре партий появляются либо после запуска регламентного задания, либо при выполнении обработки Закрытие месяца.

Таким образом, если вы видите пустые движения сразу после нажатия кнопки «Провести и закрыть» — это штатное поведение системы для большинства настроек.

Где искать код формирования движений

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

Движения по партиям формируются не в модуле объекта документа, а в специализированных общих модулях. Основная логика сосредоточена в общем модуле ПартионныйУчет. Проанализируем ключевые процедуры:

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

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


// Примерный алгоритм вызова расчета в фоновом режиме
ПартионныйУчет.СформироватьДвиженияПартийТоваров(ПараметрыРасчета);

Важный нюанс для программиста: если база работает в клиент-серверном варианте, расчет часто уходит в фоновое задание. Чтобы поймать этот момент отладчиком, необходимо включить режим отладки на сервере 1С и использовать автоматическое подключение к фоновым заданиям.

Режимы партионного учета 2.1 и 2.2

Выясним причину различий в движениях разных документов. В современных версиях УТ 11 (начиная с 11.4) используется версия партионного учета 2.2. В этом режиме система разделяет движения на:

Если один документ делает движения, а другой нет — проверьте, не является ли первый документ «приходным» (возврат от клиента, оприходование), а второй «расходным» (реализация).

Влияние настроек системы и Интеркампани

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

Также проверим настройку «Обновлять стоимость при проведении документов» в разделе «НСИ и администрирование -> Финансовый результат и контроллинг». Если она выключена, предварительные движения по партиям создаваться не будут вовсе.

Пошаговый алгоритм проверки

Если вы столкнулись с отсутствием движений, рекомендуем выполнить следующие шаги:

  1. Убедитесь в наличии остатков: Проверьте отчет «Ведомость по товарам на складах». Если по данным регистра накопления товара нет в наличии (минусовой остаток), система не сможет сформировать партию списания.
  2. Проверьте аналитику: Сверьте Номенклатуру, Характеристики, Серии и Назначения. Если в приходе указана одна серия, а в реализации другая — партия не подберется.
  3. Запустите расчет: Перейдите в Финансовый результат и контроллинг -> Закрытие месяца и выполните операцию Расчет себестоимости. Посмотрите, появились ли движения после завершения операции.
  4. Используйте отладку: Если расчет прошел, но движений нет, поставьте точку прерывания в модуле ПартионныйУчет в методах, отвечающих за запись наборов записей регистра ПартииТоваровОрганизаций.

Рассмотрим фрагмент кода, который может отвечать за непосредственную запись движений:


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

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

Резюме

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

← На главную