![]() |
![]() |
![]() |
|
Интеграция с Документооборот. Зачем нужен запрос? | ☑ | ||
---|---|---|---|---|
0
aleks_default
25.12.19
✎
14:40
|
В типовой ERP такой код:
Для Каждого ВнешнийОбъект Из ВнешниеОбъекты Цикл Попытка Ссылка = СсылкаИзUUID(ВнешнийОбъект.type, ВнешнийОбъект.id); Исключение // Тип объекта не найден в текущей конфигурации. Продолжить; КонецПопытки; Если Ссылка = Неопределено Тогда Продолжить; КонецЕсли; Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | Ссылка |ИЗ " + ВнешнийОбъект.type + " |ГДЕ | Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Результат.Добавить(Ссылка); КонецЕсли; КонецЦикла; Вопрос. Зачем тут нужен проверочный запрос, если функция СсылкаИзUUID() итак уже либо получит ссылку либо вернет неопределено? |
|||
1
aleks_default
25.12.19
✎
14:49
|
Вот текст этой типовой функции, если вдруг у кого-то нет ERP
//Получает ссылку на объект по имени объекта конфигурации и ID. //Параметры: // РеквизитТип - строка типа объекта конфигурации // РеквизитID - строка идентификатора объекта конфигурации Функция СсылкаИзUUID(Тип, UUID) Экспорт СсылкаНаПотребителя = Неопределено; Если СтрНачинаетсяС(Тип, "Справочник.") Тогда СсылкаНаПотребителя = Справочники[СтрЗаменить(Тип, "Справочник.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "Документ.")Тогда СсылкаНаПотребителя = Документы[СтрЗаменить(Тип, "Документ.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "ПланСчетов.") Тогда СсылкаНаПотребителя = ПланыСчетов[СтрЗаменить(Тип, "ПланСчетов.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "ПланВидовРасчета.") Тогда СсылкаНаПотребителя = ПланыВидовРасчета[СтрЗаменить(Тип, "ПланВидовРасчета.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "ПланВидовХарактеристик.") Тогда СсылкаНаПотребителя = ПланыВидовХарактеристик[СтрЗаменить(Тип, "ПланВидовХарактеристик.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "БизнесПроцесс.") Тогда СсылкаНаПотребителя = БизнесПроцессы[СтрЗаменить(Тип, "БизнесПроцесс.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "Задача.") Тогда СсылкаНаПотребителя = Задачи[СтрЗаменить(Тип, "Задача.", "")].ПолучитьСсылку(Новый УникальныйИдентификатор(UUID)); ИначеЕсли СтрНачинаетсяС(Тип, "Перечисление.") И ЗначениеЗаполнено(UUID) Тогда СсылкаНаПотребителя = Перечисления[СтрЗаменить(Тип, "Перечисление.", "")][UUID]; КонецЕсли; Возврат СсылкаНаПотребителя; КонецФункции Как видим тут все просто |
|||
2
aleks_default
25.12.19
✎
14:50
|
Так в чем смысл запроса? Есть идеи?
|
|||
3
lodger
25.12.19
✎
14:54
|
(2) ПолучитьСсылку не гарантирует существование объекта. по ссылке все равно надо попытаться прочитать данные, чтобы удостовериться что ссылка не битая.
запрос на одну только ссылку экономичнее, чем ПолучитьОбъект(), например. |
|||
4
aleks_default
25.12.19
✎
14:56
|
(3)Но этот запрос тоже этого не гарантирует
|
|||
5
aleks_default
25.12.19
✎
14:59
|
(3)Хотя, наверное да, ты прав. Спасибо!
|
|||
6
aleks_default
25.12.19
✎
15:00
|
нет, подожди.. а что тогда вернет ПолучитьСсылку() если ссылка битая?
|
|||
7
aleks_default
25.12.19
✎
15:02
|
битой ссылки в самой таблице справочника или документа быть не может, в этом случае ПолучитьСсылку() вернет неопределено и значит до запроса дело не дойдет
|
|||
8
ptiz
25.12.19
✎
15:04
|
(7) "в этом случае ПолучитьСсылку() вернет неопределено " - с чего решил? Вернется ссылка.
|
|||
9
aleks_default
25.12.19
✎
15:15
|
(8)Точно, он же в любом случае получит ссылку. Только в случае ее отстутсвия в базе она будет "битая". Тогда (3) прав. Чета я тупанул...
|
|||
10
aleks_default
25.12.19
✎
15:16
|
Вопрос закрыт
|
|||
11
pechkin
25.12.19
✎
15:23
|
в типовой есть примерно аналогичная функция
СсылкаСуществует(Ссылка) |
|||
12
lodger
25.12.19
✎
16:52
|
(0) кстати, плохой цикл.
я бы переписал. надо так: определяем какие уникальные ВнешнийОбъект.type есть в ТЗ. делаем структуру, в нее вставляем выгрузки из ТЗ (это тоже ТЗ) по ключам ВнешнийОбъект.type для каждого набора ВнешнийОбъект.type, пробегаемся и делаем битые ссылки, пишем запрос и делаем столько запросов в БД, сколько есть ВнешнийОбъект.type |
|||
13
lodger
25.12.19
✎
16:53
|
конечно же при условии, что в этом цикле в среднем происходит перебор десятков и сотен ссылок, а не 3-5.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |