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