1С 8.3 Получить УИД в запросе — Программист 1С Минск. Автоматизация бизнеса.
ПРИМЕРЫ КОДА 1С
Перейти в раздел примеры кода 1С 8.3:
В версии платформы 1С 8.3.22 в язык запросов (и в язык выражений СКД) доблена функция УникальныйИдентификатор(Ссылка). Функция возвращает уникальный идентификатор переданной ссылки (или NULL, если передано значение NULL). П араметр Ссылка это выражение, результатом которого является ссылка (за исключением ссылок на таблицы внешних источников данных).
Получение Уникального ИДентификатора от ссылки в запросе в 1С 8.3:
&НаСервере
Процедура УИДвЗапросе ( ТЗ_МатериалыНаСкладе ) // Таблица значений
// Создание выборки
Запрос = Новый Запрос ( «ВЫБРАТЬ
| ТЗ_МатериалыНаСкладе.Наименование КАК НаименованиеEn,
| ТЗ_МатериалыНаСкладе.УникальныйИдентификатор КАК УникальныйИдентификатор
|ПОМЕСТИТЬ ВТ_МатериалыНаСкладе
|ИЗ
| &ТЗ_МатериалыНаСкладе КАК ТЗ_МатериалыНаСкладе
|;
|
|ВЫБРАТЬ
| Материалы.Код КАК Код,
| Материалы.Наименование КАК Наименование,
| ВТ_МатериалыНаСкладе.НаименованиеEn КАК НаименованиеEn
|ИЗ
| Справочник.Материалы КАК Материалы
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МатериалыНаСкладе КАК ВТ_МатериалыНаСкладе
| ПО УникальныйИдентификатор(Материалы.Ссылка) = ВТ_МатериалыНаСкладе.УникальныйИдентификатор» );
Запрос . УстановитьПараметр ( «ТЗ_МатериалыНаСкладе » , ТЗ_МатериалыНаСкладе );
РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить(«Данные отсутствуют!»);
КонецЕсли;
Получение Уникального ИДентификатора от битой ссылки в 1С 8.3:
&НаСервереБезКонтекста
Функция ПолучитьГУИДБитойССылкиНаСервере ( СсылкаНаОбъект ) // Вариант 1
Возврат XMLСтрока ( СсылкаНаОбъект );
&НаСервереБезКонтекста
Функция ПолучитьГУИДБитойССылкиЗапросомНаСервере ( СсылкаНаОбъект ) // Вариант 2 (запросом)
Запрос = Новый Запрос ;
Запрос . Текст = «ВЫБРАТЬ
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(&СсылкаНаОбъект) КАК ГУИД» ;
Запрос . УстановитьПараметр ( «СсылкаНаОбъект» , СсылкаНаОбъект );
РезультатЗапроса = Запрос . Выполнить ();
Записи = РезультатЗапроса . Выбрать ();
Если Записи . Следующий () Тогда
УИ = Записи . ГУИД ;
Иначе
УИ = XMLСтрока ( Справочники . Материалы . ПустаяСсылка ());
КонецЕсли;
Возврат XMLСтрока ( СсылкаНаОбъект );
&НаСервереБезКонтекста
Функция ПолучитьГУИДБитойССылки ( ГУИДОбъекта ) // Вариант 3 (самопис)
ГУИДСтр = СтрЗаменить ( ГУИДОбъекта , » (» , «» );
ГУИДСтр = СтрЗаменить ( ГУИДСтр , «)» , «» );
ГУИДСтр = СтрЗаменить ( ГУИДСтр , «0x» , «» );
ГУИДСтр = Сред ( ГУИДСтр , Найти ( ГУИДСтр , «:» )+ 1 , СтрДлина ( ГУИДСтр ));
// Преобразуем GUID
ГУИД = Сред ( ГУИДСтр , 25 , 8 )+ «-» + Сред ( ГУИДСтр , 21 , 4 )+ «-» + Сред ( ГУИДСтр , 17 , 4 )+ «-» + Сред ( ГУИДСтр , 1 , 4 )+ «-» + Сред ( ГУИДСтр , 5 , 12 );
Как получить уникальный идентификатор в запросе 1с
Программно можно добраться до уникального идентификатора так
А можно ли получить его в запросе SQL ?
Имелось ввиду в SQL запросе.
Это нужно при репликации с другой базой(не 1С).
По номеру и времени не предлагать, т.к. они могут изменится, а GUID не меняется.
нужно проверить есть ли документ с
GUID=»b2d33b65-7a92-11d9-b797-505054503030″ в базе.
Или это решается только добавлением в документы своих полей и последующее их использование?
(2) т.е. у тебя будет запрос к СУБД не из 1с, так?
(2) Поле _IDRRef
(4) Это если выбирать из родной скулевской таблицы.
Тогда другой вопрос.
Как узнать название таблицы РегистрБухгалтерии.Хозрасчетный?
Конфигурация БП 2.0.27.10
(6) См. справку по ПолучитьСтруктуруХраненияБазыДанных()
Я правильно понял, что средствами 1С получить ИЗ SQL запроса нельзя?
(8) Можно. Через СОМ. 🙂
(9) Через COM в SQL запросе?
(10) Язык запросов 1С не предоставляет доступа к полю _IDRRef, известному также как «Уникальный идентификатор». Через скульный запрос данное поле получить можно. В 1С создаем СОМ-коннектор к серверу баз данных. Для этого потребуется знать адрес сервера/имя сервера/имя пользователя/пароль/имя бд. Выполняем запрос, получаем результат. Короче, мечта проктолога. Потому и смайлик.
АДО, какой нафиг COM
(8) Можешь в самом запросе средствами SQL преобразовать binary в varchar. А потом из полученную строку средствами 1С составить УникальныйИдентификатор.
Только не могу понять — зачем тебе это надо?
(12) Что, такая большая разница? 🙂
> Microsoft’s ActiveX Data Objects (ADO) is a set of Component Object Model (COM) objects for accessing data sources.
Как получить уникальный идентификатор в запросе 1с
Сейчас приходится получать ссылки потом обходить результат запроса и получать уже уникальные идентификаторы, что не очень красиво и не очень производительно на больших выборках.
(9) Тебе запрос в любом случае придется обходить. Так что не вижу выйгрыша нигде.
(9)для накуа тебе уид?
Для передачи через веб сервис, если бы можно было получить в запросе то тогда СериализаторXDTO.ЗаписатьXDTO(Запрос.Выполнить().Выгрузить()) и все
(12)Не судьба. Придется пробегать выборку.
(12) Так у тя итак гуиды там будут
(14)сериализация ссылки и ее стрового гуида не одно и тоже
(10) Т. е. обходим результат запроса один раз — при обработке результата вызова веб-сервиса. Выигрыш в 2 раза.
(13) как бы этого избежать??
(16) Во напридумывал)) «выгрыш в 2 раза», ты замерь.
(18) Я имею в виду вместо необходимости 2 раза обходить таблицу значений, можно было бы ее обходить один раз. А если там тысячи строк?
(17) Хочешь в модуле объекта вычисляй УИД и тыкай его в отдельный реквизит, хочешь тож самое ток в регистр сведений, хош получай выборку (не выгружая) и обходи её заполняя свой XDTO объект (там эта функция которая гуид возвращает вообще почти ни че не делает)
Как получить уникальный идентификатор в запросе 1с
Загрузка. Пожалуйста, подождите.
Сообщение сайта
(Сообщение закроется через 2 секунды)
lensky —> lensky
Просмотр профиля
Найти сообщения пользователя
12.10.17, 10:15
Здравствуйте братье и сестры!
Помогите выцепить запросом УИД Контрагента. Вот сам собственно сам запрос ниже, а как вытащить УИД, я понятия не имею. Заранее спасибо!
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентами.Регистратор.Контрагент КАК РегистраторКонтрагент,
КонтактнаяИнформация.Объект.Ссылка,
КонтактнаяИнформация.Поле2,
КонтактнаяИнформация.Поле4,
КонтактнаяИнформация.Поле6,
КонтактнаяИнформация.Поле7
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
ПО КонтактнаяИнформация.Объект.Ссылка = ВзаиморасчетыСКонтрагентами.Регистратор.Контрагент.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
ПО КонтактнаяИнформация.Вид.Ссылка = ВидыКонтактнойИнформации.Ссылка
ГДЕ
ВзаиморасчетыСКонтрагентами.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВзаиморасчетыСКонтрагентами.Регистратор.Проведен
И ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
И КонтактнаяИнформация.Вид.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
ВзаиморасчетыСКонтрагентами.Регистратор.Контрагент,
КонтактнаяИнформация.Объект.Ссылка,
КонтактнаяИнформация.Поле2,
КонтактнаяИнформация.Поле4,
КонтактнаяИнформация.Поле6,
КонтактнаяИнформация.Поле7
УПОРЯДОЧИТЬ ПО
РегистраторКонтрагент
Сообщение отредактировал Vofka — 12.10.17, 12:20
Flexy —> Flexy
Просмотр профиля
Найти сообщения пользователя
12.10.17, 10:18
lensky @ Сегодня, 10:15 ,
В запросе — никак.
УИД = Выборка.Контрагент.УникальныйИдентификатор();
Сообщение отредактировал Flexy — 12.10.17, 10:33
Спасибо сказали: lensky,
lensky —> lensky
Просмотр профиля
Найти сообщения пользователя
12.10.17, 11:40
Flexy @ Сегодня, 11:18 ,
А как отобрать по данным КА из ТЗ (запрос выгружен в ТЗ) УИД и добавить отдельной колонкой. Прошу прощение за наглость, конечно, но я начинающий.
python —> python
Просмотр профиля
Найти сообщения пользователя
12.10.17, 11:51
lensky @ Сегодня, 12:40 ,
1. Добавить колонку в ТЗ
2. Обойти ТЗ в цикле и добавленную колонку заполнить значением.
Спасибо сказали: lensky,
Flexy —> Flexy
Просмотр профиля
Найти сообщения пользователя
12.10.17, 11:56
Цитата(lensky @ 12.10.17, 11:40)
А как отобрать по данным КА из ТЗ (запрос выгружен в ТЗ) УИД и добавить отдельной колонкой. Прошу прощение за наглость, конечно, но я начинающий.
Т = Запрос.Выполнить().Выгрузить();
Т.Колонки.Добавить("УИД");
Для Каждого Стр Из Т Цикл
Стр.УИД = Стр.Контрагент.УникальныйИдентификатор();
КонецЦикла;
Сообщение отредактировал Flexy — 12.10.17, 11:56
Спасибо сказали: lensky,
lensky —> lensky
Просмотр профиля
Найти сообщения пользователя
12.10.17, 13:04
Flexy @ Сегодня, 12:56 ,