Почему не запускается внешняя обработка по расписанию в 1С:Управление торговлей 11 и как это исправить?

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

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

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

1. Быстрое решение: Перезапуск службы сервера 1С или менеджера кластера

В серверном режиме работы 1С:Предприятие за исполнение всех фоновых и регламентных процессов отвечает менеджер фоновых заданий кластера (процесс rmngr) и рабочие процессы rphost. В некоторых случаях при активной разработке, частой перезаписи обработок или сбоях в работе кластера менеджер заданий теряет связь с внутренним расписанием БСП.

Если код обработки корректен, а регламентное задание включено, но фоновый процесс не стартует, выполним перезапуск службы сервера 1С:Предприятие:

  1. Откроем оснастку управления службами Windows (services.msc) или терминал Linux.
  2. Найдем службу Агент сервера 1С:Предприятие 8.3 (1C:Enterprise 8.3 Server Agent).
  3. Выполним перезапуск службы.

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

2. Проанализируем требования к коду внешней обработки

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

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

Критически важным является значение свойства Использование для команды, запускаемой по расписанию. Значение должно устанавливаться через метод ДополнительныеОтчетыИОбработкиКлиентСервер.ВидКомандыВызовСерверногоМетода().

Посмотрим на пример правильного заполнения сведений о внешней обработке:


Функция СведенияОВнешнейОбработки() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработки("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Наименование = "Автоматическая обработка данных";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;

    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Запустить регламентный импорт";
    Команда.Идентификатор = "ВыполнитьИмпорт";
    // Для запуска по расписанию используется ТОЛЬКО серверный метод!
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидКомандыВызовСерверногоМетода();
    Команда.ПоказываетОповещение = Ложь;

    Возврат ПараметрыРегистрации;

КонецФункции

Обязательным условием является наличие экспортной процедуры ВыполнитьКоманду() в Модуле объекта (не в модуле формы!). Проанализируем сигнатуру этой процедуры:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт

    Если ИдентификаторКоманды = "ВыполнитьИмпорт" Тогда
        // Логика исполнения серверного задания
        ОбработатьДанныеСервер();
    КонецЕсли;

КонецПроцедуры

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

3. Проверим параметры системного регламентного задания БСП

В конфигурации 1С:Управление торговлей 11 запуск расписаний всех сторонних обработок отвечает не отдельное задание ОС, а единое системное задание БСП.

Разберем по шагам, как проверить его активность:

  1. Перейдем в раздел НСИ и администрирование -> Администрирование -> Обслуживание.
  2. Раскроем группу Регламентные и фоновые задания и откроем одноименный список.
  3. Найдем в списке задание с наименованием Запуск дополнительных обработок (или Выполнение дополнительных обработок).
  4. Убедимся, что у данного задания установлен флаг Включено, и настроено его собственное расписание (обычно оно запускается каждые 60 секунд).

Если системное задание отключено, расписания отдельных обработок внутри справочника ДополнительныеОтчетыИОбработки исполняться не будут.

4. Учет режимов работы базы и безопасного режима

Проанализируем специфические настройки, которые могут блокировать автозапуск:

5. Алгоритм полноценной диагностики без перезапуска сервера

Если обработка перестала запускаться по расписанию, выполним следующую последовательность действий для поиска истинной причины:

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