Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 мая 2024, 00:38

Помогите правильно вывести данные в отчет

Автор Люсёк, 11 янв 2011, 10:37

0 Пользователей и 1 гость просматривают эту тему.

Люсёк

Суть задачи состоит в следующем: нужно вывести все начисления и удержания сотрудника за период (например, несколько месяцев). Я делаю следующим образом: перечень всех начислений и удержаний выгружаю в разные таблицы значений. С помощью этих Таблиц Значений вывожу шапку таблицы в отчете. Теперь нужно под каждым начислением или удержанием вывести соответствующую сумму. Для этого делаю запрос, с помощью которого выбираю все начисления и соответствующие им суммы,группирую по периоду. Затем обхожу запрос по группировкам и одновременно в цикле обхожу записи Таблицы Значений, в которой перечень всех начислений и таким образом нахожу место куда вывести сумму.Потом тоже самое делаю для удержаний. С начислениями вроде все в порядке, выводится правильно. Проблема возникает с удержаниями,они выводятся в строчку,а должны в столбик. Как это исправить???? На скриншоте, во вложениях, показано как выводится счас и как должно выводится. Надеюсь объяснила понятно) Вот код:

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

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

cska-fanat-kz

Пока точно не могу сказать как, но надо составить запрос так чтобы в результате получалась каждая отдельная строка твоего отчета:
Начисление1, Начисление2, Начисление3,...,Удержание1, Удержание2,...

Вогнать этот запрос в функцию, возвращающую список значений (см. выше) а параметры - НачалоПериода и КонецПериода.

Далее гоняешь цикл: Месяц1, Месяц2, Месяц3,... и в нем вызываешь функцию с параметрами НачалоМесяца(Месяц1), КонецМесяца(Месяц1) и т.д.


А вообще в самом идеале - чтобы все это формировалось одним запросом, а уж потом его в СхемуКомпоновкиДанных и ввиде таблицы (строки - Месяцы; Колонки - Виды расчета)...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Люсёк

Подскажите, пожалуйста, как посчитать итог по каждой колонке табличного документа?

progmikon

Цитата: Люсёк от 13 янв 2011, 08:47
Подскажите, пожалуйста, как посчитать итог по каждой колонке табличного документа?

Как мне кажется, наиболее верно - считать итоги сразу, при формировании табличного документа.
Но в принципе, можно посчитать и в табличном документе.

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
    Макет = ПолучитьМакет("Макет");
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьМакета);
ТабДок.Показать();

Сумма = 0;
Для НомерСтр = 1 ПО ТабДок.ВысотаТаблицы Цикл
Сумма = Сумма + ТабДок.Область("R" + НомерСтр + "C1").Текст;
КонецЦикла;

Сообщить(Сумма);


В данном коде нет ряда проверок: на пустое поле + для количества строк от 1000 (пробел в отображении числа 1 000).

Люсёк

Что то у меня не получается((( Пытаюсь сделать так:

ОбластьПодвал=Макет.ПолучитьОбласть("Подвал|ОбластьШапка");      
      ТабДокумент.Вывести(ОбластьПодвал);
      
      ОбластьПодвал1=Макет.ПолучитьОбласть("Подвал|Начисления");
      
      ОбластьНачисления=Макет.ПолучитьОбласть("Строка|Начисления");
      
      Сумма = 0;
        Для НомерСтр = 1 По ТабДокумент.ВысотаТаблицы Цикл
      Сумма = Сумма + ОбластьНачисления.Параметры.Результат;
      ОбластьПодвал1.Параметры.Итого=Сумма;
      ТабДокумент.Присоединить(ОбластьПодвал1);
       КонецЦикла;

Считает какую то кривату(((

progmikon

Цитата: Люсёк от 13 янв 2011, 09:50
Что то у меня не получается((( Пытаюсь сделать так:

ОбластьПодвал=Макет.ПолучитьОбласть("Подвал|ОбластьШапка");      
      ТабДокумент.Вывести(ОбластьПодвал);
      
      ОбластьПодвал1=Макет.ПолучитьОбласть("Подвал|Начисления");
      
      ОбластьНачисления=Макет.ПолучитьОбласть("Строка|Начисления");
      
      Сумма = 0;
       Для НомерСтр = 1 По ТабДокумент.ВысотаТаблицы Цикл
      Сумма = Сумма + ОбластьНачисления.Параметры.Результат;
      ОбластьПодвал1.Параметры.Итого=Сумма;
      ТабДокумент.Присоединить(ОбластьПодвал1);
       КонецЦикла;

Считает какую то кривату(((
А почему у вас НомерСтр = 1? У вас же с 16 начинается.
И для чего вам цикл я не очень понимаю, если НомерСтр вы в нем нигде не используете....
Я же привел пример.

Люсёк

ну я хочу пробежаться по строкам колонки, сложить суммы и вывести в итог. И так для каждой колонки.

progmikon


Сумма = 0;
Для НомерСтр = 16 ПО ТабДок.ВысотаТаблицы Цикл
Сумма = Сумма + ТабДок.Область("R" + НомерСтр + "C1").Текст; // это для первой колонки (С1), для десятой будет ТабДок.Область("R" + НомерСтр + "C10!!!!!!!").Текст
КонецЦикла;

Люсёк

Выдает ошибку(((

{Форма.Форма(498)}: Ошибка при вызове метода контекста (Область): Область не найдена: R16С6
      Сумма = Сумма + ТабДокумент.Область("R" + НомерСтр + "С6").Текст;

Люсёк


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск