Имя: Пароль:
1C
1C 7.7
v7: Запрос в отчете 1С 7.7
0 lirt82
 
06.04.15
05:32
в отчете есть запрос по двум документам, но в одном доке нужно взять из его таб части 2 реквизита (ВыигрышиТираж и Выигрыши), код ниже но возникает ошибка. Подскажите как исправить.

Запрос3 = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать7)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ТМЦ = Документ.ОтчетРеализатораТиражМомент.ТМЦ, Документ.ОтчетАгентов.Лотерея;
    |Выигрыши1 = Документ.ОтчетРеализатораТиражМомент.ВыигрышиТираж, Документ.ОтчетАгентов.Выигрыши;
    |Выгрыши2 = Документ.ОтчетРеализатораТиражМомент.Выигрыши;
    |ЧьяИгра = Документ.ОтчетРеализатораТиражМомент.ТМЦ.ЧьяИгра, Документ.ОтчетАгентов.Лотерея.ЧьяИгра;
    |Функция Выигрыши1Сумма = Сумма(Выигрыши1);
    |Функция Выгрыши2Сумма = Сумма(Выгрыши2);
    |Группировка ТМЦ без групп;
    |Условие(ЧьяИгра = ВыбЧьяИгра);
    |Условие(ТМЦ в ТирМомент);
    |"//}}ЗАПРОС                                        
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос3.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

Пока Запрос3.Группировка(1) = 1 Цикл
        Сумма3 = Сумма3 + Запрос3.Выигрыши1Сумма + Запрос3.Выигрыши2Сумма ;  
    КонецЦикла;
    
Сумма3 = Сумма3 + Запрос3.Выигрыши1Сумма + Запрос3.Выигрыши2Сумма ;  
{C:\USERS\ Поле агрегатного объекта не обнаружено (Выигрыши2Сумма)
1 Wobland
 
06.04.15
05:34
Выгрыши2Сумма
2 Wobland
 
06.04.15
05:34
(1) в тексте запрроса
3 lirt82
 
06.04.15
05:39
(2) в какую строку запроса?
4 Wobland
 
06.04.15
05:42
(3) ну надо как-то внимательней относиться к текстам запросов...
5 lirt82
 
06.04.15
05:45
если в одну строку построить напрм.
|Выигрыши = Документ.ОтчетРеализатораТиражМомент.ВыигрышиТираж, Документ.ОтчетАгентов.Выигрыши, Документ.ОтчетРеализатораТиражМомент.Выигрыши;
тогда 2-ой реквизит не видит (т.е. не считает)
6 VladZ
 
06.04.15
05:45
(0) Сам читаешь, что пишешь?
"Функция Выгрыши2Сумма = Сумма(Выгрыши2);" Прочитай эту строку три раза... Для просветления.
7 lirt82
 
06.04.15
06:10
окей, сделал так
Запрос3 = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать7)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ТМЦ = Документ.ОтчетРеализатораТиражМомент.ТМЦ, Документ.ОтчетАгентов.Лотерея;
    |Выигрыши1 = Документ.ОтчетРеализатораТиражМомент.ВыигрышиТираж, Документ.ОтчетАгентов.Выигрыши, Документ.ОтчетРеализатораТиражМомент.Выигрыши;
    |ЧьяИгра = Документ.ОтчетРеализатораТиражМомент.ТМЦ.ЧьяИгра, Документ.ОтчетАгентов.Лотерея.ЧьяИгра;
    |Функция Выигрыши1Сумма = Сумма(Выигрыши1);
    |Группировка ТМЦ без групп;
    |Условие(ЧьяИгра = ВыбЧьяИгра);
    |Условие(ТМЦ в ТирМомент);
    |"//}}ЗАПРОС                                        
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос3.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
Пока Запрос3.Группировка(1) = 1 Цикл
        Сумма3 = Сумма3 + Запрос3.Выигрыши1Сумма;  
    КонецЦикла;
теперь считает реквизит (ВыигрышиТираж), а (Выигрыши) - нет.
8 lirt82
 
06.04.15
06:13
(6) Конструктор запросов так сделал, не я:-)
9 VladZ
 
06.04.15
06:18
(8)  Конструктор в 7.7 убогий. Пиши руками. Это во-первых. А во-вторых, "Выгрыши2" руками задается в запросе. Разве нет?  :)
10 ЧеловекДуши
 
06.04.15
06:18
(0) В черных запросах, "На языке 1С", забудь про вложенность. Чем проще запрос, тем лучше. Остальное допинаешь в Цикле.
Все ровно 1С 7.7 подтянет всю таблицу к тебе на ПК ;)
11 ЧеловекДуши
 
06.04.15
06:19
(9) Ха... Лучше писать на прямых запросах, через 1С++ :)
12 lirt82
 
06.04.15
06:19
(9) да
13 ЧеловекДуши
 
06.04.15
06:19
(7) Да не липи ты все в одном запросе. 7.7 так не умеет.
Все в разных двух. Это тебе не 8.ххх, в скоросте не выйграешь :)
14 lirt82
 
06.04.15
06:58
(13) СПАСИБО, сделал 2 разных, сработала:-)
тему можно закрывать