Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Условие на кусок кода в запросе в 1С, аналог IF в SQL?

Условие на кусок кода в запросе в 1С, аналог IF в SQL?
Я
   pvase
 
04.06.19 - 12:22
Суть задачи, надо в запросе (СКД) выполнять или не выполнять часть кода, в зависимости от параметра. В MS SQL достаточно написать так:
DECLARE @Param1 AS Int
SET @Param1 = 2
IF @Param1 = 1
BEGIN
PRINT('Helo Word')
END
ELSE
BEGIN
PRINT('Helo Word2')
END
Есть ли подобное в 1С запросе?
Суть вопроса, надо в зваисивости от параметра выполнять часть кода или нет (а точнее заполнять еще одну промежуточную таблицу или нет). Можно ли такое реализовать в 1С средствами запроса и СКД?
 
 
   shuhard
 
1 - 04.06.19 - 12:25
(0) временные таблички + колонка в ней + связь по колонке на следующем этапе
   НачинающийВ1С
 
2 - 04.06.19 - 12:25
(0) Выбор когда тогда ?
   pvase
 
3 - 04.06.19 - 12:28
Суть вопроса, немного глубже. Отчет Финансовый результат со своими аналитиками. В нем есть незаполненные аналитики (из регистров), так вот, надо в отчете, когда пользователь ставит отметку "Распределить" выполнялся еще один кусок кода, который будет распределять (а это фактически еще один запрос с временной таблицей и ее заполнение в другую временную таблицу для получения окончательного варианта).
   Джинн
 
4 - 04.06.19 - 12:28
CASE
   pvase
 
5 - 04.06.19 - 12:34
Вот ввесь запрос:
// Получаем данные

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    инф_ДоходыОбороты.СтатьяДохода.РазделФинРезультата КАК Характер,
    инф_ДоходыОбороты.ПериодМесяц КАК Период,
    инф_ДоходыОбороты.ПериодПолугодие КАК ПериодПолугодие,
    инф_ДоходыОбороты.ПериодГод КАК ПериодГод,
    инф_ДоходыОбороты.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    инф_ДоходыОбороты.СтатьяДохода.БА_ВидДеятельности КАК ВидДеятельности,
    инф_ДоходыОбороты.СтатьяДохода КАК Статья,
    инф_ДоходыОбороты.Подразделение КАК Подразделение,
    инф_ДоходыОбороты.СуммаПриход КАК Сумма
ПОМЕСТИТЬ ВТ_ФинРезВрем
ИЗ
    РегистрНакопления.инф_Доходы.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК инф_ДоходыОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗатратыОбороты.СтатьяЗатрат.РазделФинРезультата,
    ЗатратыОбороты.ПериодМесяц,
    ЗатратыОбороты.ПериодПолугодие,
    ЗатратыОбороты.ПериодГод,
    ЗатратыОбороты.НоменклатурнаяГруппа,
    ЗатратыОбороты.СтатьяЗатрат.БА_ВидДеятельности,
    ЗатратыОбороты.СтатьяЗатрат,
    ЗатратыОбороты.Подразделение,
    ЗатратыОбороты.СуммаПриход
ИЗ
    РегистрНакопления.Затраты.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК ЗатратыОбороты

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВремДоходы.Характер,
    ВремДоходы.Период,
    ВремДоходы.ПериодПолугодие,
    ВремДоходы.ПериодГод,
    ВремДоходы.НоменклатурнаяГруппа,
    ВремДоходы.ВидДеятельности,
    ВремДоходы.Статья,
    ВремДоходы.Подразделение,
    СУММА(ВремДоходы.Сумма)
ИЗ
    (ВЫБРАТЬ
        ЗНАЧЕНИЕ(Справочник.РазделыФинРезультата.ПрибыльОтПродаж) КАК Характер,
        инф_ДоходыОбороты.ПериодМесяц КАК Период,
        инф_ДоходыОбороты.ПериодПолугодие КАК ПериодПолугодие,
        инф_ДоходыОбороты.ПериодГод КАК ПериодГод,
        инф_ДоходыОбороты.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
        инф_ДоходыОбороты.СтатьяДохода.БА_ВидДеятельности КАК ВидДеятельности,
        инф_ДоходыОбороты.СтатьяДохода КАК Статья,
        инф_ДоходыОбороты.Подразделение КАК Подразделение,
        инф_ДоходыОбороты.СуммаПриход КАК Сумма
    ИЗ
        РегистрНакопления.инф_Доходы.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК инф_ДоходыОбороты
    ГДЕ
        инф_ДоходыОбороты.СтатьяДохода.РазделФинРезультата = ЗНАЧЕНИЕ(Справочник.РазделыФинРезультата.ДоходыОтПродаж)
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ЗНАЧЕНИЕ(Справочник.РазделыФинРезультата.ПрибыльОтПродаж),
        ПродажиСебестоимостьОбороты.ПериодМесяц,
        ПродажиСебестоимостьОбороты.ПериодПолугодие,
        ПродажиСебестоимостьОбороты.ПериодГод,
        ПродажиСебестоимостьОбороты.Номенклатура.НоменклатурнаяГруппаЗатрат,
        ПродажиСебестоимостьОбороты.БА_СтатьяЗатрат.БА_ВидДеятельности,
        ПродажиСебестоимостьОбороты.БА_СтатьяЗатрат,
        ПродажиСебестоимостьОбороты.Подразделение,
        -ПродажиСебестоимостьОбороты.СтоимостьОборот
    ИЗ
        РегистрНакопления.ПродажиСебестоимость.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК ПродажиСебестоимостьОбороты) КАК ВремДоходы

СГРУППИРОВАТЬ ПО
    ВремДоходы.Характер,
    ВремДоходы.Период,
    ВремДоходы.ПериодПолугодие,
    ВремДоходы.ПериодГод,
    ВремДоходы.НоменклатурнаяГруппа,
    ВремДоходы.ВидДеятельности,
    ВремДоходы.Статья,
    ВремДоходы.Подразделение
;

// Распределяем

ВЫБОР КОГДА &Распределить
 ТОГДА
 
////////////////////////////////////////////////////////////////////////////////

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

// Итоговый результат

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВТ_ФинРез.Характер КАК Характер,
    ВТ_ФинРез.Период КАК Период,
    ВТ_ФинРез.ПериодПолугодие КАК ПериодПолугодие,
    ВТ_ФинРез.ПериодГод КАК ПериодГод,
    ВТ_ФинРез.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ВТ_ФинРез.ВидДеятельности КАК ВидДеятельности,
    ВТ_ФинРез.Статья КАК Статья,
    ВТ_ФинРез.Подразделение КАК Подразделение,
    ВТ_ФинРез.Сумма КАК Сумма
ИЗ    ВТ_ФинРез
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    Значение(Справочник.РазделыФинРезультата.ФинРезультат) КАК Характер,
    ВТ_ФинРез.Период КАК Период,
    ВТ_ФинРез.ПериодПолугодие КАК ПериодПолугодие,
    ВТ_ФинРез.ПериодГод КАК ПериодГод,
    ВТ_ФинРез.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ВТ_ФинРез.ВидДеятельности КАК ВидДеятельности,
    ВТ_ФинРез.Статья КАК Статья,
    ВТ_ФинРез.Подразделение КАК Подразделение,
    ВТ_ФинРез.Сумма КАК Сумма
ИЗ    ВТ_ФинРез
ГДЕ 
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.ПрибыльОтПродаж)
    Или
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.ПрочиеДоходы)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    Значение(Справочник.РазделыФинРезультата.ФинРезультат) КАК Характер,
    ВТ_ФинРез.Период КАК Период,
    ВТ_ФинРез.ПериодПолугодие КАК ПериодПолугодие,
    ВТ_ФинРез.ПериодГод КАК ПериодГод,
    ВТ_ФинРез.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ВТ_ФинРез.ВидДеятельности КАК ВидДеятельности,
    ВТ_ФинРез.Статья КАК Статья,
    ВТ_ФинРез.Подразделение КАК Подразделение,
    -ВТ_ФинРез.Сумма КАК Сумма
ИЗ    ВТ_ФинРез
ГДЕ 
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.Затраты)
    Или
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.Аммортизация)
   pvase
 
6 - 04.06.19 - 12:35
Надо по значению переменной или распределять или не распределять. Если туда пихать ВЫБОР - тогда это будет монстр, а не запрос.
   los_hooliganos
 
7 - 04.06.19 - 12:36
(6)  ГДЕ &флРаспределять
   los_hooliganos
 
8 - 04.06.19 - 12:36
(7) В зависимости истина или ложь запрос будет выполнен или будет пустой
   pvase
 
9 - 04.06.19 - 12:39
Что-то форум побил запрос, выкладываю повторно:
<++code>
// Получаем данные

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    инф_ДоходыОбороты.СтатьяДохода.РазделФинРезультата КАК Характер,
    инф_ДоходыОбороты.ПериодМесяц КАК Период,
    инф_ДоходыОбороты.ПериодПолугодие КАК ПериодПолугодие,
    инф_ДоходыОбороты.ПериодГод КАК ПериодГод,
    инф_ДоходыОбороты.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    инф_ДоходыОбороты.СтатьяДохода.БА_ВидДеятельности КАК ВидДеятельности,
    инф_ДоходыОбороты.СтатьяДохода КАК Статья,
    инф_ДоходыОбороты.Подразделение КАК Подразделение,
    инф_ДоходыОбороты.СуммаПриход КАК Сумма
ПОМЕСТИТЬ ВТ_ФинРезВрем
ИЗ
    РегистрНакопления.инф_Доходы.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК инф_ДоходыОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗатратыОбороты.СтатьяЗатрат.РазделФинРезультата,
    ЗатратыОбороты.ПериодМесяц,
    ЗатратыОбороты.ПериодПолугодие,
    ЗатратыОбороты.ПериодГод,
    ЗатратыОбороты.НоменклатурнаяГруппа,
    ЗатратыОбороты.СтатьяЗатрат.БА_ВидДеятельности,
    ЗатратыОбороты.СтатьяЗатрат,
    ЗатратыОбороты.Подразделение,
    ЗатратыОбороты.СуммаПриход
ИЗ
    РегистрНакопления.Затраты.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК ЗатратыОбороты

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВремДоходы.Характер,
    ВремДоходы.Период,
    ВремДоходы.ПериодПолугодие,
    ВремДоходы.ПериодГод,
    ВремДоходы.НоменклатурнаяГруппа,
    ВремДоходы.ВидДеятельности,
    ВремДоходы.Статья,
    ВремДоходы.Подразделение,
    СУММА(ВремДоходы.Сумма)
ИЗ
    (ВЫБРАТЬ
        ЗНАЧЕНИЕ(Справочник.РазделыФинРезультата.ПрибыльОтПродаж) КАК Характер,
        инф_ДоходыОбороты.ПериодМесяц КАК Период,
        инф_ДоходыОбороты.ПериодПолугодие КАК ПериодПолугодие,
        инф_ДоходыОбороты.ПериодГод КАК ПериодГод,
        инф_ДоходыОбороты.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
        инф_ДоходыОбороты.СтатьяДохода.БА_ВидДеятельности КАК ВидДеятельности,
        инф_ДоходыОбороты.СтатьяДохода КАК Статья,
        инф_ДоходыОбороты.Подразделение КАК Подразделение,
        инф_ДоходыОбороты.СуммаПриход КАК Сумма
    ИЗ
        РегистрНакопления.инф_Доходы.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК инф_ДоходыОбороты
    ГДЕ
        инф_ДоходыОбороты.СтатьяДохода.РазделФинРезультата = ЗНАЧЕНИЕ(Справочник.РазделыФинРезультата.ДоходыОтПродаж)
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ЗНАЧЕНИЕ(Справочник.РазделыФинРезультата.ПрибыльОтПродаж),
        ПродажиСебестоимостьОбороты.ПериодМесяц,
        ПродажиСебестоимостьОбороты.ПериодПолугодие,
        ПродажиСебестоимостьОбороты.ПериодГод,
        ПродажиСебестоимостьОбороты.Номенклатура.НоменклатурнаяГруппаЗатрат,
        ПродажиСебестоимостьОбороты.БА_СтатьяЗатрат.БА_ВидДеятельности,
        ПродажиСебестоимостьОбороты.БА_СтатьяЗатрат,
        ПродажиСебестоимостьОбороты.Подразделение,
        -ПродажиСебестоимостьОбороты.СтоимостьОборот
    ИЗ
        РегистрНакопления.ПродажиСебестоимость.Обороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ), Авто, ) КАК ПродажиСебестоимостьОбороты) КАК ВремДоходы

