Почему внешняя обработка не запускается по расписанию в серверной базе 1С?

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

Ситуация, когда внешняя обработка идеально работает при ручном запуске («Файл — Открыть» или через кнопку «Выполнить» в дополнительных обработках), но напрочь отказывается исполняться по расписанию, является классической дилеммой при переходе с файловой базы на серверную. В файловом варианте всё выполняется в контексте текущего пользователя Windows, а в серверном — в игру вступают жесткие ограничения прав и изолированные сеансы службы. Разберем по шагам, почему так происходит и как заставить вашу выгрузку работать автоматически.

Анализируем сигнатуру процедуры «ВыполнитьКоманду»

Первое, на что стоит обратить внимание программисту при использовании Библиотеки Стандартных Подсистем (БСП) — это соответствие экспортных процедур стандартам. В современных версиях БСП процедура ВыполнитьКоманду во внешнем объекте (обработке) должна иметь определенное количество параметров. Если вы указали только один параметр, платформа может просто не вызвать метод, и в Журнале регистрации не останется даже следа от попытки запуска.

Рассмотрим правильный вариант объявления основной процедуры в модуле объекта:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    Если ИдентификаторКоманды = "ФоноваяХХХХ" Тогда
        ВыполнитьЗагрузкуДанных();
    КонецЕсли;
КонецПроцедуры

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

Проблема сетевых путей (UNC) и прав службы Агента 1С

Проанализируем код выгрузки, представленный в вопросе. Автор использует сетевой путь формата \\Comp33\выгрузка\. Это самая распространенная причина сбоев в серверных базах. Когда вы нажимаете кнопку «Выполнить» вручную, 1С работает под вашей учетной записью Windows, которая имеет права доступа к этому сетевому ресурсу. Однако регламентное задание запускается сервером 1С.

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

  1. Смена пользователя службы: В консоли управления службами Windows найдите «Агент сервера 1С:Предприятия» и в настройках входа укажите доменную учетную запись, у которой есть полные права на чтение и запись в папку \\Comp33\выгрузка\.
  2. Локальные пути: Перепишите код так, чтобы выгрузка сначала происходила в локальную папку на самом сервере 1С (например, C:\Exchange\), а затем файл копировался в сеть с помощью скриптов или других средств автоматизации.

Проверка блокировки регламентных заданий

Если в Журнале регистрации нет ни одной записи о запуске, возможно, выполнение заданий заблокировано на уровне всей информационной базы. Это часто делают администраторы при обновлении или техническом обслуживании. Разберем, как это проверить:

  1. Откройте консоль администрирования серверов 1С:Предприятия.
  2. Найдите вашу информационную базу.
  3. Зайдите в «Свойства».
  4. Проверьте флаг «Блокировка регламентных заданий включена». Если галочка стоит — снимите её.

Настройка пользователя для выполнения регламентного задания

В серверном режиме 1С не знает, в контексте какого пользователя выполнять код внешней обработки, если это не указано явно. Перейдите в раздел Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки. Откройте вашу обработку и перейдите к настройке расписания. Посмотрите внимательно на поле «Запускать от имени пользователя». Если оно пустое, выберите пользователя с административными правами. Без этой настройки сервер может просто игнорировать задание.

Безопасный режим и защита от опасных действий

Посмотрим на параметры регистрации в коде автора: ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);. Несмотря на этот программный код, при интерактивном добавлении обработки в справочник система может принудительно включить безопасный режим.

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

Также стоит проверить настройку «Защита от опасных действий» в Конфигураторе. Для пользователя, под которым запускается фоновое задание, эту защиту рекомендуется отключить, иначе система будет ждать интерактивного подтверждения запуска внешней обработки, которое невозможно в фоновом сеансе.

Как отладить «невидимую» ошибку?

Если вы всё проверили, но выгрузка по-прежнему не идет, воспользуемся методом принудительного логирования. Обернем основной код в блок Попытка...Исключение. Это позволит нам вытащить текст ошибки из недр сервера в Журнал регистрации.


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    Попытка
        ЗаписьЖурналаРегистрации("ВнешняяОбработка.Начало", УровеньЖурналаРегистрации.Информационный, , , "Запуск задания " + ИдентификаторКоманды);
        
        Если ИдентификаторКоманды = "ФоноваяХХХХ" Тогда
            ФоноваяЗагрузкаДокументов();
        КонецЕсли;
        
        ЗаписьЖурналаРегистрации("ВнешняяОбработка.Успех", УровеньЖурналаРегистрации.Информационный, , , "Задание успешно завершено");
    Исключение
        ТекстОшибки = ИнформацияОбОшибке().Описание;
        ЗаписьЖурналаРегистрации("ВнешняяОбработка.Ошибка", УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
    КонецПопытки;
КонецПроцедуры

Проанализируем этот код: мы добавили три точки записи в Журнал регистрации. Если после запуска задания в журнале не появилось даже записи "Начало", значит, проблема в настройках самой 1С (блокировка заданий, отсутствие пользователя или неверная сигнатура процедуры). Если появилась запись "Ошибка" — вы увидите конкретную причину, например: Ошибка доступа к файлу \\Comp33\... или Метод объекта не обнаружен.

Особенности использования «Универсального обмена данными XML»

В процедуре ФоноваяЗагрузкаДокументов автор обращается к обработке УниверсальныйОбменДаннымиXML. Помните, что эта обработка при работе на сервере ведет себя крайне чувствительно к коду внутри правил обмена. Если в ваших правилах (в обработчиках «Перед выгрузкой», «При выгрузке») есть вызовы клиентских функций, таких как Предупреждение(), Вопрос() или Сообщить(), выполнение на сервере прервется с ошибкой, так как на сервере нет пользовательского интерфейса.

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

Подводя итог, запуск по расписанию в серверном режиме требует гораздо более строгого отношения к правам доступа и контексту исполнения. Проверьте сигнатуру процедуры, права пользователя службы 1С на сетевые папки и наличие назначенных ответственных в справочнике дополнительных обработок — в 90% случаев решение кроется именно в этих моментах.

← На главную