Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Вывод на печать Таблицы значений

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

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

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

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

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

//ТЗ.Сортировать("Расход,СчетСписания"); //Если ТЗ зарание не отсортированна

ТЗ.ВыбратьСтроки(); 
Если ТЗ.ПолучитьСтроку() = 1 Тогда
    РасходПоиск = ТЗ.Расход;
    СчетПоиск = ТЗ.СчетСписания;
КонецЕсли;
СуммаРасход = 0;//итоговая сумма для секции расход

СуммаСчет = 0;    //итоговая сумма для секции счет

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

//ТЗ.Сортировать("Расход,СчетСписания"); //Если ТЗ зарание не отсортированна

ТЗ.ВыбратьСтроки(); 
Если ТЗ.ПолучитьСтроку() = 1 Тогда
    РасходПоиск = ТЗ.Расходы;
    СчетПоиск = ТЗ.СчетСписания;
    Таб.ВывестиСекцию("Расходы");   
    Таб.ВывестиСекцию("СчетСписания");
КонецЕсли;
СуммаРасход = 0;//итоговая сумма для секции расход

СуммаСчет = 0;    //итоговая сумма для секции счет

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.