Администрирование · 11 мин
Ключ регламентного задания в 1С: назначение и практическое применение
Зачем нужен ключ регламентного задания в 1С, как он связан с параметрами, как настроить задание в консоли и избежать конфликтов при выполнении.
Регламентные задания в 1С — это механизм автоматического выполнения процедур по расписанию: обмен данными, расчёт итогов, отправка уведомлений, очистка устаревших записей. У каждого задания есть стандартные свойства: наименование, расписание, имя метода, использование. Среди них есть поле «Ключ», которое многие администраторы и разработчики игнорируют, считая его необязательной формальностью. На практике именно ключ определяет, сможете ли вы управлять конкретным экземпляром задания и не запустится ли одна и та же процедура в нескольких копиях.
Проблема обычно обнаруживается поздно: в базе появляются два предопределённых задания с одинаковым методом, оба выполняются, данные обрабатываются дважды, а разобраться, какое задание «лишнее», сложно — наименования совпадают или отличаются незначительно. Ключ как раз и служит тем идентификатором, который позволяет отличить один экземпляр от другого и программно найти нужное задание.
Материал рассчитан на администраторов и разработчиков 1С, которые настраивают регламентные задания в клиент-серверном или файловом режиме и хотят понять, когда ключ обязателен, как его правильно задать и какие ошибки возникают при его игнорировании.
Что такое ключ регламентного задания и где он задаётся
Ключ — это строковое свойство объекта метаданных «РегламентноеЗадание» и соответствующего объекта менеджера заданий в информационной базе. Оно не влияет на логику выполнения метода и не передаётся в процедуру автоматически: это чисто служебный идентификатор для поиска и различения заданий.
Задать ключ можно в двух местах. В конфигураторе — в свойствах объекта метаданных «Регламентные задания», поле «Ключ». В пользовательском режиме — в консоли заданий (в типовых конфигурациях на БСП это «Администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания»), где у каждого задания также доступно поле ключа, если оно не заполнено на уровне метаданных.
Для предопределённых заданий (созданных в конфигураторе) ключ наследуется из метаданных и, как правило, недоступен для изменения в пользовательском режиме. Для непредопределённых заданий, создаваемых программно или через консоль, ключ можно указать произвольно.
Зачем нужен ключ: основные сценарии
Первый и главный сценарий — различение нескольких экземпляров одного задания. Представьте метод «ВыполнитьОбменДанными», который должен запускаться для трёх разных узлов обмена. Создаются три регламентных задания с одним методом, но разными параметрами (в параметрах — ссылка на узел). Без ключа все три задания внешне неотличимы, а программный поиск по методу вернёт массив, в котором непонятно, где какой экземпляр. Ключи «Обмен_Магазин1», «Обмен_Магазин2», «Обмен_Магазин3» решают задачу однозначно.
Второй сценарий — программное управление заданием. Через РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор) можно найти задание по ключу и изменить его расписание, включить или отключить. Это надёжнее, чем поиск по наименованию, которое пользователь с правами администратора может переименовать.
Третий сценарий — контроль уникальности при программном создании. Перед созданием нового задания код проверяет, существует ли задание с таким ключом, и не создаёт дубликат. Это стандартный приём в библиотеке стандартных подсистем при работе с заданиями, зависящими от функциональных опций.
Отбор = Новый Структура("Ключ", "Обмен_Магазин1");
Найденные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
Если Найденные.Количество() > 0 Тогда
Задание = Найденные[0];
Задание.Использование = Истина;
Задание.Записать();
КонецЕсли;Ключ и параметры: в чём разница
Частую путаницу вызывает вопрос: зачем ключ, если есть параметры? Разница принципиальна. Параметры — это массив значений, которые передаются в процедуру при выполнении задания и влияют на её работу. Ключ в процедуру не передаётся и на выполнение не влияет — он нужен только для идентификации самого задания.
Практическое следствие: если вам нужно, чтобы процедура «знала», для какого объекта она запущена, используйте параметры. Если нужно, чтобы администратор или код мог найти и управлять конкретным заданием — используйте ключ. В связанных сценариях применяются оба механизма одновременно: параметр несёт данные для выполнения, ключ обеспечивает адресуемость задания.
Ещё одно отличие — ограничения. Параметры должны быть сериализуемыми значениями (примитивные типы, ссылки), так как хранятся в базе. Ключ — просто строка разумной длины, никакой сериализации не требуется.
Ключ или параметры
Идентифицирует задание для поиска и управления. Не передаётся в процедуру, не влияет на выполнение. Подходит для различения экземпляров.
Передаются в процедуру при выполнении и определяют, что именно она обрабатывает. Не подходят для поиска задания через отбор.
Человекочитаемое имя для консоли заданий. Пользователь может его изменить, поэтому полагаться на него в коде нельзя.
Как задать ключ: пошаговые действия
Для задания, создаваемого в конфигураторе, откройте ветку «Общие — Регламентные задания», добавьте новое задание, заполните имя метода (общий модуль с флагом «Сервер» и экспортной процедурой) и укажите ключ в соответствующем поле свойств. Если задание предопределённое, ключ будет использоваться во всех базах с этой конфигурацией.
Для программного создания задания используйте метод РегламентныеЗадания.СоздатьРегламентноеЗадание(МетаданныеЗадания), затем заполните свойства, включая ключ, и вызовите Записать(). Перед созданием обязательно проверьте отбором, нет ли уже задания с таким ключом.
Для изменения ключа существующего непредопределённого задания в пользовательском режиме откройте консоль регламентных и фоновых заданий, найдите задание, откройте его карточку и заполните поле «Ключ». Учтите, что в типовых конфигурациях часть заданий заблокирована для редактирования, если они поставляются как предопределённые.
- 1Определите, будет ли по этому методу несколько экземпляров заданий — если нет, ключ можно оставить пустым
- 2Сформулируйте уникальное строковое значение ключа, отражающее назначение экземпляра
- 3Задайте ключ в конфигураторе или программно при создании задания
- 4Перед созданием нового задания проверьте отбором по ключу отсутствие дубликата
- 5Проверьте в консоли заданий, что задание создано, включено и выполняется без ошибок
Типичные ошибки и их последствия
Самая распространённая ошибка — дублирование предопределённых заданий. Она возникает, когда задание сначала создавалось вручную в базе, а затем в конфигурацию добавили предопределённое задание с тем же методом. В результате процедура выполняется дважды за цикл: двойная отправка писем, повторная выгрузка данных, конфликты блокировок. Ключ помогает быстро выявить такие пары, но лучше предотвращать ситуацию: при обновлении конфигурации проверяйте список заданий на дубли методов.
Вторая ошибка — поиск задания по наименованию в коде. Наименование доступно для редактирования, и после переименования код перестаёт находить задание, причём ошибка проявляется не сразу, а при ближайшем обращении. Поиск по ключу или по метаданным задания лишён этого недостатка.
Третья ошибка — использование одинаковых ключей для разных заданий. Платформа не запрещает это на уровне записи, но программный отбор вернёт несколько заданий, и логика, рассчитанная на единственный результат, сломается. Договоритесь о соглашении по именованию ключей: например, «ИмяМетода_Уточнение».
Как проверить, что задание настроено правильно
После настройки откройте консоль регламентных и фоновых заданий и убедитесь, что задание присутствует в единственном экземпляре, флаг использования установлен, расписание заполнено. Колонка «Состояние» и журнал регистрации покажут, выполняется ли задание без ошибок.
Для программной проверки выполните отбор по ключу и убедитесь, что возвращается ровно один объект. Если отбор вернул пустой массив — задание не создано или ключ не совпадает (проверьте регистр символов и пробелы). Если больше одного — есть дубли, которые нужно разрешить.
Полезно также проверить дату последнего выполнения и наличие ошибок в журнале регистрации по событию выполнения фоновых заданий. Задание может быть включено, но падать при каждом запуске — внешне это выглядит как «ничего не происходит».
Как проверить результат
Возвращается ровно одно задание
Пустой массив или несколько заданий
Задание одно, включено, расписание задано
Дубли с тем же методом или задание выключено
События выполнения без ошибок
Регулярные ошибки выполнения фонового задания
Данные обрабатываются один раз за цикл
Двойная отправка, повторная выгрузка, конфликты блокировок
Ограничения и когда ключ не нужен
Если по методу существует ровно одно задание и вы не планируете управлять им программно, ключ можно оставить пустым — платформа не требует его заполнения. Многие типовые предопределённые задания работают без ключа годами, и это нормально.
В файловом режиме работы регламентные задания выполняются через отдельный сеанс, запускаемый специальным параметром или через механизм ожидания в клиентском приложении; сам ключ на это не влияет, но поиск и управление заданиями работают одинаково в обоих режимах.
Учтите ограничение безопасности: метод регламентного задания должен находиться в серверном общем модуле, а изменение заданий требует права администрирования. Не давайте такие права рядовым пользователям ради «удобства настройки».
FAQ
Обязательно ли заполнять ключ у регламентного задания?
Нет, платформа не требует заполнения ключа. Он необходим, когда по одному методу существует несколько экземпляров заданий или когда нужно программно находить и изменять конкретное задание. Для одиночного задания без программного управления ключ можно не задавать.
Чем ключ отличается от наименования задания?
Наименование — человекочитаемое имя, которое администратор может свободно изменить в консоли заданий. Ключ — служебный идентификатор для программного отбора. В коде следует искать задания по ключу или метаданным, а не по наименованию.
Может ли быть два задания с одинаковым ключом?
Технически платформа не запрещает дубли ключей. Но отбор по такому ключу вернёт несколько объектов, и код, рассчитанный на единственное задание, будет работать некорректно. Договоритесь о правилах уникального именования ключей внутри проекта.
Почему в базе два одинаковых задания с одним методом?
Чаще всего задание создали вручную, а затем в конфигурацию добавили предопределённое задание с тем же методом — при обновлении появился дубль. Найдите оба задания, сравните параметры и расписания, отключите лишнее и после проверки удалите его.
Передаётся ли ключ в процедуру регламентного задания?
Нет. В процедуру передаются только значения из массива параметров задания. Если процедуре нужно знать контекст выполнения (например, узел обмена), передавайте его через параметры, а ключ используйте только для поиска и управления заданием.
Как программно найти задание по ключу?
Используйте РегламентныеЗадания.ПолучитьРегламентныеЗадания() со структурой отбора, где указано свойство «Ключ». Метод вернёт массив заданий; проверьте его количество, прежде чем обращаться к элементу. Для изменения задания отредактируйте свойства и вызовите метод Записать().
Что важно запомнить
Ключ регламентного задания — это строковый идентификатор для различения экземпляров заданий и их программного поиска. Он не передаётся в процедуру и не влияет на выполнение. Заполняйте ключ, когда по одному методу работает несколько заданий или нужно управлять заданием из кода, и всегда ищите задания по ключу, а не по наименованию.