Имя: Пароль:
1C
1С v8
Как использовать итог в полях запроса?
0 vasmedv
 
06.10.14
08:21
Есть в УПП отчет Анализ заказа. В нашем ООО его немного переделали. Но все равно, он сделан на макетах.
А теперь заказчик захотел, чтобы в отчете были стандартные настройки, типа группировок и т.д.
Шеф сказал, что нужно переделать отчет на СКД или на универсальный отчет.
Я выбрал переход на СКД. Но возникла проблемма. В начале отчета выводился статус Заказа. (Выполнено, Невыполнено)
Для формирования этого статуса сначала выполняется первый запрос И проверяется условие:
<code>
    Если ТипЗаказа = "Покупателя" Тогда
        ВыгрузкаНом = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
        Если (ВыгрузкаНом.Строки.Итог("ПринятоНаСклад") = 0) И (ВыгрузкаНом.Строки.Итог("Продано") = 0)
            И (ВыгрузкаНом.Строки.Итог("ОформленоПеремещение") = 0) И (ВыгрузкаНом.Строки.Итог("ПереданоИзЦеха") = 0)
            И (ВыгрузкаНом.Строки.Итог("ГотовоВЦехе") = 0) И (ВыгрузкаНом.Строки.Итог("Выдано") = 0) Тогда
            ОбластьЗначение.Параметры.СостояниеЗаказа = "заказ НЕ ВЫПОЛНЕН";
        ИначеЕсли (Окр(ВыгрузкаНом.Строки.Итог("Заказано"),2) = Окр(ВыгрузкаНом.Строки.Итог("Снято")+ВыгрузкаНом.Строки.Итог("ПринятоНаСклад")+ВыгрузкаНом.Строки.Итог("Продано")+ВыгрузкаНом.Строки.Итог("Выдано"),2))
            //ИЛИ (Окр(ВыгрузкаНом.Строки.Итог("Заказано"),2) = Окр(ВыгрузкаНом.Строки.Итог("Снято")+ВыгрузкаНом.Строки.Итог("Продано"),2))
            //ИЛИ (Окр(ВыгрузкаНом.Строки.Итог("Заказано"),2) = Окр(ВыгрузкаНом.Строки.Итог("Снято")+ВыгрузкаНом.Строки.Итог("Выдано"),2))
            Тогда
            ОбластьЗначение.Параметры.СостояниеЗаказа = "заказ ВЫПОЛНЕН";
        Иначе
            ОбластьЗначение.Параметры.СостояниеЗаказа = "заказ ВЫПОЛНЕН ЧАСТИЧНО";                
        КонецЕсли;    
    КонецЕсли;    
</code>

Как можно в СКД посчитать итог: ВыгрузкаНом.Строки.Итог("..."), чтобы вывести статус заказа?

P.S.: Я не хочу дважды выполнять одинаковые запросы, чтобы получить итог и результат запроса.
1 b_ru
 
06.10.14
08:59
>>P.S.: Я не хочу дважды выполнять одинаковые запросы, чтобы получить итог и результат запроса.

Делаешь запрос без итогов, складываешь во временную таблицу. Потом еще одним запросом считаешь итоги по этой таблице. Двойной работы не будет.
2 vasmedv
 
06.10.14
10:19
Мысль интересная, надо подумать, сообразить. Полной картины не сформировал.
3 vasmedv
 
06.10.14
12:59
Создал новый внешний отчет "АнализПокупателейСКД_Новый".
Открыл схему компоновки данных. Добавил набор данных - запрос.
Вставил запрос:
<code>
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЗаказыПокупателей.Номенклатура КАК Номенклатура,
    ЗаказыПокупателей.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
    ЗаказыПокупателей.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
    ЗаказыПокупателей.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    СУММА(ВЫБОР
            КОГДА ЗаказыПокупателей.Регистратор = &Заказ
                ТОГДА ЗаказыПокупателей.Количество
            ИНАЧЕ 0
        КОНЕЦ * 1) КАК Заказано,
    СУММА(ВЫБОР
            КОГДА ТИПЗНАЧЕНИЯ(ЗаказыПокупателей.Регистратор) <> ТИПЗНАЧЕНИЯ(ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка))
                    И ЗаказыПокупателей.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                    И ЗаказыПокупателей.Регистратор <> &Заказ
                ТОГДА -1 * ЗаказыПокупателей.Количество
            ИНАЧЕ 0
        КОНЕЦ * 1) КАК Снято,
    СУММА(ВЫБОР
            КОГДА ЗаказыПокупателей.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                ТОГДА ЗаказыПокупателей.Количество
            ИНАЧЕ -1 * ЗаказыПокупателей.Количество
        КОНЕЦ * 1) КАК КонОстПоЗаказу
ПОМЕСТИТЬ ВТЗаказыПокупателей
ИЗ
    РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
ГДЕ
    ЗаказыПокупателей.ЗаказПокупателя = &Заказ

СГРУППИРОВАТЬ ПО
    ЗаказыПокупателей.Номенклатура,
    ЗаказыПокупателей.ХарактеристикаНоменклатуры,
    ЗаказыПокупателей.Номенклатура.ЕдиницаХраненияОстатков,
    ЗаказыПокупателей.Номенклатура.ВестиУчетПоХарактеристикам
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЗаказыПокупателей.Номенклатура КАК Номенклатура,
    ЗаказыПокупателей.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
    ЗаказыПокупателей.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
    ЗаказыПокупателей.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    СУММА(ЗаказыПокупателей.Заказано) КАК Заказано,
    СУММА(ЗаказыПокупателей.Снято) КАК Снято,
    СУММА(РазмещениеЗаказовПокупателей.КоличествоОстаток * 1) КАК ОсталосьСделать,
    СУММА(-1 * ТоварыКПолучениюНаСкладыОстатки.КоличествоОстаток * 1) КАК ПереданоИзЦеха,
    СУММА(ТоварыВРезервеНаСкладахОстаткиГотово.КоличествоОстаток * 1) КАК ГотовоВЦехе,
    СУММА(ТоварыВРезервеНаСкладахОстаткиПринято.КоличествоОстаток * 1) КАК ПринятоНаСклад,
    СУММА(ТоварыКПередачеСоСкладовОстаткиПродано.КоличествоОстаток * 1) КАК Продано,
    СУММА(ЗаказыПокупателей.КонОстПоЗаказу) КАК КонОстПоЗаказу,
    СУММА(ТоварыКПередачеСоСкладовОбороты.КоличествоРасход * 1) КАК Выдано,
    СУММА(ТоварыКПередачеСоСкладовОстаткиОформленоПеремещение.КоличествоОстаток * 1) КАК ОформленоПеремещение