СГРУППИРОВАТЬ ПО
    ВремДоходы.Характер,
    ВремДоходы.Период,
    ВремДоходы.ПериодПолугодие,
    ВремДоходы.ПериодГод,
    ВремДоходы.НоменклатурнаяГруппа,
    ВремДоходы.ВидДеятельности,
    ВремДоходы.Статья,
    ВремДоходы.Подразделение
;

// Распределяем

ВЫБОР КОГДА &Распределить
 ТОГДА
 
////////////////////////////////////////////////////////////////////////////////

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

// Итоговый результат

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВТ_ФинРез.Характер КАК Характер,
    ВТ_ФинРез.Период КАК Период,
    ВТ_ФинРез.ПериодПолугодие КАК ПериодПолугодие,
    ВТ_ФинРез.ПериодГод КАК ПериодГод,
    ВТ_ФинРез.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ВТ_ФинРез.ВидДеятельности КАК ВидДеятельности,
    ВТ_ФинРез.Статья КАК Статья,
    ВТ_ФинРез.Подразделение КАК Подразделение,
    ВТ_ФинРез.Сумма КАК Сумма
ИЗ    ВТ_ФинРез
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    Значение(Справочник.РазделыФинРезультата.ФинРезультат) КАК Характер,
    ВТ_ФинРез.Период КАК Период,
    ВТ_ФинРез.ПериодПолугодие КАК ПериодПолугодие,
    ВТ_ФинРез.ПериодГод КАК ПериодГод,
    ВТ_ФинРез.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ВТ_ФинРез.ВидДеятельности КАК ВидДеятельности,
    ВТ_ФинРез.Статья КАК Статья,
    ВТ_ФинРез.Подразделение КАК Подразделение,
    ВТ_ФинРез.Сумма КАК Сумма
ИЗ    ВТ_ФинРез
ГДЕ 
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.ПрибыльОтПродаж)
    Или
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.ПрочиеДоходы)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    Значение(Справочник.РазделыФинРезультата.ФинРезультат) КАК Характер,
    ВТ_ФинРез.Период КАК Период,
    ВТ_ФинРез.ПериодПолугодие КАК ПериодПолугодие,
    ВТ_ФинРез.ПериодГод КАК ПериодГод,
    ВТ_ФинРез.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    ВТ_ФинРез.ВидДеятельности КАК ВидДеятельности,
    ВТ_ФинРез.Статья КАК Статья,
    ВТ_ФинРез.Подразделение КАК Подразделение,
    -ВТ_ФинРез.Сумма КАК Сумма
ИЗ    ВТ_ФинРез
ГДЕ 
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.Затраты)
    Или
    ВТ_ФинРез.Характер = Значение(Справочник.РазделыФинРезультата.Аммортизация)    

<--code>
   pvase
 
10 - 04.06.19 - 12:40
&флРаспределять - это параметр в СКД, на форме пользователь проставляет: Истина или Ложь.
   craxx
 
11 - 04.06.19 - 12:43
(0) Через пакетный запрос и ВЫБОР КОГДА все это прекрасно можно запилить.
   los_hooliganos
 
12 - 04.06.19 - 13:23
(10) Это по другому сделать так

ПервыйЗапрос
ГДЕ &флРаспределять 

Объединить ВСЕ

ВторойЗапрос
ГДЕ НЕ &флРаспределять
   los_hooliganos
 
13 - 04.06.19 - 13:27
(12) В зависимости от параметра будет выполнен либо первый запрос либо второй и все это во временную таблицу.
   bolobol
 
14 - 04.06.19 - 13:42
(13) Да ладно! Выполнятся же оба! Это ж 1С!
   DrZombi
 
15 - 04.06.19 - 13:45
(0) Напиши свой Общий модуль, при формировании СКД поставь галочку "Использовать внешние функции"
И в Выражениях засунь свою функцию, которая на основе результата запроса будет получать свой запрос. Работает это творение не так быстро, но работает. :)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.