Имя: Пароль:
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)

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

повторю:

...заранее извиняюсь перед ТС.
Но... думаю, что если "ОН" до такого не додумал...
то.... врядли осилит ИТ
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn