|
Язык запросов: НЕОПРЕДЕЛЕНО и ссылка, массив или список значений | ☑ | ||
---|---|---|---|---|
0
formista2000
28.10.24
✎
11:10
|
Привет!
В условии в запросе никак не хочет сравнивать параметр с НЕОПРЕДЕЛЕНО и с условием В(НЕОПРЕДЕЛЕНО). Тип параметра - Неопределено, ссылка, массив или список значений. Пока что проверяю на тип вне запроса и через свой шаблон подставляю условие в текст запроса в зависимости от типа. Уверен, что есть более изящный способ. Куда курить? Хелп! Заранее спасибо. |
|||
1
Волшебник
28.10.24
✎
11:10
|
Покажите запрос и обвязку программного кода.
Объясните, зачем всё это. |
2 5 |
||
2
formista2000
28.10.24
✎
11:14
|
(1) >> Объясните, зачем всё это.
Это из-за желания сделать функцию универсальной. Неизвестно, что в неё потом будет запихано в качестве параметров. |
3 4 |
||
3
Волшебник
28.10.24
✎
11:16
|
(2) Пока это всё бла-бла-бла про абстрактный бред. Будьте конкретней.
|
|||
4
Fedor-1971
28.10.24
✎
11:16
|
(2) Так нужно не извращаться и хотеть непонятного, а чётко проверить параметры на допустимые значения
и только потом запрос и его результаты |
|||
5
formista2000
28.10.24
✎
11:16
|
(1)
|ГДЕ | НЕ ФТ_Долги.ПометкаУдаления | " + ?(Контрагент = Неопределено, "", "И ФТ_Долги.Клиент = &Контрагент") + " | " + ?(Договор = Неопределено, "", "И ФТ_Долги.Договор = &Договор") + " | " + ?(Контракт = Неопределено, "", "И ФТ_Долги.Контракт В(&Контракт)") + " ... и так далее, а потом: Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Договор", Договор); Запрос.УстановитьПараметр("Контракт", Контракт); |
6 28 |
||
6
Волшебник
28.10.24
✎
11:33
|
(5) В запросе используйте такое условие:
ГДЕ (&ВсеКонтрагенты ИЛИ ФТ_Долги.Клиент В (&Контрагент))
снаружи: Если ЗначениеЗаполнено(Контрагент) Тогда Запрос.УстановитьПараметр("ВсеКонтрагенты", ЛОЖЬ); Запрос.УстановитьПараметр("Контрагент", Контрагент); Иначе Запрос.УстановитьПараметр("ВсеКонтрагенты", ИСТИНА); Запрос.УстановитьПараметр("Контрагент", Новый Массив); КонецЕсли; |
7 |
||
7
Fedor-1971
28.10.24
✎
11:25
|
(6) так Массив нужен в обеих установках, просто Контрагент, скорее всего, не подойдёт
|
8 |
||
8
Волшебник
28.10.24
✎
11:28
|
(7) подойдёт
|
|||
9
formista2000
28.10.24
✎
15:05
|
Йа сделяль! )
воть: | И ВЫБОР | КОГДА НЕОПРЕДЕЛЕНО В(&Контрагент) | ТОГДА ИСТИНА | ИНАЧЕ ФТ_Долги.Клиент В(&Контрагент) | КОНЕЦ И Неопределено понимает, и ссылку, и список, и массив! )) |
10 12 15 |
||
10
Галахад
28.10.24
✎
15:08
|
(9) Хм. Что пустое, что не пустое все равно? ))
|
11 |
||
11
formista2000
28.10.24
✎
15:10
|
(10) Если пустое - значит по всем, значит ИСТИНА. Если задано - то по заданному.
|
|||
12
Волшебник
28.10.24
✎
15:10
|
(9) сомнительное решение...
|
13 |
||
13
formista2000
28.10.24
✎
15:19
|
(12) Что смущает?
|
14 |
||
14
Волшебник
28.10.24
✎
15:21
|
(13) Вот это смущает:
И ВЫБОР КОГДА НЕОПРЕДЕЛЕНО В(&Контрагент) как-то корявенько выглядит. Моя конструкция более логична и работать будет быстрее: И (&ВсеКонтрагенты ИЛИ ФТ_Долги.Клиент В (&Контрагент)) |
|||
15
H A D G E H O G s
28.10.24
✎
17:57
|
(9)
formista2000: | И ВЫБОР | КОГДА НЕОПРЕДЕЛЕНО В(&Контрагент) | ТОГДА ИСТИНА | ИНАЧЕ ФТ_Долги.Клиент В(&Контрагент) | КОНЕЦ Планировщик запросов:
|
|||
16
DimVad
28.10.24
✎
18:29
|
Я просто пишу текст запроса в конструкторе.
А потом проверка в коде. Например если список пуст то можно удалить подстроку. |
17 |
||
17
Волшебник
28.10.24
✎
18:49
|
(16) Тогда можно так.
В запросе: ГДЕ ИСТИНА И &ОтборКонтрагент В коде: Если ЗначениеЗаполнено(Контрагент) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборКонтрагент", "Контрагент В (&Контрагент)"); Запрос.УстановитьПараметр("Контрагент", Контрагент); Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборКонтрагент", "ИСТИНА"); КонецЕсли; |
|||
18
novichok79
28.10.24
✎
18:54
|
ПостроительЗапроса? СхемаЗапроса?
|
19 |
||
19
Волшебник
28.10.24
✎
19:01
|
(18) из пушки по воробьям
|
|||
20
Garykom
28.10.24
✎
20:04
|
Интересно что будет когда в запросе потребуется проверить составной реквизит на не заполненность?
Причем составной из туевой тучи ссылочных типов |
|||
21
Hans
28.10.24
✎
20:44
|
Код жесть.
|
22 |
||
22
Волшебник
28.10.24
✎
20:54
|
(21) Покажите класс
|
|||
23
formista2000
28.10.24
✎
21:02
|
Я хотел минимум кода и максимум универсальности! Я хотел изящно! ((
|
|||
24
Hans
28.10.24
✎
21:08
|
Можно так:
|ГДЕ | НЕ ФТ_Долги.ПометкаУдаления | И &ОтборПоКонтрагенту | И &ОтборПоДоговору | И &ОтборПоКонтракту запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ОтборПоКонтрагенту", ?(ЗначениеЗаполнено(Контрагент), "Контрагент = &контрагент", "")); запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ОтборПоДоговору", ?(ЗначениеЗаполнено(Договор), "Договор = &Договор", "")); запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ОтборПоКонтракту", ?(ЗначениеЗаполнено(Контракт), "Договор = &Контракт", "")); |
29 |
||
25
Hans
28.10.24
✎
21:09
|
Схема запроса это тоже не пушка по воробьям.
|
|||
26
Hans
28.10.24
✎
21:15
|
Я уже Стаса учу.
|
|||
27
Hans
28.10.24
✎
21:16
|
Не желательно в запросах имень конструкции вида "Иcтина = Истина" и прочие артефакты.
|
|||
28
Hans
28.10.24
✎
21:17
|
(5) Любой запрос должен нормально открываться конструктором.
|
|||
29
Бычье сердце
28.10.24
✎
21:28
|
||||
30
Волшебник
28.10.24
✎
21:49
|
Я так понял, здесь собрание дурдома
|
|||
31
TormozIT
29.10.24
✎
08:09
|
Опровергаю исходное утверждение на платформе 8.3.25
Запрос выполняется успешно и выводит строку результата выбрать 1 ГДЕ НЕОПРЕДЕЛЕНО В (НЕОПРЕДЕЛЕНО) И НЕОПРЕДЕЛЕНО В (&НЕОПРЕДЕЛЕНО) И НЕОПРЕДЕЛЕНО В (&СписокСНеопределено) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |