Имя: Пароль:
1C
1С v8
Цикл в запросе
0 minsk1s
 
12.08.14
13:22
Сижу и торможу...

Имею запрос:

    "ВЫБРАТЬ
    |    ПродажиПоКонтрагентамОбороты.Фирма КАК Фирма,
    |    ПродажиПоКонтрагентамОбороты.Склад КАК Склад,
    |    ПродажиПоКонтрагентамОбороты.Контрагент КАК Контрагент,
    |    ПродажиПоКонтрагентамОбороты.Договора КАК Договора,
    |    ПродажиПоКонтрагентамОбороты.СЗР КАК СЗР,
    |   СУММА(ПродажиПоКонтрагентамОбороты.КоличествоОборот) КАК КоличествоОборот,
    |    СУММА(ПродажиПоКонтрагентамОбороты.СуммаВалОборот) КАК СуммаВалОборот,
    |    СУММА(ПродажиПоКонтрагентамОбороты.СуммаБелОборот) КАК СуммаБелОборот
    |ИЗ
    |    РегистрНакопления.ПродажиПоКонтрагентам.Обороты(&НачДата, &КонДата, Регистратор,) КАК ПродажиПоКонтрагентамОбороты";
    
    Если УчитыватьТолькоСПризнакомЭтоДеталь=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоДеталь = Истина";
    КонецЕсли;
    Если УчитыватьТолькоСПризнакомЭтоСемена=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоСемена = Истина";
    КонецЕсли;
    Если ИсключитьСПризнакомЭтоДеталь=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоДеталь = Ложь";
    КонецЕсли;
    Если ИсключитьСПризнакомЭтоСемена=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоСемена = Ложь";
    КонецЕсли;
    
    Если СортировкаПоПокупателям=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" СГРУППИРОВАТЬ ПО
        |    ПродажиПоКонтрагентамОбороты.Контрагент,
        |    ПродажиПоКонтрагентамОбороты.Договора,
        |    ПродажиПоКонтрагентамОбороты.Склад,
        |    ПродажиПоКонтрагентамОбороты.СЗР,
        |   ПродажиПоКонтрагентамОбороты.Фирма УПОРЯДОЧИТЬ ПО
        |Контрагент,
        |Договора,
        |Склад,
        |СЗР,
        |Фирма";
    ИначеЕсли СортировкаПоДоговорам=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" СГРУППИРОВАТЬ ПО
        |    ПродажиПоКонтрагентамОбороты.Договора,
        |    ПродажиПоКонтрагентамОбороты.Контрагент,
        |    ПродажиПоКонтрагентамОбороты.Склад,
        |    ПродажиПоКонтрагентамОбороты.СЗР,
        |   ПродажиПоКонтрагентамОбороты.Фирма УПОРЯДОЧИТЬ ПО
        |Договора,
        |Контрагент,
        |Склад,
        |СЗР,
        |Фирма";
    ИначеЕсли СортировкаПоТоварам=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" СГРУППИРОВАТЬ ПО
        |    ПродажиПоКонтрагентамОбороты.СЗР,
        |    ПродажиПоКонтрагентамОбороты.Контрагент,
        |    ПродажиПоКонтрагентамОбороты.Договора,
        |    ПродажиПоКонтрагентамОбороты.Склад,
        |   ПродажиПоКонтрагентамОбороты.Фирма УПОРЯДОЧИТЬ ПО
        |СЗР,
        |Контрагент,
        |Договора,
        |Склад,
        |Фирма";
    ИначеЕсли СортировкаПоФирмам=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" СГРУППИРОВАТЬ ПО
        |    ПродажиПоКонтрагентамОбороты.Фирма,
        |    ПродажиПоКонтрагентамОбороты.Контрагент,
        |    ПродажиПоКонтрагентамОбороты.Договора,
        |    ПродажиПоКонтрагентамОбороты.Склад,
        |   ПродажиПоКонтрагентамОбороты.СЗР УПОРЯДОЧИТЬ ПО
        |Фирма,
        |Контрагент,
        |Договора,
        |Склад,
        |СЗР";
    ИначеЕсли СортировкаПоСкладам=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" СГРУППИРОВАТЬ ПО
        |    ПродажиПоКонтрагентамОбороты.Склад,
        |    ПродажиПоКонтрагентамОбороты.СЗР,
        |    ПродажиПоКонтрагентамОбороты.Фирма,
        |    ПродажиПоКонтрагентамОбороты.Контрагент,
        |   ПродажиПоКонтрагентамОбороты.Договора УПОРЯДОЧИТЬ ПО
        |Склад,
        |СЗР,
        |Фирма,
        |Контрагент,
        |Договора";
    КонецЕсли;
    Запрос.Текст = Запрос.Текст  +
    " АВТОУПОРЯДОЧИВАНИЕ";
    
    Если ВыводитьПромежуточныеИтогиСогласноСортировки=Истина Тогда
        Если СортировкаПоПокупателям=Истина Тогда
            Запрос.Текст = Запрос.Текст  +
            " ИТОГИ ПО
            |    Контрагент";
        ИначеЕсли СортировкаПоДоговорам=Истина Тогда
            Запрос.Текст = Запрос.Текст  +
            " ИТОГИ ПО
            |    Договора";
        ИначеЕсли СортировкаПоТоварам=Истина Тогда
            Запрос.Текст = Запрос.Текст  +
            " ИТОГИ ПО
            |    СЗР";
        ИначеЕсли СортировкаПоФирмам=Истина Тогда
            Запрос.Текст = Запрос.Текст  +
            " ИТОГИ ПО
            |    Фирма";
        ИначеЕсли СортировкаПоСкладам=Истина Тогда
            Запрос.Текст = Запрос.Текст  +
            " ИТОГИ ПО
            |    Склад";    
        КонецЕсли;    
    КонецЕсли;
    
    Запрос.УстановитьПараметр("Договора", Договора);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("СЗР", СЗР);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Фирма", Фирма);
    Запрос.УстановитьПараметр("НачДата", НачДата);
    Запрос.УстановитьПараметр("КонДата", КонДата);  
    
    Результат = Запрос.Выполнить();
