При работе с конфигурациями на базе Библиотеки Стандартных Подсистем (БСП), такими как 1С:Управление торговлей 11, разработчики и администраторы часто сталкиваются с ситуацией: внешняя обработка успешно подключена через справочник ДополнительныеОтчетыИОбработки, расписание захода настроено, но в назначенное время ничего не происходит. При этом ручной запуск команды работает идеально.
Рассмотрим подробнее причины возникновения такой проблемы, проанализируем порядок диагностики и разберем по шагам все необходимые настройки как на стороне кода внешней обработки, так и на стороне сервера 1С:Предприятие.
В серверном режиме работы 1С:Предприятие за исполнение всех фоновых и регламентных процессов отвечает менеджер фоновых заданий кластера (процесс rmngr) и рабочие процессы rphost. В некоторых случаях при активной разработке, частой перезаписи обработок или сбоях в работе кластера менеджер заданий теряет связь с внутренним расписанием БСП.
Если код обработки корректен, а регламентное задание включено, но фоновый процесс не стартует, выполним перезапуск службы сервера 1С:Предприятие:
services.msc) или терминал Linux.1C:Enterprise 8.3 Server Agent).После перезапуска служб менеджер кластера заново считывает расписания всех зарегистрированных регламентных заданий из информационной базы, и выполнение регламентных обработок возобновляется.
Чтобы БСП могла корректно запустить команду внешней обработки в фоновом сеансе без участия пользователя, структура самой обработки должна строго соответствовать стандартам платформы.
Выясним причину возможного сбоя на уровне программного кода. В модуле объекта внешней обработки должна быть экспортная функция СведенияОВнешнейОбработки(), которая возвращает структуру с описанием параметров регистрации.
Критически важным является значение свойства Использование для команды, запускаемой по расписанию. Значение должно устанавливаться через метод ДополнительныеОтчетыИОбработкиКлиентСервер.ВидКомандыВызовСерверногоМетода().
Посмотрим на пример правильного заполнения сведений о внешней обработке:
Функция СведенияОВнешнейОбработки() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработки("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Автоматическая обработка данных";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Запустить регламентный импорт";
Команда.Идентификатор = "ВыполнитьИмпорт";
// Для запуска по расписанию используется ТОЛЬКО серверный метод!
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидКомандыВызовСерверногоМетода();
Команда.ПоказываетОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Обязательным условием является наличие экспортной процедуры ВыполнитьКоманду() в Модуле объекта (не в модуле формы!). Проанализируем сигнатуру этой процедуры:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
Если ИдентификаторКоманды = "ВыполнитьИмпорт" Тогда
// Логика исполнения серверного задания
ОбработатьДанныеСервер();
КонецЕсли;
КонецПроцедуры
Важное правило: В серверном коде, выполняемом по расписанию, категорически запрещено использовать клиентские вызовы, такие как Предупреждение(), Вопрос(), методы открытия форм или обращения к файловой системе клиента. Наличие таких вызовов приведет к падению фонового задания с ошибкой.
В конфигурации 1С:Управление торговлей 11 запуск расписаний всех сторонних обработок отвечает не отдельное задание ОС, а единое системное задание БСП.
Разберем по шагам, как проверить его активность:
Если системное задание отключено, расписания отдельных обработок внутри справочника ДополнительныеОтчетыИОбработки исполняться не будут.
Проанализируем специфические настройки, которые могут блокировать автозапуск:
Безопасный режим или явно прописать разрешения в функции СведенияОВнешнейОбработки().Если обработка перестала запускаться по расписанию, выполним следующую последовательность действий для поиска истинной причины:
Фоновое задание.Ошибка выполнения. Если задание падает из-за ошибки в коде, стек вызовов будет зафиксирован в журнале.Обслуживание -> Регламентные и фоновые задания найдем нашу обработку на вкладке фоновых заданий, отсортировав список по дате. Это позволит узнать точное время последней попытки запуска и текст ошибки.Дополнительные отчеты и обработки, откроем карточку нужной обработки и нажмем кнопку Заменить из файла, выбрав обновленный файл .epf. Это принудительно обновит двоичные данные обработки в базе без необходимости перезагружать сервер 1С.