Версия для печати темы (https://pro1c.org.ua/index.php?s=5e0f45416353a6101466a0ef8209ac30&showtopic=43739)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Сумма в запросе с условием

Автор: korney777@gmail.com 29.01.18, 23:02

Добрый вечер. Застрял на тривиальной задаче. Есть запрос.

    НачисленноОклад=СоздатьОбъект("Запрос");
        ТекстЗапроса =  
        "//{{ЗАПРОС(НачисленноОклад)
        |С Нач по (КонКвартала(ДатаПериода));
        |Обрабатывать НеПомеченныеНаУдаление;
        |ДатаДок = Документ.НачислениеЗП.ДатаДок;
        |Док = Документ.НачислениеЗП.ТекущийДокумент;
        |Оклад = Документ.НачислениеЗП.Оклад;
        |Функция ОкладСумма = сумма(Оклад);
        |Группировка ДатаДок;

        |";//}}ЗАПРОС
        Если НачисленноОклад.Выполнить(ТекстЗапроса) = 0 Тогда          
            Возврат;
        КонецЕсли;
        ОкладСумма = 0;
        Посчитать = 0;
        Декабрь = 0;
        НомСтрок = 0;
        Месяц = Нач;
        Пока НачисленноОклад.Группировка(1)=1 Цикл
            _ДатаДок=НачисленноОклад.ДатаДок;
            НомСтрок = НомСтрок+1;
            Результат.НоваяСтрока(НомСтрок);
                ОкладСумма=ОкладСумма+НачисленноОклад.ОкладСумма;                    
            НДФЛ6=СокрЛП(Формат((ОкладСумма/100*ПроцентСтавки),"Ч10.0"));
            Результат.УстановитьЗначение(НомСтрок,"Код",ДатаМесяц(_ДатаДок));
            Результат.УстановитьЗначение(НомСтрок,"ДатаДохода",_ДатаДок);
            Результат.УстановитьЗначение(НомСтрок,"СуммаДохода",ОкладСумма);
            Результат.УстановитьЗначение(НомСтрок,"СуммаУдерж",НДФЛ6);
            ОкладСумма = 0;
            НДФЛ6 = 0;    
            ДатаДок_=_ДатаДок;
        КонецЦикла;

Как в запросе получить суммы за месяц.
Или посчитать суммы документов пока выполняется группировка? Выборка происходит за три месяца. в ТЗ должно попасть три строки. Голова уже не работает.

Автор: 1Cv77 30.01.18, 0:40

korney777@gmail.com @ Вчера, 23:02 * ,
Перед циклом обозначьТЕ

ДатаДок_= 0;
СуммаМес=0;

В ЦИКЛЕ, в конце, вставьТЕ такое:
Пока НачисленноОклад.Группировка(1)=1 Цикл
   _ДатаДок=НачисленноОклад.ДатаДок;  
   Если (_ДатаДок<>ДатаДок_) И (СуммаМес<>0) Тогда
         Сообщить(СуммаМес);               /////////// ЭТО ТО ЧТО НУЖНО
     СуммаМес=0;
   КонецЕсли;
   НомСтрок = НомСтрок+1;

            Результат.НоваяСтрока(НомСтрок);
            ОкладСумма=ОкладСумма+НачисленноОклад.ОкладСумма;                    
            НДФЛ6=СокрЛП(Формат((ОкладСумма/100*ПроцентСтавки),"Ч10.0"));
            Результат.УстановитьЗначение(НомСтрок,"Код",ДатаМесяц(_ДатаДок));
            Результат.УстановитьЗначение(НомСтрок,"ДатаДохода",_ДатаДок);
            Результат.УстановитьЗначение(НомСтрок,"СуммаДохода",ОкладСумма);
            Результат.УстановитьЗначение(НомСтрок,"СуммаУдерж",НДФЛ6);
            
            СуммаМес=СуммаМес+ОкладСумма
            
            ОкладСумма = 0;
            НДФЛ6 = 0;    
            ДатаДок_=_ДатаДок;
        КонецЦикла;


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 1,9
 

P.S. Прошу прощения за "корявый" код, в плане отступов.

Автор: logist 30.01.18, 1:42

1Cv77, вы так редко пишите, что постоянно забываете правила форума...

Автор: Bernet 30.01.18, 2:02


Боже, почему же 7-ка такая корявая.... 32542620.gif 47046430.gif чтобы простенький запрос написать надо себе мозг вынести

Автор: nysysimara 30.01.18, 7:33

можно попробовать что-то типа

|Функция ОкладСумма1 = сумма(Оклад) когда((ДатаДок>=ДатаНачМес1)И(ДатаДок<=ДатаКонМес1));
|Функция ОкладСумма2 = сумма(Оклад) когда((ДатаДок>=ДатаНачМес2)И(ДатаДок<=ДатаКонМес2));
|Функция ОкладСумма3 = сумма(Оклад) когда((ДатаДок>=ДатаНачМес3)И(ДатаДок<=ДатаКонМес3));

Автор: korney777@gmail.com 30.01.18, 9:37

1Cv77, Работает, но запрос наваливает мне уже просуммированные цифры за период. Отчет не стыкуется. Может проще для каждого месяца делать запрос?

Автор: Alegzander 30.01.18, 10:59

korney777@gmail.com @ Сегодня, 10:37 * ,
Группировка Месяц?

Автор: korney777@gmail.com 30.01.18, 11:04

Alegzander @ Сегодня, 10:59 * ,
Как сгруппировать помесячно?

Автор: Alegzander 30.01.18, 12:20

korney777@gmail.com @ Сегодня, 12:04 * ,

    НачисленноОклад=СоздатьОбъект("Запрос");
        ТекстЗапроса =  
        "//{{ЗАПРОС(НачисленноОклад)
        |С Нач по (КонКвартала(ДатаПериода));
        |Обрабатывать НеПомеченныеНаУдаление;
        |ДатаДок = Документ.НачислениеЗП.ДатаДок;
        |Док = Документ.НачислениеЗП.ТекущийДокумент;
        |Оклад = Документ.НачислениеЗП.Оклад;
        |Функция ОкладСумма = сумма(Оклад);
        |Группировка Месяц; // !!!


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 9
 

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua