![]() |
|
Помогите придумать алгоритм обхода таблицы значений | ☑ | ||
---|---|---|---|---|
0
К_Дач
20.08.14
✎
17:17
|
Прошу помочь... Нужно преобразовать таблицу значений, количество колонок в ней заранее неизвестно (добавляются динамически, по результатам некого запроса), каждая колонка - она же группировка, то есть по ней добавляются строки в ТЗ. Пример, что есть и что нужно получить на выходе:
http://i63.fastpic.ru/big/2014/0820/ed/83fab07779d7d9b88ee775892854bbed.jpg |
|||
1
barrgand
20.08.14
✎
17:27
|
(0) Добавить общий реквизит для сочетания Тарифная политика - Товар, например номер строки, затем по нему объединять
|
|||
2
К_Дач
20.08.14
✎
17:30
|
(1) на рисунке нижняя таблица - это результат преобразования из верхней, то есть по первой колонке одного вида - 4 строки, а надо 3; по первого колонке второго вида - 5 строк, а надо 3... Товаров может быть 100500, строк по каждому из них тоже 100500
|
|||
3
К_Дач
20.08.14
✎
17:35
|
Пока вот что придумал: запоминать максимальное количество строк в выборке по конкретной колонке, суммировать эти максимальные количества, добавлять столько строк в новую ТЗ, сколько результат получился и затем обходить уже созданную тз, перебирать исходную... должно взлететь, хотя будет ппц медленно
|
|||
4
vde69
20.08.14
✎
17:37
|
опиши процесс преобразования простым языком.
а то не понятны критерии обьединения |
|||
5
palpetrovich
20.08.14
✎
17:41
|
(0) кажись проблема в выборе решения... мне, к примеру, кажется что "тарифных политик" значительно ментше чем "товаров". Может таки поставить все с головы на ноги?
|
|||
6
К_Дач
20.08.14
✎
17:43
|
(4) Есть некий товар. Для каждого товара может быть задана своя шкала предоставляемых скидок. Товаров может быть много (это табличная часть). Шкала для каждого товара может быть своя (это тоже табличная часть). Все это вместе - элемент некоего справочника. Нужно получить отчет по этому справочнику вида как нижняя табличка рисунка, то есть если во всем справочнике всего 5 номенклатур во всех табличных частях, то колонок должно быть всего 5 и пустых полей (то есть лестничного вида) не должно быть.
Надеюсь, понятно объяснил.... |
|||
7
К_Дач
20.08.14
✎
17:44
|
(5) их может быть 100500, товаров может быть еще больше и для каждого из товаров своя шкала. Или вместо шкалы может быть вообще тупо одно число (скидка).
|
|||
8
mehfk
20.08.14
✎
17:45
|
не понятны критерии обьединения
|
|||
9
palpetrovich
20.08.14
✎
17:47
|
(7) и еще непонятно как отличить, к примеру, Товар2Политика2=2.5% от Товар2Политика2=3%
|
|||
10
Crush
20.08.14
✎
17:50
|
Запросы и СКД тут бессильны. Только ручками и циклом
|
|||
11
К_Дач
20.08.14
✎
17:52
|
"Тарифная политика" - элемент справочника. У него две ТЧ. Товары и Шкалы. Каждый товар связан со шкалой по ключу строки. Шкала может содержать 1...N строк. Товаров может быть от 1...N внутри каждого элемента.
Задача: вывести отчет, где в колонках - все ВЫБРАТЬ РАЗЛИЧНЫЕ Спр.ТарифныеПолитики.ТчТовары.Товар, в строках - шкалы, но без пустых полей, то есть как в нижней табличке на рисунке из (0) |
|||
12
vde69
20.08.14
✎
17:52
|
я бы сделал отдельный справочник "Политики" и регистр сведений с измерениями номенклатура+политика
далее номенклатура - строки политики - колонки скд - делает за 5 секунд |
|||
13
К_Дач
20.08.14
✎
17:53
|
(10) да((( я бы тут не создавал тему, если бы уже в этом не убедился...
|
|||
14
vde69
20.08.14
✎
17:53
|
(11) в корне кривая реализация....
|
|||
15
К_Дач
20.08.14
✎
17:54
|
(12) какая разница, какая связка справочник - РС или ТЧ справочника - ТЧ справочника. Запросом я так и так получаю нужную выборку, а вот как ее привести к требуемому виду, вот это вопрос
|
|||
16
К_Дач
20.08.14
✎
17:55
|
связь один ко многим, неважно в данном контексте на каких таблицах ее делать
|
|||
17
mrDSide
20.08.14
✎
18:01
|
(0) проще пареной репы - в общих модулях добавляешь функцию подсчета глобальной переменной (которую объявляешь в модуле отчета), в вычисляемых полях пишешь МояПеременная = МойОбщийМодуль.Инкремент(ПеременнаяМодуля), в ресурсах добавляешь это поле в качестве группировки, в настройках добавляешь его в группировки
|
|||
18
mrDSide
20.08.14
✎
18:02
|
(17) поправка - структуру передаешь, ключами должны быть товары (колонки)
|
|||
19
Crush
20.08.14
✎
18:03
|
Обрати внимание на схему, может что сообразишь:
Делаешь отчет(список) с группировками: Политика Товар Номер по порядку (в группе) Значение Каким то образом нужно запомнить номер по порядку и сделать группировку строк по политика+номер, и группировку колонок по товар. |
|||
20
vde69
20.08.14
✎
18:03
|
(15) важно, по тому как у тебя ключем является строка а у меня ссылка.
|
|||
21
mrDSide
20.08.14
✎
18:08
|
(0) а что мешает просто добавить группировку по полю "Тарифная политика", т.к. судя по картинке это вполне возможно
|
|||
22
К_Дач
20.08.14
✎
18:11
|
вот текст запроса исходной выборки, чтобы было понятно:
///////////////////////////////////////////////////// ВЫБРАТЬ PTR_ТарифныеПолитикиСписокУслуг.Ссылка КАК ТарифнаяПолитика, PTR_ТарифныеПолитикиСписокУслуг.Услуга КАК Услуга, PTR_ТарифныеПолитикиШкалаСкидок.ЗначениеОт, PTR_ТарифныеПолитикиШкалаСкидок.ЗначениеДо, ЕСТЬNULL(PTR_ТарифныеПолитикиШкалаСкидок.Скидка, PTR_ТарифныеПолитикиСписокУслуг.Скидка) КАК Скидка ИЗ Справочник.PTR_ТарифныеПолитики.СписокУслуг КАК PTR_ТарифныеПолитикиСписокУслуг ЛЕВОЕ СОЕДИНЕНИЕ Справочник.PTR_ТарифныеПолитики.ШкалаСкидок КАК PTR_ТарифныеПолитикиШкалаСкидок ПО PTR_ТарифныеПолитикиСписокУслуг.Ссылка = PTR_ТарифныеПолитикиШкалаСкидок.Ссылка И PTR_ТарифныеПолитикиСписокУслуг.КлючСтроки = PTR_ТарифныеПолитикиШкалаСкидок.КлючСтроки ИТОГИ ПО ТарифнаяПолитика, Услуга |
|||
23
yavasya
20.08.14
✎
18:14
|
у тебя группировка неправильная
|
|||
24
yavasya
20.08.14
✎
18:15
|
без СКД проще написать
|
|||
25
Crush
20.08.14
✎
18:22
|
О! Еще есть идея!
В скд делаешь вычисляемое поле В выражении пишешь что то типа СоединитьСтроки(Массив(Различные БлаБлаБла)) Где блаБлаБла - это Строка(от)+" - " + Строка(До) +" л: "+ Строка(Скидка)+"%" Кидаешь это поле в ресурс без агрегатной функции В настройках скд добавляешь таблицу, где строка-политика и колонка - услуга. У Функции СоединитьСтроки есть возможность задать разделитель. Можно попробовать перенос строки поставить для лучшей визуальности |
|||
26
К_Дач
20.08.14
✎
18:31
|
(19) мне больше нравится... думаю, как лучше сделать
|
|||
27
Crush
20.08.14
✎
18:36
|
(26) Проще (25)
Все равно этот отчет уже не подлежит никаким обработкам данных, только для визуального восприятия |
|||
28
EvgeniuXP
20.08.14
✎
20:00
|
(0) много пустых клеток - пустой перевод бумаги :) не одобрят.
|
|||
29
EvgeniuXP
20.08.14
✎
20:01
|
(+28) и "краски"
|
|||
30
VladZ
20.08.14
✎
20:27
|
(0) Ничего не понял. Но таблица мне не нравится.
Тут 4 "товара". А если нужно будет анализировать 100? А 300? Все, коллапс! Отчет теряет читабельность. Нужно изначально проектировать отчет так, чтобы он и на больших объемах "работал". |
|||
31
VladZ
20.08.14
✎
20:29
|
+30 Мы же, в конце концов, занимаемся автоматизацией серьезных фирм. У серьезной фирмы должны быть серьезные объемы и серьезные подходы к решению.
|
|||
32
К_Дач
20.08.14
✎
20:41
|
Огромное спасибо Crush за наводку! Сделал так: см. запрос из (22), СКД, добавил вычисляемое поле: ПолеВывод = Строка(ЗначениеОт) + "-" + Строка(ЗначениеДо) + " л:" + Строка(Скидка) + "%". Далее, добавил это поле в ресурсы, УДАЛИЛ стандартную агрегатную функцию Сумма и вместо нее задал СоединитьСтроки(ПолеВывод). Далее настройки - группировка таблицей, колонки - услуги, строки - элементы спр (тарифные политики). Детальные записи не выводим. Вуаля!
СоединитьСтроки в итоге все классно просуммировала)) з.Ы. Через 2 минуты, как отчет доделал, упал сервер, заскринить результат не удалось, завтра покажу... (31) там наименований товаров не более 10-ка, а вот применяемых политик - намного больше. |
|||
33
К_Дач
20.08.14
✎
20:45
|
(20) у меня ключ строки - уникальное число. это вообще-то типовой функционал, в любой конфе есть, открой документ "Сдача 2-ндфл в ИФНС" в ЗУП и пощелкай. Прелесть в том, что щелкая строки в одной тч, можно отборы ставить в другой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |