С выходом версии 1С:ERP 2.5.7 (а также соответствующих версий КА 2.5.7 и УТ 11.5.7) архитектура подсистемы управления запасами претерпела фундаментальные изменения. Разработчики полностью пересмотрели подход к хранению и расчету свободных остатков, что вызвало немало вопросов у специалистов. Разберем подробно, что именно изменилось, почему ваше обновление могло «зависнуть» на несколько суток и как вернуть корректное отображение остатков в подборах документов.
В предыдущих версиях за расчет доступности товаров отвечали регистры накопления остатков, такие как СвободныеОстатки, ЗапасыИПотребности и ГрафикПоступленияТоваров. Основная проблема этой схемы заключалась в высоких блокировках таблиц при интенсивной многопользовательской работе. В версии 2.5.7 эти регистры были фактически удалены из логики оперативного учета.
Рассмотрим новую связку объектов, которая пришла им на замену:
РаспределениеЗапасовДвижения (Обороты): Теперь документы не меняют остатки напрямую. Они фиксируют «дельту» (изменение) в этом оборотном регистре. Это значительно снижает время блокировки, так как системе не нужно пересчитывать итоги в момент транзакции.РаспределениеЗапасов (Независимый): Это плоская таблица, в которой хранятся уже рассчитанные итоги: свободный остаток, резервы по заказам, ожидаемые поступления. Именно из этого регистра система берет данные для формы подбора товаров и проверок при проведении.Проанализируем важный нюанс: этот механизм работает асинхронно. После того как документ сделал запись в «обороты», запускается фоновое задание, которое обновляет итоговый регистр сведений. Если фоновое задание не успевает отрабатывать или зависает, пользователь видит в отчете «Ведомость по товарам на складах» одни цифры, а в подборе — другие (или вообще нулевые остатки).
Многие столкнулись с ситуацией, когда после обновления конфигурации дополнительные процедуры обработки данных выполняются чрезвычайно долго или зацикливаются. Выясним причину этого поведения. Проблема часто кроется в обработчике обновления, который регистрирует данные для перехода на новую версию.
В коде процедуры ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию() для регистра РаспределениеЗапасов была допущена ошибка: тип документа ПроизводствоБезЗаказа мог быть указан дважды. Это приводило к бесконечным циклам или некорректному формированию очереди обработки. Рассмотрим, как это можно исправить, если обновление «встало»:
Ситуация, когда в независимом регистре сведений РаспределениеЗапасов данные «расползлись» с реальными складскими остатками — довольно частая проблема после перехода. Поскольку регистр независимый, прямая связь с регистрами накопления потеряна.
Для решения этой проблемы разработчики 1С предусмотрели специальный инструмент. Рассмотрим алгоритм действий:
Важный совет: Если вы используете доработки, которые напрямую двигают складские остатки (свои документы или корректировки регистров), вам необходимо дописать код, который будет вызывать методы актуализации распределения запасов. Рассмотрим пример логики: после записи вашего документа нужно программно инициировать пересчет через модуль РаспределениеЗапасов, иначе остатки в подборе не изменятся.
Многие программисты заметили, что в новом регистре РаспределениеЗапасов отсутствует измерение Серия. Проанализируем, почему так произошло. 1С перешла к концепции «мягкого» распределения. Свободный остаток теперь считается в целом по номенклатуре (и характеристике), а серии учитываются только тогда, когда они «жестко» зарезервированы в заказе или уже находятся на складе под конкретное назначение.
Если вам нужно собирать свободные остатки в разрезе сроков годности (серий), теперь придется соединять данные из нескольких источников: нового регистра распределения и классических регистров складских остатков по сериям. Это усложняет написание запросов, но, по заверению разработчиков, ускоряет работу системы в целом.
Если в вашей конфигурации есть самописные отчеты или обработки, использующие виртуальные таблицы .Остатки() старых регистров свободных остатков, они перестанут возвращать данные. Выясним, как правильно обращаться к данным теперь:
РаспределениеЗапасов. Это гарантирует, что вы получите актуальные данные с учетом еще не обработанных «оборотов» (on-the-fly расчет).РаспределениеЗапасов.Подводя итог, можно сказать, что переход на 2.5.7 требует от администраторов и программистов 1С повышенного внимания к процедурам обновления и регламентным заданиям. Использование новой модели распределения запасов — это плата за масштабируемость и производительность системы в высоконагруженных средах.