|
v7: Сделал универсальную процедуру обработки таблицы запроса или что-то прозевал? | ☑ | ||
---|---|---|---|---|
0
tgu82
21.09.17
✎
13:34
|
Запрос выгружается в таблицу значений. Одна колонка у него "период" и по ней идет разворот по горизонтали.
Старался чтобы получилось универсально. С показателями пока не работал (жестко выбираю их) Саму таблицу отчета сформировать пара пустяков когда есть уже таблица значений, развернутая по периодам Вроде правильно, но может я что-то прозевал? Процедура Сформировать() Перем Запрос, ТекстЗапроса; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с (НачДата) по (КонДата); |Без итогов; |Фирма=Регистр.Продажи.Фирма; |Покупатель = Регистр.Продажи.Покупатель; |Номенклатура = Регистр.Продажи.Номенклатура; |ПродСтоимость = Регистр.Продажи.ПродСтоимость; |Количество = Регистр.Продажи.Количество; |Функция ПродСтоимостьСумма = Сумма(ПродСтоимость); |Функция КоличествоСумма = Сумма(Количество); |Группировка Покупатель без групп; |Группировка Номенклатура без групп; |Группировка Месяц; |Условие(Номенклатура в ВыбНом); |Условие(Фирма=ВыбФирма); |Условие(Покупатель.ЮрФизЛицо.Вид()<>""СвоиЮрЛица""); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ЗначПериода="Месяц"; ТЗ=СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ); //ТЗ.ВыбратьСтроку(); СписокИзмерений=СоздатьОбъект("СписокЗначений"); Типус=""; Для СчКол=1 По ТЗ.КоличествоКолонок() Цикл Пар=ТЗ.ПолучитьПараметрыКолонки(СчКол,Типус); Если (Типус<>"Число") И (ТЗ.ПолучитьПараметрыКолонки(СчКол)<>ЗначПериода) Тогда СписокИзмерений.ДобавитьЗначение(Пар); КонецЕсли; КонецЦикла; ТЗИ=СоздатьОбъект("ТаблицаЗначений"); ТЗИ.НоваяКолонка("Параметр"); ТЗИ.НоваяКолонка("Группа"); ТЗИ.НоваяКолонка("Поиск"); ТП=СоздатьОбъект("ТаблицаЗначений"); ТП.НоваяКолонка("Параметр"); ТП.НоваяКолонка("Поиск"); ТЗП=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(ТЗП); ТЗП.Свернуть(ЗначПериода,""); ТЗП.ВыбратьСтроки(); Пока ТЗП.ПолучитьСтроку()=1 Цикл ТП.НоваяКолонка(,"Число"); КонецЦикла; //ТЗИ.ВыбратьСтроку(); // //Теперь надо так заполнить ТЗИ, чтобы попали значения в нужные колонки ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл //проверяюд первое - если есть, то второе и т.д. СтрПров=""; Спис=создатьОбъект("СписокЗначений"); Спис.УдалитьВсе(); Для СчИзм=1 По СписокИзмерений.РазмерСписка() Цикл Измерение=СписокИзмерений.ПолучитьЗначение(СчИзм); Если СчИзм=1 Тогда СтрПров=СтрПров+ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,Измерение); Иначе СтрПров=СтрПров+"-"+ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,Измерение); КонецЕсли; НомТп=0; Если ТП.НайтиЗначение(СтрПров,НомТП,"Поиск")=0 Тогда ТП.НоваяСтрока(); ТП.Параметр=ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,Измерение); ТП.Поиск=СтрПров; Период=ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,ЗначПериода); Номпер=0; Если ТЗП.НайтиЗначение(Период,Номпер,ЗначПериода)=1 Тогда ТП.УстановитьЗначение(ТП.НомерСтроки,2+НомПер,ТП.ПолучитьЗначение(ТП.НомерСтроки,2+НомПер)+ТЗ.ПродСтоимостьСумма); КонецЕсли; Иначе //надо пройти назад по цепочке и прибавить все значения по нужному месяцу ТП.ПолучитьСтрокуПоНомеру(НомТП); Период=ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,ЗначПериода); Номпер=0; Если ТЗП.НайтиЗначение(Период,Номпер,ЗначПериода)=1 Тогда ТП.УстановитьЗначение(ТП.НомерСтроки,2+НомПер,ТП.ПолучитьЗначение(ТП.НомерСтроки,2+НомПер)+ТЗ.ПродСтоимостьСумма); КонецЕсли; // // КонецЕсли; КонецЦикла; КонецЦикла; ТП.ВыбратьСтроку(); |
|||
1
aka AMIGO
21.09.17
✎
13:37
|
Хоть какой-нибудь результат есть?
|
|||
2
tgu82
21.09.17
✎
13:39
|
(1) Да вроде правильный. Просто я видел кучу отчетов подобного рода но там как-то все было сложнее
|
|||
3
Ёпрст
21.09.17
✎
13:41
|
(0) как бэ, универсальностью тут и не пахнет
|
|||
4
tgu82
21.09.17
✎
13:42
|
(1) Так можно переделать и стандартный отчет "Анализ продаж" например, да и вообще задал готовую таблицу значений, указал какое поле по вертикали разворачивать и Все.
|
|||
5
tgu82
21.09.17
✎
13:42
|
(3) Критикуй. Я поэтому и выложил.
|
|||
6
Ёпрст
21.09.17
✎
13:42
|
универсальность, это ИТЗ, класс.ИтогиПоГруппировкам, универсальныйОтчетПоТЗ с группировками и измерениями
|
|||
7
tgu82
21.09.17
✎
13:45
|
(6) Ну это по сути то же самое. Единственное, что показатели придется разворачивать несколько если надо. Но это уже дело техники. Передал в отчет ТЗ и поле для разворота - на выходе готовая таблица
|
|||
8
tgu82
21.09.17
✎
13:46
|
(6) Я про саму логику. Насколько она верна? Говорю же что видел подобное но там как-то все замороченнее
|
|||
9
romix
21.09.17
✎
13:50
|
(0) В конструкторе запросов 7.7 помнится есть галка для формирования прямоугольных таблиц: ВошедшиеВЗапрос или иже с ней.
|
|||
10
tgu82
21.09.17
✎
13:51
|
(6) Даже если сюда группы добавить по номенклатуре - все равно должно сработать
|
|||
11
tgu82
21.09.17
✎
13:52
|
(9) Таблица она как бы всегда прямоугольная ). Речь идет о динамике показателей по периодам (разворот по горизонтали)
|
|||
12
tgu82
21.09.17
✎
13:54
|
(6) Даже сортировать не нужно. Хотя наверное здесь придется использовать полноенаименование. Да в ИТЗ это как я читал - сделано по умолчанию
|
|||
13
Ёпрст
21.09.17
✎
13:58
|
(8) ну как тебе сказать ?
Делать поиск по представлению - моветон. Разным элементам справочника с одинаковым наименованием, например, и усё - твой алгоритм коту под хвост |
|||
14
Ёпрст
21.09.17
✎
14:00
|
а для некоторых справочнико, у которых, например, нет наименования или кода, так вообще веселье. Пример -
единицы измерения.. Они все будут шт. и кг. к примеру, в основном представлении. Только вот беда - всё это разные элементы с разными владельцами |
|||
15
tgu82
21.09.17
✎
14:13
|
(13) Ну в-общем согласен, хотя вопрос формирования ТЗ отделяется от формирования самого отчета по этой ТЗ
|
|||
16
tgu82
21.09.17
✎
14:15
|
(13) Есть универсальный отчет по ТЗ. классная вещь, но блин добавить туда что-то свое очень сложно. А так я владею ситуацией
|
|||
17
Ёпрст
21.09.17
✎
14:23
|
Всё ЭТО, можно сделать без ТЗ.
Достаточно ВсеВошедшиеВЗапрос+ прямое позиционирование в выборке методом Получить() |
|||
18
Ёпрст
21.09.17
✎
14:24
|
Но, всё это давно ужо не интересно.
В разы быстрее взять готовый класс или воспользоваться ИТЗ. |
|||
19
Ёпрст
21.09.17
✎
14:25
|
||||
20
Ёпрст
21.09.17
✎
14:25
|
бери это
|
|||
21
tgu82
21.09.17
✎
14:28
|
(20) Спасибо. Попробую
|
|||
22
tgu82
21.09.17
✎
14:31
|
(20) Насчет Все вошедшие в запрос - это действительно здорово, ну а если речь идет о получении ТЗ не через запрос а например из внешних файлов? Вот тут мне и пригодится рыбка которую я создал
|
|||
23
Ёпрст
21.09.17
✎
14:34
|
(22) хотя бы это смотри
http://catalog.mista.ru/public/14794/ выложено на проклабе еще лет 15 назад. |
|||
24
tgu82
21.09.17
✎
14:39
|
(23) Ну я им и пользуюсь давно, но понадобилось сделать свое потому что туда что-то встроить дополнительное - очень сложно.
|
|||
25
Злопчинский
21.09.17
✎
20:17
|
(24) ты бы привёл скриншоты примеров вывода того что у тебя
|
|||
26
2S
21.09.17
✎
20:18
|
Хрень какая-то.
Напиши на 1с++ и потом выкладывай |
|||
27
ADirks
22.09.17
✎
06:20
|
(26) одобряю :))
и с функциональщиной ещё желательно |
|||
28
Злопчинский
22.09.17
✎
08:06
|
Вы все какие-то злопы. Нет чтобы восхититься самоотверженность юнната...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |