Имя: Пароль:
1C
1C 7.7
v7: Вывод на печать Таблицы значений
0 Asia2016
 
24.06.21
14:14
Сформировали ТЗ.https://ibb.co/KzZzYRQ
Надо вывести на печать сгруппировав по Расходу и по счету
ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        РасходПоиск = ТЗ.Расходы ;  
        СчетПоиск   = ТЗ.СчетСписания;
        Таб.ВывестиСекцию("Расходы");  
        Таб.ВывестиСекцию("СчетСписания");
        
        Пока ТЗ.ПолучитьСтроку() = 1 Цикл  
             Если (СчетПоиск <> ТЗ.СчетСписания)  Тогда  
                  Таб.ВывестиСекцию("ИтогоСчетСписания");
                  Таб.ВывестиСекцию("СчетСписания");
                  СчетПоиск   = ТЗ.СчетСписания;
                    СуммаПоСчету = СуммаПоСчету +ТЗ.Сумма;
             ИначеЕсли (РасходПоиск = ТЗ.Расходы) Тогда
                  Таб.ВывестиСекцию("Строка");
                  СчетПоиск   = ТЗ.СчетСписания;        
                  СуммаПоСчету = СуммаПоСчету +ТЗ.Сумма;
             Иначе
                 Таб.ВывестиСекцию("ИтогоРасходы");
                 Прервать;

             КонецЕсли;  
        КонецЦикла;    
    КонецЦикла;
    Таб.ВывестиСекцию("ИтогоСчетСписания");
    Таб.ВывестиСекцию("СчетСписания");
Но криво выводит. Понимаю, что во втором цикле начинает считывать со второй записи. Обойти не могу.
В итоге получается
1 Asia2016
 
24.06.21
14:17
2 8 bit
 
24.06.21
14:20
(0) Уж сколько раз твердили миру... Дружочек, что мешает тебе все красиво сделать одним циклом?
3 Asia2016
 
24.06.21
14:24
Мозгов хватило только на 2 цикла.
4 Asia2016
 
24.06.21
14:25
Подскажите как сделать если уж не красиво, но правильно
5 FN
 
24.06.21
14:50
Скопировать ТЗ, свернуть по нужному полю.
обход скопированной ТЗ, в цикле обход оригинальной ТЗ с условием по полю.

Еще проще через Индексированную таблицу (1С++).

Еще можно без копирования одним циклом - сортировка по нужному полю и обход оригинальной ТЗ. Но тогда теряется оригинальная сортировка таблицы.
6 Ёпрст
 
24.06.21
14:51
Ща прибежит Чебур и кинет ссылкой на свою нетленку
7 Ёпрст
 
24.06.21
14:54
Ладно, пока Чебур спит, на вот
https://infostart.ru/public/14794/

Но проще использовать ИндексированнуюТаблицу, или Класс.ИтогиПоГруппировкам, или взять любой типовой отчет от ТиСа и переделать его на индексированнуюТаблицу и прямой запрос
8 Arbuz
 
24.06.21
14:59
(0) Чертил в блокноте по памяти:

//ТЗ.Сортировать("Расход,СчетСписания"); //Если ТЗ зарание не отсортированна
ТЗ.ВыбратьСтроки();
Если ТЗ.ПолучитьСтроку() = 1 Тогда
    РасходПоиск = ТЗ.Расход;
    СчетПоиск = ТЗ.СчетСписания;
КонецЕсли;
СуммаРасход = 0; //итоговая сумма для секции расход
СуммаСчет = 0;    //итоговая сумма для секции счет
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Таб.ВывестиСекцию("Расходы");  
    Таб.ВывестиСекцию("СчетСписания");
    Таб.ВывестиСекцию("Строка");
    СуммаРасход = СуммаРасход + ТЗ.Сумма;
    СуммаСчет = СуммаСчет + ТЗ.Сумма;
    Если РасходПоиск <> ТЗ.Расходы Тогда
        Таб.ВывестиСекцию("ИтогоРасходы");
        Таб.ВывестиСекцию("Расходы");
        РасходПоиск = ТЗ.Расход;
        СуммаРасход = 0;
    КонецЕсли;  
    Если СчетПоиск <> ТЗ.СчетСписания  Тогда  
        Таб.ВывестиСекцию("ИтогоСчетСписания");
        Таб.ВывестиСекцию("СчетСписания");
        СчетПоиск   = ТЗ.СчетСписания;
        СуммаСчет = 0;
    КонецЕсли;
КонецЦикла;
Если СуммаСчет <> 0  Тогда  
    Таб.ВывестиСекцию("ИтогоСчетСписания");
КонецЕсли;
Если СуммаРасход <> 0 Тогда
    Таб.ВывестиСекцию("ИтогоРасходы");
КонецЕсли;  
Таб.ВывестиСекцию("Итого");
9 Arbuz
 
24.06.21
15:04
+(8) порядок вывода секций "ИтогоРасходы" и "ИтогоСчетСписания", надеюсь сам догадаешься поменять
10 Asia2016
 
24.06.21
15:09
Спасибо всем за участие. Идею поняли. Будем разбираться.
11 Arbuz
 
24.06.21
15:09
+(9) А, всё равно не верно... поторопился :(
теперь вроде так

//ТЗ.Сортировать("Расход,СчетСписания"); //Если ТЗ зарание не отсортированна
ТЗ.ВыбратьСтроки();
Если ТЗ.ПолучитьСтроку() = 1 Тогда
    РасходПоиск = ТЗ.Расходы;
    СчетПоиск = ТЗ.СчетСписания;
    Таб.ВывестиСекцию("Расходы");  
    Таб.ВывестиСекцию("СчетСписания");
КонецЕсли;
СуммаРасход = 0; //итоговая сумма для секции расход
СуммаСчет = 0;    //итоговая сумма для секции счет
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Таб.ВывестиСекцию("Строка");
    СуммаРасход = СуммаРасход + ТЗ.Сумма;
    СуммаСчет = СуммаСчет + ТЗ.Сумма;
    Если СчетПоиск <> ТЗ.СчетСписания  Тогда  
        Таб.ВывестиСекцию("ИтогоСчетСписания");
        Таб.ВывестиСекцию("СчетСписания");
        СчетПоиск   = ТЗ.СчетСписания;
        СуммаСчет = 0;
    КонецЕсли;
    Если РасходПоиск <> ТЗ.Расходы Тогда
        Таб.ВывестиСекцию("ИтогоРасходы");
        Таб.ВывестиСекцию("Расходы");
        РасходПоиск = ТЗ.Расходы;
        СуммаРасход = 0;
    КонецЕсли;  
КонецЦикла;
Если СуммаСчет <> 0  Тогда  
    Таб.ВывестиСекцию("ИтогоСчетСписания");
КонецЕсли;
Если СуммаРасход <> 0 Тогда
    Таб.ВывестиСекцию("ИтогоРасходы");
КонецЕсли;  
Таб.ВывестиСекцию("Итого");
12 Злопчинский
 
24.06.21
22:27
Чебур не спит. Чебур едет в поезде с родины.
13 Mikeware
 
25.06.21
08:00
(12) "Штирлица неудержимо рвало на родину"©