Имя: Пароль:
1C
1С v8
Запрос, если заполнено поле отбирать, если пустое не отбирать
0 lg2marvel
 
23.08.16
15:22
Добрый день, есть запрос

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

Хочу чтоб когда на форме выбран поставщик - был отбор попоставщику, когда нет - небыло. Чтоб организовать такое можно ли сделать в запросе (как правильно поставить условие?) или только делать условие и в зависимости от заполненности формы использовать тот или иной запрос?
1 Amra
 
23.08.16
15:26
Если КонтрНеВыбран тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Поставщик.Ссылка В (&Парам)", "");
конецесли;
2 Лефмихалыч
 
23.08.16
15:27
СКД и не делай мозгов. Ну, или хотя бы построитель
3 lg2marvel
 
23.08.16
15:28
(1) Отличная мыль, спасибо
(2) Спасибо
4 Timon1405
 
23.08.16
15:35
Поставщик.Ссылка.Ссылка понадежнее будет
5 ViSo76
 
23.08.16
15:42
( &Парам = Справочник.Поставщик.ПустаяСсылка Или &Парам В (&Парам) )

Или

( &Парам = Неопределено Или &Парам В (&Парам) )

И подавай Неопределено в параметре

А правильно это делать в отборе:
.СрезПоследних(&КонецПериода, {Поставщик})
6 ViSo76
 
23.08.16
15:54
(4) Не пишите глупостей больше
7 lg2marvel
 
23.08.16
16:02
(5) Что-ТО не могу понять куда впихнуть?

( &Парам = Справочник.Поставщик.ПустаяСсылка Или &Парам В (&Парам) )

Или

( &Парам = Неопределено Или &Парам В (&Парам) )
8 Горогуля
 
23.08.16
16:04
(7) впихни это в СКД. а потом выпихни и забудь
9 FIXXXL
 
23.08.16
16:08
(7) ВЫБОР КОГДА &ЗаполненоНаФорме ТОГДА траляляУсловие ИНАЧЕ ИСТИНА

ЗаполненоНаФорме = значениеЗаполнено(РеквизитФормы)
10 lg2marvel
 
23.08.16
16:11
(7) Немного переделал запрос, но суть не изменилась

        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |                &КонецПериода,
        |                Поставщик.Ссылка = НЕОПРЕДЕЛЕНО
        |                    ИЛИ Поставщик.Ссылка В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних
(9) Спасибо сейчас попробую
11 hhhh
 
23.08.16
16:13
(10) петросян что ли?

Поставщик = НЕОПРЕДЕЛЕНО
        |                    ИЛИ Поставщик В (&Поставщик)
12 ViSo76
 
23.08.16
16:15
(10) Не так

ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних( &КонецПериода, ( &Поставщик = Неопределено Или Поставщик В (&Поставщик) ) КАК ПоставщикиНоменклатурыСрезПоследних
13 lg2marvel
 
23.08.16
16:36
Делаю так: Если выбрано поле - есть результат, даже правильный. Если не выбран - нет ничего

        |ИЗ
        |    Справочник.Номенклатура КАК Номенкл
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыНоменклатурыДляЗаказов КАК ПараметрыНоменклатурыДляЗаказов
        |        ПО Номенкл.Ссылка = ПараметрыНоменклатурыДляЗаказов.Номенклатура
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |                &КонецПериода,
        |                &Поставщик = НЕОПРЕДЕЛЕНО
        |                    ИЛИ Поставщик В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних
        |        ПО Номенкл.Ссылка = ПоставщикиНоменклатурыСрезПоследних.Номенклатура

Попробовал иначе:

        |        ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |            ПоставщикиНоменклатурыСрезПоследних.Поставщик КАК Поставщик,
        |            ПоставщикиНоменклатурыСрезПоследних.Номенклатура.Ссылка КАК НоменклатураСсылка
        |        ИЗ
        |            РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |                    &КонецПериода,
        |                    &Поставщик = НЕОПРЕДЕЛЕНО
        |                        ИЛИ Поставщик В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних) КАК ВложенныйЗапрос1
        |        ПО Номенкл.Ссылка = ВложенныйЗапрос1.НоменклатураСсылка

В таком варианте оно отображает весь перечень который должен показываться если поле не заполнено не зависимо от того заполнено оно или нет.
14 lodger
 
23.08.16
16:38
вот наркоманы )
кто будет читать в будущем ответ в (1).
15 lg2marvel
 
23.08.16
16:40
(14) (1) Получается аналогично (13) тот что сверху
16 Горогуля
 
