Запрос двух дополнительных реквизитов для печатной формы (внешняя обработка) УТ11

1. YA_806508401 11.04.23 09:14 Сейчас в теме
Привет, подскажите, пожалуйста, как Дополнительные реквизиты в запросе указывать, если их нужно 2шт вытащить для печатной формы?
Делаю во внешней обработке для УТ 11, никак не выходят доп реквизиты в форме печатной
сделала в запросе 2 временные таблицы с последующим объединением: с обычными реквизитами, и с доп реквизитами, мне кажется в них проблема....

мой шедевер:
подскажите что не так 😭

Функция СформироватьПечатнуюФормуТест(МассивОбъектов)

ДопРеквизитТЗ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Техническое задание");
ДопРеквизитКод = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код позиции КТРУ");

ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ПФ_MXL_ТехническоеЗадание");

Область = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДок.Вывести(Область);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КоммерческоеПредложениеКлиентуТовары.НомерСтроки КАК ПорядковыйНомер,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.Наименование КАК НаименованиеНоменклатуры,
| КоммерческоеПредложениеКлиентуТовары.Количество КАК Количество,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм,
| КоммерческоеПредложениеКлиентуТовары.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ_ТЧНоменклатуры
|ИЗ
| Документ.КоммерческоеПредложениеКлиенту.Товары КАК КоммерческоеПредложениеКлиентуТовары
|ГДЕ
| КоммерческоеПредложениеКлиентуТовары.Ссылка В(&МассивОбъектов)
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
| НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
| НоменклатураДополнительныеРеквизиты.Значение КАК Значение
|ПОМЕСТИТЬ ВТ_ДопРекв
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ВТ_ТЧНоменклатуры.ПорядковыйНомер КАК ПорядковыйНомер,
| ВТ_ТЧНоменклатуры.НаименованиеНоменклатуры КАК НаименованиеНоменклатуры,
| ВТ_ТЧНоменклатуры.Количество КАК Количество,
| ВТ_ТЧНоменклатуры.ЕдИзм КАК ЕдИзм,
| ВТ_ТЧНоменклатуры.Ссылка КАК Ссылка,
| ВТ_ДопРекв.Значение КАК ОписаниеНоменклатуры,
| ВТ_ДопРекв.Значение КАК КодПозиции
|ИЗ
| ВТ_ТЧНоменклатуры КАК ВТ_ТЧНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДопРекв КАК ВТ_ДопРекв
| ПО ВТ_ТЧНоменклатуры.Ссылка = ВТ_ДопРекв.Ссылка";

Запрос.УстановитьПараметр("Свойство", ДопРеквизитТЗ);
Запрос.УстановитьПараметр("Свойство", ДопРеквизитКод);

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

Строка = Макет.ПолучитьОбласть("СтрокаТаблицы");

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Для каждого Ссылка Из МассивОбъектов Цикл

Отбор = Новый Структура;
Отбор.Вставить("Ссылка", Ссылка);

Выборка = РезультатЗапроса.НайтиСтроки(Отбор);

Для каждого СтрокаТЧ Из Выборка Цикл
ЗаполнитьЗначенияСвойств(Строка.Параметры, СтрокаТЧ);
ТабДок.Вывести(Строка);

КонецЦикла;

КонецЦикла;

ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;

Возврат ТабДок;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 11.04.23 09:44 Сейчас в теме
(1)
"ВЫБРАТЬ
| КоммерческоеПредложениеКлиентуТовары.НомерСтроки КАК ПорядковыйНомер,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.Наименование КАК НаименованиеНоменклатуры,
| ЕСТЬNULL(ТехническиеЗадания.Значение, """") Как ТехническоеЗадание,
| ЕСТЬNULL(КодПозицийКТРУ.Значение, """") Как КодПозицииКТРУ,
| КоммерческоеПредложениеКлиентуТовары.Количество КАК Количество,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм,
| КоммерческоеПредложениеКлиентуТовары.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ_ТЧНоменклатуры
|ИЗ
| Документ.КоммерческоеПредложениеКлиенту.Товары КАК КоммерческоеПредложениеКлиентуТовары
|       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ТехническиеЗадания
|       ПО КоммерческоеПредложениеКлиентуТовары.Номенклатура = ТехническиеЗадания.Ссылка
|                 И ТехническиеЗадания.Свойство.Наименование = ""Техническое задание""
|       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК КодПозицийКТРУ
|       ПО КоммерческоеПредложениеКлиентуТовары.Номенклатура = КодПозицийКТРУ.Ссылка
|                 И ТехническиеЗадания.Свойство.Наименование = ""Код позиции КТРУ""
|ГДЕ
| КоммерческоеПредложениеКлиентуТовары.Ссылка В(&МассивОбъектов)"
Показать
9. Said-We 11.04.23 10:29 Сейчас в теме
(1)
РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Для каждого Ссылка Из МассивОбъектов Цикл

Отбор = Новый Структура;
Отбор.Вставить("Ссылка", Ссылка);

Выборка = РезультатЗапроса.НайтиСтроки(Отбор);

Для каждого СтрокаТЧ Из Выборка Цикл


А добавить в запрос итог по ссылке на документ и просто обойти результат запроса. Без выгрузок в ТЗ и поиском по ТЗ.
Пробовали?
11. Sashares 34 11.04.23 10:42 Сейчас в теме
(1) Значения свойств можно получить стандартным апи БСП.
ТаблицаСвойств = УправлениеСвойствами.ЗначенияСвойств(МассивОбъектов);
3. Said-We 11.04.23 10:04 Сейчас в теме
(2) А будет 15 доп реквизитов, то 15 левых соединений?
Можно одним обойтись.
4. YA_806508401 11.04.23 10:06 Сейчас в теме
(3) Нужно только 2 доп реквизита, чтоб в разных колонках печатной формы отображалось, и те не тянутся...
30. Bosma 69 11.04.23 11:54 Сейчас в теме
(4) написано же, что нужно только 2 дополнительных реквизита. nomad_irk предложил абсолютно нормальное решение. Не надо усложнять на домыслах
5. nomad_irk 72 11.04.23 10:24 Сейчас в теме
(3)
А будет 15 доп реквизитов, то 15 левых соединений?

когда будет, тогда будет другое решение.
7. Said-We 11.04.23 10:25 Сейчас в теме
(5)
когда будет, тогда будет другое решение.

А почему не сразу? Оно же проще.
8. nomad_irk 72 11.04.23 10:27 Сейчас в теме
(7)как сказать, придется избавится от дублей записей, либо дополнительно искать нужное значение для вывода, что исходя из общего уровня ТС в качестве программиста 1С(нисколько не в упрек ТС) - решение для ТС может оказаться сильно сложнее предложенного работающего решения самим ТС.
6. Said-We 11.04.23 10:24 Сейчас в теме
(4)
Запрос.УстановитьПараметр("Свойство", ДопРеквизитТЗ);
Запрос.УстановитьПараметр("Свойство", ДопРеквизитКод);

В структуру параметров положил сначала одно свойство, потом его перекрыл другим. Про первое забыли.
YA_806508401; +1 Ответить
10. Said-We 11.04.23 10:34 Сейчас в теме
(8) Каких дублей?
Сначала таблицу со свойствами разворачиваете из колонок в строки. И один раз цепляете.
В 1С нет PIVOT, поэтому разворачивать таблицы можно через объединение и группировку.

Когда собираются свойства, необходимо добавить ещё фильтр на номенклатуру из документов, которые в МассивОбъектов.
Номенклатуры может 50 000, а в документах только сотня другая. Зачем свойства для 50 000 собирать и потом ещё это всё присоединять?
12. nomad_irk 72 11.04.23 10:50 Сейчас в теме
(10)
Сначала таблицу со свойствами разворачиваете из колонок в строки. И один раз цепляете.
В 1С нет PIVOT, поэтому разворачивать таблицы можно через объединение и группировку.

Вы уверены, что ТС это сможет сделать? че-т я пока не уверен, что сходу смогу выполнить вот это все, потому что пока не совсем понимаю, как это "PIVOT через объединение и группировку"
13. Said-We 11.04.23 10:52 Сейчас в теме
(11) Ему в готовый отчет прицепить....

(12) Если кратко суть, то развернуть таблицу свойств можно так:
IIF нет в 1С, но написал что бы короче было. Писать придется "выбор когда тогда иначе конец"

Выбрать
     т.Номенклатура
    ,MAX(IIF(т.Свойство = Свойство1, тЗначение, NULL)) КАК ЗначениеСвойство1
    ,MAX(IIF(т.Свойство = Свойство2, тЗначение, NULL)) КАК ЗначениеСвойство2
    ,MAX(IIF(т.Свойство = Свойство3, тЗначение, NULL)) КАК ЗначениеСвойство3
...
    ,MAX(IIF(т.Свойство = СвойствоN, тЗначение, NULL)) КАК ЗначениеСвойствоN
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты как т
ГДЕ
    т.Свойство в (Свойство1, Свойство2, Свойство3, ... , СвойствоN)
   И т.Номенклатура в (Выбрать Различные т1.Номенлатура
                                       ИЗ Документ.КоммерческоеПредложениеКлиенту.Товары как т1
                                       где т1.Ссылка В(&МассивОбъектов))
GROUP BY
     т.Номенклатура
    
Показать
14. nomad_irk 72 11.04.23 10:55 Сейчас в теме
(13)Т.е. придется сделать N параметров?
16. Sashares 34 11.04.23 10:57 Сейчас в теме
(13)И в чем проблема?
Получить свойства отдельно, обойти их в цикле при выводе строки в печатную форму.
15. Said-We 11.04.23 10:57 Сейчас в теме
(14) У вас видов доп реквизитов может быть 150, а нужно взять только 15.
21. nomad_irk 72 11.04.23 11:15 Сейчас в теме
(15)А если нужны все 150?
Т.е. по вашему, 15 параметров = 15 неявных запросов к БД + итоговый запрос - это шибко лучше одного запроса пусть и с левыми соединениями? Хорошо, так и запишем.

Если понадобится большее количество доп. значений, решение должно быть явно другим, без "PIVOT через объединение и группировку".

Даже если понадобилось бы 15 свойств, то лично я решил бы задачу через пакет запросов, один из которых содержал бы все значения доп свойств по номенклатуре из документов, выгрузил бы его в ТЗ и тупо искал бы в ней значения свойств номенклатуры для вывода в ТабДок
17. Said-We 11.04.23 11:00 Сейчас в теме
(16) Все сделает запрос. Код короче.
Если понадобится добавить ещё одно свойство в печатную форму, то добавление одной строчки в запрос и у условие свойства, ещё одно значение, плюс строчка в установку параметра.
Такой код сопровождать проще.

15 соединений отработает медленнее чем одно. Это очевидно.
18. Sashares 34 11.04.23 11:03 Сейчас в теме
(17) У всего есть свои плюсы и минусы.
Использование апи БСП позволяет не задумываться о том, где хранятся значения доп. реквизитов, если структура данных вдруг изменится.
19. Said-We 11.04.23 11:05 Сейчас в теме
(18)
Использование апи БСП позволяет не задумываться о том, где хранятся значения доп. реквизитов, если структура данных вдруг изменится.

И превращает код в неприемлемое прелевание из ТЗ в ТЗ и поиск в цикле. Так на код в 77 становится похоже.
20. Sashares 34 11.04.23 11:08 Сейчас в теме
(19)
поиск в цикле

В чем проблема поиска в цикле? Индексируем таблицу по полям поиска и будет все быстро.
Для понимания, я не говорю, что это лучший вариант.
Это просто еще один вариант реализации задачи.
23. nomad_irk 72 11.04.23 11:35 Сейчас в теме
(17)
15 соединений отработает медленнее чем одно. Это очевидно.

Так никто и не предлагает делать 15 соединений, если до сих пор не понятно.
можно вообще без соединений как бы, но тогда нужна постобработка: поиск значения в ТЗ
можно с одним соединением, но нужна постобработка: избавление от дублей записей в полученной запросом ТЗ.
22. Said-We 11.04.23 11:31 Сейчас в теме
(20)
https://1c.ru/spec/questions.htm

Смотрим требования. По сути выгрузка из результата запроса в ТЗ это ещё одна копия тех же самых данных.

(21) В вашем случае, тоже будет 150 проверок на свойство. И их придется по хорошему задавать в параметры, а не на наименование зашиваться. Завтра наименование поменяется и запрос ваш не работает. Есть ссылка, её и надо использовать.
И левых соединений у вас будет 150 штук. Сервер умрёт от счастья, которое на него свалилось.
Прикрепленные файлы:
24. nomad_irk 72 11.04.23 11:42 Сейчас в теме
(22)пффф....можно завязаться на неизменяемые данные для свойства, в БСП специально для этого выделили ажна целый реквизит и да, нужные значения можно передать с помощью ажна одного параметра.
Еще раз: никто не будет в здравом уме делать 150 соединений, даже 15 не будут делать, потому что подход к решению должен быть кардинально другим.

Согласно требованиям: докажите, что выгрузка в ТЗ значений свойств номенклатуры была без необходимости.
25. Said-We 11.04.23 11:46 Сейчас в теме
(24)
Согласно требованиям: докажите, что выгрузка в ТЗ значений свойств номенклатуры была без необходимости.

Поверь, никто ничего не доказывает. Увидели выгрузку результата запроса в ТЗ и потом обход результата - минус балл.
Так и 15-лет назад было. Те кто принимают платформу типовые конфигурации и не открывают. У них свои требования и они по сути не меняются.
27. nomad_irk 72 11.04.23 11:48 Сейчас в теме
(25)Ну так и для чего такие экзамены? :)
26. Said-We 11.04.23 11:48 Сейчас в теме
(24)
потому что подход к решению должен быть кардинально другим.

Каким?
28. nomad_irk 72 11.04.23 11:49 Сейчас в теме
29. Said-We 11.04.23 11:51 Сейчас в теме
(27) Требования абсолютно справедливые.
Перелевание из ТЗ в ТЗ это необоснованное использование лишней оперативной памяти памяти.
Поиск по ТЗ в цикле, это запрос в цикле. Это необоснованная загрузка сервера.
По времени работы это медленнее.

Требования по платформе как раз нормальные.
32. nomad_irk 72 11.04.23 11:59 Сейчас в теме
(29)
Поиск по ТЗ в цикле, это запрос в цикле.

Чейта? Это поиск по ОЗУ уж тогда.
31. Said-We 11.04.23 11:56 Сейчас в теме
(30) Два тоже тащить будет быстрее одним соединением. Проверено.
33. nomad_irk 72 11.04.23 12:08 Сейчас в теме
(31)да говорю ж: можно вообще без соединений, можно с одним соединением, но оба варианта нужно постобработать и оба требует выгрузки в ТЗ
Без этого будет "PIVOT через объединение и группировку" и N соединений, увы и ах.
34. Said-We 11.04.23 12:16 Сейчас в теме
35. nomad_irk 72 11.04.23 12:22 Сейчас в теме
(34)т.е. ради того, чтобы не выгружать в ТЗ мы будем городить стопицот запросов к БД, чтобы получить список нужных нам свойств и передавать каждый в качестве параметра итогового запроса - просто замечательная альтернатива, как по-мне
36. Said-We 11.04.23 12:24 Сейчас в теме
(35) Так давайте зашиваться на наименование. И параллельно менять это наименование в БД и потом сильно удивляться почему работать перестало. :-)
37. nomad_irk 72 11.04.23 12:30 Сейчас в теме
(36)Еще раз: специально, чтобы отвязаться от наименования, 1С ввела дополнительный реквизит и заполняет его значением, содержащим УИ, можете искать по его значению.
38. Said-We 11.04.23 12:42 Сейчас в теме
(37) А в типовых это можно использовать?
Не в типовых понятно...
Или вы что-то другое имеете ввиду?
39. nomad_irk 72 11.04.23 13:45 Сейчас в теме
(38)Я говорю про типовые. В нетиповых - как захотел, так и сделал сразу.
40. Said-We 11.04.23 14:45 Сейчас в теме
(39) Какой реквизит вы имеете ввиду?
Уникальный Идентификатор Для Формул, Реальный GUID в запросах или что-то другое?
42. nomad_irk 72 11.04.23 15:02 Сейчас в теме
(40) В УТ11.4 это реквизит "Имя", при записи проверяется уникальность значения во всем справочнике, само значение формируется по Наименование(без пробелов) + "_" + новый УИ(не ссылки).
44. Said-We 11.04.23 15:09 Сейчас в теме
(42)
формируется по Наименование(без пробелов) + "_" + новый УИ(не ссылки)

