Получение ссылки по бинарной строке PostgreSQL или MSSQL
Задачи пользователя - Поиск данных
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Получение ссылки 1С из бинарной строки в MSSQL не вызывает никаких трудностей. Как правило, 1С работает с такими данными в виде шестнадцатеричного представления (0xB485B1CFED3ECD854808658A53083ACA), что по сути является гуидом 1С, только немного перемешанными. Для преобразования можно написать самому несколько строк кода, либо воспользоваться одной из многих уже написанных обработок. Получить же ссылку из бинарной строки в PostgreSQL также не проблема. Вот только есть одна загвоздка: 1С с ней работает не в шестнадцатеричном представлении. Вот пример запроса из техжурнала, где установлен отбор по ссылке:
SELECT
T1._Q_000_F_000,
T1._Q_000_F_001RRef
FROM pg_temp.tt1 T1
WHERE (T1._Q_000_F_001RRef ='\\246\\014\\020''|\\322\\243D\\377\\347\\006\\035\\323\\347W'::bytea)
Если честно, не совсем понятно, для чего 1С использует такой формат записи, а не его шестнадцатеричный аналог (' \233~\\000PV\\240R\\036\\021\\355\\322\\244\\261\\274m\\220 '::bytea = \\x9b7e005056a0521e11edd2a4b1bc6d90), как в MSSQL. Ну что есть, то есть.
Предлагаемая обработка может получать ссылки по бинарной строке как из PostgreSQL, так и MSSQL. При поиске можно указать режим поиска по определенному типу метаданных, либо по всем типам метаданных. Кроме ссылочных типов метаданных поиск осуществляется еще и в перечислениях.
Т.к. теоретически в 1С могут быть одинаковые гуиды в различных типах метаданных, добавлен флаг «Не прекращать, если найден», при его установке поиск не будет прекращен при нахождении ссылки по полученному гуиду в следующем менеджере типа метаданных, а будет осуществлен во всех типах.
При написании обработки использована документация по типу bytea в PostgreSQL: https://postgrespro.ru/docs/postgresql/15/datatype-binary?lang=ru-en
Для использования обработки необходимо вставить бинарную строку из PostgreSQL или MSSQL в поле "бинарная строка", выбрать режим поиска ссылки (по всем метаданным, или по конкретному типу) и нажать кнопку "Получить". Если ссылка будет найдена, то будет заполнено поле Ссылка и справа от нее указан ее тип. Если ссылка не будет найдено, то поле Ссылка не будет заполнено, а справа от него будет выведено «Неопределенно». Если выбран режим поиска "По всем метаданным" и установлен флаг "Не прекращать если найден" и будет несколько ссылок разных типов метаданных, то они будут все показаны.
Обработка тестировалась на различных конфигурациях (ERP, Консолидация и самописной конфигурации) на платформе 8.3.21.1393.
Вступайте в нашу телеграмм-группу Инфостарт