|
СКД динамический вывод колонок | ☑ | ||
---|---|---|---|---|
0
Newbie1c
31.01.23
✎
15:48
|
Привет, сообщество.
Не могу сформулировать для поиска поставленную задачу. Возможно, что-то подобное уже решалось. Упрощенная задача выглядит следующим образом: Запросом получаем данные из базы. Контрагент, Номенклатура. Контрагенту может соответствовать несколько номенклатур - неизвестное число. Предположим, что максимальное количество номенклатур для одного из контрагентов - 3 штуки. Необходимо вывести отчет в следующем виде: Контрагент Номенклатура1 Номенклатура2 Номенклатура3 Контрагент1 Варежки пусто пусто Контрагент2 Носки Трусы пусто Контрагент3 Лопата Варежки пусто Контрагент4 Варежки Носки Лопата Контрагент5 Трусы Пусто пусто ну и так далее. Вопрос: возможно, что такое уже было? Максимальное количество номенклатур неизвестно. Что почитать, или хотя бы куда копать? |
|||
1
Asmody
31.01.23
✎
15:58
|
Копай в сторону "Отчет - ПКМ - Новая таблица"
|
|||
2
sandal_r
31.01.23
✎
17:52
|
https://vk.com/@-169967594-1s-stroim-otchet-skd-s-razbivkoi-po-mesyacam
вот так, только вместо периода у тебя будет номенклатура |
|||
3
Newbie1c
01.02.23
✎
01:21
|
(2) Нет, этот пример не подойдет.
Предполагается, что периодов ограниченное количество. И они просто колонками раскроются на каждый период. В моем примере общее количество номенклатур по разным контрагентам может быть 50 000 единиц, но раскроются они максимум в 3 колонках, т.к. у контрагента4 - 3 номенклатуры, а у остальных 1-2. На примере выше это видно, что у контрагента1, 3, и 4 есть варежки. У контрагента2 и 5 есть трусы и т.п. Но они не должны ложиться в индивидуальную свою колонку. Количество колонок с номенклатурой = максимальному количеству номенклатур среди какого-то контрагента. |
|||
4
Mihasya
01.02.23
✎
04:57
|
ВЫБРАТЬ
"Контрагент1" КАК Контрагент, "Варежки" КАК Номенклатура ПОМЕСТИТЬ ВТНоменклатураКонтрагентов ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент1", "Перчатки" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент1", "Носки" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент2", "Перчатки" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент2", "Галоши" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент3", "Галоши1" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент3", "Галоши2" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент3", "Галоши3" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент3", "Галоши4" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Контрагент3", "Галоши5" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНоменклатураКонтрагентов.Контрагент КАК Контрагент, ВТНоменклатураКонтрагентов.Номенклатура КАК Номенклатура, КОЛИЧЕСТВО(ВТНоменклатураКонтрагентов1.Номенклатура) КАК НомерКолонки ПОМЕСТИТЬ ВТКонтрагентыНоменклатураНомераКолонок ИЗ ВТНоменклатураКонтрагентов КАК ВТНоменклатураКонтрагентов ЛЕВОЕ СОЕДИНЕНИЕ ВТНоменклатураКонтрагентов КАК ВТНоменклатураКонтрагентов1 ПО ВТНоменклатураКонтрагентов.Контрагент = ВТНоменклатураКонтрагентов1.Контрагент И ВТНоменклатураКонтрагентов.Номенклатура > ВТНоменклатураКонтрагентов1.Номенклатура СГРУППИРОВАТЬ ПО ВТНоменклатураКонтрагентов.Контрагент, ВТНоменклатураКонтрагентов.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ВТКонтрагентыНоменклатураНомераКолонок.НомерКолонки) КАК НомерКолонки, ВТКонтрагентыНоменклатураНомераКолонок.Контрагент ПОМЕСТИТЬ ВТВсегоКолонокКонтрагента ИЗ ВТКонтрагентыНоменклатураНомераКолонок КАК ВТКонтрагентыНоменклатураНомераКолонок СГРУППИРОВАТЬ ПО ВТКонтрагентыНоменклатураНомераКолонок.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТКонтрагентыНоменклатураНомераКолонок.НомерКолонки ПОМЕСТИТЬ ВТВсегоКолонок ИЗ ВТКонтрагентыНоменклатураНомераКолонок КАК ВТКонтрагентыНоменклатураНомераКолонок СГРУППИРОВАТЬ ПО ВТКонтрагентыНоменклатураНомераКолонок.НомерКолонки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТВсегоКолонокКонтрагента.Контрагент, ВТВсегоКолонокКонтрагента.НомерКолонки КАК КолонокКонтрагента, ВТВсегоКолонок.НомерКолонки КАК НомерКолонки ПОМЕСТИТЬ ВТКолонкиКонтрагента ИЗ ВТВсегоКолонок КАК ВТВсегоКолонок ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВсегоКолонокКонтрагента КАК ВТВсегоКолонокКонтрагента ПО (ИСТИНА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТКолонкиКонтрагента.Контрагент, ЕСТЬNULL(ВТКонтрагентыНоменклатураНомераКолонок.Номенклатура, НЕОПРЕДЕЛЕНО) КАК Номенклатура, ВТКолонкиКонтрагента.НомерКолонки ИЗ ВТКолонкиКонтрагента КАК ВТКолонкиКонтрагента ЛЕВОЕ СОЕДИНЕНИЕ ВТКонтрагентыНоменклатураНомераКолонок КАК ВТКонтрагентыНоменклатураНомераКолонок ПО ВТКолонкиКонтрагента.Контрагент = ВТКонтрагентыНоменклатураНомераКолонок.Контрагент И ВТКолонкиКонтрагента.НомерКолонки = ВТКонтрагентыНоменклатураНомераКолонок.НомерКолонки |
|||
5
Mihasya
01.02.23
✎
04:59
|
в ресурсах добавляешь поле Номенклатура, выражение Максимум(Номенклатура), на выходе таблица, строки Контрагент, колонки НомерСтроки, ресурс твоя номенклатура
|
|||
6
DJ Anthon
01.02.23
✎
05:35
|
гугли в сторону внутренние таблицы и выбрать первые 3
|
|||
7
Mihasya
01.02.23
✎
06:33
|
+(5) поправочка, на выходе таблица, строки с группировкой Контрагент, колонки с группировкой НомерКолонки, ресурс твоя Номенклатура
(6) а заем первые 3? |
|||
8
DJ Anthon
01.02.23
✎
13:11
|
(7) ну ему же только три надо
|
|||
9
Mihasya
01.02.23
✎
14:07
|
(8) в (0) Контрагенту может соответствовать несколько номенклатур - неизвестное число.
это в примере 3 |
|||
10
Newbie1c
02.02.23
✎
06:04
|
(9) Спасибо. Это то что нужно! Переложил на более сложный запрос, отработало четко
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |