Часто в практической работе разработчика 1С возникает задача автоматизировать рутинные действия: регулярный обмен данными, формирование и рассылку отчетов или выгрузку документов в текстовые файлы. Когда такой процесс работает вручную через кнопку на форме, переход на полностью автономный фоновый запуск требует понимания особенностей клиент-серверной архитектуры платформы 1С:Предприятие 8.3. Разберем по шагам, как правильно перенести алгоритм из формы обработки в регламентное задание и избежать распространенных ошибок.
Фоновые и регламентные задания всегда выполняются на стороне сервера 1С в неинтерактивном сеансе. Это означает, что процедура не имеет доступа к объектам графического интерфейса пользователя. В фоновом коде недопустимы вызовы методов Сообщить(), Предупреждение(), Вопрос(), а также обращение к элементам формы.
Для реализации логики создадим или используем существующий общий модуль:
РегламентныеПроцедурыЭкспорта).Посмотрим на пример правильной организации процедуры выгрузки данных за текущий период:
Процедура ВыполнитьЭкспортДанных() Экспорт
// Автоматический расчет границ периода выгрузки
ТекущийМомент = ТекущаяДатаСеанса();
НачалоПериода = НачалоМесяца(ТекущийМомент);
КонецПериода = ТекущийМомент;
// Формирование содержимого для выгрузки
ТекстовыйДокумент = Новый ТекстовыйДокумент;
// Пример наполнения данными из базы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстовыйДокумент.ДобавитьСтроку(Выборка.Артикул + ";" + Выборка.Наименование);
КонецЦикла;
// Сохранение файла по прямому пути на сервере
ПутьКФайлу = "\\server\files\export.txt";
Попытка
ТекстовыйДокумент.Записать(ПутьКФайлу, КодировкаТекста.ANSI);
Исключение
ЗаписьЖурналаРегистрации(
"ЭкспортДанных",
УровеньЖурналаРегистрации.Ошибка,
,
,
"Ошибка сохранения файла: " + ОписаниеОшибки()
);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Теперь свяжем написанный метод с механизмом расписания платформы:
ЭкспортДанныхПоРасписанию).РегламентныеПроцедурыЭкспорта.ВыполнитьЭкспортДанных.ЭкспортДанных). Это предотвратит параллельный запуск двух одинаковых заданий, если предыдущее еще не успело завершиться.Проанализируем распространенную ошибку, возникающую при записи файлов из фонового задания: Ошибка при вызове метода контекста (Записать). Причин такого сбоя обычно две:
ragent (сервер 1С) работает в изолированном сеансе операционной системы Windows. Смонтированные пользователем диски (например, S:\) службе 1С не видны. Всегда указывайте прямые UNC-пути вида \\server\share\file.txt либо локальные серверные пути (например, C:\files\export.txt).Если регламентное задание не срабатывает или завершается ошибкой, проверим следующие контрольные точки:
Если конфигурация типовая и находится на замке, удобнее не вносить изменения в метаданные, а оформить логику в виде внешней обработки, подключаемой через подсистему «Дополнительные отчеты и обработки» (БСП):
СведенияОВнешнейОбработке().ВызовСерверногоМетода.Посмотрим на шаблон функции описания для внешней обработки:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Наименование", "Автоматический экспорт данных");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
НоваяКоманда = Команды.Добавить();
НоваяКоманда.Идентификатор = "ВыгрузитьДанные";
НоваяКоманда.Представление = "Выполнить выгрузку по расписанию";
НоваяКоманда.Использование = "ВызовСерверногоМетода";
ПараметрыРегистрации.Вставить("Команды", Команды);
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "ВыгрузитьДанные" Тогда
// Вызов основной логики экспорта
КонецЕсли;
КонецПроцедуры
Такой подход позволяет обновлять типовую конфигурацию без снятия с поддержки и централизованно управлять расписанием выполнения задач через пользовательский режим.