При переходе на новые релизы конфигурации «Управление торговлей» версии 11.5 (начиная с 11.5.9 и выше, включая 11.5.17) многие технические специалисты сталкиваются с критической проблемой: документы отгрузки перестают проводиться. Система выдает стандартную, на первый взгляд, ошибку: «Для отгрузки/резервирования необособленного товара недостаточно свободного остатка» (в ряде случаев решить проблему помогает дополнительная проверка остатков при проведении). При этом отчеты по складу показывают наличие товара, а физически остатки никуда не исчезали.
В этой статье мы подробно разберем, почему возникает эта ситуация, проанализируем архитектурные изменения в системе учета запасов и выясним, как правильно завершить процесс обновления, чтобы восстановить работоспособность базы данных.
Начиная с ветки 11.5.9, разработчики компании «1С» радикально изменили механизм распределения запасов. Рассмотрим основные изменения в структуре метаданных:
РаспределениеЗапасовДвижения.РаспределениеЗапасов.ЗапасыИПотребности.Этот регистр объединяет информацию о фактических остатках на складах, резервах под заказы, ожидаемых поступлениях и потребностях. Проблема заключается в том, что при обновлении через несколько релизов (например, с 11.5.12 на 11.5.17) данные из старых регистров должны автоматически мигрировать в новый. Если этот процесс не завершен, регистр ЗапасыИПотребности остается пустым (подробнее о нюансах заполнения регистра «Запасы и потребности»). Поскольку система в новых релизах ищет свободные остатки именно в нем, она «считает», что товара на складе нет, и блокирует проведение документов.
Проанализируем типичную ошибку администраторов: завершение технического обновления конфигурации (наката cf-файла) ошибочно принимается за полное завершение обновления всей базы. На самом деле, основные процедуры трансформации данных выполняются в режиме «1С:Предприятие» в фоновом режиме.
Для проверки состояния процедур выполним следующие действия:
Как показывает практика, часто из сотни процедур выполняется лишь одна, а остальные остаются в статусе «Ожидание» или «Выполняется». Пока процедура миграции данных в регистр ЗапасыИПотребности не получит статус «Выполнено», документы проводиться не будут.
Если автоматический запуск процедур не происходит, мы можем инициировать его вручную. Разберем, как это сделать через консоль регламентных заданий:
ОтложенноеОбновлениеИБ.Важно помнить: при выполнении отложенного обновления в базе не должно быть активных пользователей, которые могут блокировать таблицы регистров накопления. В противном случае обработчики могут аварийно завершаться или «зависать».
Одной из ключевых настроек, влияющих на работу нового механизма, является «Производительный режим записи информации о доступности товаров». В новых релизах этот режим становится основным. Если после выполнения всех процедур обновления регистр всё равно пуст, попробуем следующий алгоритм:
ЗапасыИПотребности, состояние которого можно проанализировать через отчет по движениям товаров с резервами.В ситуациях, когда стандартное обновление не помогло, воспользуемся встроенными инструментами корректировки. Рассмотрим работу с обработкой исправления ошибок:
Проанализируем ситуацию программно. Если нам необходимо вручную запустить обработчик обновления для конкретного объекта, мы можем воспользоваться встроенным кодом (через консоль кода), который инициирует процедуру для регистра:
// Пример логики вызова обработчика обновления (упрощенно)
ПроцедурыОбновления = ОбновлениеИнформационнойБазы.ЗаданияОбновления();
Для Каждого СтрокаПроцедуры Из ПроцедурыОбновления Цикл
Если Найти(СтрокаПроцедуры.ИмяОбработчика, "ЗапасыИПотребности") > 0 Тогда
// Запуск конкретного обработчика миграции
ОбновлениеИнформационнойБазы.ВыполнитьОбработчикОбновления(СтрокаПроцедуры);
КонецЕсли;
КонецЦикла;
Рассмотрим риски «прыжка» с версии 11.5.12 сразу на 11.5.17. Между этими выпусками находится большое количество промежуточных обновлений, в каждом из которых могли меняться алгоритмы работы с назначениями, направлениями деятельности и обособленным учетом.
Почему это важно: при быстром обновлении некоторые системные поля (например, пустые ссылки на Назначения) могут заполниться некорректно (значением NULL вместо пустой ссылки), что делает остаток «невидимым» для запроса проведения. Если после выполнения всех процедур отложенного обновления ошибка сохраняется, рекомендуем:
ЗапасыИПотребности.ТоварыНаСкладах).В самом крайнем случае, если база небольшая, помогает полное перепроведение документов за период (месяц или квартал) (удобно через обработка группового перепроведения документов), что принудительно перезапишет движения в новом регистре ЗапасыИПотребности. Однако начинать всегда следует именно с проверки Результатов обновления программы, так как в 90% случаев причина кроется именно в незавершенных фоновых процессах 1С.