|
|
|
Задваиваются суммы в запросе | ☑ | ||
|---|---|---|---|---|
|
0
kalisto
08.02.10
✎
11:15
|
Помогите, плиз. Что-то я туплю.
Есть запрос: ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ДатаНачала по ДатаКонца; |Фирма = Регистр.ТранспортныеРасходы.Фирма; |УпрАналитика = Регистр.ТранспортныеРасходы.Фирма.УпрАналитика; |ЮрЛицо = Регистр.ТранспортныеРасходы.Фирма.ЮрЛицо; |Контрагент = Регистр.ТранспортныеРасходы.Контрагент; |Перевозчик = Регистр.ТранспортныеРасходы.Перевозчик; |Склад = Регистр.ТранспортныеРасходы.Склад; |Реализация = Регистр.ТранспортныеРасходы.ЗаявкаЗаказ; |ВидПеревозки = Регистр.ТранспортныеРасходы.ВидПеревозки; |Док = Регистр.ТранспортныеРасходы.ТекущийДокумент; |Вес = Регистр.ТранспортныеРасходы.Вес; |Объем = Регистр.ТранспортныеРасходы.Объем; |Сумма = Регистр.ТранспортныеРасходы.Сумма; |КолвоМест = Регистр.ТранспортныеРасходы.КолвоМест; |Проект = Регистр.ТранспортныеРасходы.ЗаявкаЗаказ.Проект;"; ТекстЗапроса = ТекстЗапроса + "Функция ОбщВес = Сумма(Вес); |Функция ОбщОбъем = Сумма(Объем); |Функция ОбщСумма = Сумма(Сумма); |Функция ОбщКолвоМест = Сумма(Колвомест); |Функция ОбщСуммаРеализ = Сумма(Подсчитать(Запрос.Реализация));"; Функция Подсчитать(ЗаявкаЗаказ) ДокН = СоздатьОБъект("Документ"); ДокН.ВыбратьПодчиненныеДокументы(ДатаНачала, ДатаКонца, ЗаявкаЗаказ); Пока ДокН.ПолучитьДокумент() = 1 Цикл Если ((ДокН.Вид() = "Реализация") или (ДокН.Вид() = "ПоступлениеТМЦ")) и (ДокН.Проведен() = 1) Тогда ОбщСумма = ОбщСумма + ДокН.Сумма; КонецЕсли; КонецЦикла; Возврат ОбщСумма*1000; КонецФункции Сумма, которую возвращает функция 123 т.р., а в отчет по группировкам выводит в два раза больше. Где может быть ошибка. |
|||
|
1
1Сергей
08.02.10
✎
11:16
|
это не весь запрос
|
|||
|
2
kalisto
08.02.10
✎
11:16
|
еще там есть группировки
|
|||
|
3
1Сергей
08.02.10
✎
11:17
|
(2) классно
|
|||
|
4
kalisto
08.02.10
✎
11:17
|
НетОш = 1; // нет ошибок при наложении фильтров
Если ВидРазделителя = 1 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 2 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 3 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); КонецЕсли; НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Контрагент",ВыбКонтрагент,"ВыбКонтрагент",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Перевозчик",ВыбПеревозчик,"ВыбПеревозчик",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Склад",ВыбСклад,"ВыбСклад",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Проект",,,ТекстЗапроса,Загол); |
|||
|
5
kalisto
08.02.10
✎
11:19
|
Процедура УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)
СписокГруппировок = СоздатьОбъект("СписокЗначений"); Для Сч=1 По Группировки.РазмерСписка() Цикл Если Группировки.Пометка(Сч)=1 Тогда ПредставлениеГрупп=""; ТекстГрупп=Группировки.ПолучитьЗначение(Сч,ПредставлениеГрупп); Если (ТекстГрупп = "Контрагент") или (ТекстГрупп = "Перевозчик") или (ТекстГрупп = "Склад") Тогда ТекстБезГрупп = " без групп"; Иначе ТекстБезГрупп = ""; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Группировка "+ТекстГрупп+ТекстБезГрупп+";"; ТекстЗагол = ТекстЗагол + ?(ТекстЗагол="",""," / ")+ПредставлениеГрупп; СписокГруппировок.ДобавитьЗначение(ТекстГрупп,ПредставлениеГрупп); КонецЕсли; КонецЦикла; КонецПроцедуры // УстановитьГруппировкиЗапроса() |
|||
|
6
1Сергей
08.02.10
✎
11:22
|
Покажи получившийся текст запроса непосредственно перед командой Выполнить
|
|||
|
7
kalisto
08.02.10
✎
11:28
|
//{{ЗАПРОС(Сформировать)
Период с ДатаНачала по ДатаКонца; Фирма = Регистр.ТранспортныеРасходы.Фирма; УпрАналитика = Регистр.ТранспортныеРасходы.Фирма.УпрАналитика; ЮрЛицо = Регистр.ТранспортныеРасходы.Фирма.ЮрЛицо; Контрагент = Регистр.ТранспортныеРасходы.Контрагент; Перевозчик = Регистр.ТранспортныеРасходы.Перевозчик; Склад = Регистр.ТранспортныеРасходы.Склад; Реализация = Регистр.ТранспортныеРасходы.ЗаявкаЗаказ; ВидПеревозки = Регистр.ТранспортныеРасходы.ВидПеревозки; Док = Регистр.ТранспортныеРасходы.ТекущийДокумент; Вес = Регистр.ТранспортныеРасходы.Вес; Объем = Регистр.ТранспортныеРасходы.Объем; Сумма = Регистр.ТранспортныеРасходы.Сумма; КолвоМест = Регистр.ТранспортныеРасходы.КолвоМест; Проект = Регистр.ТранспортныеРасходы.ЗаявкаЗаказ.Проект;Функция ОбщВес = Сумма(Вес); Функция ОбщОбъем = Сумма(Объем); Функция ОбщСумма = Сумма(Сумма); Функция ОбщКолвоМест = Сумма(Колвомест); Функция ОбщСуммаРеализ = Сумма(Подсчитать(Запрос.Реализация)); Условие (Подсчитать(Запрос.Реализация) > 0);Группировка Фирма;Группировка Контрагент без групп;Группировка Проект;Группировка Реализация; |
|||
|
8
1Сергей
08.02.10
✎
11:37
|
эх, не знаю я российских конфигураций.
попробуй вот это: Процедура УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол) СписокГруппировок = СоздатьОбъект("СписокЗначений"); Для Сч=1 По Группировки.РазмерСписка() Цикл Если Группировки.Пометка(Сч)=1 Тогда ПредставлениеГрупп=""; ТекстГрупп=Группировки.ПолучитьЗначение(Сч,ПредставлениеГрупп); //Если (ТекстГрупп = "Контрагент") или (ТекстГрупп = "Перевозчик") или (ТекстГрупп = "Склад") Тогда Если (ТекстГрупп = "Контрагент") или (ТекстГрупп = "Перевозчик") или (ТекстГрупп = "Склад") или (ТекстГрупп = "Проект") Тогда //* может быть дело в этом ТекстБезГрупп = " без групп"; Иначе ТекстБезГрупп = ""; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Группировка "+ТекстГрупп+ТекстБезГрупп+";"; ТекстЗагол = ТекстЗагол + ?(ТекстЗагол="",""," / ")+ПредставлениеГрупп; СписокГруппировок.ДобавитьЗначение(ТекстГрупп,ПредставлениеГрупп); КонецЕсли; КонецЦикла; КонецПроцедуры // УстановитьГруппировкиЗапроса() |
|||
|
9
kalisto
08.02.10
✎
12:00
|
я думаю, это не поможет.
|
|||
|
10
1Сергей
08.02.10
✎
12:08
|
Вообще мне кажется, что конструкция
Функция ОбщСуммаРеализ = Сумма(Подсчитать(Запрос.Реализация)); - это такая жуткая тормозилка всего запроса |
|||
|
11
kalisto
08.02.10
✎
12:19
|
Я согласна, но мне так нужно, что бы итоги сумм по группам для реализаций выводились.
|
|||
|
12
kalisto
08.02.10
✎
12:20
|
вернее, суммы реализаций для всех групп
|
|||
|
13
1Сергей
08.02.10
✎
12:20
|
(11) Задваиваются по всем группировкам?
|
|||
|
14
Vlad_1717
08.02.10
✎
12:53
|
(7) А зачем тебе в запросе переменные
УпрАналитика = Регистр.ТранспортныеРасходы.Фирма.УпрАналитика; ЮрЛицо = Регистр.ТранспортныеРасходы.Фирма.ЮрЛицо; Перевозчик = Регистр.ТранспортныеРасходы.Перевозчик; Склад = Регистр.ТранспортныеРасходы.Склад; ВидПеревозки = Регистр.ТранспортныеРасходы.ВидПеревозки; ведь по ним дальше никаких движений... или в Подсчитать(Запрос.Реализация) используешь? |
|||
|
15
kalisto
08.02.10
✎
12:54
|
(14)они потом нужны будут
|
|||
|
16
Vlad_1717
08.02.10
✎
12:57
|
(15) Попробуй добавить группировку по
Док = Регистр.ТранспортныеРасходы.ТекущийДокумент; И там посмотри суммы. |
|||
|
17
kalisto
08.02.10
✎
13:07
|
Группировка по Док помогла. Спасибо. Теперь я поняла, в чем была проблема.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |