Имя: Пароль:
1C
1С v8
СКД помогите с условием
0 Maximysis
 
04.07.14
07:27
Что то не могу сообразить, как сделать чтобы в запросе левое соединение использовалась только по условию.
1 Maximysis
 
04.07.14
07:28
То есть выбран параметр используем левое соединение, не выбран не используем.
2 softmaker
 
04.07.14
07:31
Можно текст запроса добавлять в коде, который формирует запрос, например:
Запрос.Текст =
        "ВЫБРАТЬ
        |    ДополнительныеНачисления.НомерСтроки,
        |    ДополнительныеНачисления.ВидРасчета.СпособРасчета КАК Способ,
        |    ДополнительныеНачисления.Размер";
        Если Параметры.База Тогда
            Запрос.Текст = Запрос.Текст + "
            |    ,ЕСТЬNULL(ДополнительныеНачисленияБазаДополнительныеНачисления.РезультатБаза, 0) + ЕСТЬNULL(ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза, 0) КАК База";
        КонецЕсли;
        Запрос.Текст = Запрос.Текст + "
        |ИЗ
        |    РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления";
        Если Параметры.База Тогда
            Запрос.Текст = Запрос.Текст + "
            |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаДополнительныеНачисления(
            |                &Измерения,
            |                &Измерения,
            |                ,
            |                Регистратор = &Ссылка
            |                    И ВидРасчета.КатегорияРасчета = &КатегорияРасчета) КАК ДополнительныеНачисленияБазаДополнительныеНачисления
            |        ПО ДополнительныеНачисления.НомерСтроки = ДополнительныеНачисленияБазаДополнительныеНачисления.НомерСтроки
            |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(
            |                &Измерения,
            |                &Измерения,
            |                ,
            |                Регистратор = &Ссылка
            |                    И ВидРасчета.КатегорияРасчета = &КатегорияРасчета) КАК ДополнительныеНачисленияБазаОсновныеНачисления
            |        ПО ДополнительныеНачисления.НомерСтроки = ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки";
        КонецЕсли;
        Запрос.Текст = Запрос.Текст + "
        |ГДЕ
        |    ДополнительныеНачисления.Регистратор = &Ссылка
        |    И ДополнительныеНачисления.ВидРасчета.КатегорияРасчета = &КатегорияРасчета";        
    КонецЕсли;
    Возврат Запрос.Выполнить();
3 Лодырь
 
04.07.14
07:33
(1) Сделай левое соединение с доп. проверкой заполненности параметра в условии, не?
4 softmaker
 
04.07.14
07:36
Это же СКД, сори...
5 Maximysis
 
04.07.14
07:36
(2)А как на СКД это делаться?
6 rphosts
 
04.07.14
07:37
(1) у параметра запретить незаполненное значение?
7 Лодырь
 
04.07.14
07:38
(5) Никто не мешает тебе собрать все програмно. Примеры есть.
8 Maximysis
 
04.07.14
07:38
(3) пробовал так
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НаДатуОтчета) КАК ЦеныНоменклатурыСрезПоследних
        ПО ОперативныеОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            {И ЦеныНоменклатурыСрезПоследних.ТипЦен в (&СписокТиповЦен)}

и в виртуальную таблицу тоже параметр добавлял все равно отрабатывает(
9 Maximysis
 
04.07.14
07:53
(7)Кстати да! СКД и это может, не знал.
10 Лодырь
 
04.07.14
07:53
(8) А если добавить еще переменную &ПараметрЗаполнен и подавать ее на вход?
11 Maximysis
 
04.07.14
08:08
(10) Да идея не плохая, только придется еще и для каждой строки условие писать.
12 catena
 
04.07.14
08:25
(8)Ничего не поняла.
Если в принципе не хочется дергать таблицу, то надо поставить галку "не обязательная", будет примерно так:

ВЫБРАТЬ
    вт1.Ссылка КАК Ссылка,
    вт2.ПричинаИзмененияСостояния,
    вт2.ОбособленноеПодразделение
ИЗ
    вт1 КАК вт1
        {ЛЕВОЕ СОЕДИНЕНИЕ вт2 КАК вт2
        ПО вт1.Ссылка = вт2.Физлицо}

Если нужно условие на тип цен - выбрать цены в ВТ и в самой ВТ добавить тип цен в поля отбора.
13 Maximysis
 
04.07.14
09:56
(12) Блин!!! И все!!!
Спасибо огромное то что нужно, а я тут уже запрос стрЗаменит наваял))
А вот только где эта галка, весь конструктор облазил...
14 Maximysis
 
04.07.14
09:59
А все нашел "Компоновка данных"
15 anatoly
 
04.07.14
10:02
(12) изящно.
я таких случаях текст запроса из макета программно правил...
16 volshebnik_
idiot
 
04.07.14
10:19
СКД ребята - это СЕКС!
Без шуток, готовь ТЗ программно, потом передаешь в скд ТЗ и получаешь то что нужно.
17 sirsp
 
04.07.14
10:51
(12) +100500
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн