С какого релиза в 1С:ERP исчез регистр «Свободные остатки» и как теперь получать остатки на дату?

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

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

Причины архитектурных изменений

Ранее расчет доступного остатка производился «на лету» или базировался на данных нескольких регистров накопления, что приводило к серьезным проблемам с производительностью при проведении документов. Основная причина отказа от старой схемы — высокая конкуренция за ресурсы БД и блокировки таблиц при массовой работе пользователей с заказами и отгрузками. Новая концепция призвана минимизировать время транзакции за счет использования оптимизированного распределения запасов.

Какие регистры были удалены

Важно понимать, что исчез не только регистр СвободныеОстатки. Вместе с ним статус «Удалить» получили:

Весь функционал этих объектов теперь сосредоточен в новой подсистеме распределения запасов.

Новая структура: РС «РаспределениеЗапасов» и РН «РаспределениеЗапасовДвижения»

Вместо набора старых регистров 1С ввела связку из регистра сведений и регистра накопления:

  1. Регистр сведений РаспределениеЗапасов: хранит актуальное, оперативное состояние запасов «на текущий момент». Он не является периодическим и представляет собой своего рода «срез последних», рассчитанный специальными алгоритмами. Данные в нем обновляются либо сразу при проведении документа, либо в фоновом режиме через регламентное задание Обновление распределения запасов.
  2. Регистр накопления РаспределениеЗапасовДвижения: служит «регистратором» изменений для вышеуказанного регистра сведений. Именно в нем фиксируются приходы, расходы и изменения состояний резервов (например, переход из «К обеспечению» в «Резервировать по мере поступления»).

Как получить свободный остаток на дату

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

Разберем алгоритм получения свободного остатка на дату по шагам:

1. Физический остаток. Получаем данные из регистра накопления ТоварыНаСкладах на нужную дату. Это наша база — общее количество товара, физически находящегося на складе.

2. Резервы и распределение. Для получения данных о зарезервированном товаре необходимо обратиться к виртуальной таблице остатков регистра накопления РаспределениеЗапасовДвижения на ту же дату. Рассмотрим пример структуры запроса для получения этих данных:


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

3. Итоговый расчет. Свободный остаток будет вычисляться как ФизическийОстаток - Зарезервировано. Однако стоит помнить, что в новой системе понятия «К обеспечению» и графики поступлений также влияют на доступность, поэтому расчет может усложняться в зависимости от настроек обеспечения в конкретной базе.

Нюансы обновления и перехода на 2.5.7

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

Внимание! Если в вашей системе активно использовался документ Корректировка записей регистров для ручного исправления свободных остатков без изменения заказов, то после обновления эти данные будут потеряны, так как алгоритм обновления их проигнорирует. В новой модели «правка руками» регистра накопления РаспределениеЗапасовДвижения без соответствующих записей в РС РаспределениеЗапасов может привести к непредсказуемому поведению системы обеспечения.

Проблема состояния «К обеспечению»

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

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

Если вам необходимо реализовать собственный отчет по остаткам на дату, настоятельно рекомендуем изучить схему компоновки данных (СКД) типового отчета «Остатки и резервы товаров». В актуальных версиях ERP этот отчет использует сложные динамические запросы, объединяющие физические остатки и данные нового механизма распределения. Копирование логики из типового отчета — самый безопасный путь, гарантирующий соответствие ваших данных системным показателям.

Таким образом, переход на 2.5.7 требует от программиста пересмотра всех кастомных алгоритмов, которые полагались на старый регистр свободных остатков. Основной вектор работы теперь — это использование РН РаспределениеЗапасовДвижения для исторических данных и понимание того, что РС РаспределениеЗапасов является ведущим для оперативной работы системы.

← На главную