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

Разработка и Конфигурация · 11 мин

Как получить ключ записи регистра сведений в 1С

Как получить ключ записи регистра сведений в 1С: методы РегистрСведенийМенеджер, СоздатьКлючЗаписи, работа с навигационной ссылкой и типичные ошибки.

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

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

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

Что такое ключ записи и чем он отличается от ссылки

Записи регистров сведений не являются ссылочными объектами. У них нет уникального идентификатора ссылки, как у элемента справочника или документа. Вместо этого платформа использует объект типа РегистрСведенийКлючЗаписи, который содержит значения измерений (и периода для периодических регистров), однозначно определяющие запись.

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

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

Как получить ключ записи методом СоздатьКлючЗаписи

Основной способ — метод СоздатьКлючЗаписи() менеджера регистра сведений. Метод принимает структуру, где ключи — имена измерений (и «Период» для периодических регистров), а значения — соответствующие данные. Порядок и полнота значений должны точно соответствовать метаданным: если пропустить измерение, ключ будет указывать на несуществующую запись.

ЗначенияКлюча = Новый Структура;

ЗначенияКлюча.Вставить("Организация", ОрганизацияСсылка);

ЗначенияКлюча.Вставить("ФизическоеЛицо", ФизЛицоСсылка);

ЗначенияКлюча.Вставить("Период", Дата("20260101"));

КлючЗаписи = РегистрыСведений.ДанныеСотрудников.СоздатьКлючЗаписи(ЗначенияКлюча);

После создания ключ можно проверить: метод Выбран() ключа вернёт Истина, если запись с такими значениями измерений реально существует в базе. Это удобная проверка перед попыткой открыть форму или прочитать данные.

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

Как получить ключ из менеджера записи и набора записей

Ключ из объекта РегистрСведенийМенеджерЗаписи

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

Ключ записи в динамическом списке и форме списка

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

КлючТекущейЗаписи = Элементы.Список.ТекущаяСтрока;

Если КлючТекущейЗаписи <> Неопределено Тогда

НавСсылка = ПолучитьНавигационнуюСсылку(КлючТекущейЗаписи);

КонецЕсли;

Навигационная ссылка на запись регистра сведений

Навигационная ссылка позволяет открыть запись из письма, мессенджера или внешней системы. Она формируется функцией ПолучитьНавигационнуюСсылку(КлючЗаписи) и выглядит как строка вида e1cib/data/РегистрСведений.ИмяРегистра?... с параметрами измерений.

Обратная операция — получение ключа из навигационной ссылки — выполняется через ПолучитьНавигационнуюСсылкуИнформационнойБазы() не применяется; вместо этого ссылку разбирают в механизмах перехода по ссылкам (например, в расширении обработки ОткрытьОбъект или при интеграции через HTTP, где ссылка передаётся целиком и платформа сама разбирает её при переходе).

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

Маршрут решения

Как выбрать способ

Нужно открыть форму конкретной записи пользователюСоздайте ключ через СоздатьКлючЗаписи и вызовите ОткрытьЗначение(Ключ)
Нужно передать ссылку в письмо или чатИспользуйте ПолучитьНавигационнуюСсылку(КлючЗаписи)
Запись выбрана в форме спискаВозьмите готовый ключ из Элементы.Список.ТекущаяСтрока
Обмен между разными базамиПередавайте значения измерений и период, ключ создавайте на стороне приёмника

Открытие формы записи по ключу

Для интерактивного открытия записи используют ОткрытьЗначение(КлючЗаписи) — платформа сама определит нужную форму записи. Альтернатива — явное открытие формы с параметром «Ключ»:

ПараметрыФормы = Новый Структура("Ключ", КлючЗаписи);

ОткрытьФорму("РегистрСведений.ДанныеСотрудников.ФормаЗаписи", ПараметрыФормы);

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

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

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

Существование записи
Норма

КлючЗаписи.Выбран() возвращает Истина

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

Выбран() возвращает Ложь — запись с такими измерениями отсутствует

Открытие формы
Норма

Форма открывается с заполненными ресурсами записи

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

Форма открывается пустой в режиме новой записи

Навигационная ссылка
Норма

Переход по ссылке открывает нужную запись

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

Открывается список регистра или ошибка «Объект не найден»

Особенности периодических и подчинённых регистров

Для периодического регистра сведений ключ обязательно включает значение Период. Если период не указан или указан с другой точностью (например, запись хранится с точностью до секунды, а в ключ передана дата без времени), запись не будет найдена. Точность периода определяется свойством «Периодичность» регистра: для регистра «в пределах секунды» в ключ нужно передавать точное значение даты и времени.

Для регистра, подчинённого регистратору, идентификация записи выполняется по регистратору и номеру строки, а не по измерениям. Такие записи обычно не открывают по ключу напрямую — работают через документ-регистратор. Метод СоздатьКлючЗаписи() для подчинённых регистров требует структуру с полями «Регистратор» и «НомерСтроки».

Типичные ошибки
01
Пропуск измерения в структуре ключа — ключ указывает на несуществующую запись, форма открывается пустой
02
Неверная точность периода: передана дата без времени, а в регистре период хранится с секундами — запись не находится
03
Попытка использовать ключ записи как ссылку в запросе — ключ не является ссылочным типом
04
Сравнение ключей оператором равенства вместо сравнения значений измерений — результаты непредсказуемы
05
Получение ТекущаяСтрока из списка с группировкой — возвращается Неопределено или значение группировки

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

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

МенеджерЗаписи = РегистрыСведений.ДанныеСотрудников.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Организация = ОрганизацияСсылка;

МенеджерЗаписи.ФизическоеЛицо = ФизЛицоСсылка;

МенеджерЗаписи.Период = ДатаПериода;

МенеджерЗаписи.Прочитать();

Если МенеджерЗаписи.Выбран() Тогда

Должность = МенеджерЗаписи.Должность;

Иначе

// Записи нет — обработать ситуацию

КонецЕсли;

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

FAQ

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

Напрямую объект ключа запрос не возвращает, но запрос может выбрать значения измерений и периода, из которых ключ собирается методом СоздатьКлючЗаписи(). В динамических списках платформа формирует ключ автоматически — он доступен через ТекущаяСтрока элемента формы.

Почему СоздатьКлючЗаписи возвращает ключ, но запись не открывается?

Метод СоздатьКлючЗаписи не проверяет существование записи — он просто формирует объект ключа из переданных значений. Если значения измерений или период не совпадают с реальной записью, форма откроется в режиме создания. Проверяйте существование через КлючЗаписи.Выбран() перед открытием.

Как передать ключ записи между клиентом и сервером?

Ключ записи сериализуется платформой и может передаваться между клиентскими и серверными процедурами как параметр. Также его можно преобразовать в строку через ЗначениеВСтрокуВнутр() и восстановить обратно, что удобно для хранения в параметрах или передачи во внешние механизмы.

Чем ключ записи отличается от навигационной ссылки?

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

Работает ли СоздатьКлючЗаписи для регистра, подчинённого регистратору?

Да, но структура ключа другая: вместо измерений передаются поля «Регистратор» (ссылка на документ) и «НомерСтроки». На практике такие записи обычно редактируют через сам документ-регистратор, а не через форму записи регистра.

Как получить ключ записи в обработчике перед записью набора?

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

Итог

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

Ключ записи регистра сведений создаётся методом СоздатьКлючЗаписи() из структуры со значениями всех измерений и периода. Перед использованием проверяйте существование записи через Выбран(). Для открытия формы используйте ОткрытьЗначение() или ОткрытьФорму с параметром Ключ, для внешних ссылок — ПолучитьНавигационнуюСсылку(). В форме списка готовый ключ доступен через ТекущаяСтрока.