При работе в программе 1С:Управление торговлей (редакция 11), а также в связанных решениях 1С:Комплексная автоматизация 2 и 1С:ERP Управление предприятием 2, пользователи часто используют ордерную схему документооборота. Одной из наиболее удобных сервисных функций здесь является автоматическое формирование расходных ордеров при проведении документов-распоряжений, таких как Перемещение товаров или Реализация товаров и услуг. Однако после внезапных сбоев, зависаний системы или аварийного завершения сеансов этот механизм может полностью или частично перестать работать для определенных складов.
В этой статье мы подробно разберем, как устроен изнутри механизм автоматического формирования складских ордеров, выясним причины его сбоя, рассмотрим методику отладки и покажем пошаговый алгоритм восстановления работоспособности базы данных.
Для того чтобы эффективно диагностировать неисправность, нам необходимо четко понимать физический смысл происходящих в системе процессов. Автоматическое формирование расходных ордеров активируется в карточке склада. Для этого мы переходим в раздел НСИ и администрирование — Склад и доставка — Склады и магазины, открываем нужный склад и в настройках ордерной схемы указываем параметр Расходный ордер на товары формируется: Автоматически.
С технической точки зрения этот процесс спроектирован как асинхронная транзакционная модель. Давайте проанализируем цепочку событий, которая происходит в системе при проведении документа-отправителя (например, Перемещение товаров):
ТоварыКОтгрузке.ТоварыКОтгрузке в обработчике события ПриЗаписи система вычисляет таблицу изменений. Если зафиксированы новые строки к отгрузке, программный код делает служебную запись в регистр сведений ОчередьПереоформленияРасходныхОрдеров. В этой записи регистрируются ключевые аналитики: склад, документ-распоряжение, получатель и статус необходимости обработки.ОчередьПереоформленияРасходныхОрдеров, обращается к процедурам заполнения документов и автоматически генерирует (или обновляет существующий) документ Расходный ордер на товары.ОчередьПереоформленияРасходныхОрдеров. Процесс завершается.Выясним основную причину сбоя. В случае аварийного завершения работы сервера 1С, зависания клиентского сеанса или СУБД в момент записи складских документов транзакция может прерваться в неопределенном состоянии. Также сбой может произойти по чисто логическим причинам, например, если система пытается списать товар по ордеру, но на складе фактически отсутствуют свободные остатки в разрезе необходимых серий или ячеек.
В результате сбоя в регистре сведений ОчередьПереоформленияРасходныхОрдеров зависает «проблемная» запись. Последствия этого могут быть крайне неприятными:
Есть ошибки при переоформлении расходных ордеров. Склад: [...]; Количество попыток: 3.rphosts. Проведение любых документов в базе начинает занимать значительно больше времени, пользователи жалуются на общие зависания системы.Если мы столкнулись с ситуацией, когда ордера перестали создаваться автоматически, обычные точки останова в модулях проведения документа-распоряжения не сработают. Это связано с тем, что код выполняется асинхронно в контексте другого (фонового) сеанса.
Рассмотрим, как правильно выполнить отладку этого процесса в конфигураторе:
Автоматическое подключение: Фоновые задания. Без этой настройки отладчик проигнорирует запуск фонового процесса.Документы.РасходныйОрдерНаТовары или специализированные общие модули, отвечающие за складской документооборот (например, СкладскиеПодсистемы или ОрдернаяСхемаСервер). Поставим точку останова в функции создания нового документа или в обработке заполнения самого расходного ордера.Перемещение товаров в режиме предприятия и дождемся срабатывания точки останова в фоновом сеансе. В табло стека вызовов мы сможем увидеть всю цепочку вызовов и локализовать конкретное место ошибки.Как показывает практика решения подобных проблем на форумах 1С, самым быстрым и безопасным способом вернуть механизм в рабочее состояние является очистка поврежденной очереди переоформления ордеров.
Выполним следующие шаги для исправления ситуации:
Очередь переоформления расходных ордеров (системное имя — РегистрСведений.ОчередьПереоформленияРасходныхОрдеров) и откроем его.Для того чтобы минимизировать вероятность повторения подобных проблем в будущем, особенно в высоконагруженных базах данных, проанализируем полезные настройки, доступные в последних релизах 1С:УТ 11.5 / КА 2.5 / ERP 2.5:
Ограничение периода выборки распоряжений. В настройках параметров системы (раздел Склад и доставка) присутствует важная опция: Период получения товаров к отгрузке для переоформления расходных ордеров, мес.. Рекомендуется устанавливать этот период в пределах 1-2 месяцев. Это защитит систему от бессмысленных попыток переоформления старых закрытых заказов или перемещений за прошлые годы, если в них случайно изменятся какие-либо аналитики.
Многопоточность регламентных заданий. Если на предприятии выполняется большой объем отгрузок, рекомендуется обратить внимание на параметр Формировать расходные ордера в одном потоке в настройках регламентных заданий. Это позволит снизить пиковую нагрузку на сервер СУБД за счет исключения конфликтов блокировок при одновременной записи нескольких ордеров параллельными фоновыми сессиями.
Таким образом, своевременный мониторинг состояния регистра ОчередьПереоформленияРасходныхОрдеров и умение анализировать фоновые процессы позволяют оперативно решать любые сложности, возникающие при эксплуатации ордерного склада в программах линейки 1С:ERP/УТ/КА.