Имя: Пароль:
1C
1С v8
Вывести ИТОГИ в макете
0 dft2014
 
20.01.19
14:39
Собираю запросом ведомости на определенную дату. Далее, мне надо их вывести в отчет, с итоговыми суммами по каждой ведомости. Вот так: https://d.radikal.ru/d12/1901/11/85661d54c454.jpg желтым цветом выделила итоги, с выводом которых - возникла проблема, т.к. выводится итог только у последней ведомости.
Вот макет: https://a.radikal.ru/a18/1901/d0/b1ce0944393a.jpg

Ниже код, который выводит все как мне нужно, только итоги выводятся у последней ведомости, а надо после каждой ведомости:  



&НаСервере
Функция СформироватьНаСервере()
    
    ТабДок = Новый ТабличныйДокумент;
    Макет = Объект.РеквизитМакетОтчет;
    
    ВыборкаВедомостиВБанк   = ЗапросВедомостиБанк(Массив);
    
    НПП = 0;
    ИтогСумма = 0;
    ИтогНДФЛ = 0;
    
    СтароеЗначение = "";
    ТекущееЗначение = "";
    
    Пока ВыборкаВедомостиВБанк.Следующий() Цикл
        
        ТекущееЗначение = ВыборкаВедомостиВБанк.Ссылка.Номер;
        
        Если СтароеЗначение <> ТекущееЗначение Тогда
            НПП = 1;
            
            ОбластьМакетаШапка            = Макет.ПолучитьОбласть("Шапка");
            ОбластьМакетаСтрока         = Макет.ПолучитьОбласть("Строка");
            ОбластьМакетаИтог           = Макет.ПолучитьОбласть("Итог");    
            
            ТабДок.Вывести(ОбластьМакетаШапка);
            
            ОбластьМакетаСтрока.Параметры.НПП                = НПП;
            ОбластьМакетаСтрока.Параметры.НомерЛицевогоСчета = ВыборкаВедомостиВБанк.НомерЛицевогоСчета;
            ОбластьМакетаСтрока.Параметры.Физлицо            = ВыборкаВедомостиВБанк.Сотрудник.ФизическоеЛицо;
            ОбластьМакетаСтрока.Параметры.Подразделение      = ВыборкаВедомостиВБанк.Подразделение;
            ОбластьМакетаСтрока.Параметры.КВыплате           = ВыборкаВедомостиВБанк.КВыплате;
            ОбластьМакетаСтрока.Параметры.НДФЛ               = ВыборкаВедомостиВБанк.НДФЛ;
            
            ТабДок.Вывести(ОбластьМакетаСтрока);
            
            ИтогСумма = ИтогСумма + ВыборкаВедомостиВБанк.КВыплате;
            ИтогНДФЛ = ИтогНДФЛ + ВыборкаВедомостиВБанк.НДФЛ;
            
            СтароеЗначение = ТекущееЗначение;
            
        Иначе
            
            НПП = НПП + 1;
            
            ОбластьМакетаСтрока.Параметры.НПП                = НПП;
            ОбластьМакетаСтрока.Параметры.НомерЛицевогоСчета = ВыборкаВедомостиВБанк.НомерЛицевогоСчета;
            ОбластьМакетаСтрока.Параметры.Физлицо            = ВыборкаВедомостиВБанк.Сотрудник.ФизическоеЛицо;
            ОбластьМакетаСтрока.Параметры.Подразделение      = ВыборкаВедомостиВБанк.Подразделение;
            ОбластьМакетаСтрока.Параметры.КВыплате           = ВыборкаВедомостиВБанк.КВыплате;
            ОбластьМакетаСтрока.Параметры.НДФЛ               = ВыборкаВедомостиВБанк.НДФЛ;
            
            ТабДок.Вывести(ОбластьМакетаСтрока);
            
        КонецЕсли;
        
        ИтогСумма = ИтогСумма + ВедБанкКВыплате;
        ИтогНДФЛ = ИтогНДФЛ + ВедБанкНДФЛ;
        
    КонецЦикла;
    
    ТабДок.Вывести(ОбластьМакетаИтог);
    
    Возврат ТабДок;
    
КонецФункции


Функция ЗапросВедомостиБанк(Ведомости)
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("Массив", Ведомости);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка КАК Ссылка,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник КАК Сотрудник,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Подразделение КАК Подразделение,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате КАК КВыплате,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка.Номер КАК Номер,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка.ПериодРегистрации КАК ПериодРегистрации
    |ПОМЕСТИТЬ ВТ_ТЧЗарплата
    |ИЗ
    |    Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата
    |ГДЕ
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка В(&Массив)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_ТЧЗарплата.Ссылка КАК Ссылка,
    |    ВТ_ТЧЗарплата.Сотрудник КАК Сотрудник,
    |    ВТ_ТЧЗарплата.Подразделение КАК Подразделение,
    |    СУММА(ВТ_ТЧЗарплата.КВыплате) КАК КВыплате,
    |    ВТ_ТЧЗарплата.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
    |    СУММА(РасчетыНалогоплательщиковСБюджетомПоНДФЛОбороты.СуммаРасход) КАК НДФЛ,
    |    ВТ_ТЧЗарплата.Номер КАК Номер,
    |    ВТ_ТЧЗарплата.ПериодРегистрации КАК ПериодРегистрации
    |ИЗ
    |    ВТ_ТЧЗарплата КАК ВТ_ТЧЗарплата
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Обороты(, , Регистратор, ) КАК РасчетыНалогоплательщиковСБюджетомПоНДФЛОбороты
    |        ПО ВТ_ТЧЗарплата.Ссылка = РасчетыНалогоплательщиковСБюджетомПоНДФЛОбороты.Регистратор
    |            И ВТ_ТЧЗарплата.Сотрудник.ФизическоеЛицо = РасчетыНалогоплательщиковСБюджетомПоНДФЛОбороты.ФизическоеЛицо
    |
    |СГРУППИРОВАТЬ ПО
    |    ВТ_ТЧЗарплата.НомерЛицевогоСчета,
    |    ВТ_ТЧЗарплата.Подразделение,
    |    ВТ_ТЧЗарплата.Ссылка,
    |    ВТ_ТЧЗарплата.Сотрудник,
    |    ВТ_ТЧЗарплата.Номер,
    |    ВТ_ТЧЗарплата.ПериодРегистрации
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номер";
    
    Результат = Запрос.Выполнить();
    Выборка   = Результат.Выбрать();
    
    Возврат Выборка;
    
КонецФункции


&НаКлиенте
Процедура Сформировать(Команда)
    
    ТабДок = СформироватьНаСервере();
    ТабДок.Показать();
    
КонецПроцедуры
1 palsergeich
 
20.01.19
14:41
ТабДок.Вывести(ОбластьМакетаИтог); перенести в цикл, не?
2 dft2014
 
20.01.19
14:50
(1) Так тоже пробовала - итог стал выводиться после каждой строчки!
3 mastodont
 
20.01.19
15:53
(0) ну так ты просто подумай в какой момент тебе выводить итог).

В твоем примере это где-то в районе СтароеЗначение <> ТекущееЗначение надо вставлять.
Если закончилась одна ведомость, то выодим итог.

А вообще правильнее было итоги в запросе использовать.
4 dft2014
 
20.01.19
16:09
(3) Пробовала в разных местах вставлять вывод итогов в макете, но результат не тот, который мне нужен. Видимо, что-то еще в коде не хватает...
5 hhhh
 
20.01.19
16:14
(4) ну прям перед заголовком следующей таблицы ставьте
6 dft2014
 
20.01.19
16:42
Up!
7 dft2014
 
20.01.19
17:01
Может быть новую переменную создать: если НоваяВедомость = Истина, то выводить итоги?! Как вообще в подобных случаях итоги выводятся, причем итоги нужны внизу, а не вверху (это если формировать итоги уже в запросе).
8 VladZ
 
20.01.19
17:10
(7) Пригласить специалиста.
9 dft2014
 
20.01.19
17:17
(8) это я
10 VladZ
 
20.01.19
17:17
(9) Ух, беда...
11 VladZ
 
20.01.19
17:19
Итоги считаются по группировкам. Есть у тебя нужна группировка в запросе?

Если нет - можно посчитать по определенному критерию через

НужныеИтоги = НужныеИтоги + ВыборкаВедомостиВБанк.КВыплате;
12 dft2014
 
20.01.19
17:28
(11) Сейчас проблема не в том, как посчитать итоги, а как их вывести в макет!
13 dft2014
 
20.01.19
19:39
Up!
HELP!!!
14 palsergeich
 
20.01.19
22:33
(13) Для твоей задачи тебе нужно еще сделать в запросе ИТОГИ по полю Ссылка.
И обходить соответственно.
15 palsergeich
 
20.01.19
22:34
https://youtu.be/HzEs2WnvAxo Вот кино глянь
16 dft2014
 
21.01.19
01:17
(15) Спасибо! Видео как раз по теме, буду смотреть!
17 breezee
 
21.01.19
04:22
(0) Используй отладку. Странный вопрос, если честно
18 mastodont
 
21.01.19
16:49
(4) зачем вставлять в разных местах?
Надо один раз подумать и вставить там где надо.

Ты понимаешь где у тебя в коде заканчивается вывод данных одной ведомости и начинается вывод другой?
19 spiller26
 
21.01.19
17:19
А обход запроса по группировкам никак?
20 palsergeich
 
21.01.19
18:53
(19) именно это и показано в видео.
21 mastodont
 
21.01.19
19:27
(19) (14) вы серьезно? Судя по теме для нее это пока слишком сложно. Тут элементарные вещи затруднения вызывают...
22 Alexandr_U1982
 
21.01.19
19:51
(0)
"ВыборкаВедомостиВБанк.Ссылка.Номер
ВыборкаВедомостиВБанк.Сотрудник.ФизическоеЛицо"

Это где так программировать учат?
Вместо получения данных через две точки, получайте их в запросе.
23 Alexandr_U1982
 
21.01.19
19:53
(0)По теме: в запросе не хватает итогов по ведомости.
И соответственно обхода итогов.
24 catena
 
22.01.19
05:55
(21)Найти в цикле место смены документа проще, чем обход запроса по группировкам? Вы, батенька, садист.
25 K1RSAN
 
22.01.19
08:16
Ну если честно, я тоже довольно долго топтался с костылями типа "Если Первый Тогда", пока не решил посмотреть старый отчет сделанный для УПП и увидел обход по группировкам ВыборкаМастер, ВыборкаГруппа, ВыборкаЭлемент. И тогда я познал дзен и переписал свои первые костыльные запросы и процедуры вывода. Количество строк в обработке уменьшилось просто в разы.
(24) я сам такой был так что понимаю. Пока не увидел живой пример - тупил