|
СКД: вывести различные значения группы горизонтально, в виде колонок? | ☑ | ||
---|---|---|---|---|
0
lenkavovka
23.07.20
✎
10:21
|
Всем привет!
Простейший запрос штрихкодов: ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка, СпрНоменклатура.Артикул КАК Артикул, СпрНоменклатура.Код КАК Код, ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод ИЗ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура ПО ШтрихкодыНоменклатуры.Номенклатура = СпрНоменклатура.Ссылка Сложность в том, что штрихкодов может быть у каждой номенклатуры до десяти. Соответственно в отчёте на каждую номенклатуру получаем до десяти строк, по количеству штрихкодов. Пользователь просит вывести эти штрихкоды в 10 колонок, напротив каждой строки номенклатуры все возможные значения штрикодов. Есть ли решения средствами СКД без обработки результатов запроса в коде? Приходит мысль сделать жуткий запрос, что-то типа такого: ВЫБРАТЬ ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура, МИНИМУМ(ШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод ПОМЕСТИТЬ ВТ_Штрихкоды1 ИЗ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры СГРУППИРОВАТЬ ПО ШтрихкодыНоменклатуры.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура, МИНИМУМ(ШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод ПОМЕСТИТЬ ВТ_Штрихкоды2 ИЗ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры ГДЕ НЕ ШтрихкодыНоменклатуры.Номенклатура В (ВЫБРАТЬ ВТ_Штрихкоды1.Штрихкод ИЗ ВТ_Штрихкоды1) СГРУППИРОВАТЬ ПО ШтрихкодыНоменклатуры.Номенклатура ................................... Потом соответственно через соединение получить колонки Штрихкод1, Штрихкод2... Штрихкод10. Но, может, есть более изящное решение? |
|||
1
lenkavovka
23.07.20
✎
10:34
|
Хм, рядом почти такая же тема оказывается появилась: Как в запросе при соед-нии "один ко многим" поместить результаты в колонки, а не в строки?
|
|||
2
mikecool
23.07.20
✎
10:40
|
использовать группировку колонок
|
|||
3
lenkavovka
23.07.20
✎
10:59
|
(2) Хм. Ткните ссылкой, если не сложно.
|
|||
4
mikecool
23.07.20
✎
11:37
|
(3) некуда тыкать, вывод - в таблицу, в группировку колонок добавляешь свое поле и профит
|
|||
5
lenkavovka
23.07.20
✎
12:11
|
(4) Вот так? https://ibb.co/6Nxt0cJ
Но ведь так мы получим несколько тысяч колонок, потому что каждой номенклатуре принадлежит от 1 до 10-ти различных (уникальных во всё справочнике) штрихкодов... |
|||
6
mistеr
23.07.20
✎
12:57
|
(5) Выведи в одной колонке, через запятую.
|
|||
7
mistеr
23.07.20
✎
12:57
|
(5) Зачем там вообще штрихкоды?
|
|||
8
lenkavovka
23.07.20
✎
15:55
|
(6), (7) для анализа избыточности. Через запятую не устроит пользователей, большой объём нужно анализировать регулярно.
|
|||
9
mistеr
23.07.20
✎
17:49
|
(8) Пользователи анализируют штрихкоды глазами и с чем-то сверяют?!!
Кажется, я понял, о какой избыточности речь. |
|||
10
lenkavovka
23.07.20
✎
18:55
|
(9) Наводят порядок на складе. Автоматизировать это нельзя, на роботов бюджета в текущем квартале не выделяли:)
В общем, пришлось делать отчёт на основе набора данных - объекта, в котором в процессор компоновки данных передаётся таблица значений, полученная из такой фнукции: Функция ПолучитьТаблицуШтрихкодов() Запрос = Новый Запрос("ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | СпрНоменклатура.Артикул КАК Артикул, | СпрНоменклатура.Код КАК Код, | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры | ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура | ПО ШтрихкодыНоменклатуры.Номенклатура = СпрНоменклатура.Ссылка"); Результат = Запрос.Выполнить().Выгрузить(); ТаблицаШтрихкоды = Новый ТаблицаЗначений; ТаблицаШтрихкоды.Колонки.Добавить("Номенклатура"); ТаблицаШтрихкоды.Колонки.Добавить("Артикул"); ТаблицаШтрихкоды.Колонки.Добавить("Код"); ТаблицаШтрихкоды.Колонки.Добавить("Штрихкод1"); Для Каждого СтрокаРезультата Из Результат Цикл НайденнаяСтрокаТаблицы = ТаблицаШтрихкоды.Найти(СтрокаРезультата.Номенклатура, "Номенклатура"); Если НайденнаяСтрокаТаблицы = Неопределено Тогда НоваяСтрока = ТаблицаШтрихкоды.Добавить(); НоваяСтрока.Номенклатура = СтрокаРезультата.Номенклатура; НоваяСтрока.Артикул = СтрокаРезультата.Артикул; НоваяСтрока.Код = СтрокаРезультата.Код; НоваяСтрока.Штрихкод1 = СтрокаРезультата.Штрихкод; Иначе Сч = 2; ШтрихкодЗаписан = Ложь; Пока НЕ ШтрихкодЗаписан Цикл Если ТаблицаШтрихкоды.Колонки.Найти("Штрихкод" + Сч) = Неопределено Тогда ТаблицаШтрихкоды.Колонки.Добавить("Штрихкод" + Сч); КонецЕсли; Если Строка(НайденнаяСтрокаТаблицы["Штрихкод" + Сч]) = "" Тогда НайденнаяСтрокаТаблицы["Штрихкод" + Сч] = СтрокаРезультата.Штрихкод; ШтрихкодЗаписан = Истина; КонецЕсли; Сч = Сч + 1; КонецЦикла; КонецЕсли; КонецЦикла; Возврат ТаблицаШтрихкоды; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |