Запросы. Таблица, вложенная в поле запроса

1. YozZzhik 18.01.24 10:16 Сейчас в теме
Добрый день! Имеются 2 табличные части - Продукция и Запасы. Табличные части связаны реквизитами: в Продукции реквизит НомерСтроки, в Запасах реквизит НомерСтрокиПродукция.

Например,
Таблица Продукция имеет следующий вид:
1; Продукция1
2; Продукция2

Таблица Запасы:
1; Запас1Продукции1
1; Запас2Продукции1
2; Запас1Продукции2
2; Запас2Продукции2

Можно ли запросом получить строки следующего вида из двух таблиц?
1; Продукция1; (Запас1Продукции1, Запас2Продукции1)
2; Продукция2; (Запас1Продукции2, Запас2Продукции2)

Что-то похожее на выборку из таблицы с табличной частью
По теме из базы знаний
Найденные решения
8. YozZzhik 18.01.24 14:11 Сейчас в теме
(4) Получилось вот так сделать:
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 18.01.24 10:21 Сейчас в теме
3. YozZzhik 18.01.24 10:24 Сейчас в теме
(2) да это выход, соединить 2 таблицы и вывести итоги. Но у меня дальше в дерево по итогам неправильно выводится, если есть одинаковый корень, но разная спецификация. В общем, там все сложнее, чем в описанном в вопросе примере)
Мне нужно, чтобы именно в одну строку все было, как в примере
4. nomad_irk 76 18.01.24 10:50 Сейчас в теме
(3)В общем случае - нельзя.
Если запасов по продукции какое-то фиксированное небольшое количество, то левыми соединениями по количеству уникальных запасов можно сделать.
8. YozZzhik 18.01.24 14:11 Сейчас в теме
(4) Получилось вот так сделать:
Прикрепленные файлы:
9. nomad_irk 76 18.01.24 14:14 Сейчас в теме
(8)это так выводит консоль, если вы получите выборку или ТЗ из запроса, то вас ждет сюрприз :)
10. YozZzhik 18.01.24 14:22 Сейчас в теме
(9) Да вроде бы все норм) Или я что-то не понимаю?
Прикрепленные файлы:
11. nomad_irk 76 18.01.24 14:29 Сейчас в теме
(10)Ваш вопрос:
Можно ли запросом получить строки следующего вида из двух таблиц?
1; Продукция1; (Запас1Продукции1, Запас2Продукции1)
2; Продукция2; (Запас1Продукции2, Запас2Продукции2)


В итоге вы получите

1; Продукция1; Запас1Продукция1
1; Продукция1; Запас2Продукция1
................
1; Продукция1; ЗапасNПродукция1
2; Продукция2; Запас1Продукция2
2; Продукция2; Запас2Продукция2
......
2; Продукция2; ЗапасМПродукция2

Если это для вас одно и то же, то ок.
12. YozZzhik 18.01.24 14:41 Сейчас в теме
(11) Я сразу соглашусь, что я что-то не понимаю, но я вроде бы вижу, что я получил такой результат, как и предполагал (это левый результат в скриншоте). То, что вы описываете, это больше похоже на правый результат на скриншоте
Прикрепленные файлы:
14. nomad_irk 76 18.01.24 14:51 Сейчас в теме
(12)Это по-сути один и тот же результат, разница - в его постобработке.
15. YozZzhik 18.01.24 14:56 Сейчас в теме
(14) Согласен. Но Итоги я не могу сделать, потому что у меня все ломается в дальнейшем выводе в дерево, если есть один корень, но дальше "внутренности" по спецификациям разные. Если только оставлять детальные записи и ставить заглушку, что-то типо если значение номенклатуры по предыдущей строке равно значение по номенклатуре по текущей строке выборки, тогда не создавать новую строку дерева. Но как-то читабельнее, мне кажется, описать это таким полем запроса и вложенной выборкой обойти результат этого поля
16. nomad_irk 76 18.01.24 15:03 Сейчас в теме
(15)дерево можно и "вручную" построить:

ТЗ.Индексы.Добавить("Продукция");

СписокПродукции = ТЗ.Скопировать(, "Продукция");
СписокПродукции.Свернуть("Продукция");
СписокПродукции = СписокПродукции.ВыгрузитьКолонку("Продукция");

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


Если уровней много, то цикл в процедуру завернуть и вызывать ее рекурсивно.
17. YozZzhik 18.01.24 15:10 Сейчас в теме
(16) Дерево на форме приблизительно аналогичным образом у меня строится. Из запроса улетает в механизм планирования по еще не выполненным заказам
5. soft_wind 18.01.24 10:51 Сейчас в теме
вообще строить связь по НомеруСтроки не рекомендуется!
(замучаетесь потом ошибки исправлять и код переделывать)
7. YozZzhik 18.01.24 11:10 Сейчас в теме
(5) Там в типовой конфе был КлючСвязи, который уникальный и не меняется после удаления строк. Номер строки просто для примера написал
6. Said-We 18.01.24 10:53 Сейчас в теме
(1) Много раз уже обсуждалось как это можно сделать. Один из последних тут:
https://forum.infostart.ru/forum9/topic307512/

И да, левые соединения там не нужны. Разве что для нумерации по группам, но это подготовка данных и это один раз.
13. YozZzhik 18.01.24 14:47 Сейчас в теме
(6) С табличными частями получилось сделать вот так
Прикрепленные файлы:
Оставьте свое сообщение

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