Как работать с новым регистром Распределение запасов в 1С:Управление торговлей 11.5.7 вместо удаленных регистров свободных остатков

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

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

Что изменилось в архитектуре: прощай, старые регистры

Проанализируем ситуацию: в новой версии были полностью исключены или переведены в разряд неиспользуемых семь ключевых товарных регистров накопления. Больше нет данных в регистрах:

  1. СвободныеОстатки
  2. ГрафикиДвиженияТоваров
  3. ОбеспечениеЗаказов
  4. ЗапасыИПотребности
  5. ЗаказыНаПоступление
  6. РазмещениеЗаказовНаПоступление
  7. РаспределениеЗапасов (старая реализация)

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

Структура нового регистра сведений РаспределениеЗапасов

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

Ключевым измерением регистра является Состояние (тип ПеречислениеСсылка.РаспределениеЗапасовСостояния). Именно оно определяет смысл записи. Основные состояния, которые нам понадобятся:

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

Как теперь получать остатки и резервы в запросе

Разберем по шагам логику построения запроса. Поскольку регистр один, нам нужно использовать несколько соединений одной и той же таблицы или агрегировать данные по условиям. Рассмотрим пример получения резерва «сейчас» (то, что зарезервировано из текущего наличия).

Для получения резерва проанализируем фрагмент запроса:


ВЫБОР КОГДА Таблица.ДоступноСейчас > 0 ТОГДА
    - ВЫБОР КОГДА Таблица.ДоступноСейчас > ЕСТЬNULL(ТаблицаНеобеспеченные.НеОбеспечено, 0) + ЕСТЬNULL(ТаблицаСлужебныеЗаписи.НеОбеспечено, 0) ТОГДА
            - (ЕСТЬNULL(ТаблицаНеобеспеченные.НеОбеспечено, 0) + ЕСТЬNULL(ТаблицаСлужебныеЗаписи.НеОбеспечено, 0))
        ИНАЧЕ
            - Таблица.ДоступноСейчас
    КОНЕЦ
ИНАЧЕ
    0
КОНЕЦ КАК ВРезервеСейчас

Теперь посмотрим, как вычислить Доступно сейчас. Логика усложнилась, так как система теперь учитывает так называемые «служебные записи» и необеспеченные потребности внутри одного механизма:


ВЫБОР КОГДА Таблица.ДоступноСейчас > 0 ТОГДА
    ВЫБОР КОГДА Таблица.ДоступноСейчас > ЕСТЬNULL(ТаблицаНеобеспеченные.НеОбеспечено, 0) + ЕСТЬNULL(ТаблицаСлужебныеЗаписи.НеОбеспечено, 0) ТОГДА
            - (ЕСТЬNULL(ТаблицаНеобеспеченные.НеОбеспечено, 0) + ЕСТЬNULL(ТаблицаСлужебныеЗаписи.НеОбеспечено, 0))
        ИНАЧЕ
            - Таблица.ДоступноСейчас
    КОНЕЦ
ИНАЧЕ
    0
КОНЕЦ КАК ДоступноСейчас

Механизм фонового обновления и вспомогательные таблицы

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

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

Рекомендации для разработчиков по адаптации

Чтобы успешно перейти на версию 11.5.7 и выше, выполним следующие шаги, включая предварительное архивирование и тестирование баз 1С перед внесением структурных изменений:

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

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

← На главную