При работе в конфигурации 1С:Управление торговлей (УТ 11) многие технические специалисты и аналитики сталкиваются с ситуацией: документ Реализация товаров и услуг проводится, уменьшает остатки на складах, но при этом регистр Партии товаров организаций остается пустым. При этом в других аналогичных документах движения могут присутствовать. В этой статье мы разберем архитектурные особенности системы, выясним, почему так происходит, и где именно в программном коде искать механизмы формирования партий.
Для начала проанализируем основную причину такого поведения системы. В отличие от старых версий (например, УТ 10.3), где списание партий происходило непосредственно в момент проведения документа «в транзакции», в УТ 11 используется механизм отложенного расчета. Это проектное решение разработчиков 1С, призванное ускорить работу пользователей: чтобы менеджер не ждал, пока система рассчитает сложную цепочку себестоимости при каждой отгрузке.
Рассмотрим, как это работает на практике:
Товары на складах).Партии товаров организаций) откладываются до момента запуска специальной процедуры.Таким образом, если вы видите пустые движения сразу после нажатия кнопки «Провести и закрыть» — это штатное поведение системы для большинства настроек.
Если возникла необходимость отладить процесс и понять, почему даже после закрытия месяца движения не появились, нам придется обратиться к программному коду. Разберем основные точки входа.
Движения по партиям формируются не в модуле объекта документа, а в специализированных общих модулях. Основная логика сосредоточена в общем модуле ПартионныйУчет. Проанализируем ключевые процедуры:
В модуле ПартионныйУчет стоит обратить внимание на функции, занимающиеся подготовкой запросов к остаткам. Одной из важных точек является процедура ТекстОстаткиПартийТоваров(). Как было отмечено в обсуждении, остановка по точке прерывания в этой функции позволит увидеть, какие временные таблицы подготавливаются для расчета.
Пример типичного вызова расчета партий в коде выглядит так:
// Примерный алгоритм вызова расчета в фоновом режиме
ПартионныйУчет.СформироватьДвиженияПартийТоваров(ПараметрыРасчета);
Важный нюанс для программиста: если база работает в клиент-серверном варианте, расчет часто уходит в фоновое задание. Чтобы поймать этот момент отладчиком, необходимо включить режим отладки на сервере 1С и использовать автоматическое подключение к фоновым заданиям.
Выясним причину различий в движениях разных документов. В современных версиях УТ 11 (начиная с 11.4) используется версия партионного учета 2.2. В этом режиме система разделяет движения на:
Приобретение товаров и услуг), так как они создают новую партию.Если один документ делает движения, а другой нет — проверьте, не является ли первый документ «приходным» (возврат от клиента, оприходование), а второй «расходным» (реализация).
Проанализируем ситуацию, когда даже регламентное задание не создает записи в регистре. Одной из причин может быть механизм Интеркампани (продажа товаров между организациями). Если товар продается одной организацией, но фактически числится за другой, движения по партиям в реализации не появятся до тех пор, пока не будет оформлен документ Передача товаров между организациями.
Также проверим настройку «Обновлять стоимость при проведении документов» в разделе «НСИ и администрирование -> Финансовый результат и контроллинг». Если она выключена, предварительные движения по партиям создаваться не будут вовсе.
Если вы столкнулись с отсутствием движений, рекомендуем выполнить следующие шаги:
Финансовый результат и контроллинг -> Закрытие месяца и выполните операцию Расчет себестоимости. Посмотрите, появились ли движения после завершения операции.ПартионныйУчет в методах, отвечающих за запись наборов записей регистра ПартииТоваровОрганизаций.Рассмотрим фрагмент кода, который может отвечать за непосредственную запись движений:
НаборЗаписей = РегистрыНакопления.ПартииТоваровОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
// ... заполнение таблицы движений ...
НаборЗаписей.Записать();
Помните, что в УТ 11 запись в регистр часто происходит через механизм ДополнительныеСвойства объекта или путем прямой записи наборов записей из фоновых процедур, минуя стандартную обработку проведения документа.
Отсутствие движений по партиям в момент проведения реализации в УТ 11 — это не ошибка, а нормальная работа алгоритма оптимизации. Полные данные в регистре Партии товаров организаций появляются только после выполнения этапа Расчета себестоимости в рамках закрытия месяца или работы регламентного задания по партионному учету.