После обновления конфигураций «Управление торговлей» до версии 11.5.20.85 (или аналогичных версий ERP 2.5.20) многие пользователи столкнулись с критической проблемой: фоновое задание «Распределение запасов» начинает выдавать ошибку и зацикливается — есть мониторинг регламентных заданий и уведомление о сбоях. Это приводит к лавинообразному росту потребления оперативной памяти на сервере и невозможности корректного резервирования товаров.
В данной статье мы подробно разберем, почему возникает эта ошибка, как она связана с механизмом «Отложенных заданий» и какими способами можно восстановить работоспособность системы.
Давайте проанализируем технический контекст. Ошибка возникает в общем модуле ОтложенныеЗадания при попытке записи в регистр сведений ЗаданияКОтражениюСостоянияЗаказов. Типичный текст ошибки в журнале регистрации выглядит следующим образом:
Ошибка при вызове метода контекста (Записать)
{ОбщийМодуль.ОтложенныеЗадания.Модуль(189)}:ИсточникЗаданий.Записать(Ложь);
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине:
Запись не верна! Значение поля "Документ" не может быть пустым!: ЗаданияКОтражениюСостоянияЗаказов: ...
Выясним причину: в новых релизах ветки 11.5.20 компания 1С провела масштабный рефакторинг механизмов распределения запасов. Теперь система гораздо жестче контролирует заполнение измерений в служебных регистрах. Ошибка провоцируется использованием документа «Корректировка регистров» для изменения остатков или резервов в регистре накопления ЗапасыИПотребности.
Когда фоновый процесс РаспределениеЗапасов.ВыполнитьРаспределениеВФоне видит новые движения в регистре ЗапасыИПотребности, он пытается обновить состояние обеспечения. Однако, если движения сделаны «Корректировкой регистров» (особенно программно через расширения), у этих записей отсутствует ссылка на «Заказ» (объект следования состоянию). Механизм пытается передать в регистр заданий пустое значение или Неопределено, что блокируется платформой на уровне проверки записи.
Рассмотрим важный нюанс, связанный с системным администрированием. Поскольку распределение запасов выполняется в фоновом режиме, при возникновении ошибки транзакция откатывается, но само задание не помечается как «завершенное с ошибкой» навсегда. Система пытается выполнить его снова и снова. Каждая итерация порождает новые записи в журнале регистрации и «забивает» очередь сеансов (количество сессий может переваливать за сотни тысяч). Это приводит к тому, что менеджер памяти сервера 1С перестает справляться, и rphost потребляет до 96–100% доступных ресурсов.
Если работа предприятия встала из-за нехватки памяти, разберем алгоритм экстренного восстановления по шагам:
ЗапасыИПотребности без указания конкретных заказов клиентов или других распоряжений — это и есть источник проблемы.Задания к распределению запасов по той номенклатуре, которая фигурирует в проблемных корректировках — задача решается через инструмент поиска и удаления поврежденных записей регистров.Если вы используете расширения или внешние обработки для «виртуального резервирования», проанализируем ситуацию программно. В модуле менеджера регистра ЗаданияКОтражениюСостоянияЗаказов или в местах вызова РаспределениеЗапасов.ДобавитьЗаданияКОтражениюСостоянияЗаказов теперь необходимо гарантировать, что передаваемый объект не равен Неопределено.
Чтобы система игнорировала корректировки регистров и не пыталась обновлять по ним состояния заказов, можно воспользоваться следующим приемом при заполнении движений в коде:
// В коде программного создания движений регистра ЗапасыИПотребности
Движение = НаборДвижений.Добавить();
Движение.Период = ДатаДокумента;
// ... заполнение остальных полей ...
// Убедитесь, что Заказ заполнен корректной ссылкой, входящей в определяемый тип ОбъектСледованияСостояниюЗаказов
// Если заказа нет, такие движения в 11.5.20 могут вызывать сбой в типовом механизме распределения.
Важный совет: Если ваша бизнес-логика подразумевает резервирование без заказов, рассмотрите возможность использования других регистров или добавления исключений в общем модуле СостоянияДокументов через &Вместо, чтобы система не пыталась регистрировать задания для документов типа ДокументСсылка.КорректировкаРегистров.
Поскольку данная проблема признана массовой («баг» типовой конфигурации), проанализируем пути официального решения. Фирма 1С выпустила ряд исправлений для релизов 11.5.20.85 и 11.5.20.93.
Рекомендуем выполнить следующие действия:
Неопределено перед вызовом метода Записать() в модуле ОтложенныеЗадания.Мы выяснили, что корень проблемы кроется в несовместимости старых методов программной корректировки регистров с новым механизмом контроля состояний заказов. Для быстрого «лечения» системы необходимо очистить очередь заданий к распределению, а для долгосрочного — обновить конфигурацию или установить соответствующие патчи. Помните, что простое удаление заданий поможет лишь временно, если ваши фоновые процессы или интеграции продолжают создавать документы «Корректировка регистров» без надлежащего заполнения ключевых полей.