А если наименование поменяли - формируется заново?
45. nomad_irk 72 11.04.23 15:15 Сейчас в теме
(44)Нет, формируется только для нового объекта.
41. YA_806508401 11.04.23 14:55 Сейчас в теме
Попроще сформулированно, но все равно не работает, через таблицу свойств не очень понимаю как в одну таблицу все свести...

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КоммерческоеПредложениеКлиентуТовары.НомерСтроки КАК ПорядковыйНомер,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.Наименование КАК НаименованиеНоменклатуры,
| КоммерческоеПредложениеКлиентуТовары.Количество КАК Количество,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм,
| КоммерческоеПредложениеКлиентуТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.КоммерческоеПредложениеКлиенту.Товары КАК КоммерческоеПредложениеКлиентуТовары,
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| КоммерческоеПредложениеКлиентуТовары.Ссылка В(&МассивОбъектов)";

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
ДопРеквизитТЗ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Техническое задание");
ДопРеквизитКод = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код позиции КТРУ");

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Пока РезультатЗапроса.Следующий() Цикл

Область = Макет.ПолучитьОбласть("СтрокаТаблицы");

СтрокаДопРеквТЗ = РезультатЗапроса.Номенклатура.ДополнительныеРеквизиты.Найти(ДопРеквизитТЗ);
СтрокаДопРеквКод = РезультатЗапроса.Номенклатура.ДополнительныеРеквизиты.Найти(ДопРеквизитКод);

ЗначениеДопРеквТЗ = СтрокаДопРеквТЗ.Значение;
ЗначениеДопРеквКод = СтрокаДопРеквКод.Значение;

Область.Параметры.ПорядковыйНомер = РезультатЗапроса.ПорядковыйНомер;
Область.Параметры.НаименованиеНоменклатуры = РезультатЗапроса.НаименованиеНоменклатуры;
Область.Параметры.ТехническоеЗадание = ЗначениеДопРеквТЗ;
Область.Параметры.КодПозицийКТРУ = ЗначениеДопРеквКод;
Область.Параметры.Количество = РезультатЗапроса.Количество;
Область.Параметры.ЕдИзм = РезультатЗапроса.ЕдИзм;

ТабДок.Вывести(Область);

КонецЦикла;
43. nomad_irk 72 11.04.23 15:04 Сейчас в теме
(41)
|ИЗ
| Документ.КоммерческоеПредложениеКлиенту.Товары КАК КоммерческоеПредложениеКлиентуТовары,
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты


Так точно делать не стОит от слова никогда.

Вариант решения, наиболее подходящее под ваш алгоритм вывода приведен в (2)
46. YA_806508401 11.04.23 15:17 Сейчас в теме
(43) убрано, не заметила
я (2) не совсем понимаю как вписать это решение, с ним код все равно не заработал
нет ли варианта связаться и может платно посмотрите как решить ошибки внешней обработки? на мой синтаксис в данный момент без слез не взглянуть, но я уже не знаю как с этой задачей справиться
48. nomad_irk 72 11.04.23 15:53 Сейчас в теме
(46) И в таком варианте не работает?
Функция СформироватьПечатнуюФормуТест(МассивОбъектов)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КоммерческоеПредложениеКлиентуТовары.НомерСтроки КАК ПорядковыйНомер,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.Наименование КАК НаименованиеНоменклатуры,
| ЕСТЬNULL(ТехническиеЗадания.Значение, """") Как ТехническоеЗадание,
| ЕСТЬNULL(КодПозицийКТРУ.Значение, """") Как КодПозицииКТРУ,
| КоммерческоеПредложениеКлиентуТовары.Количество КАК Количество,
| КоммерческоеПредложениеКлиентуТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм,
| КоммерческоеПредложениеКлиентуТовары.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ_ТЧНоменклатуры
|ИЗ
| Документ.КоммерческоеПредложениеКлиенту.Товары КАК КоммерческоеПредложениеКлиентуТовары
|       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ТехническиеЗадания
|       ПО КоммерческоеПредложениеКлиентуТовары.Номенклатура = ТехническиеЗадания.Ссылка
|                 И ТехническиеЗадания.Свойство.Наименование = ""Техническое задание""
|       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК КодПозицийКТРУ
|       ПО КоммерческоеПредложениеКлиентуТовары.Номенклатура = КодПозицийКТРУ.Ссылка
|                 И ТехническиеЗадания.Свойство.Наименование = ""Код позиции КТРУ""
|ГДЕ
| КоммерческоеПредложениеКлиентуТовары.Ссылка В(&МассивОбъектов)";

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

ТабДок = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("ПФ_MXL_ТехническоеЗадание");

Область = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДок.Вывести(Область);

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
     Возврат ТабДок;
КонецЕсли

ТаблицаДанных = Результат.Выгрузить();

СписокДокументов = ТаблицаДанных.Скопировать(,"Ссылка");
СписокДокументов.Свернуть("Ссылка");
СписокДокументов = СписокДокументов.ВыгрузитьКолонку("Ссылка");

Для каждого Документ Из СписокДокументов Цикл

Отбор = Новый Структура("Ссылка", Документ);
ДокументТЧ = РезультатЗапроса.НайтиСтроки(Отбор);

Для каждого СтрокаТЧ Из ДокументТЧ Цикл
Строка = Макет.ПолучитьОбласть("СтрокаТаблицы");
ЗаполнитьЗначенияСвойств(Строка.Параметры, СтрокаТЧ);
ТабДок.Вывести(Строка);

КонецЦикла;

КонецЦикла;

ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;

Возврат ТабДок;

КонецФункции
Показать
49. YA_806508401 11.04.23 16:14 Сейчас в теме
47. Said-We 11.04.23 15:33 Сейчас в теме
(46) По умолчанию 0 прописал, но надо поставить что надо. Я не знаю что это у вас такое.
Писал на коленке, поэтому синтаксис и запятые с кавычками проверяйте сами.
...
Запрос.УстановитьПараметр("Свойство1", ДопРеквизитТЗ);
Запрос.УстановитьПараметр("Свойство2", ДопРеквизитКод);
...

|////////////////////////////////////////////////////////////­­////////////////////
|ВЫБРАТЬ
| т.Ссылка КАК Ссылка,
| ЕстьNULL(Максимум(выбор когда т.Свойство = &Свойство1 тогда т.Значение иначе NULL конец), 0) КАК ЗначениеСвойство1,
| ЕстьNULL(Максимум(выбор когда т.Свойство = &Свойство2 тогда т.Значение иначе NULL конец), 0) КАК ЗначениеСвойство2
|ПОМЕСТИТЬ ВТ_ДопРекв
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК т
|ГДЕ
| т.Свойство в (&Свойство1, &Свойство2) // можно  так т.Свойство = &Свойство1 ИЛИ т.Свойство = Свойство2
| И т.Ссылка  в (выбрать различные т1.Номенклатура ИЗ ВТ_ТЧНоменклатуры как т1)
|СГРУППИРОВАТЬ ПО
| т.Ссылка КАК Ссылка
|;
Показать

Далее эту таблицу цепляйте к своей таблице ВТ_ТЧНоменклатуры.

Вместо вот этого:
РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Для каждого Ссылка Из МассивОбъектов Цикл

Отбор = Новый Структура;
Отбор.Вставить("Ссылка", Ссылка);

Выборка = РезультатЗапроса.НайтиСтроки(Отбор);

Для каждого СтрокаТЧ Из Выборка Цикл
Показать

Добавьте итог по ссылке в итоговый запрос и сделайте одну выборку по итогу, а вторую по первой выборке. Что-то типа такого.
ВыборкаИтог = Запрос.Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаИтог.Следующий() Цикл
     Выборка = ВыборкаИтог.Выбрать();
     Пока Выборка.Следующий() Цикл
     КонецЦикла;
КонецЦикла;
50. YA_806508401 11.04.23 16:15 Сейчас в теме
(47) пробую, разбираюсь, тяжеловато так сразу вникнуть...надеюсь подойдет, спасибо
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот