Почему в 1С:УТ 11 не создаются расходные ордера при перемещении товаров и как это исправить?

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

При работе в программе 1С:Управление торговлей (редакция 11), а также в связанных решениях 1С:Комплексная автоматизация 2 и 1С:ERP Управление предприятием 2, пользователи часто используют ордерную схему документооборота. Одной из наиболее удобных сервисных функций здесь является автоматическое формирование расходных ордеров при проведении документов-распоряжений, таких как Перемещение товаров или Реализация товаров и услуг. Однако после внезапных сбоев, зависаний системы или аварийного завершения сеансов этот механизм может полностью или частично перестать работать для определенных складов.

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

Архитектура механизма автоматического переоформления ордеров

Для того чтобы эффективно диагностировать неисправность, нам необходимо четко понимать физический смысл происходящих в системе процессов. Автоматическое формирование расходных ордеров активируется в карточке склада. Для этого мы переходим в раздел НСИ и администрирование — Склад и доставка — Склады и магазины, открываем нужный склад и в настройках ордерной схемы указываем параметр Расходный ордер на товары формируется: Автоматически.

С технической точки зрения этот процесс спроектирован как асинхронная транзакционная модель. Давайте проанализируем цепочку событий, которая происходит в системе при проведении документа-отправителя (например, Перемещение товаров):

  1. При проведении документа формируются движения по регистру накопления ТоварыКОтгрузке.
  2. В модуле набора записей регистра ТоварыКОтгрузке в обработчике события ПриЗаписи система вычисляет таблицу изменений. Если зафиксированы новые строки к отгрузке, программный код делает служебную запись в регистр сведений ОчередьПереоформленияРасходныхОрдеров. В этой записи регистрируются ключевые аналитики: склад, документ-распоряжение, получатель и статус необходимости обработки.
  3. Сразу после успешного завершения основной транзакции проведения документа система инициирует запуск регламентного фонового задания. В клиент-серверном варианте работы порождается фоновый процесс на сервере приложений, а в файловом режиме система пытается запустить фоновое выполнение в текущем сеансе (или в выделенном сеансе планировщика).
  4. Фоновое задание считывает записи из регистра сведений ОчередьПереоформленияРасходныхОрдеров, обращается к процедурам заполнения документов и автоматически генерирует (или обновляет существующий) документ Расходный ордер на товары.
  5. Если документ успешно создан и проведен, отработанная запись удаляется из регистра ОчередьПереоформленияРасходныхОрдеров. Процесс завершается.

Почему ломается фоновый механизм создания ордеров

Выясним основную причину сбоя. В случае аварийного завершения работы сервера 1С, зависания клиентского сеанса или СУБД в момент записи складских документов транзакция может прерваться в неопределенном состоянии. Также сбой может произойти по чисто логическим причинам, например, если система пытается списать товар по ордеру, но на складе фактически отсутствуют свободные остатки в разрезе необходимых серий или ячеек.

В результате сбоя в регистре сведений ОчередьПереоформленияРасходныхОрдеров зависает «проблемная» запись. Последствия этого могут быть крайне неприятными:

Пошаговая методика диагностики и отладки проблемы

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

Рассмотрим, как правильно выполнить отладку этого процесса в конфигураторе:

  1. Откроем Конфигуратор и зайдем в меню Отладка — Подключение....
  2. В открывшемся окне нажмем кнопку Настройка... и убедимся, что установлена галочка Автоматическое подключение: Фоновые задания. Без этой настройки отладчик проигнорирует запуск фонового процесса.
  3. Найдем процедуру, отвечающую за генерацию расходного ордера. Как правило, создание документа инициируется через менеджер документа Документы.РасходныйОрдерНаТовары или специализированные общие модули, отвечающие за складской документооборот (например, СкладскиеПодсистемы или ОрдернаяСхемаСервер). Поставим точку останова в функции создания нового документа или в обработке заполнения самого расходного ордера.
  4. Проведем документ Перемещение товаров в режиме предприятия и дождемся срабатывания точки останова в фоновом сеансе. В табло стека вызовов мы сможем увидеть всю цепочку вызовов и локализовать конкретное место ошибки.

Практическое решение: очистка регистра очереди

Как показывает практика решения подобных проблем на форумах 1С, самым быстрым и безопасным способом вернуть механизм в рабочее состояние является очистка поврежденной очереди переоформления ордеров.

Выполним следующие шаги для исправления ситуации:

  1. В режиме 1С:Предприятие откроем главное меню (в правом верхнем углу окна программы) и перейдем в раздел Функции для технического специалиста (в старых версиях этот пункт назывался Все функции). Если этот пункт меню недоступен, его необходимо включить в настройках параметров системы.
  2. В строке поиска введем название регистра сведений: Очередь переоформления расходных ордеров (системное имя — РегистрСведений.ОчередьПереоформленияРасходныхОрдеров) и откроем его.
  3. В открывшемся списке мы увидим записи, сгруппированные по складам и документам-распоряжениям. Обратим внимание на колонку с количеством попыток обработки или датой возникновения записи. Зависшие сбойные записи будут иметь старые даты и заполненные аналитики, по которым ордера так и не создались.
  4. Выделим зависшие строки и удалим их непосредственно из этого регистра. Важное примечание: удаление записей из регистра очереди абсолютно безопасно для целостности базы данных. Никакие проведенные документы перемещений или остатки товаров при этом не пострадают. Данный регистр является лишь вспомогательным буфером для работы фоновых заданий.
  5. Если в будущем по этим распоряжениям все-таки потребуется создать ордера, нам достаточно будет просто заново перепровести соответствующие документы-распоряжения (например, перемещения). При проведении система автоматически сделает новую чистую запись в регистр очереди, которая будет успешно обработана фоновым заданием.

Дополнительные настройки для предотвращения сбоев

Для того чтобы минимизировать вероятность повторения подобных проблем в будущем, особенно в высоконагруженных базах данных, проанализируем полезные настройки, доступные в последних релизах 1С:УТ 11.5 / КА 2.5 / ERP 2.5:

Ограничение периода выборки распоряжений. В настройках параметров системы (раздел Склад и доставка) присутствует важная опция: Период получения товаров к отгрузке для переоформления расходных ордеров, мес.. Рекомендуется устанавливать этот период в пределах 1-2 месяцев. Это защитит систему от бессмысленных попыток переоформления старых закрытых заказов или перемещений за прошлые годы, если в них случайно изменятся какие-либо аналитики.

Многопоточность регламентных заданий. Если на предприятии выполняется большой объем отгрузок, рекомендуется обратить внимание на параметр Формировать расходные ордера в одном потоке в настройках регламентных заданий. Это позволит снизить пиковую нагрузку на сервер СУБД за счет исключения конфликтов блокировок при одновременной записи нескольких ордеров параллельными фоновыми сессиями.

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

← На главную