Имя: Пароль:
1C
 
Просто красивый код. Строит красивый отчет.
0 Гений 1С
 
гуру
04.07.06
18:33
В то время, как построители бороздят космические просторы, тупой адинэснег я пишет отчеты по-старинке.
Но красиво блин смотрелось бы, если бы не было построителя.
Отчет с группировкой по подразделению, отделу, сотруднику. Суммируется два поля Долг и Фонд. Итого внизу.
Вот код, ноу комментов.

   ИндП=0;
   
   ОблИ=Макет.ПолучитьОбласть("Итог");

   Строки=Новый Массив();
   Пока ИндП<ТД.Количество() Цикл
       ИндО=ИндП;
       
       Стр=ТД[ИндП];
       ОблП=Макет.ПолучитьОбласть("Подразделение");
       ОблП.Параметры.Подразделение = Стр.Подразделение;
       Строки.Добавить(ОблП);
       

       Пока ИндО <ТД.Количество() Цикл
           Если ТД[ИндО].Подразделение<>ТД[ИндП].Подразделение Тогда
               Прервать;
           КонецЕсли;
           
           Стр=ТД[ИндО];
           ОблО=Макет.ПолучитьОбласть("Отдел");
           ОблО.Параметры.Отдел = Стр.Отдел;
           ОблО.Параметры.Начальник = Стр.Начальник;
           ОблО.Параметры.ФондНачальника = Стр.ФондНачальника;
           Строки.Добавить(ОблО);
           
           ИндС=ИндО;
           Пока ИндС < ТД.Количество() Цикл
               Если ТД[ИндС].Отдел<>ТД[ИндО].Отдел Тогда
                   Прервать;
               КонецЕсли;
               СтрСотрудник=ТД[ИндС];
               облСтрока = Макет.ПолучитьОбласть("Сотрудник");
                           облСтрока.Параметры.Сотрудник = СтрСотрудник.Сотрудник;
               облСтрока.Параметры.ДатаПриема = Формат(СтрСотрудник.Сотрудник.ДатаПриема,"ДФ=dd.MM.yy");
               облСтрока.Параметры.Долг = СтрСотрудник.Долг;
               облСтрока.Параметры.Фонд = СтрСотрудник.Фонд;
               Строки.Добавить(облСтрока);
               
               ОблО.Параметры.Долг=ТолькоЧисло(ОблО.Параметры.Долг)+ТолькоЧисло(СтрСотрудник.Долг);
               ОблО.Параметры.Фонд=ТолькоЧисло(ОблО.Параметры.Фонд)+ТолькоЧисло(СтрСотрудник.Фонд);
               
               ОблП.Параметры.Долг=ТолькоЧисло(ОблП.Параметры.Долг)+ТолькоЧисло(СтрСотрудник.Долг);
               ОблП.Параметры.Фонд=ТолькоЧисло(ОблП.Параметры.Фонд)+ТолькоЧисло(СтрСотрудник.Фонд);
               
               ОблИ.Параметры.Долг=ТолькоЧисло(ОблИ.Параметры.Долг)+ТолькоЧисло(СтрСотрудник.Долг);
               ОблИ.Параметры.Фонд=ТолькоЧисло(ОблИ.Параметры.Фонд)+ТолькоЧисло(СтрСотрудник.Фонд);
               
               ИндС=ИндС+1;
           КонецЦикла;
           ИндО=ИндС;
       КонецЦикла;
       ИндП=ИндО;
   КонецЦикла;

   Строки.Добавить(ОблИ);

   Для Каждого Обл из Строки Цикл
       Таб.Вывести(Обл);
   КонецЦикла;
1 Гений 1С
 
гуру
04.07.06
18:34
то бишь реализован цикл с продвижением
2 Гений 1С
 
гуру
04.07.06
18:34
и отложенный вывод строк
3 France
 
04.07.06
18:37
в общем, очеред лисапед?))
4 КонецЦикла
 
04.07.06
18:38
Добавил в БЗню, действительно мегакрасиво!
5 AversDik2
 
04.07.06
18:38
(0) А у меня некрасивый отчет построил
6 Mort
 
04.07.06
18:41
КГ/АМ
КГ - Код Г.
Афтар, и чо здесь красивого?
7 Директор PR отдела
 
04.07.06
18:43
"Дерево Осипова" круче. В (0) КГ.
(6) +1
8 Mort
 
04.07.06
18:43
Чо за дерево?
9 Директор PR отдела
 
04.07.06
18:45
10 Гений 1С
 
гуру
04.07.06
18:46
(6) тебе уже сказали - цикл с продвижением и отложенный вывод строк
11 Гений 1С
 
гуру
04.07.06
18:47
(3) ну лень юзать построитель, здесь хоть я уверен, что все под контролем.
А для простенького отчета что ишо надо? ;-)
12 Mort
 
04.07.06
19:05
Имхо лень не юзать построитель, а в нём разобраться. Было бы быстрее и красивше.
13 Гений 1С
 
гуру
04.07.06
19:08
Да ну, чувак, построитель как и любая универсальная весчь - штука ограниченная. :)
14 Гений 1С
 
гуру
04.07.06
19:08
сравни объем кода здесь и в построителе. Делаем одно и тоже.
15 Гений 1С
 
гуру
04.07.06
19:09
(0) да, забыл что в начале таблу надо отсортировать. :)
16 Mort
 
04.07.06
19:15
Какой объем кода в построителе?
Присваиваем запрос. Устанавливаем параметры по запросу, вставляем доп отборы, определяем поля итогов - и всё.
17 Mort
 
04.07.06
19:16
Построитель запроса, им. ввиду.
18 х86
 
04.07.06
19:16
(0) на меленьком объеме данных будет работать нормально, при приближении в результирующем ТабДоке строк эдак к 10000 тармаза обеспечены
19 х86
 
04.07.06
19:17
облСтрока.Параметры.Долг   - а что .Заполнить() не юзаешь?
20 Mort
 
04.07.06
19:18
А про ограниченность построителя - Дадут тебе задачу добавить пару отборов и итогов - будет веселье.
21 х86
 
04.07.06
19:19
ТолькоЧисло()  - по моему это в запросе лучше сделать
22 Mort
 
04.07.06
19:20
И вообще, превратить ТЗ в дерево а потом вывести:

v8: Таблица значений - Дерево значений с итогами
23 Гений 1С
 
гуру
04.07.06
19:31
(21) мне лень было в начале параметрам-итогам присваивать нулевые значения. :)
(22) Суть данного ассемблера в получении ПОЛНОГО контроля над отчетом МИНИМАЛЬНОЙ ценой. А в ДЗ кроме суммы ничего и не сделаешь. :)
Это ассемблер чувак, ассемблер.
24 Гений 1С
 
гуру
04.07.06
19:31
(20) Я про простенькие задачки грю.
25 Mort
 
04.07.06
19:37
(23) И в чем же ценность данного продукта?
26 vasinok
 
04.07.06
21:15
(1) стесняюсь спросить: че такое "цикл с продвижением"?
27 Гений 1С
 
гуру
05.07.06
09:58
(26) Трудоемкость этого алгоритма по выводу отчета N, не N квадрат. Вот это и называется "с продвижением индекса"
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn