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

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

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

Что такое ключ реестра документов в 1С 8.3, как устроен ключ записи регистра «Реестр документов», где его найти, как получить программно и избежать типичных ошибок.

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

Путаница возникает потому, что под «ключом» разные специалисты понимают разное: уникальный идентификатор (GUID) самого документа, ключ записи регистра сведений или значение измерения «Ссылка» в регистре «Реестр документов». Все три понятия связаны, но не тождественны, и при программной доработке или разборе ошибок важно различать их, иначе легко обратиться не к тем данным.

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

Что такое регистр «Реестр документов» и зачем он нужен

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

Измерением регистра обычно выступает поле «Ссылка» составного типа — туда входят все виды документов, участвующие в реестре. Именно значение этого измерения и называют ключом записи реестра. Ресурсы регистра — организация, контрагент, дата, номер, сумма, валюта, признаки проведения и пометки удаления, статусы обмена.

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

Чем ключ реестра отличается от GUID документа

GUID (уникальный идентификатор) — это внутренний 128-битный идентификатор объекта базы, который платформа присваивает каждому документу при создании. Он не меняется при перенумерации, смене даты или переносе между базами при правильном обмене. Именно GUID гарантирует уникальность объекта физически.

Ключ записи реестра — это логическая ссылка на тот же документ внутри регистра. Ссылка «обёртывает» GUID вместе с типом документа, поэтому по ключу реестра можно программно получить и сам объект, и его GUID. На практике, когда говорят «ключ реестра документов», чаще всего имеют в виду именно ссылку-измерение, а не «сырой» GUID.

Разница важна при обменах: если документ попал в базу-копию с другим GUID (например, был создан заново, а не перенесён), ключ реестра будет указывать на другой объект, и связи «документ — запись реестра» разойдутся. Это типичный источник дублей в реестре.

Где посмотреть ключ реестра документов

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

Программно ключ и запись получают через менеджер регистра. Типовой приём — создать ключ записи по ссылке и прочитать данные:

bsl
КлючЗаписи = РегистрыСведений.РеестрДокументов.СоздатьКлючЗаписи(Новый Структура("Ссылка", ДокументСсылка));
МенеджерЗаписи = РегистрыСведений.РеестрДокументов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Ссылка = ДокументСсылка;
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
 Сообщить(МенеджерЗаписи.Организация);
КонецЕсли;

GUID документа при необходимости получают вызовом ДокументСсылка.УникальныйИдентификатор(). Обратная задача — найти ссылку по GUID из строки подключения или внешней системы — решается через Документы.ВидДокумента.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)).

Типовые ошибки, связанные с ключом реестра

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

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

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

Как исправить рассинхронизацию реестра

Безопасный порядок действий начинается с копии базы. Любые правки служебного регистра в рабочей базе без резервной копии — прямой риск потери данных, особенно если реестр участвует в обменах и ЭДО.

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

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

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

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

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

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

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

Количество записей реестра и документов
Норма

Совпадает по каждому виду документа

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

Есть документы без записей или записи без документов

Значение колонки «Ссылка» в реестре
Норма

Открывается реальный документ

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

Отображается «Объект не найден»

Повторное проведение документа
Норма

Проходит без сообщений об ошибке

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

Ошибка «Запись с такими ключевыми полями существует»

Когда ключ реестра нужен разработчику

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

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

Итог

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

Ключ реестра документов — это ссылка на документ, выступающая измерением регистра сведений «Реестр документов». Ошибки с ключом означают дубли или рассинхронизацию записей. Диагностируйте запросами, исправляйте перепроведением или аккуратным удалением осиротевших строк и всегда работайте на копии базы.

Частые вопросы

Ключ реестра документов и номер документа — это одно и то же?

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

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

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

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

Это «битая ссылка»: физически документ удалён из таблицы, а строка регистра осталась. Такое бывает после удаления внешними обработками, сбоев обмена или свёртки базы. Запись следует удалить, предварительно убедившись, что документ не нужен и не восстановим из архива.

Как найти документ, если известен только его GUID из внешней системы?

Используйте метод ПолучитьСсылку() менеджера конкретного вида документов, передав туда объект УникальныйИдентификатор, созданный из строки GUID. Если вид документа неизвестен, придётся перебрать виды документов, участвующие в обмене, и проверить существование ссылки методом ПолучитьОбъект() или запросом.

Влияет ли регистр «Реестр документов» на проведение и учётные итоги?

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