|
Аналог ЗначениеЗаполнено в запросе , adani_22
| ☑ | ||
---|---|---|---|---|
0
miniconda
14.11.19
✎
09:12
|
Делаю запрос
ВЫБРАТЬ ПЕРВЫЕ 300
И у меня тут много пустых значений, т.к. эти значения не заполнены. Как выбрать только те, в которых значение заполнено? |
|||
1
Ненавижу 1С
гуру
14.11.19
✎
09:16
|
Если НомерЗаявки строка, то НомерЗаявки<>""
Если НомерЗаявки число, то НомерЗаявки<>0 Надеюсь это не ссылка составного типа (бу-га-га) |
|||
2
miniconda
14.11.19
✎
09:18
|
(1) Да, насчет строки сработало. Но это по сути такой хитрый способ)
Можно как-то сравнить с NULL, НЕОПРЕДЕЛЕНО или еще чем-то, чтобы получить тот же результат? |
|||
3
Ненавижу 1С
гуру
14.11.19
✎
09:20
|
(2) вот не надо про больное
|
|||
4
toypaul
гуру
14.11.19
✎
09:21
|
(2)
|
|||
5
palsergeich
14.11.19
✎
09:21
|
(2) нет. Аналога Значение Заполнено в языке запросов нет
|
|||
6
toypaul
гуру
14.11.19
✎
09:22
|
блин.
"Но это по сути такой хитрый способ)" это нормальный способ "Можно как-то сравнить с NULL, НЕОПРЕДЕЛЕНО" для чего такие извращения? |
|||
7
ДенисЧ
14.11.19
✎
09:23
|
ЗначениеЗаполнено(СтроковаяПеременная) === ПустаяСтрока(СтроковаяПеременная) === СтроковаяПеременная = ""
Причём последний (а то и предпоследний) существенно быстрее. |
|||
8
dka80
14.11.19
✎
09:29
|
"Можно как-то сравнить с NULL, НЕОПРЕДЕЛЕНО"
Можно, но в общем случае пустое значение определенного типа не равно Null и Неопределено. Даже Null<>Null. Для этого есть "Есть Null" |
|||
9
Ненавижу 1С
гуру
14.11.19
✎
09:31
|
(8)
ВЫБРАТЬ СУММА(ВЫБОР КОГДА Номенклатура.Артикул ЕСТЬ NULL ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК КоличествоNULL ИЗ Справочник.Номенклатура КАК Номенклатура результат 898 |
|||
10
miniconda
14.11.19
✎
09:34
|
Всем спасибо
|
|||
11
Cyberhawk
14.11.19
✎
09:39
|
(7) Нет
|
|||
12
miniconda
14.11.19
✎
10:02
|
(1) В коде этот запрос возвращает пустой результат. Почему так?
Пробовал менять на это, не помогло | НомерЗаявки <> """" " |
|||
13
dka80
14.11.19
✎
10:10
|
(9) он у тебя группы выбрал
|
|||
14
dka80
14.11.19
✎
10:11
|
(12) тип значения у номера заявки какой?
|
|||
15
Ненавижу 1С
гуру
14.11.19
✎
10:14
|
(13) я знаю
|
|||
16
dka80
14.11.19
✎
10:15
|
(15) и тогда к чему этот пример и как он связан с (8)?
|
|||
17
miniconda
14.11.19
✎
10:15
|
(14) Строка.
Запрос = Новый Запрос;
Тут есть ошибки? |
|||
18
dka80
14.11.19
✎
10:16
|
(17) строка фиксированной длинны или переменной?
|
|||
19
miniconda
14.11.19
✎
10:16
|
В последней строке Запрос.Выполнить ()
|
|||
20
Ненавижу 1С
гуру
14.11.19
✎
10:17
|
(16) цитата:
>>пустое значение определенного типа не равно Null и Неопределено как оказалось вполне может |
|||
21
Ненавижу 1С
гуру
14.11.19
✎
10:17
|
(18) это неважно
|
|||
22
miniconda
14.11.19
✎
10:17
|
(18) переменная длина
|
|||
23
hhhh
14.11.19
✎
10:21
|
(12) | ГДЕ
| ПОДСТРОКА(НомерЗаявки, 1, 1) <> "" "" И НомерЗаявки <> """"" |
|||
24
dka80
14.11.19
✎
10:23
|
(20) формально ты прав, но твое решение противоречит бизнес-логике: группы не могут иметь артикула априори. Почему система считает это за Null, а не за пустую дату я не знаю.
|
|||
25
Cyberhawk
14.11.19
✎
10:25
|
(24) Зато по результату запроса сразу видно, только для элемента ли этот реквизит
|
|||
26
palsergeich
14.11.19
✎
10:25
|
(8) а теперь сообрази как у поля составного типа с типом ЛюбаяСсылка реализовать проверку на пустую ссылку
|
|||
27
dka80
14.11.19
✎
10:26
|
+24
https://its.1c.ru/db/metod8dev#content:2614:hdoc Существует значение Null (типа Null). Оно обозначает отсутствие значения в выборке полученной из базы данных. Например, при выполнении левого и правого соединения поля невыбранных записей будут иметь значения Null. Кроме того, значение типа Null будут иметь реквизиты иерархического справочника для элементов-групп, если в метаданных указано, что этот реквизит используется только для элементов не являющихся группами. Аналогично и для элементов, значения Null будут иметь реквизиты доступные только для групп. |
|||
28
dka80
14.11.19
✎
10:27
|
(26) =Неопределено
|
|||
29
palsergeich
14.11.19
✎
10:28
|
Аналога функции Значение Заполнено в языке запросов нет, все что Вы изобретете - костыли, ибо по человечески проверить пустые типы у полей составного типа не выйдет.
Подайте костыли под задачу и ИМХО не стоит изобретать общее решение |
|||
30
palsergeich
14.11.19
✎
10:29
|
(28) а вот и нет, неопределено - когда значение не инициировано, а если оно инициировано, то там может быть пустая ссылка любого доступного типа
|
|||
31
dka80
14.11.19
✎
10:31
|
(30) =неопределено или Значение(.пустаяссылка)
|
|||
32
Ненавижу 1С
гуру
14.11.19
✎
10:31
|
(26)
ГДЕ ПолеСоставногоТипа.Ссылка ЕСТЬ NULL //тормознуто, но работает |
|||
33
miniconda
14.11.19
✎
10:31
|
(23) Дело в том, что у меня почему-то даже вот такой обыкновенный запрос не выполняется корректно.
МойЗапрос = Новый Запрос;
Возвращает только коллекцию колонок. А самих значений нет |
|||
34
palsergeich
14.11.19
✎
10:32
|
(30) проверить очень просто.
Сделай регистр с одним измерением типом любая ссылка. Создай новую запись и сохрани как есть. Потом создай ещё одну запись и интерактивно выбери тип, но не выбери значение и сохрани. И удивись |
|||
35
palsergeich
14.11.19
✎
10:32
|
(32) Вон из профессии за такой код на проде.
(31) а вот нет такого оператора |
|||
36
Ненавижу 1С
гуру
14.11.19
✎
10:33
|
(33) как узнал?
попробуй Сообщить(МойЗапрос.Выполнить().Выгрузить().Количество()); |
|||
37
dka80
14.11.19
✎
10:34
|
(35) извини, не понял. Какого оператора нет?
Где Реквизит=Неопределено или Реквизит=Значение(Справочник.Номенклатура.ПустаяСсылка)? |
|||
38
Ненавижу 1С
гуру
14.11.19
✎
10:34
|
(35) ну точно
|
|||
39
novichok79
14.11.19
✎
10:34
|
(33) где подстрока(БП.НомерЗаявки, 1, 1) <> ""
в 1С sql read-only, смиритесь уже. |
|||
40
palsergeich
14.11.19
✎
10:36
|
(37) такой есть.
А в общем случае когда любая ссылка? Да ещё на каком нибудь ерп? |
|||
41
palsergeich
14.11.19
✎
10:37
|
(40) я об этом писал.
Частную проверку под конкретный запрос с ограниченными типами сделать можно. В общем случае - ничего хорошего не выйдет |
|||
42
Cyberhawk
14.11.19
✎
10:39
|
(40) Ну так в СУБД-то храниться в общем случае может любой тип, без портянки через выразить либо через соединения (в запросе) никак по-другому
|
|||
43
dka80
14.11.19
✎
10:41
|
(40) несколько вариантов:
1. привести к нужному типу в запросе 2. сформировать текст запроса динамически на хулиард проверок Значение(.ПустаяСсылка) 3. проверить на есть null (но учесть, что ты можешь выгнать из профессии ))) 4. Проверить результат запроса В общем случае понятно, что это будет затратно. Но тогда тут больше вопрос к архитектору системы. |
|||
44
palsergeich
14.11.19
✎
10:43
|
(42) можно.
Делаешь таблицу пустых типов и передаешь ее как параметр. Туда добавляет неопределено дополнительно. И делаешь проверку на is null или вхождения в таблицу пустых типов. Это будет работать быстрее чем остальные предложенные тут варианты. И через запрос - объединение вычисляет флаг пустого типа В первом запросе проверка на null во втором на вхождение в таблицу пустых типов |
|||
45
miniconda
14.11.19
✎
10:45
|
(36) Не понимаю почему, но вывелось 300.
Видимо, я явно чего-то не догоняю. 1) Выполнить() http://ipic.su/img/img7/fs/Snimok12.1573717323.png 2)Выполнить().Выгрузить() http://ipic.su/img/img7/fs/Snimok13.1573717377.png 3)Выполнить.Выбрать() http://ipic.su/img/img7/fs/Snimok14.1573717470.png Я пытался пройти по выборке, но как видите, тут пусто |
|||
46
dka80
14.11.19
✎
10:46
|
(45) Выполнить.Выбрать() .Следующий()
|
|||
47
dka80
14.11.19
✎
10:47
|
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл //бал бла бла КонецЦикла; |
|||
48
Cyberhawk
14.11.19
✎
10:49
|
(44) Хороший способ избавиться от портянки, возьму на заметку
|
|||
49
miniconda
14.11.19
✎
10:58
|
(47) Но почему у меня тогда пусто в запрос.выполнить() и запрос.выполнить().выбрать()?
Мне нужно в цикле получать будет значение из каждой строки выборки, а их в теории нет |
|||
50
hhhh
14.11.19
✎
11:00
|
(49) у тебя там не пусто. Там находятся РезультатЗапроса и ВыборкаИзРезультатаЗапроса
|
|||
51
olegves
14.11.19
✎
11:00
|
(48) а как ты поступишь с определяемым типом (который составной)
|
|||
52
miniconda
14.11.19
✎
11:06
|
(47) (50) Так, да, этот цикл сработал. Просто я не понимаю, почему тогда на моих скринах пусто? Как я тогда могу просмотреть все строки которые будут в выборке?
|
|||
53
dka80
14.11.19
✎
11:12
|
(52) потому что в выборке нужно спозиционироваться на следующем элементе выборки. Для этого есть метод Следующий()
В выборке все строки посмотреть можно только перебором (метод следующий()) Все строки результата запроса ты можешь посмотреть, выгрузив его в таблицу значений, например: тз= Запрос.Выполнить().Выгрузить(); |
|||
54
miniconda
14.11.19
✎
11:18
|
(47) (50) (36) Большое спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |