Имя: Пароль:
1C
1C 7.7
v7: Как перебрать ТЗ и вывести в отчёт.
0 Trotter
 
29.12.15
15:12
В общем имеем ТЗ:
Дата | наименование | количество
Дата | наименование | количество
Дата | наименование | количество
Дата | наименование | количество

В ТЗ всегда разное количество строк

Живая ТЗ выглядит так:
27.12.15 | пирог с яблоком  | 1
27.12.15 | пирог с яблоком  | 2
27.12.15 | пирог с черникой | 3
28.12.15 | пирог с яблоком  | 1
28.12.15 | пирог с яблоком  | 1
28.12.15 | пирог с черникой | 3
28.12.15 | пирог с черникой | 7
29.12.15 | пирог с яблоком  | 1

В отчёте должно быть следующие:
27.12.15 | пирог с яблоком  | 1
27.12.15 | пирог с яблоком  | 2
27.12.15 | пирог с черникой | 3
                  27.12.15 | пирог с яблоком  | 3
ИТОГ:             27.12.15 | пирог с черникой | 3
28.12.15 | пирог с яблоком  | 1
28.12.15 | пирог с яблоком  | 1
28.12.15 | пирог с черникой | 3
28.12.15 | пирог с черникой | 7
                  28.12.15 | пирог с яблоком  | 2
ИТОГ:             28.12.15 | пирог с черникой | 10
29.12.15 | пирог с яблоком  | 1
ИТОГ:             29.12.15 | пирог с черникой | 1

как бы вы перебрали данную ТЗ и выводили значения в отчёт ?
Нужен алгоритм! )) Если, пока, цикл... ))
1 Trotter
 
29.12.15
15:13
Ну вот "табуляция" немного поплыла... (
2 Garykom
 
гуру
29.12.15
15:15
открой для себя ТЗ.Свернуть("","")
3 Trotter
 
29.12.15
15:15
(2) Да, это уже конечный результат для поля "ИТОГ"
4 Garykom
 
гуру
29.12.15
15:15
(2)+ Свернуть("Дата,Наименование","Количество")
5 Trotter
 
29.12.15
15:15
Как разбить по датам ?
6 aka AMIGO
 
29.12.15
15:16
(5) по датам - сортировать
7 Trotter
 
29.12.15
15:16
(6) Как ? какое условие ?
8 Garykom
 
гуру
29.12.15
15:16
(3)+ так сначала свернуть а потом циклу по свернутому и внутри циклу по не свернутому с условием свернутое = начало не свернутое ))
9 Chameleon1980
 
29.12.15
15:17
копировать тз для итогов в другую (или считать в переборе)
если копировать - читать сп по свернуть
10 Trotter
 
29.12.15
15:21
(9) Условие для перебора таблици с учётом меняющихся дат какое должно быть ?
11 HawkEye
 
29.12.15
15:23
(0) если типовым механизмом,
сортируешь первую ТЗ по Дата, Наименование

выгружаешь в промежуточную ТЗ, сворачиваешь ее по Дата и Наименованию, дальше цикл по первой ТЗ с проверкой значений в текущей строке с предыдущим, как то-то изменилось - лезешь в промежуточную и достаешь итог.


или без выгрузки в промежуточную, цикл по первой, нашел дату и номенклатуру в промежуточной - добавил кол-во, не нашел создал новую строку, а по предыдущей вывел итог...
12 aka AMIGO
 
29.12.15
15:25
(7) ТЗ.Сортировать("Дата,Наименование");
а условие - по какой-нибудь темп-переменной в цикле.
тмпДата = "";

Для.. .. Цикл
Если ТЗ.дата <> тмпДата Тогда
//Печатаешь итог и заголовок
Иначе
//печать инфостроки
КонецЕсли;
13 aka AMIGO
 
29.12.15
15:26
Вернее, так:
Если ТЗ.дата <> тмпДата Тогда
//Печатаешь итог и заголовок
тмпДата = ТЗ.Дата;
...
14 aka AMIGO
 
29.12.15
15:27
В общем - всё, как обычно.
См. типовые печати в конфе
15 HawkEye
 
29.12.15
15:31
автор пиши свой код, нечего чужими мозгами жить )
16 Trotter
 
29.12.15
15:41
НовыйДень = НачДата;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл  
        ТекДень = ТЗ.Дата;
        Если НовыйДень = ТЗ.Дата Тогда
            Номер = Номер + 1;                  
            тНомер             = Номер;
            тДата             = ТЗ.Дата;
            тНаименование   = ТЗ.Наименование;
            тКоличество     = ТЗ.Количество;
            Таб.ВывестиСекцию("Строка");
                              
            
            пТЗ.НоваяСтрока();
            пТЗ.Номер             = ТЗ.Номер;
            пТЗ.Дата             = ТЗ.Дата;
            пТЗ.Наименование    = ТЗ.Наименование;
            пТЗ.Количество         = ТЗ.Количество;
            Таб.ВывестиСекцию("Строка");
            
        
            
        ИначеЕсли НовыйДень < ТЗ.Дата Тогда
            пТЗ.Свернуть("Наименование", "Количество");
            НовыйДень = ТЗ.Дата;
            текстИтого = "";
            пТЗ.ВыбратьСтроки();
            нСтр = 0;
            Пока пТЗ.ПолучитьСтроку()=1 Цикл
                нСтр = нСтр + 1;
                итНаименование = пТЗ.Наименование;
                итКоличество     =пТЗ.Количество;
                Если нСтр = пТз.КоличествоСтрок() Тогда
                    текстИтого = "ИТОГО:";        
                КонецЕсли;                      
                Таб.ВывестиСекцию("итИтог");
                //Таб.ВывестиСекцию("линия");    
            КонецЦикла;    
            Таб.ВывестиСекцию("линия");
            пТЗ.УдалитьСтроки();
        //    КонецЕсли;
        КонецЕсли;
    КонецЦикла;


Правдо с выводом "ИТОГ" мне помог друг, хитрости 7ки... ))
17 Serginio1
 
29.12.15
15:47
18 Serginio1
 
29.12.15
15:50
19 Serginio1
 
29.12.15
15:50
Использую каждый день
20 Trotter
 
29.12.15
15:51
(19) Спасибо. гляну.
21 Chameleon1980
 
29.12.15
19:01
(или считать в переборе)

ну дык писал жеж.

если новые значения опред. полей. вывод итога

обнуляем счетчик итогов и далее
22 Mikeware
 
29.12.15
19:07
или 1с++, ИндексированнаяТаблица, Группировать()
23 Chameleon1980
 
29.12.15
19:15
(22) заранее извиняюсь перед ТС.
Но... думаю, что если до такого не додумал...
то....

пердоне
24 MishaD
 
29.12.15
19:31
Посмотрел (16), сворачивание тз в цикле, не проще ли было переменную счетчик завести. А то представляю бешенную скорость работы.
25 Mikeware
 
29.12.15
19:34
(23) нифига не понял...
(24) забей.
26 Chameleon1980
 
29.12.15
19:36
(25)

пропустил "ОН"

повторю:

...заранее извиняюсь перед ТС.
Но... думаю, что если "ОН" до такого не додумал...
то.... врядли осилит ИТ