23.08.16
16:41
(15) это у кого так получается?
17 ViSo76
 
23.08.16
16:41
(13) Скобок не хватает. Выражение должно давать либо истина либо ложь, в вычислениях есть оптимизация с ИЛИ, если 1-я операция успешна, то другая операция не проверяется.

       |        ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |            ПоставщикиНоменклатурыСрезПоследних.Поставщик КАК Поставщик,
        |            ПоставщикиНоменклатурыСрезПоследних.Номенклатура.Ссылка КАК НоменклатураСсылка
        |        ИЗ
        |            РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |                    &КонецПериода,
        |                    ( &Поставщик = НЕОПРЕДЕЛЕНО
        |                        ИЛИ Поставщик В (&Поставщик) ) КАК ПоставщикиНоменклатурыСрезПоследних) КАК ВложенныйЗапрос1
        |        ПО Номенкл.Ссылка = ВложенныйЗапрос1.НоменклатураСсылка
18 lg2marvel
 
23.08.16
16:42
Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    Номенкл.Код,
        |    Номенкл.Артикул,
        |    Номенкл.Наименование КАК ТМЦ,
        |    Номенкл.Родитель,
        |    Номенкл.ОсновнойПоставщик,
        |    Номенкл.ЕдиницаИзмеренияЗаказов.Коэффициент КАК Кратность,
        |    ПараметрыНоменклатурыДляЗаказов.МинимальныйОстаток,
        |    ПараметрыНоменклатурыДляЗаказов.НеПодлежитЗаказу,
        |    ВложенныйЗапрос.КоличествоОборот КАК Продажа,
        |    ВложенныйЗапрос.КоличествоПриход КАК Приход,
        |    ВложенныйЗапрос.КоличествоНачальныйОстаток КАК ОстатокНач,
        |    ВложенныйЗапрос.КоличествоКонечныйОстаток КАК ОстатокКон,
        |    ПоставщикиНоменклатурыСрезПоследних.Поставщик КАК Поставщик
        |ИЗ
        |    Справочник.Номенклатура КАК Номенкл
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыНоменклатурыДляЗаказов КАК ПараметрыНоменклатурыДляЗаказов
        |        ПО Номенкл.Ссылка = ПараметрыНоменклатурыДляЗаказов.Номенклатура
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |                &КонецПериода,
        |                &Поставщик = НЕОПРЕДЕЛЕНО
        |                    ИЛИ Поставщик В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних
        |        ПО Номенкл.Ссылка = ПоставщикиНоменклатурыСрезПоследних.Номенклатура        
        |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |            ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
        |            ПартииНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
        |            ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
        |            ПартииНоменклатурыОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
        |            ПартииНоменклатурыОстаткиИОбороты.Номенклатура.Ссылка КАК ПартииНоменклатура,
        |            ПродажиОбороты.Номенклатура.Ссылка КАК ПродажиНоменклатура
        |        ИЗ
        |            РегистрНакопления.Продажи.Обороты(
        |                    &НачалоПериода,
        |                    &КонецПериода,
        |                    ,
        |                    Фирма.Ссылка В (&Фирма)
        |                        И Склад.Ссылка В (&Склад)) КАК ПродажиОбороты
        |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(
        |                        &НачалоПериода,
        |                        &КонецПериода,
        |                        ,
        |                        ,
        |                        Фирма.Ссылка В (&Фирма)
        |                            И Склад.Ссылка В (&Склад)) КАК ПартииНоменклатурыОстаткиИОбороты
        |                ПО ПродажиОбороты.Номенклатура.Ссылка = ПартииНоменклатурыОстаткиИОбороты.Номенклатура
        |        
        |        СГРУППИРОВАТЬ ПО
        |            ПартииНоменклатурыОстаткиИОбороты.Номенклатура.Ссылка,
        |            ПродажиОбороты.КоличествоОборот,
        |            ПартииНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
        |            ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
        |            ПартииНоменклатурыОстаткиИОбороты.КоличествоПриход,
        |            ПродажиОбороты.Номенклатура.Ссылка) КАК ВложенныйЗапрос
        |        ПО Номенкл.Ссылка = ВложенныйЗапрос.ПартииНоменклатура
        |ГДЕ
        |    Номенкл.Ссылка В ИЕРАРХИИ(&Товар)
        |
        |СГРУППИРОВАТЬ ПО
        |    Номенкл.Код,
        |    Номенкл.Артикул,
        |    Номенкл.Наименование,
        |    Номенкл.Родитель,
        |    Номенкл.ОсновнойПоставщик,
        |    Номенкл.ЕдиницаИзмеренияЗаказов.Коэффициент,
        |    ПараметрыНоменклатурыДляЗаказов.МинимальныйОстаток,
        |    ПараметрыНоменклатурыДляЗаказов.НеПодлежитЗаказу,
        |    ВложенныйЗапрос.КоличествоОборот,
        |    ВложенныйЗапрос.КоличествоПриход,
        |    ВложенныйЗапрос.КоличествоНачальныйОстаток,
        |    ВложенныйЗапрос.КоличествоКонечныйОстаток,
        |    ПоставщикиНоменклатурыСрезПоследних.Поставщик
        |
        |УПОРЯДОЧИТЬ ПО
        |    ТМЦ"
    );

    Если ЗначениеЗаполнено(Поставщик) = 0 Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, ",Поставщик.Ссылка В (&Парам)", "");
    КонецЕсли; (16)
19 ViSo76
 
23.08.16
16:42
(17) Точнее

|                    &КонецПериода,
        |                    ( &Поставщик = НЕОПРЕДЕЛЕНО
        |                        ИЛИ Поставщик В (&Поставщик) ) ) КАК ПоставщикиНоменклатурыСрезПоследних) КАК ВложенныйЗапрос1
20 lg2marvel
 
23.08.16
16:53
Хм, начинаю зависать. Подскажите пожалуйста, у меня ТМЦ, отбираю из регистра сведений поставщика. Если поставщик на форме выбран - показываю ТМЦ по поставщику, если не выбран - показываю все ТМЦ в группе (тут другой отбор, он работает)

Так вот, как правильней будет запихнуть во вложеный запрос или  просто использовать ЛЕВОЕ СОЕДИНЕНИЕ?

        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |                &КонецПериода,
        |                (&Поставщик = НЕОПРЕДЕЛЕНО
        |                    ИЛИ Поставщик В (&Поставщик))) КАК ПоставщикиНоменклатурыСрезПоследних
        |        ПО Номенкл.Ссылка = ПоставщикиНоменклатурыСрезПоследних.Номенклатура

Просто показывает все ТМЦ независимо от того что выбрано на форме.
21 lg2marvel
 
23.08.16
16:53
пробую вложеным запросом
22 ViSo76
 
23.08.16
16:53
(19) Если у вас передаётся либо пустое значение справочника или Поставщик, то нужно писать так:
( &Поставщик = ЗНАЧЕНИЕ( Справочник."Поставщики".ПустаяСсылка ) ИЛИ Поставщик = &Поставщик )
23 ViSo76
 
23.08.16
16:56
(20) Нужно основной таблицей взять РегистрСведений.ПоставщикиНоменклатуры и присоединять ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура
24 lg2marvel
 
23.08.16
17:03
(23) Так отображает только в случае если на форме выбрано значение, если значение не выбрано - результат пустой

        |    РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |            &КонецПериода,
        |            &Поставщик = НЕОПРЕДЕЛЕНО
        |                ИЛИ Поставщик В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенкл
        |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыНоменклатурыДляЗаказов КАК ПараметрыНоменклатурыДляЗаказов
        |            ПО Номенкл.Ссылка = ПараметрыНоменклатурыДляЗаказов.Номенклатура
25 lg2marvel
 
23.08.16
17:05
Со скобками аналогично

        |ИЗ
        |    РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(
        |            &КонецПериода,
        |            (&Поставщик = НЕОПРЕДЕЛЕНО
        |                ИЛИ Поставщик В (&Поставщик))) КАК ПоставщикиНоменклатурыСрезПоследних
26 ViSo76
 
24.08.16
07:03
(25)  какой тип значения ты падаешь в качестве пустого значения? Прочти сообщение (22)
27 mkalimulin
 
24.08.16
07:58
(6) Конечно же надо писать: Поставщик.Ссылка.Ссылка.Ссылка.
28 ViSo76
 
24.08.16
08:02
(27) Зачем так шутить, ведь будут писать после этого поста. У них башня не там приварена.
29 Горогуля
 
24.08.16
08:04
(28) всё нормально, он в скобках заблудится
30 lg2marvel
 
24.08.16
11:11
Если ЗначениеЗаполнено(Поставщик) = 0 Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(&КонецПериода, Поставщик.Ссылка В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних",
            "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(&КонецПериода, Поставщик.Ссылка В (&Поставщик)) КАК ПоставщикиНоменклатурыСрезПоследних");
    КонецЕсли;

так работает, и замечательно.
31 Горогуля
 
24.08.16
11:33
идиёт
32 lg2marvel
 
24.08.16
12:00
(31) может быть :-(