Имя: Пароль:
1C
1С v8
СКД два необязательных параметра на поле Номенклатура как задать условие?
, , ,
0 e053nk
 
06.12.19
13:21
Что то в ступор встал и решить не могу , вроде как все просто должно быть.
Полностью отчет приводить не буду-задача в предварительном отборе номенклатуры для дальнейшей обработки.
Делаю запрос, в котором указываю необязательные параметры.Номенклатура должна отбираться так :если указали, из списка сегмента номенклатуры плюс, если указали, отдельные позиции из справочника номенклатуры. Т.е. возможно и из сегмента и из списка справочника попадание, возможно и не будет указаны параметры -тогда вся номенклатура выводиться. Кусок запроса из СКД:
ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураАкции
ИЗ
    РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
{ГДЕ
    (НоменклатураСегмента.Сегмент В (&СегментыНоменклатурыАкции)), (НоменклатураСегмента.Номенклатура.Ссылка В ИЕРАРХИИ (&Номенклатура))}

отрабатывает так:
1) если параметры не указаны-выборка всей номенклатуры из базы;(это нормально работает)
2) Если указан только параметр &СегментыНоменклатурыАкции-берется только из сегмента(это правильно)
3) если указан только &Номенклатура-берется только отбор из справочника номенклатура (это правильно)
4) Если указан параметры &СегментыНоменклатурыАкции и &Номенклатура вместе -ничего не выводиться -И  это НЕ ТО что нужно. Нужно объединить список из сегмента и отбор по справочнику.

Пробовал указывать И, ИЛИ между условиями  параметров- при попытки сформировать отчет выдает ошибку, если не указан один из параметров.
Пробовал 2 запроса  через ОБЪЕДИНИТЬ - либо ошибкувыдает либо выводить весь справочник (в зависимости от указания пустого параметра)

Как реализовать чтобы параметры,когда они указаны,добавляли номенклатуру в общую выборку?
1 FIXXXL
 
06.12.19
13:24
(0) это СКД или построитель? делай через Отборы, а не параметры
2 FIXXXL
 
06.12.19
13:26
(1) + ну или пиши ВЫБОР КОГДА &ТвойПараметр01 = &ПустойПараметр01 ТОГДА Ложь(если соединяешь параметры через ИЛИ) ИНАЧЕ НоменклатураСегмента.Сегмент В() и т.д.
3 toypaul
 
гуру
06.12.19
13:28
две выборки во временные таблицы и их объединение
4 FIXXXL
 
06.12.19
13:28
(2) +
ВЫБОР КОГДА &ТвойПараметр01 = &ПустойПараметр01 ТОГДА НоменклатураСегмента.Сегмент = &ПустойПараметр01 ИНАЧЕ  НоменклатураСегмента.Сегмент В() и т.д.
5 e053nk
 
06.12.19
13:40
Это СКД.
6 e053nk
 
06.12.19
13:52
(3) Попробовал так:
ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураАкцииПром
ИЗ
    РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
{ГДЕ
    (НоменклатураСегмента.Сегмент В (&СегментыНоменклатурыАкции))}

;
ВЫБРАТЬ
    НоменклатураСпр.Ссылка КАК Номенклатура
ПОМЕСТИТЬ НоменклатураСправочник
ИЗ
    Справочник.Номенклатура КАК НоменклатураСпр
{ГДЕ  (НоменклатураСпр.Ссылка В ИЕРАРХИИ (&Номенклатура))}

;
ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураАкции
ИЗ
    НоменклатураАкцииПром КАК НоменклатураСегмента
Объединить
ВЫБРАТЬ
    НоменклатураСправочник.Номенклатура КАК Номенклатура
ИЗ
    НоменклатураСправочник КАК НоменклатураСправочник

;
Работате все равно криво но по другому:если не указать какой либо параметр(не важно какой) -в отчет попадает весь справочник Номенклатуры.

(2) (4) Что то я эту конструкцию не понял......
7 НЕА123
 
06.12.19
14:01
(0)
может типа такого
{ГДЕ
...
,
   (НоменклатураСегмента.Сегмент В (&СегментыНоменклатурыАкцииКогдаОба))ИЛИ(НоменклатураСегмента.Номенклатура.Ссылка В ИЕРАРХИИ (&НоменклатураКогдаОба))

}
?
8 toypaul
 
гуру
06.12.19
14:05
(6) а почему во второй таблице выборка из всего справочника. в (0) вся выборка из регистра
9 toypaul
 
гуру
06.12.19
14:08
я понял как надо. мой вариант не подходит
10 toypaul
 
гуру
06.12.19
14:12
может быть так попробовать каждую часть собрать

ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураАкцииПром
ИЗ
    РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
{ГДЕ
    ЛОЖЬ ИЛИ (НоменклатураСегмента.Сегмент В (&СегментыНоменклатурыАкции))}
11 FIXXXL
 
06.12.19
14:24
(6) эта конструкция работает в обязательных параметрах, без {}
12 FIXXXL
 
06.12.19
14:28
(3) тогда уж три выборки
1 - по сегменту
2 - по номенклатуре
3- если оба параметра пустые - вся номенклатура
13 e053nk
 
07.12.19
02:18
Пока оставил так:

ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураАкцииПром
ИЗ
    РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
{ГДЕ
     (НоменклатураСегмента.Сегмент В (&СегментыНоменклатурыАкции))}

;
ВЫБРАТЬ
    НоменклатураСпр.Ссылка КАК Номенклатура
ПОМЕСТИТЬ НоменклатураСправочник
ИЗ
    Справочник.Номенклатура КАК НоменклатураСпр
{ГДЕ  (НоменклатураСпр.Ссылка В ИЕРАРХИИ (&Номенклатура))}

;
ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураАкции
ИЗ
    НоменклатураАкцииПром КАК НоменклатураСегмента
Объединить
ВЫБРАТЬ
    НоменклатураСправочник.Номенклатура КАК Номенклатура
ИЗ
    НоменклатураСправочник КАК НоменклатураСправочник


работает более логичнее , но то же есть варианты с непонятками для пользователей.Отдал в тестирование