![]() |
![]() |
![]() |
|
проверка параметра запроса на пустоту | ☑ | ||
---|---|---|---|---|
0
Origin
24.06.08
✎
14:28
|
Есть запрос с параметром(список значений)
как проверить что параметр пустой? |
|||
1
luns
24.06.08
✎
15:02
|
(1) В последней версии платформы у объекта запрос есть свойство, "параметры" кажеться - тип Структура - там все параметры
|
|||
2
hhhh
24.06.08
✎
15:07
|
(1) можно просто список значений взять и проверить.
|
|||
3
Origin
24.06.08
✎
15:11
|
Уточню, мне это надо ВНУТРИ ЗАПРОСА проверить,
ЕСТЬ NULL не катит - ругается, количество строк в списке не знаю как проверить |
|||
4
hhhh
24.06.08
✎
15:13
|
(3) никак
|
|||
5
lxndr
24.06.08
✎
15:15
|
Запрос.Текст =
"Выбрать ......... ......... ГДЕ " +?(Список.Количество() = 0, "ИСТИНА", "Таблица.Номенклатура В (&Список)") + И ............. .........."; |
|||
6
Origin
24.06.08
✎
15:27
|
(5) В запросе так нельзя
|
|||
7
Origin
24.06.08
✎
15:28
|
(5)а понял сформировать текст так можно,
только у меня компановка там нет у меня возможности текст запроса менять |
|||
8
Origin
24.06.08
✎
15:37
|
Еще уточню задачу,
Нужны к примеру остатки ТМЦ из регистраНакопления, ТМЦ должно быть в спискеТМЦ или все остатки если список ТМЦ не задан |
|||
9
hhhh
24.06.08
✎
15:43
|
(8) а зачем тебе проверять? С пустым списком вроде нормально отбабатывает.
|
|||
10
Megas
24.06.08
✎
15:43
|
.........
......... ГДЕ " +?(Список.Количество() = 0, "ИСТИНА", "Таблица.Номенклатура В (&Список)") + и ........ А конструкция Выбрать когда ... тогда ... иначе ... конец неподходит? |
|||
11
hhhh
24.06.08
✎
15:48
|
(10) не подходит
|
|||
12
Origin
24.06.08
✎
15:55
|
(10) не подходит
|
|||
13
Origin
24.06.08
✎
15:57
|
конструкция
Выбрать когда а условие какое? |
|||
14
Megas
24.06.08
✎
16:14
|
Вобще я точно не знаю но можно вообще не ставить условий =)
Далее уже в настройках отчёта ставиш ОТБОР ... и выбираеш что тебе нужно ... |
|||
15
Лефмихалыч
24.06.08
✎
16:16
|
(0) проверяй снаружи запроса и генерируй разный текст в зависимости от результата проверки
|
|||
16
Megas
24.06.08
✎
16:17
|
И ещё ... создаёш форму ....
Процедура ПриОткрытии() там можно отловить текст запроса... (я видел но делать с ним чтонибудь я не пробовал) |
|||
17
Aprobator
24.06.08
✎
16:42
|
В типовой конфе ЗУП используется следующая методика - В запросе надо проверить на пустоту ВидРасчета, так это делается следующим образом (у вида расчета составной тип):
ВЫБОР КОГДА ВидРасчета.Код ЕСТЬ NULL ТОГДА ..... ИНАЧЕ ..... КОНЕЦВЫБОРА если тип определен (в 8 - ке не знаю, а в 8.1 это работает) тогда ВЫБОР КОГДА ТвоеЗначение = ЗНАЧЕНИЕ(Справочник.ТвойСправочник.ПустаяССылка) ну и т.д. |
|||
18
hhhh
24.06.08
✎
16:46
|
(17) это не то
|
|||
19
Aprobator
24.06.08
✎
17:05
|
Тогда так:
УсловиеНаПустотуСписка = ?(ТвойСписок.Количество() > 0, " И ИСТИНА", "И ЛОЖЬ"); ТекстЗапроса = "... ВЫБОР КОГДА ИСТИНА" + УсловиеНаПустотуСписка + " .... ИНАЧЕ .... КОНЕЦВЫБОРА |
|||
20
NewNick
24.06.08
✎
17:18
|
>>Еще уточню задачу,
>>Нужны к примеру остатки ТМЦ из регистраНакопления, >>ТМЦ должно быть в спискеТМЦ или все остатки если список ТМЦ не задан Номенклатура В (ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура, (ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК ЕстьНоменклатура ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (&СписокТМЦ) ) КАК ВложенныйЗапрос ГДЕ (Номенклатура.Ссылка В (&СписокТМЦ) ИЛИ ВложенныйЗапрос.ЕстьНоменклатура = 0)) |
|||
21
Aprobator
24.06.08
✎
17:30
|
дык Условие В так и отрабатывает. Если список пустой то оно - всегда дает ИСТИНА, если не пустой, то ИСТИНА выдается только по условию вхождения в список.
Или я чего-то не понял? |
|||
22
Aprobator
24.06.08
✎
17:32
|
т.е. данное условие пихаем в условие нужной виртуальной таблицы и вся недолга.
|
|||
23
NewNick
24.06.08
✎
18:03
|
>>Если список пустой то оно - всегда дает ИСТИНА
угу шас |
|||
24
Aprobator
24.06.08
✎
18:25
|
Хм - в самом деле неработает. В 7 - ке это отрабатывало.
|
|||
25
hhhh
24.06.08
✎
18:50
|
(20) попробуй
В ИЕРАРХИИ (&СписокТМЦ) может прокатит. |
|||
26
NewNick
24.06.08
✎
18:55
|
(25) если в списокТМЦ воткнуть пустую ссылку в случае когда там 0 элементов только тогда прокатит
|
|||
27
acsent
24.06.08
✎
18:58
|
используй ПостроительЗапроса
|
|||
28
acsent
24.06.08
✎
18:59
|
{ГДЕ
РегистрТМЦ.ТМЦ.* КАК ТМЦ } |
|||
29
BabySG
24.06.08
✎
20:19
|
(0) Гений1С давным давно нарыл способ это сделать - только в тот момент никто его не понял.
|
|||
30
lxndr
25.06.08
✎
06:49
|
Если на СКД, то задавай уловие не в основном запросе, а в условиях компоновки
... { ГДЕ Номенклатура В (&Список) } ... При отсутствии папаметра условие применяться не будет |
|||
31
Aprobator
25.06.08
✎
12:38
|
Поизвращался с заполнением списка на примере справочника Физлиц (под рукой был только ЗУП). Лови - может поможет:
"ВЫБРАТЬ | ВЫБОР | КОГДА ВложенныйЗапрос.ВСЕГО = 2 | ТОГДА ВложенныйЗапрос1.ИзСпис | ИНАЧЕ ВложенныйЗапрос1.Спр | КОНЕЦ КАК Поле1 |ИЗ | (ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР | КОГДА ФизическиеЛица.Ссылка В (&Спис) | ТОГДА 1 | ИНАЧЕ 2 | КОНЕЦ) КАК ВСЕГО | ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица) КАК ВложенныйЗапрос, | (ВЫБРАТЬ | ФизическиеЛица.Представление КАК Спр, | ВложенныйЗапрос.ЭлемСписка.Представление КАК ИзСпис | ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ФизическиеЛица.Ссылка КАК ЭлемСписка | ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ГДЕ | ФизическиеЛица.Ссылка В(&Спис)) КАК ВложенныйЗапрос | ПО (ИСТИНА) | ГДЕ | (НЕ ФизическиеЛица.ЭтоГруппа)) КАК ВложенныйЗапрос1 | |СГРУППИРОВАТЬ ПО | ВЫБОР | КОГДА ВложенныйЗапрос.ВСЕГО = 2 | ТОГДА ВложенныйЗапрос1.ИзСпис | ИНАЧЕ ВложенныйЗапрос1.Спр | КОНЕЦ"; |
|||
32
Aprobator
25.06.08
✎
12:41
|
+ 31, т.е. если Спис пустой - то берутся все элементы справочника. Иначе только те, что в условии.
|
|||
33
Гений 1С
гуру
25.06.08
✎
12:54
|
Можно.
Если в списке - элементы типо номенклатура, то чтото: ВЫБОР КОГДА 0 В ( ВЫБРАТЬ Количество(*) ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&Список)) ТОГДА //ЙО-МОЙО, ПУСТОЙ СПИСОК ИНАЧЕ //ЙО-МОЙО, НЕ ПУСТОЙ СПИСОК КОНЕЦ |
|||
34
Aprobator
25.06.08
✎
13:35
|
(33) Пробовал таким способом, но если запрос пустой, то это не прокатывает.
|
|||
35
Гений 1С
гуру
25.06.08
✎
14:06
|
(34) что значит запрос пустой? Если есть хоть один элемент, он и появится и будет не ноль
|
|||
36
Гений 1С
гуру
25.06.08
✎
14:07
|
Интересно, а так не покатит?
ВЫБОР КОГДА 0 В Количество(ВЫБРАТЬ &Список) ТОГДА ИНАЧЕ КОНЕЦ |
|||
37
Aprobator
25.06.08
✎
14:34
|
(35) Дык о чем и речь, если запрос пустой, - 0 не возвращается.
|
|||
38
Aprobator
25.06.08
✎
14:49
|
Сорри в 37 - ерунда. 0 возвращается. Блин, явно пора в отпуск. Крыша уже явно отдыхает.
|
|||
39
Aprobator
25.06.08
✎
15:05
|
По мотивам (33) удалось (31) преобразовать (с тем же эффектом) в следующее:
"ВЫБРАТЬ | ВЫБОР | КОГДА РазмерСписка.РазмСписка = 0 | ТОГДА ФизическиеЛица.Представление | ИНАЧЕ ЗапросПоСписку.Представление | КОНЕЦ КАК НужныйЭлемент |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ФизическиеЛица.Представление КАК Представление | ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ГДЕ | ФизическиеЛица.Ссылка В(&Спис)) КАК ЗапросПоСписку | ПО (ИСТИНА), | (ВЫБРАТЬ | КОЛИЧЕСТВО(ФизическиеЛица.Ссылка) КАК РазмСписка | ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ГДЕ | ФизическиеЛица.Ссылка В(&Спис)) КАК РазмерСписка | |СГРУППИРОВАТЬ ПО | ВЫБОР | КОГДА 0 = РазмерСписка.РазмСписка | ТОГДА ФизическиеЛица.Представление | ИНАЧЕ ЗапросПоСписку.Представление | КОНЕЦ"; |
|||
40
NewNick
26.06.08
✎
05:57
|
а чем вариант в (20) неустроило не понял ?))
|
|||
41
Origin
27.06.08
✎
12:46
|
(20) меня 20-й вариант устроил, выбрал его, спасибо работает
хотя 39-й тоже работает, всем спасибо |
|||
42
hhhh
27.06.08
✎
12:51
|
(41) если количество элементов номенклатуры > 10000 будет выполняться неслолько часов. Так что лучше выбрось эти методы и сделай как-нибудь тупо.
|
|||
43
Aprobator
27.06.08
✎
13:31
|
(40) Он слишком мелкий - я его просто не разглядел.
(42) Кидаем это условие в параметры виртуальной таблицы и все. |
|||
44
Aprobator
27.06.08
✎
13:33
|
(40) (20) конечно более лучший вариант. Просто у меня еще немного опыта работы с запросами. Вот и набираюсь потихноьку :).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |