|
Неверный результат запроса. | ☑ | ||
---|---|---|---|---|
0
bplmeddy
03.03.17
✎
15:14
|
Добрый день. У меня появилась такая проблема, при подсчёте сумы по реквизиту документов и количество, результат почему-то значительно больше реального. Вот запрос:
ЗапИтог.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнойДокумент.Ссылка) КАК Док, | СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента, | СУММА(РасходнойДокумент.СумаГонорара) КАК СумаГонорара |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент = &Кон | И РасходнойДокумент.Дата >= &ДатНач | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.Проведен = &Проведен | И РасходнойДокумент.ПометкаУдаления = &ПометкаУдаления"; ЗапИтог.УстановитьПараметр("Кон",ВыбКон.Кон); ЗапИтог.УстановитьПараметр("ДатНач",ДатНач); ЗапИтог.УстановитьПараметр("ДатКон",ДатКон); ЗапИтог.УстановитьПараметр("Проведен",Истина); ЗапИтог.УстановитьПараметр("ПометкаУдаления",Ложь); Жду вашего ответа. Спасибо. |
|||
1
yzimin
03.03.17
✎
15:16
|
Реальный, это который вы в экселе руками считаете?
|
|||
2
bplmeddy
03.03.17
✎
15:18
|
(1) К примеру: у меня 4 накладных, запрос выдаёт 15, сума гонорара - 389, запрос выдаёт 1642.
|
|||
3
Dotoshin
03.03.17
✎
15:19
|
(2) Странно, что он вообще что-то выдает. Где поля группировки?
|
|||
4
Naf2017
03.03.17
✎
15:20
|
(3) ты думаешь без них нельзя?
|
|||
5
bplmeddy
03.03.17
✎
15:20
|
(3) То-есть в запрос нужно добавить группировку ??
|
|||
6
Naf2017
03.03.17
✎
15:20
|
(5) дело не в этом
|
|||
7
shamannk
03.03.17
✎
15:21
|
(2) У вас в голове?
|
|||
8
Dotoshin
03.03.17
✎
15:21
|
(4) Думаю, что без них как минимум неправильно
|
|||
9
Naf2017
03.03.17
✎
15:23
|
(8) с чего ты решил?
|
|||
10
bplmeddy
03.03.17
✎
15:24
|
(8) (9) Мне тоже интересно: как связаны неверный результат и сортировка в запросе ?
|
|||
11
Nuobu
03.03.17
✎
15:24
|
(8) А если нужна одна строка?
|
|||
12
Naf2017
03.03.17
✎
15:25
|
(10) а где тут сортировка?
|
|||
13
ChipAi
03.03.17
✎
15:25
|
(8) в чем неправильность? (0) Попробуй через внешнюю обработку запросов поиграться с результатами и посмотреть без агрегатных функции, увидишь что возвращает запрос.
|
|||
14
Naf2017
03.03.17
✎
15:25
|
ставлю, что этот запрос в цикле
нужно больше кода |
|||
15
bplmeddy
03.03.17
✎
15:26
|
(14) Да, этот запрос внутри цыкла.
|
|||
16
Nuobu
03.03.17
✎
15:27
|
(14) Ставка сыграла!
(15) Показывай код уже. |
|||
17
Dotoshin
03.03.17
✎
15:27
|
(9) (11) Ну да, не увидел, что там все поля запроса агрегатные....
|
|||
18
bplmeddy
03.03.17
✎
15:29
|
ДатНач = НачалоДня(ЭлементыФормы.НачалоПериода.Значение);
ДатКон = КонецДня(ЭлементыФормы.КонецПериода.Значение); Контрик = ЭлементыФормы.Дропшипер.Значение; ПолеОтчёт.Очистить(); ЗапКон = Новый Запрос; ЗапКон.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Кон |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &Род"; ЗапКон.УстановитьПараметр("Род",Справочники.Контрагенты.НайтиПоКоду("000000005")); ВыбКон = ЗапКон.Выполнить().Выбрать(); Пока ВыбКон.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Дропшипер = ВыбКон.Кон; //Получаем итоги за период ЗапИтог = Новый Запрос; ЗапИтог.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнойДокумент.Ссылка) КАК Док, | СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента, | СУММА(РасходнойДокумент.СумаГонорара) КАК СумаГонорара |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент = &Кон | И РасходнойДокумент.Дата >= &ДатНач | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.Проведен = &Проведен | И РасходнойДокумент.ПометкаУдаления = &ПометкаУдаления"; ЗапИтог.УстановитьПараметр("Кон",ВыбКон.Кон); ЗапИтог.УстановитьПараметр("ДатНач",ДатНач); ЗапИтог.УстановитьПараметр("ДатКон",ДатКон); ЗапИтог.УстановитьПараметр("Проведен",Истина); ЗапИтог.УстановитьПараметр("ПометкаУдаления",Ложь); ВыбИтог = ЗапИтог.Выполнить().Выбрать(); Пока ВыбИтог.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.РасходнойДокумент = ВыбИтог.Док; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.СумаДокумента = ВыбИтог.СумаДокумента; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Гонорар = ВыбИтог.СумаГонорара; КонецЦикла; |
|||
19
bplmeddy
03.03.17
✎
15:30
|
(18) Как-то так.
|
|||
20
Naf2017
03.03.17
✎
15:35
|
(18) лучше бы я этого не видел
|
|||
21
Basilio
03.03.17
✎
15:36
|
(0) Расходн_О_йДокумент этапять)). А документ "ПриходнойДокумент" тоже есть?
|
|||
22
bplmeddy
03.03.17
✎
15:39
|
(21) Это существенно влияет на работу ?
|
|||
23
Naf2017
03.03.17
✎
15:42
|
ну и скриншот результата
|
|||
24
bplmeddy
03.03.17
✎
15:44
|
||||
25
Naf2017
03.03.17
✎
15:47
|
(24) внезапно появились ссылки на документы, хотя в коде их нет
|
|||
26
Pentosh
03.03.17
✎
15:48
|
проблем тут много, но сначала разберитесь с строкой:
в ней есть что то зловещее, я это чувствую. |
|||
27
AlvlSpb
03.03.17
✎
15:55
|
ВЫБРАТЬ
КОЛИЧЕСТВО(РасходнойДокумент.Ссылка) КАК Док, СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента, СУММА(РасходнойДокумент.СумаГонорара) КАК СумаГонорара ИЗ Документ.РасходнойДокумент КАК РасходнойДокумент ГДЕ РасходнойДокумент.Контрагент = &Кон И РасходнойДокумент.Дата МЕЖДУ &ДатНач И &ДатКон И РасходнойДокумент.Проведен И НЕ РасходнойДокумент.ПометкаУдаления ЗапИтог.УстановитьПараметр("Кон",ВыбКон.Кон); ЗапИтог.УстановитьПараметр("ДатНач",ДатНач); ЗапИтог.УстановитьПараметр("ДатКон",ДатКон); |
|||
28
Naf2017
03.03.17
✎
15:57
|
(27) тогда уж и строка лишняя:
И НЕ РасходнойДокумент.ПометкаУдаления |
|||
29
AlvlSpb
03.03.17
✎
15:58
|
(28) Ну да.))) Если проведен, то точно не помечен на удаление )))))
|
|||
30
AlvlSpb
03.03.17
✎
16:00
|
Правда не совсем понимаю как может работать РасходнОйДокумент и РасходнойДокумент.СумаДокумента (с одной "м") Конфа точно самописка
|
|||
31
bplmeddy
03.03.17
✎
16:02
|
(30) Конфигурация самописная... Я уже спрашивал - это влияет на работу. Называйся они хоть "ДокаПродажаМана", это исправит ситуацию ?
|
|||
32
bplmeddy
03.03.17
✎
16:03
|
(27) Не помогло.
|
|||
33
Naf2017
03.03.17
✎
16:03
|
(30) это украинский
|
|||
34
AlvlSpb
03.03.17
✎
16:06
|
И, кстати, (3) абсолютно прав. Смысла в строке СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента абсолютно нет. Если, конечно, под СумаДокумента подразумевается сумма документа а не сумма строки. Так что правильный результат будет только с группировкой и Итогами
|
|||
35
Naf2017
03.03.17
✎
16:07
|
ты лучше скажи, как твой скриншот с кодом коррелирует?
|
|||
36
Naf2017
03.03.17
✎
16:08
|
(34) обоснуй, кстати
|
|||
37
Basilio
03.03.17
✎
16:08
|
выполни ЗапИтог с конкретными параметрами в консоли запросов. Результат правильный? Если да то проблема не в запросе. Если нет то ... тоже.
|
|||
38
Basilio
03.03.17
✎
16:10
|
(34) причем тут сумма строки? в запросе нет обращения к строкам.
|
|||
39
AlvlSpb
03.03.17
✎
16:10
|
(35) Ему надо понятней объяснять, если цель - помочь. (24) На самом деле объясни как получилось, что в запросе КОЛИЧЕСТВО (т.е. число, количество документов) а на скрине первая строка количесвто, а остальные - ссылки. Что-то опять не все в коде показано
|
|||
40
bplmeddy
03.03.17
✎
16:10
|
(34) СумаДокумента и СумаГонорара это реквизиты документа, тип- число.
|
|||
41
AlvlSpb
03.03.17
✎
16:12
|
(38) Конфа самописная. Черт его знает что вставлено как сума документа. Предположил, потому что в сумма(сумма документа) смысла нет
|
|||
42
Basilio
03.03.17
✎
16:13
|
(41) >>Предположил, потому что в сумма(сумма документа) смысла нет - конечно же есть. как еще получить сумму всех документов за неделю???
|
|||
43
bplmeddy
03.03.17
✎
16:13
|
(41) >> (40)
|
|||
44
Basilio
03.03.17
✎
16:16
|
(0) так что консоль показывает по запросу ЗапИтог? Цифры правильные?
|
|||
45
КофеIN
03.03.17
✎
16:16
|
Контрик = ЭлементыФормы.Дропшипер.Значение;
ПолеОтчёт.Очистить(); ЗапИтог = Новый Запрос; ЗапИтог.Текст = "ВЫБРАТЬ | РасходнойДокумент.Контрагент КАК Контрагент, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнойДокумент.Ссылка) КАК Док, | СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента, | СУММА(РасходнойДокумент.СумаГонорара) КАК СумаГонорара |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент.Родитель = &Кон | И РасходнойДокумент.Дата МЕЖДУ &ДатНач И &ДатКон | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.Проведен |СГРУППИРОВАТЬ ПО | РасходнойДокумент.Контрагент |ИТОГИ ПО | Контрагент"; ЗапИтог.УстановитьПараметр("Кон",Справочники.Контрагенты.НайтиПоКоду("000000005")); ЗапИтог.УстановитьПараметр("ДатНач",НачалоДня(ЭлементыФормы.НачалоПериода.Значение)); ЗапИтог.УстановитьПараметр("ДатКон",КонецДня(ЭлементыФормы.КонецПериода.Значение)); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Дропшипер = ВыборкаДетальныеЗаписи.Контрагент; ВыбПоСтрокам =ВыборкаДетальныеЗаписи.Выбрать(); Пока ВыбПоСтрокам.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.РасходнойДокумент = ВыбПоСтрокам.Док; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.СумаДокумента = ВыбПоСтрокам.СумаДокумента; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Гонорар = ВыбПоСтрокам.СумаГонорара; КонецЦикла; КонецЦикла; |
|||
46
КофеIN
03.03.17
✎
16:18
|
Запрос в цикле плохо)
|
|||
47
bplmeddy
03.03.17
✎
16:23
|
(44) У меня консоль даже не открывается. Скорее всего из за того что конфа делалась в режиме обычного (НЕ управляемого) приложения. Народ, я понимаю что всё выглядит сильно коряво. У меня к сожалению не было учителей, я самоучка. Прошу не сильно придираться.
|
|||
48
КофеIN
03.03.17
✎
16:24
|
попробуй код должно быть ок
|
|||
49
КофеIN
03.03.17
✎
16:24
|
Сами такие были)))
|
|||
50
bplmeddy
03.03.17
✎
16:26
|
(48) Сейчас попробую.
|
|||
51
Naf2017
03.03.17
✎
16:28
|
(45) ИТОГИ тут явно лишние
|
|||
52
Basilio
03.03.17
✎
16:30
|
(47) учись пользоваться консолью запросов. без нее никак. Ищи, есть разные варианты для обычных форм и управляемых.
|
|||
53
Basilio
03.03.17
✎
16:31
|
(51) ИТОГИ там как раз в тему.
|
|||
54
AlvlSpb
03.03.17
✎
16:33
|
(51) А как посчитать по контрагенту без итогов? Цель убрать запрос в цикле.
|
|||
55
AlvlSpb
03.03.17
✎
16:34
|
Правда не вижу смысла в "И РасходнойДокумент.Дата <= &ДатКон" и в "Различные"
|
|||
56
AlvlSpb
03.03.17
✎
16:36
|
(42) Понял. По скрину думал нужен список накладных, их количество и сумма по накладным. А это лучше с итогами и без Суммы по сумме документа
|
|||
57
КофеIN
03.03.17
✎
16:39
|
Правда не вижу смысла в "И РасходнойДокумент.Дата <= &ДатКон" и в "Различные" Забыл стереть
|
|||
58
bplmeddy
03.03.17
✎
16:40
|
(48) Нет, всё равно не то. Ладно народ, спасибо за ответы. Завтра буду думать, как и что с ним сделать. Топик можно закрывать, спасибо. Я домой.
|
|||
59
Naf2017
03.03.17
✎
16:41
|
(53) и что они там дают?
|
|||
60
Naf2017
03.03.17
✎
16:41
|
(54) СГРУППИРОВАТЬ достаточно
|
|||
61
AlvlSpb
03.03.17
✎
16:49
|
(58) Так и не ответил на (39) Опубликованный код явно неполный. Не может этот запрос выдать результат как в (24) Откуда ссылки?
|
|||
62
bplmeddy
03.03.17
✎
16:55
|
(61) Если честно: мне стыдно такое показывать =) Где-то в глубине души я понимаю, что сделано коряво, чтобы просто работало.
|
|||
63
bplmeddy
03.03.17
✎
16:57
|
(61) Хотя... Прошу не ржать.
Процедура Отчёт() ДатНач = НачалоДня(ЭлементыФормы.НачалоПериода.Значение); ДатКон = КонецДня(ЭлементыФормы.КонецПериода.Значение); Контрик = ЭлементыФормы.Дропшипер.Значение; ПолеОтчёт.Очистить(); ЗапКон = Новый Запрос; Если Контрик.Пустая() Тогда ЗапКон.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Кон |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &Род"; ЗапКон.УстановитьПараметр("Род",Справочники.Контрагенты.НайтиПоКоду("000000005")); Иначе ЗапКон.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Кон |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &Род | И Контрагенты.Ссылка = &Кон"; ЗапКон.УстановитьПараметр("Род",Справочники.Контрагенты.НайтиПоКоду("000000005")); ЗапКон.УстановитьПараметр("Кон",Контрик); КонецЕсли; ВыбКон = ЗапКон.Выполнить().Выбрать(); Пока ВыбКон.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Дропшипер = ВыбКон.Кон; //Получаем итоги за период ЗапИтог = Новый Запрос; ЗапИтог.Текст = "ВЫБРАТЬ | РасходнойДокумент.Контрагент КАК Контрагент, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнойДокумент.Ссылка) КАК Док, | СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента, | СУММА(РасходнойДокумент.СумаГонорара) КАК СумаГонорара |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент.Родитель = &Кон | И РасходнойДокумент.Дата МЕЖДУ &ДатНач И &ДатКон | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.Проведен |СГРУППИРОВАТЬ ПО | РасходнойДокумент.Контрагент |ИТОГИ ПО | Контрагент"; ЗапИтог.УстановитьПараметр("Кон",Справочники.Контрагенты.НайтиПоКоду("000000005")); ЗапИтог.УстановитьПараметр("ДатНач",НачалоДня(ЭлементыФормы.НачалоПериода.Значение)); ЗапИтог.УстановитьПараметр("ДатКон",КонецДня(ЭлементыФормы.КонецПериода.Значение)); РезультатЗапроса = ЗапИтог.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Дропшипер = ВыборкаДетальныеЗаписи.Контрагент; ВыбПоСтрокам =ВыборкаДетальныеЗаписи.Выбрать(); Пока ВыбПоСтрокам.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.РасходнойДокумент = ВыбПоСтрокам.Док; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.СумаДокумента = ВыбПоСтрокам.СумаДокумента; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Гонорар = ВыбПоСтрокам.СумаГонорара; КонецЦикла; КонецЦикла; //Получаем доки ДокСсыль = Документы.ПриходнойКассовыйОрдер.ПустаяСсылка(); ЗапДок = Новый Запрос; Если ЭлементыФормы.ТолькоОплаченные.Значение = Истина И ЭлементыФормы.Гонорар.Значение = Истина Тогда ЗапДок.Текст = "ВЫБРАТЬ | РасходнойДокумент.Ссылка КАК Док, | РасходнойДокумент.Дата, | РасходнойДокумент.СумаДокумента, | РасходнойДокумент.СумаГонорара, | РасходнойДокумент.НомерЕН, | РасходнойДокумент.ИнфаКонтр, | РасходнойДокумент.Гонорар |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент = &Контр | И РасходнойДокумент.Дата >= &ДатНач | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.ПометкаУдаления = &ПометкаУдаления | И РасходнойДокумент.Проведен = &Проведен | И РасходнойДокумент.ДокументПКО <> &ДокССыль | И РасходнойДокумент.Гонорар = &Гон"; ЗапДок.УстановитьПараметр("ДокССыль",ДокСсыль); ЗапДок.УстановитьПараметр("Контр",ВыбКон.Кон); ЗапДок.УстановитьПараметр("ДатНач",ДатНач); ЗапДок.УстановитьПараметр("ДатКон",ДатКон); ЗапДок.УстановитьПараметр("ПометкаУдаления",Ложь); ЗапДок.УстановитьПараметр("Проведен",Истина); ЗапДок.УстановитьПараметр("Гон",Истина); ИначеЕсли ЭлементыФормы.ТолькоОплаченные.Значение = Истина И ЭлементыФормы.Гонорар.Значение = Ложь Тогда ЗапДок.Текст = "ВЫБРАТЬ | РасходнойДокумент.Ссылка КАК Док, | РасходнойДокумент.Дата, | РасходнойДокумент.СумаДокумента, | РасходнойДокумент.СумаГонорара, | РасходнойДокумент.НомерЕН, | РасходнойДокумент.ИнфаКонтр, | РасходнойДокумент.Гонорар |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент = &Контр | И РасходнойДокумент.Дата >= &ДатНач | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.ПометкаУдаления = &ПометкаУдаления | И РасходнойДокумент.Проведен = &Проведен | И РасходнойДокумент.ДокументПКО <> &ДокССыль | И РасходнойДокумент.Гонорар = &Гон"; ЗапДок.УстановитьПараметр("ДокССыль",ДокСсыль); ЗапДок.УстановитьПараметр("Контр",ВыбКон.Кон); ЗапДок.УстановитьПараметр("ДатНач",ДатНач); ЗапДок.УстановитьПараметр("ДатКон",ДатКон); ЗапДок.УстановитьПараметр("ПометкаУдаления",Ложь); ЗапДок.УстановитьПараметр("Проведен",Истина); ЗапДок.УстановитьПараметр("Гон",Ложь); ИначеЕсли ЭлементыФормы.ТолькоОплаченные.Значение = Ложь И ЭлементыФормы.Гонорар.Значение = Истина Тогда ЗапДок.Текст = "ВЫБРАТЬ | РасходнойДокумент.Ссылка КАК Док, | РасходнойДокумент.Дата, | РасходнойДокумент.СумаДокумента, | РасходнойДокумент.СумаГонорара, | РасходнойДокумент.НомерЕН, | РасходнойДокумент.ИнфаКонтр, | РасходнойДокумент.Гонорар |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент = &Контр | И РасходнойДокумент.Дата >= &ДатНач | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.ПометкаУдаления = &ПометкаУдаления | И РасходнойДокумент.Проведен = &Проведен | И РасходнойДокумент.Гонорар = &Гон"; //ЗапДок.УстановитьПараметр("ДокССыль",ДокСсыль); ЗапДок.УстановитьПараметр("Контр",ВыбКон.Кон); ЗапДок.УстановитьПараметр("ДатНач",ДатНач); ЗапДок.УстановитьПараметр("ДатКон",ДатКон); ЗапДок.УстановитьПараметр("ПометкаУдаления",Ложь); ЗапДок.УстановитьПараметр("Проведен",Истина); ЗапДок.УстановитьПараметр("Гон",Истина); ИначеЕсли ЭлементыФормы.ТолькоОплаченные.Значение = Ложь И ЭлементыФормы.Гонорар.Значение = Ложь Тогда ЗапДок.Текст = "ВЫБРАТЬ | РасходнойДокумент.Ссылка КАК Док, | РасходнойДокумент.Дата, | РасходнойДокумент.СумаДокумента, | РасходнойДокумент.СумаГонорара, | РасходнойДокумент.НомерЕН, | РасходнойДокумент.ИнфаКонтр, | РасходнойДокумент.Гонорар |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент = &Контр | И РасходнойДокумент.Дата >= &ДатНач | И РасходнойДокумент.Дата <= &ДатКон | И РасходнойДокумент.ПометкаУдаления = &ПометкаУдаления | И РасходнойДокумент.Проведен = &Проведен | И РасходнойДокумент.Гонорар = &Гон"; //ЗапДок.УстановитьПараметр("ДокССыль",ДокСсыль); ЗапДок.УстановитьПараметр("Контр",ВыбКон.Кон); ЗапДок.УстановитьПараметр("ДатНач",ДатНач); ЗапДок.УстановитьПараметр("ДатКон",ДатКон); ЗапДок.УстановитьПараметр("ПометкаУдаления",Ложь); ЗапДок.УстановитьПараметр("Проведен",Истина); ЗапДок.УстановитьПараметр("Гон",Ложь); КонецЕсли; ВыбДок = ЗапДок.Выполнить().Выбрать(); Пока ВыбДок.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.РасходнойДокумент = ВыбДок.Док; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.ДатаДокумента = ВыбДок.Дата; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.СумаДокумента = ВыбДок.СумаДокумента; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.НомерТТН = ВыбДок.НомерЕН; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.ГонорарГалочка = ВыбДок.Гонорар; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Гонорар = ВыбДок.СумаГонорара; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Покупатель = ВыбДок.ИнфаКонтр; ЗапВыч = Новый Запрос; ЗапВыч.Текст = "ВЫБРАТЬ | РасчётыДропшиперов.Сума |ИЗ | РегистрНакопления.РасчётыДропшиперов КАК РасчётыДропшиперов |ГДЕ | РасчётыДропшиперов.Регистратор.НаОсновании.Ссылка = &Док | И РасчётыДропшиперов.ВидДвижения = &Вид"; ЗапВыч.УстановитьПараметр("Док",ВыбДок.Док); ЗапВыч.УстановитьПараметр("Вид",ВидДвиженияНакопления.Расход); ВыбВыч = ЗапВыч.Выполнить().Выбрать(); Пока ВыбВыч.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Отчисления = ВыбВыч.Сума; КонецЦикла; КонецЦикла; ЗапОтч = Новый Запрос; ЗапОтч.Текст = "ВЫБРАТЬ | РасчётыДропшиперовОбороты.СумаРасход |ИЗ | РегистрНакопления.РасчётыДропшиперов.Обороты(&ДатНач, &ДатКон, Период, ) КАК РасчётыДропшиперовОбороты |ГДЕ | РасчётыДропшиперовОбороты.Дропшипер = &Дроп"; ЗапОтч.УстановитьПараметр("Дроп",ВыбКон.Кон); ЗапОтч.УстановитьПараметр("ДатНач",ДатНач); ЗапОтч.УстановитьПараметр("ДатКон",ДатКон); ВыбОтч = ЗапОтч.Выполнить().Выбрать(); Пока ВыбОтч.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Отчисления = ВыбОтч.СумаРасход; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
64
Вафель
03.03.17
✎
16:59
|
а если все что после
// получаем итоги отбросить? |
|||
65
dezss
03.03.17
✎
17:04
|
Тебе в (3) уже намекнули.
ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнойДокумент.Ссылка) КАК Док, | СУММА(РасходнойДокумент.СумаДокумента) КАК СумаДокумента, | СУММА(РасходнойДокумент.СумаГонорара) КАК СумаГонорара Он у тебя суммирует одинаковые документы. Смысла в этом просто нет. По сумме документа и сумме гонорара просто группируй. |
|||
66
Naf2017
03.03.17
✎
17:04
|
(63) чето кода овер-дохрена
особенно порадовало 4 ветки условий с почти однотипным кодом |
|||
67
bplmeddy
03.03.17
✎
17:08
|
(66) Тогда буду благодарен за подсказку, как организовать подобное одним запросом.
|
|||
68
bplmeddy
03.03.17
✎
17:08
|
(65) А можно более "разжёвано" ? Буду благодарен.
|
|||
69
ELEA26
03.03.17
✎
17:09
|
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнойДокумент.Ссылка) - это сильно!
П.С. и чувствуется почерк "стихийного семерошника"... |
|||
70
Deon
03.03.17
✎
17:14
|
(69) Так работает Конструктор запросов когда затягиваешь ссылку в суммируемые поля группировки
|
|||
71
azernot
03.03.17
✎
17:14
|
НУ а что не так-то?
Всего за период 16 документов, из них только 5 с реквизитом "Гонорар" = Ложь. |
|||
72
dezss
03.03.17
✎
17:15
|
(68) Попробуй так
ВЫБРАТЬ | КОЛИЧЕСТВО(РасходнойДокумент.Ссылка) КАК Док, | РасходнойДокумент.СумаДокумента КАК СумаДокумента, | РасходнойДокумент.СумаГонорара КАК СумаГонорара Я вообще не понимаю как могут быть неразличными документы. |
|||
73
dezss
03.03.17
✎
17:16
|
(72) ну и эти 2 поля в группировку засунь, ессно.
| РасходнойДокумент.СумаДокумента КАК СумаДокумента, | РасходнойДокумент.СумаГонорара КАК СумаГонорара |
|||
74
Вафель
03.03.17
✎
17:17
|
(71) а для запроса сумм, почему нет такого поля?
|
|||
75
Вафель
03.03.17
✎
17:17
|
не поля, а условия
|
|||
76
dezss
03.03.17
✎
17:17
|
(70) Т.е. поменять это нельзя, да? Если он сказал различные, так надо различные. А то эти программисты всякой фигни понапишут)
|
|||
77
Вафель
03.03.17
✎
17:17
|
(73) Группировать по сумам?
Бред |
|||
78
azernot
03.03.17
✎
17:19
|
(74) Вот в том и вопрос. Запрос по итогам выдаёт все итоги, а далее расшифровка по документам выдаёт с разными ограничениями.
Логично, что они могут не совпасть. |
|||
79
dezss
03.03.17
✎
17:21
|
(77)Тьфу...
Совсем в тяпницу не думается.) Пойду я лучше прибухну. |
|||
80
Deon
03.03.17
✎
17:21
|
(76) Поменять, конечно, можно. Но в случае автора разницы нет.
|
|||
81
dezss
03.03.17
✎
17:21
|
(68) Не пробуй так...
Фигню я сморозил) |
|||
82
Deon
03.03.17
✎
17:22
|
Я вот за 80 сообщений так ни разу и не увидел, что автор пытается получить в итоге
|
|||
83
bplmeddy
03.03.17
✎
17:24
|
(82) Нужно в отчёт вывести в строках напротив контрагентов их итоговые данные, в последующих строках, развёрнутые данные по этим контрагентам(дропшиперам): документы, которые проводились, данные по каждому документу.
|
|||
84
azernot
03.03.17
✎
17:25
|
Если автор хочет, чтобы запрос из (18) дал корректные итоги на картинке из (24), ему нужно в запрос ЗапИтог добавить строчку
| И РасходнойДокумент.Гонорар = &Гон"; Это кончено муть, но так автор хотя бы поймёт, в чём у него ошибка. |
|||
85
Deon
03.03.17
✎
17:26
|
(84) &Гон ))))
|
|||
86
AlvlSpb
03.03.17
✎
17:43
|
(83) в СКД не пытался сделать?
|
|||
87
bplmeddy
03.03.17
✎
17:45
|
(86) Скд для меня вообще тёмный лес. Вот как всё это можно запихнуть в один запрос СКД ? Или я неправильно понимаю принципы работы с СКД ?
|
|||
88
bplmeddy
03.03.17
✎
17:45
|
(87) Максимум что я делал на СКД - отчёт по остаткам товара в разрезе категорий + цены.
|
|||
89
azernot
03.03.17
✎
17:49
|
Вот тебе запрос
Процедура Отчёт() ДатНач = НачалоДня(ЭлементыФормы.НачалоПериода.Значение); ДатКон = КонецДня(ЭлементыФормы.КонецПериода.Значение); Контрик = ЭлементыФормы.Дропшипер.Значение; ПолеОтчёт.Очистить(); ЗапДок.Текст = "ВЫБРАТЬ | РасходнойДокумент.Контрагент КАК Контрагент, | РасходнойДокумент.Ссылка КАК Док, | РасходнойДокумент.Дата, | РасходнойДокумент.СумаДокумента, | РасходнойДокумент.СумаГонорара, | РасходнойДокумент.НомерЕН, | РасходнойДокумент.ИнфаКонтр, | РасходнойДокумент.Гонорар |ИЗ | Документ.РасходнойДокумент КАК РасходнойДокумент |ГДЕ | РасходнойДокумент.Контрагент В Иерархии (&Контр) | И РасходнойДокумент.Дата Между &ДатНач И &ДатКон | И РасходнойДокумент.Проведен | И НЕ &ТолькоОплаченные ИЛИ НЕ РасходнойДокумент.ДокументПКО = Значение(Документы.ПриходнойКассовыйОрдер.ПустаяСсылка) | И РасходнойДокумент.Гонорар = &Гонорар |ИТОГИ | Сумма(СумаДокумента), | Сумма(СумаГонорара), | Количество(Док), | ПО | Контрагент"; ЗапДок.УстановитьПараметр("Контр",?(Контрик.Пустая(),Справочники.Контрагенты.НайтиПоКоду("000000005"), Контрик)); ЗапДок.УстановитьПараметр("ДатНач",ДатНач); ЗапДок.УстановитьПараметр("ДатКон",ДатКон); ЗапДок.УстановитьПараметр("ТолькоОплаченные",ЭлементыФормы.ТолькоОплаченные.Значение); ЗапДок.УстановитьПараметр("Гонорар",ЭлементыФормы.Гонорар.Значение); //Получаем итоги за период ВыбКон = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыбКон.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Дропшипер = ВыбКон.Контрагент; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.РасходнойДокумент = ВыбКон.Док; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.СумаДокумента = ВыбКон.СумаДокумента; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Гонорар = ВыбКон.СумаГонорара; ЗапОтч = Новый Запрос; ЗапОтч.Текст = "ВЫБРАТЬ | РасчётыДропшиперовОбороты.СумаРасход |ИЗ | РегистрНакопления.РасчётыДропшиперов.Обороты(&ДатНач, &ДатКон, Период, ) КАК РасчётыДропшиперовОбороты |ГДЕ | РасчётыДропшиперовОбороты.Дропшипер = &Дроп"; ЗапОтч.УстановитьПараметр("Дроп",ВыбКон.Кон); ЗапОтч.УстановитьПараметр("ДатНач",ДатНач); ЗапОтч.УстановитьПараметр("ДатКон",ДатКон); ВыбОтч = ЗапОтч.Выполнить().Выбрать(); Пока ВыбОтч.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Отчисления = ВыбОтч.СумаРасход; КонецЦикла; //Получаем доки ВыбДок = ВыбКон.Выбрать(); Пока ВыбДок.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ДобавитьСтроку(); ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.РасходнойДокумент = ВыбДок.Док; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.ДатаДокумента = ВыбДок.Дата; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.СумаДокумента = ВыбДок.СумаДокумента; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.НомерТТН = ВыбДок.НомерЕН; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.ГонорарГалочка = ВыбДок.Гонорар; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Гонорар = ВыбДок.СумаГонорара; ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Покупатель = ВыбДок.ИнфаКонтр; ЗапВыч = Новый Запрос; ЗапВыч.Текст = "ВЫБРАТЬ | Сумма(РасчётыДропшиперов.Сума) как Сума |ИЗ | РегистрНакопления.РасчётыДропшиперов КАК РасчётыДропшиперов |ГДЕ | РасчётыДропшиперов.Регистратор.НаОсновании.Ссылка = &Док | И РасчётыДропшиперов.ВидДвижения = &Вид"; ЗапВыч.УстановитьПараметр("Док",ВыбДок.Док); ЗапВыч.УстановитьПараметр("Вид",ВидДвиженияНакопления.Расход); ВыбВыч = ЗапВыч.Выполнить().Выбрать(); Пока ВыбВыч.Следующий() Цикл ЭлементыФормы.ПолеОтчёт.ТекущаяСтрока.Отчисления = ВыбВыч.Сума; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Я не знаю структуру регистра "РасчётыДропшиперов", поэтому оставил отдельными запросами. Но вообще, правильно сделать левое соединение с данными этого регистра в основном запросе. |
|||
90
AlvlSpb
03.03.17
✎
17:49
|
(83) И объясни, пожалуйста, зачем столько условий и разные запросы? Т.е. мой вопрос не про качество кода, а про задачу. Есть смысл в этих условиях (и если есть, то какой (т.е. тех задание точно какое), если надо просто вывести количество документов, сумму по этим документа и расшифровку по составу этих доков. Или должны накладываться какие-то ограничения/условия?
|
|||
91
AlvlSpb
03.03.17
✎
17:50
|
(87) Наверное неправильно. Такие отчеты лучше,а главное значительно проще, делать на СКД
|
|||
92
bplmeddy
03.03.17
✎
18:13
|
(90) "Или должны накладываться какие-то ограничения/условия?" В основном все условия заданы в параметрах запроса.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |