|
УТ 11.5 Получение списка связанных документов | ☑ | ||
---|---|---|---|---|
0
УТ_КА
16.08.24
✎
13:48
|
Приветствую!
Столкнулся со следующей задачей в УТ 15.5: Имеются документы типов РеализацияТоваровУслуг, ПриходныйКассовыйОрдер и ОперацияПоПлатежнойКарте. Из формы любого из этих документов можно выполнить команду "Связанные документы" и получить дерево, собственно, связанных документов. Требуется сделать процедуру, которая принимает в себя документ любого из этих типов. Процедура должна получить список всех связанных с ним документов. Получить связанные документы в случае с РеализацияТоваровУслуг - легко, можно воспользоваться КритерийОтбора и запросом получить все нужные документы. В случае с остальными типами - так не получается, запрос по КритерийОтбора не возвращает ничего. Как можно решить такую задачу? Была мысль попробовать в случае ПриходныйКассовыйОрдер или ОперацияПоПлатежнойКарте получить основание (т. е. РеализацияТоваровУслуг) и потом делать запрос в КритерийОтбора по нему, что может сработать, но немного смущает. Знает ли более опытный разработчик как это сделать оптимальнее всего? |
|||
1
maxab72
16.08.24
✎
13:55
|
Универсальное решение - проанализировать метаданные документа, отобрать какие документы встречаются в его реквизитах, и строить автоматом запрос по ним. Можно сделать с неограниченной глубиной поиска, но это чуть сложнее.
|
|||
2
Мультук
16.08.24
✎
13:59
|
(0)
>>выполнить команду "Связанные документы" А если взять и посмотреть код общей команды "СвязанныеДокументы" ? А потом дальше и дальше. И увидеть, что 1С сейчас делает всё то, что описал (1) |
|||
3
maxab72
16.08.24
✎
14:04
|
(2) В свое время столкнулся что критерий отбора "СвязанныеДокументы" с включенной RLS работал дико медленно, особенно когда в цепочке встречались запрещенные для просмотра пользователем документы. Пришлось ее переписать на прямой анализ и запросы, формируемые в цикле, без использования этого критерия. Получилось гораздо быстрее... хотя и сложнее по реализации.
|
|||
4
steep1
19.08.24
✎
13:38
|
(0) Запрос по КритерийОтбора
|
|||
5
Мультук
16.08.24
✎
14:16
|
(4)
Сам то проверил? Работает? P.S. У меня в ЕРП 2.5.17 Вот такой запрос ничего не возвращает Для ПКО в связанных есть и РТУ и ЗаказКлиента. ВЫБРАТЬ СвязанныеДокументы.Ссылка КАК Ссылка ИЗ КритерийОтбора.СвязанныеДокументы(&ссылкаПКО) КАК СвязанныеДокументы |
|||
6
steep1
16.08.24
✎
14:21
|
(5) у меня работает, посмотри форму связанных документов там точно такой же запрос и работает он на любом документе в цепочке
|
|||
7
УТ_КА
19.08.24
✎
13:27
|
Спасибо за ответы!
Как по итогу решил: Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ОперацияПоПлатежнойКарте") ИЛИ ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокРасшифровкаПлатежа.ОснованиеПлатежа КАК ОснованиеПлатежа |ИЗ | Документ." + Источник.Метаданные().Имя + ".РасшифровкаПлатежа КАК ДокРасшифровкаПлатежа |ГДЕ | ДокРасшифровкаПлатежа.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда СсылкаНаОбъект = ВыборкаДетальныеЗаписи.ОснованиеПлатежа; КонецЕсли; КонецЕсли; Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СвязанныеДокументы.Ссылка КАК Ссылка |ИЗ | КритерийОтбора.СвязанныеДокументы(&Ссылка) КАК СвязанныеДокументы |ГДЕ | (ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Ссылка) = ТИП(Документ.ОперацияПоПлатежнойКарте) | ИЛИ ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Ссылка) = ТИП(Документ.ПриходныйКассовыйОрдер))"; Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); ДокКРегистрации = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ДокКРегистрации.Добавить(СсылкаНаОбъект); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |