Переход на версию 1С:Управление торговлей 11.5 принес значительные изменения в архитектуру учета остатков и доступности товаров, что иногда требует выравнивания остатков после обновления. Одним из самых заметных нововведений стал отказ от использования привычного регистра накопления СвободныеОстатки в пользу регистра сведений РаспределениеЗапасов. В этой статье мы подробно разберем, как работает этот механизм, почему данные в нем ведут себя не так, как в старых версиях, и выясним, куда «исчезают» записи при установке статуса «Отгрузить».
Для начала проанализируем, зачем разработчики 1С решили заменить регистр накопления на регистр сведений. В прошлых версиях (11.4 и ниже) расчет свободного остатка требовал сложных запросов к нескольким регистрам накопления в реальном времени. В высоконагруженных базах это приводило к замедлению работы системы.
Рассмотрим новую схему: регистр сведений РаспределениеЗапасов теперь выполняет роль высокопроизводительной витрины данных или кэша. Он не хранит историю движений (приход, расход), а отображает только актуальное состояние остатков и резервов на текущий момент времени. Это позволяет системе мгновенно получать ответ на вопрос «Сколько товара мы можем продать сейчас?» без проведения тяжелых вычислений.
Ситуация, описанная многими пользователями, выглядит так: при оформлении заказа и резервировании товара в регистре появляются записи с состоянием «В резерве» и «Ожидаемая отгрузка». Однако, как только менеджер устанавливает в заказе статус «Отгрузить», эти записи пропадают. Разберем по шагам, почему это происходит и является ли это ошибкой.
С точки зрения логики управления запасами в УТ 11.5, жизненный цикл товара в подсистеме обеспечения (управлять которым удобнее через привычный интерфейс обеспечения заказов и управления резервами) выглядит следующим образом:
РаспределениеЗапасов это отражается строкой с состоянием В наличии и отсутствием привязки к заказу.Проанализируем ситуацию: как только товар переведен в статус «Отгрузить», он «уходит с радаров» подсистемы распределения. 1С полагает, что «поезд практически уехал». Теперь этот товар контролируется другими механизмами — подсистемой складского учета (например, регистром накопления ТоварыКОтгрузке). Именно поэтому записи в РаспределениеЗапасов очищаются: регистр хранит только те данные, которые еще требуют принятия решения по распределению. Для детального контроля в этот момент лучше анализировать движения товаров с резервами нарастающим итогом.
Важно понимать, что РаспределениеЗапасов — это лишь производная сущность. Настоящим «источником истины», где фиксируются все движения документов, является регистр накопления ЗапасыИРезервы. Посмотрим, как взаимодействуют эти объекты:
ЗапасыИРезервы.РаспределениеЗапасов.ЗапасыИРезервы — для этой задачи есть отчет сверки остатков на складах и показателей доступности.Выясним еще одну важную причину, по которой данные в регистре могут казаться некорректными. В 1С:УТ 11.5 реализован механизм отложенного обновления распределения запасов. Чтобы пользователь не ждал окончания сложных расчетов при каждом нажатии кнопки «Провести», система может выполнять обновление регистра РаспределениеЗапасов в фоновом режиме.
Рассмотрим пример: менеджер провел заказ, открыл отчет по остаткам, но цифры остались прежними. Через 10–15 секунд данные обновились. Это работа регламентного задания. Если в вашей базе настроено отложенное обновление, имейте в виду этот временной лаг. Если же вам нужна мгновенная актуальность, эту опцию можно отключить в настройках склада и обеспечения, но это может снизить скорость работы пользователей при проведении документов.
Если вам необходимо в коде получить количество доступного товара, забудьте про одну цифру «Остаток». Теперь свободный остаток — это вычисляемая величина. Рассмотрим пример логики запроса к регистру РаспределениеЗапасов:
// Пример логики расчета свободного остатка
// Свободно = (В наличии) - (Резерв на складе)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаспределениеЗапасов.Номенклатура,
| СУММА(ВЫБОР
| КОГДА РаспределениеЗапасов.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ВНаличии)
| ТОГДА РаспределениеЗапасов.Количество
| ИНАЧЕ 0
| КОНЕЦ) КАК Наличии,
| СУММА(ВЫБОР
| КОГДА РаспределениеЗапасов.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.РезервНаСкладе)
| ТОГДА РаспределениеЗапасов.Количество
| ИНАЧЕ 0
| КОНЕЦ) КАК Зарезервировано
|ИЗ
| РегистрСведений.РаспределениеЗапасов КАК РаспределениеЗапасов
|ГДЕ
| РаспределениеЗапасов.Номенклатура = &Номенклатура
|СГРУППИРОВАТЬ ПО
| РаспределениеЗапасов.Номенклатура";
Посмотрим на результат: вычитая из суммы состояния ВНаличии сумму состояния РезервНаСкладе, мы получаем реальный доступный остаток для новых заказов.
Иногда записи в регистре «зависают» или исчезают раньше времени из-за сбоев. Проанализируем, что делать в таких ситуациях:
ОбновлениеРаспределенияЗапасов выполняется без ошибок и не «висит» в очереди.РаспределениеЗапасов явно противоречат движениям в РН ЗапасыИРезервы, воспользуйтесь типовой обработкой «Исправление распределения запасов». Найти ее можно через меню НСИ и администрирование — Обслуживание — Корректировка данных.Регистр сведений РаспределениеЗапасов в УТ 11.5 — это эффективный инструмент для быстрого получения данных о доступности, но он требует понимания новой логики 1С. Исчезновение записей при статусе «Отгрузить» — это штатное поведение системы, означающее переход ответственности от службы планирования запасов к складской службе. Для получения полной картины остатков в процессе отгрузки следует использовать отчеты, объединяющие данные нескольких регистров, такие как «Остатки и доступность товаров».