В процессе работы с типовыми конфигурациями, такими как ЗУП 3.1 или ERP, часто возникает необходимость выгрузки данных во внешние системы. Ключевым полем для такой синхронизации обычно выступает не код или наименование (которые могут дублироваться), а Уникальный Идентификатор (GUID). Рассмотрим ситуацию, когда типовой отчет нас полностью устраивает по набору данных, но в него требуется добавить колонку с идентификатором ссылки, не прибегая к серьезному изменению конфигурации.
В рамках данной статьи мы проанализируем два основных подхода к решению этой задачи: использование встроенных функций компоновки данных в режиме конфигуратора и создание сложных пользовательских полей непосредственно в режиме «1С:Предприятие».
Если у нас есть возможность внести изменения в схему компоновки данных (через расширение конфигурации или изменив сам отчет), это самый надежный и быстрый с точки зрения производительности метод. Разберем его по шагам:
GUID_Сотрудника.
XMLСтрока(Сотрудник)
Функция XMLСтрока возвращает строковое представление ссылки в формате UUID. Важно помнить, что этот метод работает стабильно именно в контексте схемы компоновки данных. Однако у этого способа есть ограничение: он требует работы в конфигураторе. Если же отчет является типовым, а база находится на строгом замороженном сопровождении (или в облаке), нам придется искать способы решения задачи в пользовательском режиме.
Рассмотрим более сложную, но гибкую ситуацию: нам нужно вывести идентификатор прямо здесь и сейчас, используя только стандартные настройки отчета. В пользовательском режиме функция XMLСтрока зачастую недоступна напрямую в конструкторе выражений пользовательских полей. Здесь на помощь приходит использование навигационных ссылок.
Проанализируем структуру навигационной ссылки в 1С. Она содержит в себе идентификатор объекта, но в «перемешанном» виде (из-за разницы в порядке байтов в 1С и стандарте RFC). Чтобы получить привычный вид GUID (например, 550e8400-e29b-41d4-a716-446655440000), нам необходимо извлечь части строки и собрать их в правильной последовательности.
Выясним причину сложности формулы. Внутреннее хранение GUID в 1С отличается от текстового представления. Навигационная ссылка возвращает строку, в конце которой находится идентификатор. Нам нужно отсечь лишнее и переставить блоки символов местами.
Для создания такого поля в отчете выполним следующие действия:
ИмяПоля на ваше поле, например, Сотрудник):
Подстрока(Подстрока(ПолучитьНавигационнуюСсылку(ИмяПоля, ""), ДлинаСтроки(ПолучитьНавигационнуюСсылку(ИмяПоля, "")) - 31, 32), 25, 8)
+ "-"
+ Подстрока(Подстрока(ПолучитьНавигационнуюСсылку(ИмяПоля, ""), ДлинаСтроки(ПолучитьНавигационнуюСсылку(ИмяПоля, "")) - 31, 32), 21, 4)
+ "-"
+ Подстрока(Подстрока(ПолучитьНавигационнуюСсылку(ИмяПоля, ""), ДлинаСтроки(ПолучитьНавигационнуюСсылку(ИмяПоля, "")) - 31, 32), 17, 4)
+ "-"
+ Подстрока(Подстрока(ПолучитьНавигационнуюСсылку(ИмяПоля, ""), ДлинаСтроки(ПолучитьНавигационнуюСсылку(ИмяПоля, "")) - 31, 32), 1, 4)
+ "-"
+ Подстрока(Подстрока(ПолучитьНавигационнуюСсылку(ИмяПоля, "")) - 31, 32), 5, 12)
Разберем по шагам, что делает этот код:
ПолучитьНавигационнуюСсылку(ИмяПоля, "") — извлекает внутренний адрес объекта.ДлинаСтроки(...) - 31 — вычисляет позицию начала уникального идентификатора в этой ссылке.Подстрока(..., 32) — выделяет сам блок из 32 символов идентификатора.Подстрока с конкретными смещениями (25, 21, 17, 1, 5) занимаются тем, что меняют местами группы символов и добавляют разделители-дефисы для приведения GUID к каноническому виду.Рассмотрим подробнее, почему метод с навигационной ссылкой считается универсальным. Функция ПолучитьНавигационнуюСсылку является глобальной и доступна практически в любом контексте управляемого приложения. Это позволяет обходить ограничения на использование чисто программных методов (типа УникальныйИдентификатор()) в интерфейсе пользователя.
Важные моменты при использовании данного метода:
СправочникСсылка, ДокументСсылка), а не строкой или числом.Проанализируем ситуацию, когда GUID нужен только для разовой задачи. В этом случае использование сложной формулы в пользовательских полях — идеальный вариант, так как он не требует обновления конфигурации и снятия ее с поддержки. Если же задача регулярная, рекомендуем один раз внедрить поле через механизм Расширений, добавив вычисляемое поле со значением XMLСтрока(Ссылка). Это обеспечит максимальную стабильность и корректность данных.
Таким образом, мы посмотрели, как гибкость платформы 1С 8.3 позволяет решать технические задачи даже в условиях закрытого кода, предоставляя инструменты для манипуляции строковыми данными и метаданными объектов.