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

В этой статье мы разберем все актуальные способы передачи параметров в регламентные задания 1С 8.3 и 8.2, включая нюансы работы с фоновыми заданиями, общие модули и внешние обработки. Особое внимание уделим типичным ошибкам, которые приводят к падению заданий или игнорированию переданных значений. Материал будет полезен как начинающим разработчикам, так и опытным программистам, столкнувшимся с нестандартными сценариями.

1. Базовые понятия: что такое параметры регламентного задания

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

  • 📅 Изменяется со временем (например, текущая дата или период обработки)
  • 🔄 Зависит от внешних условий (идентификаторы документов, статусы объектов)
  • ⚙️ Настраивается пользователем (флаги включения/отключения функций, пороги срабатывания)
  • 🔗 Связана с другими системами (токены API, адреса серверов)

Без параметров регламентное задание было бы статичным — например, всегда обрабатывало бы данные за один и тот же период или отправляло бы уведомления одному и тому же получателю. Передача параметров позволяет:

  • 🔄 Динамически настраивать логику выполнения задания без изменения кода
  • 📊 Обрабатывать разные наборы данных в одном и том же задании
  • 🛠️ Упрощать отладку за счет возможности передачи тестовых значений
⚠️ Внимание: В 1С 8.2 и 8.3 механизм передачи параметров принципиально не отличается, но в 8.3.14+ появилась поддержка Структура как типа параметра, что упрощает работу со сложными данными. Если вы используете старую версию, проверьте совместимость типов в документации.

Параметры могут быть:

  • 🔢 Простыми (число, строка, дата, булево значение)
  • 📦 Составными (массив, структура, соответствие)
  • 🔗 Ссылками на объекты (документы, справочники, регистры)
📊 Какой тип параметров вы чаще передаете в регламентные задания?
Простые (дата, число, строка)
Составные (массивы, структуры)
Ссылки на объекты 1С
Не передаю параметры

2. Способ 1: Передача параметров через конструктор заданий

Самый простой способ — использовать встроенный конструктор регламентных заданий в конфигураторе. Он доступен в меню Общие → Регламентные задания и позволяет задавать параметры без написания кода. Этот метод подходит для:

  • 🔹 Быстрой настройки стандартных обработок
  • 🔹 Передачи простых параметров (дата, число, строка)
  • 🔹 Создания заданий без привлечения программиста

Алгоритм действий:

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

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

Имя параметра: ДатаОбработки

Тип: Дата

Значение по умолчанию: ТекущаяДата()

⚠️ Внимание: Если вы укажете значение параметра в конструкторе, оно будет зафиксировано на момент создания задания. Чтобы передавать актуальные данные при каждом запуске, значение должно устанавливаться программно (см. следующие способы).

Преимущества метода:

  • ✅ Не требует знания языка
  • ✅ Быстро настраивается
  • ✅ Подходит для простых сценариев

Недостатки:

  • ❌ Ограниченный набор типов параметров
  • ❌ Невозможно передавать сложные структуры данных
  • ❌ Значения фиксируются при создании задания
💡

Конструктор регламентных заданий подходит только для передачи статических параметров или значений по умолчанию. Для динамической передачи данных используйте программные методы.

3. Способ 2: Программная передача параметров при создании задания

Если параметры должны динамически изменяться при каждом запуске задания (например, текущая дата или идентификаторы новых документов), их нужно передавать программно. Для этого используется метод ПараметрыЗадания объекта РегламентноеЗадание.

Пример кода для создания задания с передачей параметров:

// Создаем новое регламентное задание

Задание = РегламентныеЗадания.СоздатьЗадание(

Новый ОписаниеТипов("КаталогОбъектов.МодульОбменаДанными.ВыполнитьОбмен"),

Ложь, // Не фоновое

Истина // ИспользоватьПривилегированныйРежим

);

// Устанавливаем параметры

Параметры = Новый Структура();

Параметры.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));

Параметры.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));

Параметры.Вставить("ТолькоНовые", Истина);

Задание.ПараметрыЗадания = Параметры;

// Настраиваем расписание

Расписание = РегламентныеЗадания.Расписание.СоздатьЕжедневное();

Расписание.ВремяНачала = Время(2, 0, 0); // Каждый день в 2:00

Задание.Расписание = Расписание;

// Сохраняем задание

Задание.Записать();

Ключевые моменты:

  • 🔹 Параметры передаются в виде Структуры, где ключ — имя параметра, значение — его содержимое.
  • 🔹 Типы данных должны соответствовать ожидаемым в обработчике задания (например, если в коде ожидается Дата, не передавайте строку).
  • 🔹 Для фоновых заданий (Истина в втором параметре СоздатьЗадание) доступны не все типы параметров.

Если задание уже существует, его параметры можно обновить:

Задание = РегламентныеЗадания.НайтиПоИмени("ОбменДаннымиС1СБухгалтерия");

Если Задание <> Неопределено Тогда

Параметры = Задание.ПараметрыЗадания;

Параметры.ДатаОкончания = КонецМесяца(ТекущаяДата());

Задание.ПараметрыЗадания = Параметры;

Задание.Записать();

КонецЕсли;

⚠️ Внимание: При изменении параметров существующего задания оно не перезапускается автоматически. Текущие изменения применятся только при следующем запуске по расписанию. Чтобы применить параметры немедленно, используйте метод Выполнить():

Задание.Выполнить(Истина); // Истина - выполнить синхронно

Таблица совместимости типов параметров:

Тип параметра Поддержка в 8.2 Поддержка в 8.3 Примечания
Число Включая Число(10,2)
Строка Ограничение по длине — 2000 символов
Дата
Булево Передается как Истина/Ложь
Структура ✅ (с 8.3.14) В 8.2 передавайте как строку JSON

Имя задания уникально и не содержит пробелов|

Типы параметров совпадают с ожидаемыми в обработчике|

Для дат используется формат Дата, а не строка|

Параметры с ссылками на объекты сериализуются корректно|

Расписание задания не конфликтует с другими фоновыми процессами-->

4. Способ 3: Использование общих модулей для хранения параметров

Если параметры должны быть доступны нескольким регламентным заданиям или требуется их централизованное управление, удобно хранить их в общем модуле с свойством Глобальный. Этот подход позволяет:

  • 🔹 Избегать дублирования кода
  • 🔹 Легко обновлять параметры без изменения каждого задания
  • 🔹 Контролировать доступ к параметрам через права

Пример реализации:

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

Перем мНастройкиОбмена Экспорт;

// Функция для инициализации параметров

Процедура УстановитьПараметрыОбмена(ДатаНачала, Настройки) Экспорт

мДатаПоследнегоОбмена = ДатаНачала;

мНастройкиОбмена = Настройки;

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

// Функция для получения параметров

Функция ПолучитьПараметрыОбмена() Экспорт

Возврат Новый Структура("Дата, Настройки", мДатаПоследнегоОбмена, мНастройкиОбмена);

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

В обработчике регламентного задания обращайтесь к параметрам через модуль:

Процедура ВыполнитьОбмен() Экспорт

Параметры = ПараметрыРегламентныхЗаданий.ПолучитьПараметрыОбмена();

ДатаНачала = Параметры.Дата;

// Далее логика обмена

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

Преимущества метода:

  • ✅ Централизованное управление параметрами
  • ✅ Возможность валидации данных перед использованием
  • ✅ Легкая модификация без изменения кода заданий

Недостатки:

  • ❌ Требует дисциплины при обновлении параметров
  • ❌ При некорректной модификации модуля могут упасть все зависящие задания
⚠️ Внимание: Если общий модуль используется в фоновых заданиях, убедитесь, что он не содержит обращений к интерактивным элементам (сообщениям, диалогам). Это приведет к ошибке выполнения. Для отладки используйте запись в ЖурналРегистрации.
Как избежать конфликтов при одновременном доступе к общим параметрам?

Если несколько регламентных заданий одновременно обращаются к общим параметрам в модуле, возможны конфликты данных. Чтобы этого избежать:

1. Используйте БлокировкаДанных для критических секций.

2. Реализуйте механизм версионирования параметров (например, добавляйте метку времени при изменении).

3. Для часто изменяемых параметров рассмотрите хранение в РегистреСведений вместо переменных модуля.

5. Способ 4: Передача параметров через внешние обработки

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

  • 🔹 Параметры командной строки (для запуска извне)
  • 🔹 Глобальные переменные (через общий модуль)
  • 🔹 Файлы настроек (JSON, XML, INI)

Пример передачи параметров через командную строку (актуально для запуска из планировщика Windows или cron):

// Командная строка для запуска 1С с передачей параметров

"C:\Program Files\1cv8\8.3.20.1500\bin\1cv8.exe" DESIGNER /Execute "C:\jobs\ОбменДанными.epf" /C "ДатаНачала=20260101;ПолныйОбмен=1"

Во внешней обработке параметры парсятся из командной строки:

Процедура ПриНачалеРаботыСистемы()

КоманднаяСтрока = КоманднаяСтрокаПриложения();

Если НЕ КоманднаяСтрока = "" Тогда

Параметры = РазложитьПараметрыКоманднойСтроки(КоманднаяСтрока);

ДатаНачала = Дата(Параметры.ДатаНачала);

ПолныйОбмен = Параметры.ПолныйОбмен = "1";

КонецЕсли;

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

Функция РазложитьПараметрыКоманднойСтроки(Строка)

Результат = Новый Структура();

Для Каждого Часть Из СтроковыеФункцииКлиентСервер.РазделитьСтроку(Строка, ";") Цикл

Пара = СтроковыеФункцииКлиентСервер.РазделитьСтроку(Часть, "=");

Если Пара.Количество() = 2 Тогда

Результат.Вставить(Пара[0], Пара[1]);

КонецЕсли;

КонецЦикла;

Возврат Результат;

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

Для передачи параметров из регламентного задания 1С во внешнюю обработку:

  1. Сохраните параметры в Структуре.
  2. Сериализуйте их в строку (например, JSON).
  3. Передайте строку как параметр задания.
  4. В обработке десериализуйте строку обратно в структуру.

Пример сериализации/десериализации:

// В регламентном задании (перед вызовом обработки)

Параметры = Новый Структура();

Параметры.Вставить("Дата", ТекущаяДата());

Параметры.Вставить("Фильтр", Новый Структура("ТолькоАктивные, Лимит", Истина, 1000));

СтрокаПараметров = ЗаписатьJSON(Параметры);

// В обработке

Параметры = ПрочитатьJSON(СтрокаПараметров);

⚠️ Внимание: При использовании JSON убедитесь, что в подключена библиотека для работы с этим форматом (например, ПомощникРаботыСJSON из 1С:Библиотеки стандартных подсистем или сторонние решения). В базовых поставках 1С 8.2 JSON не поддерживается.
ЗаписатьТекст("C:\temp\debug.log", "Полученные параметры: " + СтрокаПараметров);

-->

6. Способ 5: Использование регистров сведений для хранения параметров

Для сложных сценариев, где параметры должны:

  • 🔹 Храниться в базе данных (а не в памяти)
  • 🔹 Иметь историю изменений
  • 🔹 Быть доступными для анализа (например, через отчеты)

уместно использовать регистры сведений. Это особенно актуально для распределенных систем, где параметры могут изменяться из разных мест.

Пример структуры регистра сведений ПараметрыРегламентныхЗаданий:

Измерение Ресурс Пример значения
ИмяЗадания (строка, 100) Параметры (строка, неограниченная) {"Дата":"2026-01-01","Лимит":1000}
ИмяПараметра (строка, 50) Значение (произвольный тип) 20260101 (для параметра "Дата")

Код для записи параметров в регистр:

Процедура СохранитьПараметрыЗадания(ИмяЗадания, Параметры)

Запись = РегистрыСведений.ПараметрыРегламентныхЗаданий.СоздатьМенеджерЗаписи();

Запись.ИмяЗадания = ИмяЗадания;

Запись.Параметры = ЗаписатьJSON(Параметры);

Запись.Записать();

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

Чтение параметров в обработчике задания:

Функция ПолучитьПараметрыЗадания(ИмяЗадания)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПараметрыРегламентныхЗаданий.Параметры КАК Параметры

|ИЗ

| РегистрСведений.ПараметрыРегламентныхЗаданий КАК ПараметрыРегламентныхЗаданий

|ГДЕ

| ПараметрыРегламентныхЗаданий.ИмяЗадания = &ИмяЗадания";

Запрос.УстановитьПараметр("ИмяЗадания", ИмяЗадания);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Возврат Неопределено;

Иначе

Возврат ПрочитатьJSON(Результат[0].Параметры);

КонецЕсли;

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

Преимущества метода:

  • ✅ Надежное хранение (данные не теряются при перезапуске сервера)
  • ✅ Возможность аудита изменений
  • ✅ Гибкость в управлении параметрами (можно добавлять новые без изменения структуры)

Недостатки:

  • ❌ Более сложная реализация по сравнению с другими методами
  • ❌ Требует дополнительных запросов к базе данных
💡

Регистры сведений оптимальны для хранения параметров, которые изменяются редко, но должны быть надежно сохранены и доступны для анализа. Для часто изменяемых данных рассмотрите использование общих модулей или переменных сеанса.

7. Типичные ошибки и их решения

При передаче параметров в регламентные задания разработчики часто сталкиваются с типичными проблемами. Вот самые распространенные из них и способы их решения:

1. Параметры не передаются в обработчик задания

  • 🔹 Причина: Несовпадение имен параметров в задании и обработчике.
  • 🔹 Решение: Проверьте регистр символов и точное написание имен. В параметры чувствительны к регистру!

2. Ошибка "Неверный тип параметра"

  • 🔹 Причина: Передается строка вместо даты или число вместо булевого значения.
  • 🔹 Решение: Преобразуйте типы явно:
    ДатаНачала = Дата(Параметры.ДатаНачала); // Преобразование строки в дату

3. Фоновое задание не видит глобальные переменные

  • 🔹 Причина: Фоновые задания выполняются в отдельном сеансе, где глобальные переменные не инициализированы.
  • 🔹 Решение: Передавайте все необходимые данные через параметры задания или хранилище (регистр сведений).

4. Параметры теряются после обновления конфигурации

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

5. Задание выполняется дольше обычного или зависает

  • 🔹 Причина: Передача больших объемов данных в параметрах (например, массивы с тысячами элементов).
  • 🔹 Решение: Передавайте только идентификаторы или фильтры, а данные загружайте непосредственно в обработчике.
⚠️ Внимание: В 1С:Предприятие 8.3.20+ появилось ограничение на размер параметров регламентных заданий — не более 1 МБ на одно задание. При превышении лимита задание не будет создано или выполнено. Для передачи больших данных используйте внешние файлы или базу данных.

8. FAQ: Ответы на частые вопросы

Можно ли передавать в регламентное задание ссылку на документ?

Да, но с оговорками:

  • 🔹 В 1С 8.3 ссылку можно передавать напрямую, если задание выполняется в том же сеансе или в сеансе с доступом к базе.
  • 🔹 В фоновых заданиях передавайте УникальныйИдентификатор объекта, а в обработчике восстанавливайте ссылку через СсылкаНаОбъект = Объект.ПолучитьСсылку(Новый УникальныйИдентификатор(Ид)).
  • 🔹 Для распределенных баз убедитесь, что объект доступен в текущем узле.
Как передать массив данных в регламентное задание?

Варианты передачи массивов:

  • 🔹 В 1С 8.3.14+: передавайте массив напрямую через Структуру (например, Параметры.Вставить("СписокID", МассивID)).
  • 🔹 В 1С 8.2: сериализуйте массив в строку (например, через СтрСоединить с разделителем) и десериализуйте в обработчике.
  • 🔹 Для больших массивов: сохраняйте данные во временную таблицу базы и передавайте только идентификатор записи.

Пример для 1С 8.2:

// Передача

Параметры.Вставить("СписокID", СтрСоединить(МассивID, "|"));

// Получение

МассивID = СтроковыеФункцииКлиентСервер.РазделитьСтроку(Параметры.СписокID, "|");

Почему параметры не обновляются при изменении в коде?

Возможные причины:

  • 🔹 Задание уже запущено и использует старые параметры. Перезапустите его вручную или дождитесь следующего выполнения по расписанию.
  • 🔹 Параметры изменяются в другом сеансе. Для фоновых заданий используйте РегламентныеЗадания.ОбновитьПараметры().
  • 🔹 Ошибка в коде обновления. Проверьте, что вы вызываете Задание.Записать() после изменения параметров.

Для принудительного обновления:

Задание = РегламентныеЗадания.НайтиПоИмени("МоеЗадание");

Задание.ПараметрыЗадания.Дата = ТекущаяДата();

Задание.Записать();

Задание.Выполнить(Истина); // Немедленный запуск

Как передать параметры в фоновое задание?

Фоновые задания имеют ограничения:

  • 🔹 Не поддерживают передачу Ссылок и некоторых сложных типов.
  • 🔹 Параметры должны быть сериализуемы (преобразуемы в строку).

Рекомендации:

  • 🔹 Передавайте только простые типы: числа, строки, даты, булевы значения.
  • 🔹 Для сложных данных используйте ЗаписатьJSON/ПрочитатьJSON.
  • 🔹 Избегайте циклических ссылок в структурах.

Пример:

Параметры = Новый Структура();

Параметры.Вставить("Настройки", ЗаписатьJSON(СложныеНастройки));

ФоновоеЗадание = РегламентныеЗадания.