Как работает механизм распределения запасов в 1С:УТ 11.5 и ERP 2.5: разбираемся в архитектуре и новых регистрах

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

Переход на версии 1С:Управление торговлей 11.5 и ERP 2.5 принес фундаментальные изменения в подсистему управления запасами. Если раньше (в версиях 11.0–11.4) система опиралась на сложную цепочку из 6–7 взаимосвязанных регистров накопления, то теперь архитектура сместилась в сторону упрощения структуры данных при одновременном усложнении внутренней логики их обработки. В этой статье мы подробно разберем, как устроено распределение запасов «под капотом», зачем понадобились новые регистры и как с этим работать разработчику.

Эволюция механизмов: от графиков к распределению

Ранее логика обеспечения заказов была размазана по множеству таблиц: ЗаказыПокупателей, РасчетыСКлиентами, ГрафикиПоступленияТМЦ и другие. Это создавало огромную нагрузку на СУБД при проведении документов и часто приводило к взаимоблокировкам (deadlocks). Разработчики 1С приняли решение консолидировать данные. Рассмотрим основные этапы этой эволюции:

  1. Отказ от множества регистров: В 11.5 были удалены регистры, отвечавшие за свободные остатки и графики, а их место заняли две ключевые сущности.
  2. Регистр накопления ЗапасыИПотребности: Это «сырой» источник данных. Здесь фиксируются все движения: приходы по заказам поставщикам, потребности по заказам клиентов и фактические остатки на складах.
  3. Регистр сведений РаспределениеЗапасов: Это расчетная таблица. Система больше не вычисляет остатки «на лету» сложными запросами к регистрам накопления. Вместо этого фоновое задание или оперативный механизм записывает уже готовый результат распределения в этот регистр.

Разбираем структуру регистра «Распределение запасов»

Проанализируем ситуацию, которая часто пугает начинающих разработчиков при первом открытии этого регистра. Вместо привычных колонок «Резерв», «К отгрузке», «В наличии», мы видим одну колонку Количество и измерение Состояние. Это ключевое изменение парадигмы.

Почему это удобно? Теперь тип запаса (находится ли он в пути, зарезервирован ли он жестко под заказ или доступен для свободной продажи) определяется значением перечисления в измерении Состояние. Рассмотрим основные состояния:

Такой подход позволяет легко расширять систему новыми статусами, не меняя структуру метаданных и не добавляя новые ресурсы в регистры.

Фоновый расчет и очередь распределения

Выясним причину, по которой иногда данные в отчетах «Состояние обеспечения» кажутся неактуальными. В новых версиях 1С реализован механизм отложенного пересчета. Когда вы проводите заказ клиента, система не всегда мгновенно пересчитывает всю цепочку распределения во время транзакции (чтобы не тормозить работу пользователя). Вместо этого запись попадает в специальную очередь распределения.

Проанализируем этот процесс: специальное фоновое задание подхватывает изменения из очереди и обновляет данные в независимом регистре сведений РаспределениеЗапасов. Если это задание зависло или работает медленно, пользователь будет видеть старые остатки. Для программиста это означает, что нельзя просто сделать запрос к ЗапасыИПотребности и ожидать увидеть там итоговую картину — нужно учитывать состояние регистра сведений — для этого есть отчет сверки остатков и доступности в УТ 11.5.

Новшества версии 2.5.26: Входной контроль и контролируемые партии

В последних релизах (ERP 2.5.26 и выше) механизм стал еще сложнее из-за появления Входного контроля (поможет обработка автоматизации входного контроля качества товаров). Рассмотрим, как это работает по шагам:

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

Это решает политический вопрос между складом и бухгалтерией: товар физически и юридически на складе, но управленчески он «заблокирован» до подтверждения качества.

Как писать запросы к новым регистрам?

Разберем пример того, как теперь следует получать данные о доступности товара. Забудьте о простом суммировании ресурсов. Нам нужно использовать условия по измерениям. Посмотрим на пример кода запроса, который собирает данные о свободном остатке (В наличии минус Резерв):


ВЫБРАТЬ
    РаспределениеЗапасов.Номенклатура КАК Номенклатура,
    СУММА(ВЫБОР
            КОГДА РаспределениеЗапасов.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ВНаличии)
                ТОГДА РаспределениеЗапасов.Количество
            ИНАЧЕ -РаспределениеЗапасов.Количество
        КОНЕЦ) КАК ДоступныйОстаток
ИЗ
    РегистрСведений.РаспределениеЗапасов КАК РаспределениеЗапасов
ГДЕ
    РаспределениеЗапасов.Состояние В (ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ВНаличии), 
                                     ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.Зарезервировано))
ГРУППИРОВАТЬ ПО
    РаспределениеЗапасов.Номенклатура

Важный момент: Обратите внимание, что в последних обновлениях даже из регистра сведений РаспределениеЗапасов удаляются числовые ресурсы в пользу одного общего. Это требует пересмотра всех кастомных отчетов, написанных под ранние релизы 11.4 или даже начало 11.5.

Советы по оптимизации и доработке

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

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

← На главную