|
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
|
||||
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
|
||||
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 Переписал, работает, Спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |