Имя: Пароль:
1C
1C 7.7
v7: Проблема с построением отчета
,
0 wad_str
 
12.12.16
11:49
Доброго всем дня!
1С 7.7 БУ платформа 7.7.027 релиз 595.
Поставлена задача построить отчет выборку документов определенного вида за период с сортировкой по контрагенту (из документа) и промежуточным итогом по контрагенту. Отчет построил, оговорюсь что пишу их довольно редко (специфика конторы)документы отбираются, упорядочиваются общий итог по периоду правильный, а вот промежуточный... засада полная.. Что только не применял, но видимо хожу не там.  Вот кусок модуля:
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;
    |ВыпРаб =Документ.ВыполнениеЭтапаРабот.ТекущийДокумент;
    |ВыпБСпр = Документ.БухгалтерскаяСправка.ТекущийДокумент;
    |ОбрабатыватьДокументы Проведенные;
    |Контр1 = Документ.БухгалтерскаяСправка.СубконтоДт1;
    |СПР = Документ.БухгалтерскаяСправка.Сумма;
    |ВидРабот1 = Документ.БухгалтерскаяСправка.СубконтоКт1;
//    |Условие(ВидРабот1 = ВидП1);
    |ДатаДок = Документ.ВыполнениеЭтапаРабот.ДатаДок;
    |НомерДок = Документ.ВыполнениеЭтапаРабот.НомерДок;
    |Количество = Документ.ВыполнениеЭтапаРабот.Количество;
    |Контрагент = Документ.ВыполнениеЭтапаРабот.Контрагент;
    |Работы = Документ.ВыполнениеЭтапаРабот.Работа;
    |Цена =Документ.ВыполнениеЭтапаРабот.Цена;
    |Сумма = Документ.ВыполнениеЭтапаРабот.Сумма;
    |НДС =Документ.ВыполнениеЭтапаРабот.НДС;
    |Всего = Документ.ВыполнениеЭтапаРабот.Всего;
    |Функция Итого = Сумма(Сумма);
    |Функция Итого1 = Сумма(НДС);
    |Функция Итого2 = Сумма(Всего);
    |Группировка Контрагент; // Упорядочить по Контрагент.Наименование Без групп;
    |Группировка ВыпРаб;
    
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Таб.ПараметрыСтраницы(2,,,,,,,,,1);
    Итого=0;
    Итого1=0;
    Итого2=0;
    ИтогСумма = 0;
    ИтогНДС = 0;
    ИтогВсего = 0;
    Пока Запрос.Группировка("Контрагент") = 1 Цикл
        Пока Запрос.Группировка("ВыпРаб") = 1 Цикл    
             Если Запрос.ВыпРаб.Проведен()= 1 Тогда
        Номер = Номер + 1;
        Таб.ВывестиСекцию("Строка");    
        Таб.ВывестиСекцию("ПромИтог");  
        ИтогСумма =ИтогСумма + Запрос.Итого;
        ИтогНДС = ИтогНДС + Запрос.Итого1;
        ИтогВсего = ИтогВсего + Запрос.Итого2;
        КонецЕсли;
    КонецЦикла;
    КонецЦикла;

     //Заполнение полей "Итого"  
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Таблица", "");

секция ПромИтог выводится после каждого документа (понимаю, что не в том цикле стоит) задача при изменении Контрагент что выходил итог. Ткните лицом в ошибку пож-та. Заранее благодарен
1 Ёпрст
 
12.12.16
11:52
(0)

    Пока Запрос.Группировка("Контрагент") = 1 Цикл
        Пока Запрос.Группировка("ВыпРаб") = 1 Цикл    
            Номер = Номер + 1;
            ИтогСумма =ИтогСумма + Запрос.Итого;
            ИтогНДС = ИтогНДС + Запрос.Итого1;
            ИтогВсего = ИтогВсего + Запрос.Итого2;
            Таб.ВывестиСекцию("Строка");    
        КонецЦикла;
        Таб.ВывестиСекцию("ПромИтог");  
    КонецЦикла;
2 Lazy Stranger
 
12.12.16
11:55
или
Пока Запрос.Группировка("Контрагент") = 1 Цикл
  Таб.ВывестиСекцию("ПромИтог");  
  Пока Запрос.Группировка("ВыпРаб") = 1 Цикл    


если контрагента хочется показать перед списком документов
3 Ёпрст
 
12.12.16
11:56
+1 вот так, если быть точнее

    Пока Запрос.Группировка("Контрагент") = 1 Цикл
        ИтогоПоКлиентосу = Запрос.Итого;
        ИтогоНДСПОКлиентосу = Запрос.Итого1;
        Пока Запрос.Группировка("ВыпРаб") = 1 Цикл    
            Номер = Номер + 1;
            ИтогСумма =ИтогСумма + Запрос.Итого;
            ИтогНДС = ИтогНДС + Запрос.Итого1;
            ИтогВсего = ИтогВсего + Запрос.Итого2;
            Таб.ВывестиСекцию("Строка");    
        КонецЦикла;
        Таб.ВывестиСекцию("ПромИтог");  //тут в ячейках ИтогоПоКлиентосу и ИтогоНДСПОКлиентосу
    КонецЦикла;
4 wad_str
 
