Как изменился механизм свободных остатков в 1С:ERP 2.5.7 и как решить проблемы с их отображением?

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

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

Новая архитектура: отказ от классических итогов

В предыдущих версиях за расчет доступности товаров отвечали регистры накопления остатков, такие как СвободныеОстатки, ЗапасыИПотребности и ГрафикПоступленияТоваров. Основная проблема этой схемы заключалась в высоких блокировках таблиц при интенсивной многопользовательской работе. В версии 2.5.7 эти регистры были фактически удалены из логики оперативного учета.

Рассмотрим новую связку объектов, которая пришла им на замену:

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

Проанализируем важный нюанс: этот механизм работает асинхронно. После того как документ сделал запись в «обороты», запускается фоновое задание, которое обновляет итоговый регистр сведений. Если фоновое задание не успевает отрабатывать или зависает, пользователь видит в отчете «Ведомость по товарам на складах» одни цифры, а в подборе — другие (или вообще нулевые остатки).

Проблема зависания обновления на версию 2.5.7

Многие столкнулись с ситуацией, когда после обновления конфигурации дополнительные процедуры обработки данных выполняются чрезвычайно долго или зацикливаются. Выясним причину этого поведения. Проблема часто кроется в обработчике обновления, который регистрирует данные для перехода на новую версию.

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

  1. Корректировка программного кода: Если обновление еще не запущено в «проде», необходимо проверить указанную процедуру и убедиться, что типы документов в массиве не дублируются.
  2. Правка регистра «Обработчики обновления»: Если обновление уже идет, можно вручную отредактировать список документов, ожидающих обработки в соответствующем служебном регистре сведений, удалив дублирующиеся записи.
  3. Настройка потоков: Если процесс идет медленно, но не виснет, попробуйте уменьшить количество потоков в форме «Обслуживание» -> «Обновление программы» -> «Результаты обновления» и перезапустить заблокированные процессы.

Как исправить неверные остатки в регистре «Распределение запасов»

Ситуация, когда в независимом регистре сведений РаспределениеЗапасов данные «расползлись» с реальными складскими остатками — довольно частая проблема после перехода. Поскольку регистр независимый, прямая связь с регистрами накопления потеряна.

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

  1. Перейдите в раздел Функции для технического специалиста.
  2. Найдите и запустите обработку «Исправление ошибок в регистре сведений Распределение запасов».
  3. Эта обработка полностью пересчитывает данные регистра сведений на основании актуальных остатков на складах и текущих потребностей по заказам.

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

Куда пропали Серии из свободных остатков?

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

Если вам нужно собирать свободные остатки в разрезе сроков годности (серий), теперь придется соединять данные из нескольких источников: нового регистра распределения и классических регистров складских остатков по сериям. Это усложняет написание запросов, но, по заверению разработчиков, ускоряет работу системы в целом.

Рекомендации по кастомизации

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

  1. Использование API: Вместо прямых запросов к таблицам баз данных старайтесь использовать функции типового модуля РаспределениеЗапасов. Это гарантирует, что вы получите актуальные данные с учетом еще не обработанных «оборотов» (on-the-fly расчет).
  2. Работа с Регистром Сведений: Если важна скорость и допустима небольшая погрешность асинхронности, делайте запрос к основной таблице регистра сведений РаспределениеЗапасов.

Подводя итог, можно сказать, что переход на 2.5.7 требует от администраторов и программистов 1С повышенного внимания к процедурам обновления и регламентным заданиям. Использование новой модели распределения запасов — это плата за масштабируемость и производительность системы в высоконагруженных средах.

← На главную