ВыборкаДоговора = Результат.Выбрать();

Как в запрос перенести условие:

Пока ВыборкаДоговора.Следующий() Цикл

        Если НеУчитыватьНашиФирмыВПокупателях=1 Тогда
            Продолжить1=0;
            Пока СпрФирмы.следующий() цикл
                Если СпрФирмы.Соответствие=ВыборкаДоговора.Контрагент Тогда
                    Продолжить1=1;
                КонецЕсли;
            КонецЦикла;
            Если Продолжить1=1 Тогда
                Продолжить;
            КонецЕсли;
        КонецЕсли;
1 Ненавижу 1С
 
гуру
12.08.14
13:24
это переписывание кода с 7.7 что ли?
2 minsk1s
 
12.08.14
13:24
(1) угу
3 Ненавижу 1С
 
гуру
12.08.14
13:27
(2) оно и видно
1. что будет, если будет выполняться более одного условия?
2. алиасы (СЗР) в условии применять нельзя
3. условия на измерения лучше сделать в параметрах вирт. таблицы
4. условие СЗР.ЭтоСемена = Истина выглядит некрасиво, проще СЗР.ЭтоСемена


Если УчитыватьТолькоСПризнакомЭтоДеталь=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоДеталь = Истина";
    КонецЕсли;
    Если УчитыватьТолькоСПризнакомЭтоСемена=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоСемена = Истина";
    КонецЕсли;
    Если ИсключитьСПризнакомЭтоДеталь=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоДеталь = Ложь";
    КонецЕсли;
    Если ИсключитьСПризнакомЭтоСемена=Истина Тогда
        Запрос.Текст = Запрос.Текст  +" ГДЕ
        |   СЗР.ЭтоСемена = Ложь";
    КонецЕсли;
4 х86
 
12.08.14
13:28
срочно читать про СКД или построитель
5 х86
 
12.08.14
13:30
(3)п4 а ты уверен что СЗР.ЭтоСемена не составной?
6 minsk1s
 
12.08.14
13:31
(4) учту. счас запара.
7 minsk1s
 
12.08.14
13:31
(3) спасиб. поправил.
8 minsk1s
 
12.08.14
13:32
(5) не составной. повезло)
9 Ненавижу 1С
 
гуру
12.08.14
13:32
(5) и чего?