Имя: Пароль:
1C
1С v8
Неверный результат запроса.
,
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) "Или должны накладываться какие-то ограничения/условия?" В основном все условия заданы в параметрах запроса.
Программист всегда исправляет последнюю ошибку.