12.12.16
11:59
работает,но как то непонятно.....
http://joxi.ru/p276vzWfo0LY5m
вот скрин
5 Ёпрст
 
12.12.16
12:06
(4) для начала, нужно определиться, где выводить итоги по клиентосу - сверху или снизу.
6 Ёпрст
 
12.12.16
12:07
и если че, см. (3) - там вывод снизу, если нужно сверху, то вывод секции "ПромИтог" сдвинь перед циклом
7 wad_str
 
12.12.16
12:12
http://joxi.ru/YmE1GLKF0ZGVQm
Все заработало!!!! Спасибо!!!!
Только лишний промежуточный итог выходит...
8 Ёпрст
 
12.12.16
12:13
(7) че написал, то и выводит
9 Ёпрст
 
12.12.16
12:13
нам отсюда твой код не видно
10 Ёпрст
 
12.12.16
12:13
и че входит в секции тоже
11 Lazy Stranger
 
12.12.16
12:13
это вообще, похоже, можно выкинуть

ИтогСумма =ИтогСумма + Запрос.Итого;
ИтогНДС = ИтогНДС + Запрос.Итого1;
ИтогВсего = ИтогВсего + Запрос.Итого2;

запрос и так итоги сам посчитает
12 wad_str
 
12.12.16
12:14
вот модуль:

    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Таб.ПараметрыСтраницы(2,,,,,,,,,1);
    Итого=0;
    Итого1=0;
    Итого2=0;
    ИтогСумма = 0;
    ИтогНДС = 0;
    ИтогВсего = 0;
    ИтогоПоКлиенту = 0;
    ИтогоНДСПоКлиенту = 0;
    ИтогоВсегоПоКлиенту = 0;
    Пока Запрос.Группировка("Контрагент") = 1 Цикл
         ИтогоПоКлиенту = Запрос.Итого;
        ИтогоНДСПОКлиенту = Запрос.Итого1;
        ИтогоВсегоПоКлиенту = Запрос.Итого2;
        
        
        
        Пока Запрос.Группировка("ВыпРаб") = 1 Цикл    
             Если Запрос.ВыпРаб.Проведен()= 1 Тогда
        Номер = Номер + 1;
        Таб.ВывестиСекцию("Строка");    
        
        ИтогСумма =ИтогСумма + Запрос.Итого;
        ИтогНДС = ИтогНДС + Запрос.Итого1;
        ИтогВсего = ИтогВсего + Запрос.Итого2;
                
КонецЦикла;
Таб.ВывестиСекцию("ПромИтог");
    КонецЦикла;
13 Ёпрст
 
12.12.16
12:16
(12) вот это выкинь и не позорься
Если Запрос.ВыпРаб.Проведен()= 1 Тогда
14 Ёпрст
 
12.12.16
12:16
и покажи свой макет
15 wad_str
 
12.12.16
12:17
если выбрость условие если проведен появляется лишний документ. Макет ща.
16 wad_str
 
12.12.16
12:18
17 Ёпрст
 
12.12.16
12:19
(15) врешь. Запрос по умолчанию обрабатывает только проведенные документы
(16) не видно названия секций.
18 Ёпрст
 
12.12.16
12:20
+17 и   |ОбрабатыватьДокументы Проведенные; там не обязательно писать
19 wad_str
 
12.12.16
12:21
хотя по журналу правильно посчитал специально . Извиняюсь, спасибо.,,

http://joxi.ru/nAyLo7nuYX9n92
20 wad_str
 
12.12.16
12:22
убрал и то и то
21 wad_str
 
12.12.16
12:23
Он Кстати сдваивает только первые три раза а потом норм идет.... Как так?
22 wad_str
 
12.12.16
12:23
23 Ёпрст
 
12.12.16
12:24
(21) да блин,
    |Группировка Контрагент Без групп;
24 Ёпрст
 
12.12.16
12:24
сделай.
25 Ёпрст
 
12.12.16
12:24
ты просто итоги по всем группам получаешь
26 wad_str
 
12.12.16
12:26
Спасибо, прошу прощения за тупоголовость, когда нерегулярно пишешь -элементарные вещи забываются. Еще раз спасибо всем огромное!!!!!!!
27 Ёпрст
 
12.12.16
12:26
Ну и на так, перепиши

    ИтогСумма  = Запрос.Итого;
    ИтогНДС    = Запрос.Итого1;
       ИтогВсего  = Запрос.Итого2;
    Пока Запрос.Группировка("Контрагент") = 1 Цикл
        ИтогоПоКлиентосу = Запрос.Итого;
        ИтогоНДСПОКлиентосу = Запрос.Итого1;
        Пока Запрос.Группировка("ВыпРаб") = 1 Цикл    
            Таб.ВывестиСекцию("Строка");    
        КонецЦикла;
        Таб.ВывестиСекцию("ПромИтог");  //тут в ячейках ИтогоПоКлиентосу и ИтогоНДСПОКлиентосу
    КонецЦикла;
28 Ёпрст
 
12.12.16
12:27
не нужно там в цикле ничего складывать
29 wad_str
 
12.12.16
12:28
Хорошо, спасибо еще раз!!! Вы очень помогли, с утра сидел голову ломал. Вижу что просто, а где не вижу....,

http://joxi.ru/J2bNYv6IX4qDR2

Переписал, работает, Спасибо!