ИЗ
    ВТЗаказыПокупателей КАК ЗаказыПокупателей
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(&ДатаАнализа, ЗаказПокупателя = &Заказ) КАК РазмещениеЗаказовПокупателей
        ПО ЗаказыПокупателей.Номенклатура = РазмещениеЗаказовПокупателей.Номенклатура
            И ЗаказыПокупателей.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателей.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(
                &ДатаАнализа,
                ДокументРезерва = &Заказ
                    И (Склад.Подразделение = ЗНАЧЕНИЕ(Справочник.Подразделения.ПустаяСсылка)
                        ИЛИ Склад.Подразделение.ВидПодразделения <> ЗНАЧЕНИЕ(Перечисление.ВидыПодразделений.ОсновноеПроизводство)
                            И Склад.Подразделение.ВидПодразделения <> ЗНАЧЕНИЕ(Перечисление.ВидыПодразделений.ВспомогательноеПроизводство))) КАК ТоварыКПолучениюНаСкладыОстатки
        ПО ЗаказыПокупателей.ХарактеристикаНоменклатуры = ТоварыКПолучениюНаСкладыОстатки.ХарактеристикаНоменклатуры
            И ЗаказыПокупателей.Номенклатура = ТоварыКПолучениюНаСкладыОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                &ДатаАнализа,
                ДокументРезерва = &Заказ
                    И Склад.Подразделение <> ЗНАЧЕНИЕ(Справочник.Подразделения.ПустаяСсылка)
                    И (Склад.Подразделение.ВидПодразделения = ЗНАЧЕНИЕ(Перечисление.ВидыПодразделений.ОсновноеПроизводство)
                        ИЛИ Склад.Подразделение.ВидПодразделения = ЗНАЧЕНИЕ(Перечисление.ВидыПодразделений.ВспомогательноеПроизводство))) КАК ТоварыВРезервеНаСкладахОстаткиГотово
        ПО ЗаказыПокупателей.Номенклатура = ТоварыВРезервеНаСкладахОстаткиГотово.Номенклатура
            И ЗаказыПокупателей.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстаткиГотово.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                &ДатаАнализа,
                ДокументРезерва = &Заказ
                    И (Склад.Подразделение = ЗНАЧЕНИЕ(Справочник.Подразделения.ПустаяСсылка)
                        ИЛИ Склад.Подразделение.ВидПодразделения <> ЗНАЧЕНИЕ(Перечисление.ВидыПодразделений.ОсновноеПроизводство)
                            И Склад.Подразделение.ВидПодразделения <> ЗНАЧЕНИЕ(Перечисление.ВидыПодразделений.ВспомогательноеПроизводство))) КАК ТоварыВРезервеНаСкладахОстаткиПринято
        ПО ЗаказыПокупателей.Номенклатура = ТоварыВРезервеНаСкладахОстаткиПринято.Номенклатура
            И ЗаказыПокупателей.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстаткиПринято.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
                &ДатаАнализа,
                ТИПЗНАЧЕНИЯ(ДокументПередачи) = ТИПЗНАЧЕНИЯ(ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка))
                    И ДокументПередачи.Сделка = &Заказ) КАК ТоварыКПередачеСоСкладовОстаткиПродано
        ПО ЗаказыПокупателей.Номенклатура = ТоварыКПередачеСоСкладовОстаткиПродано.Номенклатура
            И ЗаказыПокупателей.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстаткиПродано.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
                &ДатаАнализа,
                ТИПЗНАЧЕНИЯ(ДокументПередачи) = ТИПЗНАЧЕНИЯ(ЗНАЧЕНИЕ(Документ.ПеремещениеТоваров.ПустаяСсылка))
                    И ДокументРезерва = &Заказ) КАК ТоварыКПередачеСоСкладовОстаткиОформленоПеремещение
        ПО ЗаказыПокупателей.Номенклатура = ТоварыКПередачеСоСкладовОстаткиОформленоПеремещение.Номенклатура
            И ЗаказыПокупателей.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстаткиОформленоПеремещение.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Обороты(
                ,
                &ДатаАнализа,
                ,
                ТИПЗНАЧЕНИЯ(ДокументПередачи) = ТИПЗНАЧЕНИЯ(ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка))
                    И ДокументПередачи.Сделка = &Заказ) КАК ТоварыКПередачеСоСкладовОбороты
        ПО ЗаказыПокупателей.Номенклатура = ТоварыКПередачеСоСкладовОбороты.Номенклатура
            И ЗаказыПокупателей.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОбороты.ХарактеристикаНоменклатуры

СГРУППИРОВАТЬ ПО
    ЗаказыПокупателей.Номенклатура,
    ЗаказыПокупателей.Номенклатура.ЕдиницаХраненияОстатков,
    ЗаказыПокупателей.Номенклатура.ВестиУчетПоХарактеристикам,
    ЗаказыПокупателей.ХарактеристикаНоменклатуры
</code>
Это был слегка измененный запрос из функции "ПолучитьРезультатЗапросаПоНоменклатуре(Заказ, ДатаАнализа);"
В нем уже есть временная таблица. Что вставлять во временную таблицу?
Программист всегда исправляет последнюю ошибку.