|
|
|
УТ 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
|
Спасибо за ответы!
Как по итогу решил: Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ОперацияПоПлатежнойКарте") ИЛИ
ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокРасшифровкаПлатежа.ОснованиеПлатежа КАК ОснованиеПлатежа
|ИЗ
| Документ." + Источник.Метаданные().Имя + ".РасшифровкаПлатежа КАК ДокРасшифровкаПлатежа
|ГДЕ
| ДокРасшифровкаПлатежа.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
СсылкаНаОбъект = ВыборкаДетальныеЗаписи.ОснованиеПлатежа;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязанныеДокументы.Ссылка КАК Ссылка
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&Ссылка) КАК СвязанныеДокументы
|ГДЕ
| (ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Ссылка) = ТИП(Документ.ОперацияПоПлатежнойКарте)
| ИЛИ ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Ссылка) = ТИП(Документ.ПриходныйКассовыйОрдер))";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
ДокКРегистрации = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ДокКРегистрации.Добавить(СсылкаНаОбъект);
КонецЕсли; |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |