7.7 Объединение строк в табличной части документа.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем roalang, 1 окт 2018.

  1. TopicStarter Overlay
    roalang
    Offline

    roalang Опытный в 1С

    Регистрация:
    31 мар 2008
    Сообщения:
    72
    Симпатии:
    0
    Баллы:
    26
    Добрый день.
    Есть документ "Платежный документ", который нужен для дальнейшей загрузки в шаблон для выгрузки.
    В табличной части этого документы, при выборе определенного лицевого счета отображаются виды тарифа и начисление для конкретного лицсчета. В строках документа указывается например "Содержание жилья", "Текущий ремонт", "Вознаграждение".
    Можно ли объединить строки чтобы выводилось только "Содержание жилья", а суммовые значения этих строк суммировались?
  2. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    711
    Симпатии:
    73
    Баллы:
    54
    сделать отчет и запросом с отбором по "Содержание жилья" и sum(значение строк) или вы хотите это в документе?
  3. TopicStarter Overlay
    roalang
    Offline

    roalang Опытный в 1С

    Регистрация:
    31 мар 2008
    Сообщения:
    72
    Симпатии:
    0
    Баллы:
    26
    Да в документе, он нужен для выгрузки в шаблон.
  4. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    711
    Симпатии:
    73
    Баллы:
    54
    выгрузка в шаблон - это на печать или другая обработка? Если да, то лучше там обрабатывайте(проще с обновлениями если они есть), а значение "Содержание жилья" храните в каком нибудь служебном справочнике или константе(не очень правильно, так как может появится хотелка и другие суммировать значения поэтому проще будет добавить значение в справочник, чем дорабатывать...)
    Далее или в цикле(суммируем и удаляем) или запросами в одном получаем сумму по значению "Содержание жилья" в другом всё кроме строк со значением "Содержание жилья" и потом объединяем или добавляем строку, как реализовать зависит от объема данных и скорости обработки информации... стоит провести замеры времени и дальше выбрать как это сделать!
    --- Объединение сообщений, 1 окт 2018 ---
    Ну либо вообще через ячейку - ставите Выражение - и дальше формулу в модуле описываете с условиями, а итог в ячейку вписываете(хотя это вряд ли подойдёт, если нужно только одно значение суммировать, а остальные пропускать)
    Последнее редактирование: 1 окт 2018
  5. TopicStarter Overlay
    roalang
    Offline

    roalang Опытный в 1С

    Регистрация:
    31 мар 2008
    Сообщения:
    72
    Симпатии:
    0
    Баллы:
    26
    Шаблон нужен для дальнейшей выгрузки на в другую программу, хотела реализовать через ТаблицуЗначений, но как связать два условия.
    Код:
        Долг = ?(Начисл.Итог("СальдоН")>0,Начисл.Итог("СальдоН"),0);
            Аванс = ?(Начисл.Итог("СальдоН")<0,-1*Начисл.Итог("СальдоН"),0);
            Платеж = Начисл.Итог("Оплата");
            Пока Начисл.ПолучитьСтроку()=1 Цикл
                Если (Начисл.Начисл=0) Тогда
                    Продолжить;
                КонецЕсли;        
                          
                НоваяСтрока();
           
                Если Лев(Начисл.ВидТарифа,4) = "Соде" тогда
                    СуммаСод = Начисл.Начисл;       
                    ТарифСод = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок))  ;
                    Сообщить("Сумма содержания " +"  " +ТарифСод + " " + СуммаСод); 
                    Сумма =  СуммаСод;
                ИначеЕсли  Лев(Начисл.ВидТарифа,4) = "Теку"     тогда
                    СуммаТек = Начисл.Начисл;       
                    ТарифТек = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок)) ;
                    Сумма =  СуммаТек;
                    Сообщить("Сумма текущего " +"  " +ТарифТек + " " + СуммаТек);  
                ИначеЕсли  Лев(Начисл.ВидТарифа,4) = "Расх"     тогда
                    СуммаРасх = Начисл.Начисл;       
                    ТарифРасх = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок)) ; 
                    Сумма =  СуммаРасх;   
                    Сообщить("Сумма расходов " +"  " +ТарифРасх + " " + СуммаРасх);       
                ИначеЕсли  Лев(Начисл.ВидТарифа,4) = "Возн"     тогда
                    СуммаВозн = Начисл.Начисл;       
                    ТарифВозн = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок)) ; 
                    Сумма =  СуммаВозн;   
                    Сообщить("Сумма вознаграждения " +"  " +ТарифВозн + " " + СуммаВозн);       
                ИначеЕсли  Лев(Начисл.ВидТарифа,4) = "Наем"     тогда
                    СуммаНаем = Начисл.Начисл;       
                    ТарифНаем = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок)) ; 
                    Сумма =  СуммаНаем;   
                    Сообщить("Сумма вознаграждения " +"  " +ТарифНаем + " " + СуммаНаем);
                иначе
                   
                    ВидТарифа = Начисл.ВидТарифа;
                    Сумма = Начисл.Начисл;
                    СумКор = Начисл.СумКор;
                КонецЕсли;   
               
                Если Начисл.ВидТарифа.ВидРасч.Типрасчета = ВидРасчета.ПоПлощади Тогда
                    Тариф = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок));
                    Объем = ЛицСчет.ОбщПл.Получить(НачМесяца(ДатаДок));
                ИначеЕсли Начисл.ВидТарифа.ВидРасч.Типрасчета = ВидРасчета.ПоКоличеству Тогда
                    Тариф = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок));
                    Объем = ЛицСчет.КолПрож.Получить(НачМесяца(ДатаДок));
                ИначеЕсли Начисл.ВидТарифа.ВидРасч.Типрасчета = ВидРасчета.ПоСчетчику Тогда
                    Тариф = Начисл.ВидТарифа.Тариф.Получить(НачМесяца(ДатаДок));
                    Объем = ?(Тариф=0,0,(Начисл.Начисл-Начисл.СумКор)/Тариф);
                    Объем = Окр(Объем,2,1);
                КонецЕсли;   
            КонецЦикла;
  6. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    711
    Симпатии:
    73
    Баллы:
    54
    Проще запросом 3 колонки() для начала суммируем(я могу подсказать как sql запрос сделать, если 7.7 запросы не смогу)
    Начисл.ВидТарифа,
    Начисл.ВидТарифа.ВидРасч.Типрасчета(вытянуть значение и присоединить справочники - сами),
    sum(Начисл.Начисл)
    За счет функции sum в запросе он сгруппирует по первым двум полям, потом уже рассчитаете итоговые суммы - просто перемножив или что там нужно сделать по формуле...
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.508
    Симпатии:
    533
    Баллы:
    204
    Правильнее группировать по ЛС... А выводить можно все что угодно
  8. TopicStarter Overlay
    roalang
    Offline

    roalang Опытный в 1С

    Регистрация:
    31 мар 2008
    Сообщения:
    72
    Симпатии:
    0
    Баллы:
    26
    Добрый день.
    Скажите пожалуйста, есть документ "Платежные документы" в каждому лицевому счету формируются данные, которые экспортируются в ексель. На первом листе Excel формируются основные данные, а на втором листе уже происходить выгрузка строк из документа.
    Код:
        ПД.ВыбратьСтроки();
            Пока ПД.ПолучитьСтроку()=1 Цикл
                row1 = row1 + 1;
            Если (Лев(ПД.ВидТарифа,4) = "Соде" )  тогда
            Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
            Лист2.Cells(row1, 2).Value = СокрЛП("Плата за содержание жилого помещения");
            ИначеЕсли  (Лев(ПД.ВидТарифа,4) = "Расх")   тогда
            //    Лист2.Cells(row1, 2).Value = СокрЛП("Плата за содержание жилого помещения"); 
        //    продолжить   
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Плата за содержание жилого помещения"); 
            ИначеЕсли (Лев(ПД.ВидТарифа,14) = "Электроэнергия") тогда
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Электроснабжение");
            ИначеЕсли  (Лев(ПД.ВидТарифа,21) = "Электрическая энергия")   тогда 
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Электрическая энергия");
            ИначеЕсли  (Лев(ПД.ВидТарифа,4) = "Холо")   тогда   
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Холодная вода");    
            ИначеЕсли  (Лев(ПД.ВидТарифа,4) = "Горя")   тогда   
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Горячая вода");
            ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Теку") тогда
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Плата за содержание жилого помещения");
            ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Наем") тогда
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Плата за пользование жилым помещением (плата за наем)");
            ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Возн") тогда
                Лист2.Cells(row1, 1).Value = СокрЛП(ПД.НомерДок);
                Лист2.Cells(row1, 2).Value = СокрЛП("Вознаграждение председателю МКД");  
            ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Госп") тогда
                row2 = row2 + 1;
                Лист4.Cells(row2, 1).Value = СокрЛП(ПД.НомерДок);
                Лист4.Cells(row2, 2).Value = СокрЛП("Государственные пошлины");  
                Лист4.Cells(row2, 3).Value = СокрЛП("Госпошлина");  
                Лист4.Cells(row2, 4).Value = Число(ПД.Сумма);
        КонецЕсли;    
    как можно сделать, чтобы при выгрузке данных, суммировался тариф и конечная сумма по строкам "Содержание жилья", "Текущий ремонт", "Вознаграждение", Расходы по управлению". а в Excel выводилась только "Плата за содержание жилого помещения".
    Я как понимаю, это можно сделать через ТаблицуЗначения?
    И если Вид тарифа "Госпошлина", то формируется строка на листе 4 с данными, а как сделать чтобы на листе 2 вообще ничего не выгружалась. Сейчас у меня получается пустая строка.
    Последнее редактирование: 10 окт 2018
  9. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    711
    Симпатии:
    73
    Баллы:
    54
    Если есть колонки с "неправильными значениями", которые в итоге должны называться по другому - замените на нужное и потом или в ТЗ , метод ТЗ.Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>)(правда не помню в 7.7 такое вроде было...)
    Или в запросе группировка и суммирование
    идея проста - меняете данные и сворачиваете по нужным значениям... Главное не забыть про то что и оригинал потребуется
    Пользуйтесь Синтаксис-помощником - полезно ;)
  10. TopicStarter Overlay
    roalang
    Offline

    roalang Опытный в 1С

    Регистрация:
    31 мар 2008
    Сообщения:
    72
    Симпатии:
    0
    Баллы:
    26
    Добрый день.
    Подскажите пожалуйста правильно сделала, а то запуталась совсем. Или Тз.Свернуть надо делать после цикла?
    Код:
        Пока ПД.ПолучитьСтроку()=1 Цикл
                Тз.НоваяСтрока(); 
                Тз.ТарифТек = 0; Тз.ТарифСод = 0; Тз.ТарифНаем = 0; Тз.ТарифРасх = 0; Тз.ТарифВозн = 0; Тз.ОбщийТариф = 0;
                Тз.СуммаТек = 0; Тз.СуммаСод = 0; Тз.СуммаНаем = 0; Тз.СуммаРасх = 0; Тз.СуммаВозн = 0; Тз.ОбщаяСумма = 0;
               
                Если (Лев(ПД.ВидТарифа,4) = "Соде" )  тогда 
                    Тз.Услуга = "Плата за содержание жилого помещения";
                    Тз.ТарифСод =  ПД.Тариф;
                    Тз.СуммаСод = ПД.Сумма;     
                ИначеЕсли  (Лев(ПД.ВидТарифа,4) = "Расх")   тогда   
                    Тз.Услуга = "Плата за содержание жилого помещения";           
                    Тз.ТарифРасх = ПД.Тариф;
                    Тз.СуммаРасх = ПД.Сумма;  
                ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Теку") тогда 
                    Тз.Услуга = "Плата за содержание жилого помещения";
                    Тз.ТарифТек =ПД.Тариф;
                    Тз.СуммаТек =ПД.Сумма; 
                ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Наем") тогда 
                    Тз.Услуга = "Плата за содержание жилого помещения";
                    Тз.ТарифНаем = ПД.Тариф;
                    Тз.СуммаНаем = ПД.Сумма;      
                ИначеЕсли (Лев(ПД.ВидТарифа,4) = "Возн") тогда   
                    Тз.Услуга = "Плата за содержание жилого помещения";
                    Тз.ТарифВозн = ПД.Тариф;
                    Тз.СуммаВозн = ПД.Сумма;      
            КонецЕсли;
                 
            Тз.Свернуть("Услуга","ТарифТек,СуммаТек,ТарифСод,СуммаСод,ТарифРасх,СуммаРасх,ТарифНаем,СуммаНаем,СуммаВозн,ТарифВозн,ОбщийТариф,ОбщаяСумма");
            КонецЦикла;     
                
                
            Тз.ВыбратьСтроки();
            Пока Тз.ПолучитьСтроку() = 1 цикл
               
                Тз.ОбщийТариф = Тз.ТарифТек + Тз.ТарифСод + Тз.ТарифРасх + Тз.ТарифНаем + Тз.ТарифВозн;
                Тз.ОбщаяСумма = Тз.СуммаТек + Тз.СуммаСод + Тз.СуммаРасх + Тз.СуммаНаем + Тз.СуммаВозн;
               
               
            КонецЦикла;
  11. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    711
    Симпатии:
    73
    Баллы:
    54
    второй цикл не нужен - можно строки перенести в конец первого, после если(у вас в конце строки будет стоять просто общая сумма строки, когда свернете - получите итоговую сумму по каждой услуге), а Свернуть после цикла

    p.s. хотя и странная таблица, но вам виднее :)
    --- Объединение сообщений, 12 окт 2018 ---
    Ещё не проснулся(( вы же хотите общую цифру получить, а не по каждой услуге, тогда в первом цикле не нужно суммировать...
    ну или сделайте лучше - выводите через ИТОГ(<колонка>)
    Последнее редактирование: 12 окт 2018
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.508
    Симпатии:
    533
    Баллы:
    204
    И еще... Если колонки типизированы (указано что число). Присваивать ноль не нужно. Там и так ноль при добавлении новой строки

Поделиться этой страницей