К статье
Практический материал

Администрирование · 11 мин

Ключ регламентного задания в 1С: назначение и практическое применение

Зачем нужен ключ регламентного задания в 1С, как он связан с параметрами, как настроить задание в консоли и избежать конфликтов при выполнении.

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

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

Материал рассчитан на администраторов и разработчиков 1С, которые настраивают регламентные задания в клиент-серверном или файловом режиме и хотят понять, когда ключ обязателен, как его правильно задать и какие ошибки возникают при его игнорировании.

Что такое ключ регламентного задания и где он задаётся

Ключ — это строковое свойство объекта метаданных «РегламентноеЗадание» и соответствующего объекта менеджера заданий в информационной базе. Оно не влияет на логику выполнения метода и не передаётся в процедуру автоматически: это чисто служебный идентификатор для поиска и различения заданий.

Задать ключ можно в двух местах. В конфигураторе — в свойствах объекта метаданных «Регламентные задания», поле «Ключ». В пользовательском режиме — в консоли заданий (в типовых конфигурациях на БСП это «Администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания»), где у каждого задания также доступно поле ключа, если оно не заполнено на уровне метаданных.

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

Зачем нужен ключ: основные сценарии

Первый и главный сценарий — различение нескольких экземпляров одного задания. Представьте метод «ВыполнитьОбменДанными», который должен запускаться для трёх разных узлов обмена. Создаются три регламентных задания с одним методом, но разными параметрами (в параметрах — ссылка на узел). Без ключа все три задания внешне неотличимы, а программный поиск по методу вернёт массив, в котором непонятно, где какой экземпляр. Ключи «Обмен_Магазин1», «Обмен_Магазин2», «Обмен_Магазин3» решают задачу однозначно.

Второй сценарий — программное управление заданием. Через РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор) можно найти задание по ключу и изменить его расписание, включить или отключить. Это надёжнее, чем поиск по наименованию, которое пользователь с правами администратора может переименовать.

Третий сценарий — контроль уникальности при программном создании. Перед созданием нового задания код проверяет, существует ли задание с таким ключом, и не создаёт дубликат. Это стандартный приём в библиотеке стандартных подсистем при работе с заданиями, зависящими от функциональных опций.

bsl
Отбор = Новый Структура("Ключ", "Обмен_Магазин1");
Найденные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
Если Найденные.Количество() > 0 Тогда
    Задание = Найденные[0];
    Задание.Использование = Истина;
    Задание.Записать();
КонецЕсли;

Ключ и параметры: в чём разница

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

Практическое следствие: если вам нужно, чтобы процедура «знала», для какого объекта она запущена, используйте параметры. Если нужно, чтобы администратор или код мог найти и управлять конкретным заданием — используйте ключ. В связанных сценариях применяются оба механизма одновременно: параметр несёт данные для выполнения, ключ обеспечивает адресуемость задания.

Ещё одно отличие — ограничения. Параметры должны быть сериализуемыми значениями (примитивные типы, ссылки), так как хранятся в базе. Ключ — просто строка разумной длины, никакой сериализации не требуется.

Ключ или параметры

Ключ

Идентифицирует задание для поиска и управления. Не передаётся в процедуру, не влияет на выполнение. Подходит для различения экземпляров.

Параметры

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

Наименование

Человекочитаемое имя для консоли заданий. Пользователь может его изменить, поэтому полагаться на него в коде нельзя.

Как задать ключ: пошаговые действия

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

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

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

Порядок настройки задания с ключом
  1. 1
    Определите, будет ли по этому методу несколько экземпляров заданий — если нет, ключ можно оставить пустым
  2. 2
    Сформулируйте уникальное строковое значение ключа, отражающее назначение экземпляра
  3. 3
    Задайте ключ в конфигураторе или программно при создании задания
  4. 4
    Перед созданием нового задания проверьте отбором по ключу отсутствие дубликата
  5. 5
    Проверьте в консоли заданий, что задание создано, включено и выполняется без ошибок

Типичные ошибки и их последствия

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

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

Третья ошибка — использование одинаковых ключей для разных заданий. Платформа не запрещает это на уровне записи, но программный отбор вернёт несколько заданий, и логика, рассчитанная на единственный результат, сломается. Договоритесь о соглашении по именованию ключей: например, «ИмяМетода_Уточнение».

Типичные ошибки с ключами заданий
01
Дубли предопределённых и ручных заданий с одним методом — процедура выполняется дважды, данные обрабатываются повторно
02
Поиск задания по наименованию вместо ключа — код ломается после переименования задания администратором
03
Одинаковые ключи у разных заданий — отбор возвращает несколько объектов, логика управления сбоит
04
Ключ задан, но нигде не используется — ложное ощущение контроля, поиск всё равно ведётся по наименованию

Как проверить, что задание настроено правильно

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

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

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

Контрольные точки

Как проверить результат

Отбор по ключу в коде
Норма

Возвращается ровно одно задание

Тревожный признак

Пустой массив или несколько заданий

Консоль заданий
Норма

Задание одно, включено, расписание задано

Тревожный признак

Дубли с тем же методом или задание выключено

Журнал регистрации
Норма

События выполнения без ошибок

Тревожный признак

Регулярные ошибки выполнения фонового задания

Предметный результат
Норма

Данные обрабатываются один раз за цикл

Тревожный признак

Двойная отправка, повторная выгрузка, конфликты блокировок

Ограничения и когда ключ не нужен

Если по методу существует ровно одно задание и вы не планируете управлять им программно, ключ можно оставить пустым — платформа не требует его заполнения. Многие типовые предопределённые задания работают без ключа годами, и это нормально.

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

Учтите ограничение безопасности: метод регламентного задания должен находиться в серверном общем модуле, а изменение заданий требует права администрирования. Не давайте такие права рядовым пользователям ради «удобства настройки».

FAQ

Обязательно ли заполнять ключ у регламентного задания?

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

Чем ключ отличается от наименования задания?

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

Может ли быть два задания с одинаковым ключом?

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

Почему в базе два одинаковых задания с одним методом?

Чаще всего задание создали вручную, а затем в конфигурацию добавили предопределённое задание с тем же методом — при обновлении появился дубль. Найдите оба задания, сравните параметры и расписания, отключите лишнее и после проверки удалите его.

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

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

Как программно найти задание по ключу?

Используйте РегламентныеЗадания.ПолучитьРегламентныеЗадания() со структурой отбора, где указано свойство «Ключ». Метод вернёт массив заданий; проверьте его количество, прежде чем обращаться к элементу. Для изменения задания отредактируйте свойства и вызовите метод Записать().

Итог

Что важно запомнить

Ключ регламентного задания — это строковый идентификатор для различения экземпляров заданий и их программного поиска. Он не передаётся в процедуру и не влияет на выполнение. Заполняйте ключ, когда по одному методу работает несколько заданий или нужно управлять заданием из кода, и всегда ищите задания по ключу, а не по наименованию.