Заметки из Зазеркалья

18.11.2021

Получение уникального идентификатора объекта из ссылки в запросе

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.22

По многочисленным просьбам в версии 8.3.22 в язык запросов и в язык выражений СКД добавится функция УникальныйИдентификатор(Ссылка). Параметр Ссылка -  выражение, результатом которого является ссылка (кроме ссылок на таблицы внешних источников данных). Функция возвращает уникальный идентификатор переданной ссылки или NULL, если передано значение NULL.

Это нововведение, в частности, упростит задачи интеграции систем на платформе 1С:Предприятие с внешними системами.

Рассмотрим пример. У нас есть интеграция с внешней системой на уровне данных – таблица внешней системы ссылается на справочник Товары в нашей инфобазе.

Структура таблицы внешней системы:

 Идентификатор  Ключ (число)
 Наименование  Название товара на английском языке (строка)
 УникальныйИдентификатор  Ссылка на элемент справочника Товары (уникальный идентификатор)

Нам нужно на стороне 1С вывести содержимое справочника Товары и для каждого товара показать его название на английском языке.

Предположим, мы получили содержимое внешней таблицы в виде таблицы значений (через веб-сервис или внешний источник данных или ещё каким-то образом).

Сейчас связать записи внешней таблицы (лежащие в таблице значений) с элементами справочника Товары можно так:

  1. Добавить в таблицу значений колонку, которую надо заполнить ссылкой на элементы справочника Товары, обойдя все записи таблицы значений в цикле.
  2. Полученную таблицу значений с помощью запроса объединить со справочником Товары.

В версии 8.3.22 это можно будет сделать гораздо проще.

Проиллюстрируем это кодом. Содержимое внешней таблицы помещено в таблицу значений ТЗ_ТоварыВнешняя.

­

   Запрос.Текст =

­

   "ВЫБРАТЬ

­

   | ТЗ_ТоварыВнешняя.Наименование КАК НаименованиеEn,

­

   | ТЗ_ТоварыВнешняя.УникальныйИдентификатор КАК УникальныйИдентификатор

­

   |ПОМЕСТИТЬ ВТ_ТоварыВнешняя

­

   |ИЗ

­

   | &ТЗ_ТоварыВнешняя КАК ТЗ_ТоварыВнешняя

­

   |;

­

   |

­

   |ВЫБРАТЬ

­

   | Товары.Код КАК Код,

­

   | Товары.Наименование КАК Наименование,

­

   | ВТ_ТоварыВнешняя.НаименованиеEn КАК НаименованиеEn

­

   |ИЗ

­

   | Справочник.Товары КАК Товары

­

   | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТоварыВнешняя КАК ВТ_ТоварыВнешняя

­

   | ПО УникальныйИдентификатор(Товары.Ссылка) = ВТ_ТоварыВнешняя.УникальныйИдентификатор

­

   |";

­

­

   Запрос.УстановитьПараметр("ТЗ_ТоварыВнешняя ", ТЗ_ТоварыВнешняя);

­

   Данные = Запрос.Выполнить().Выбрать();

­

Теги: 8.3.22  запросы 

Рассказать друзьям: