Имя: Пароль:
1C
 
Аналог ЗначениеЗаполнено в запросе
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) Строка.

Запрос = Новый Запрос;
        Запрос.Текст =  "ВЫБРАТЬ ПЕРВЫЕ 300
        | БП.НомерЗаявки КАК  НомерЗаявки
        | ИЗ
        | БизнесПроцесс.МойБизнесПроцесс КАК БП
        | ГДЕ
        | НомерЗаявки <> """"";
        
        РезультатЗапросаПредприятие = ЗапросПредприятие.Выполнить();


Тут есть ошибки?
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) Дело в том, что у меня почему-то даже вот такой обыкновенный запрос не выполняется корректно.

МойЗапрос = Новый Запрос;
        МойЗапрос.Текст =  "
        | ВЫБРАТЬ ПЕРВЫЕ 300
        | БП.НомерЗаявки КАК НомерЗаявки
        | ИЗ
        | БизнесПроцесс.МойБизнесПроцесс КАК БП";
        
        РезультатЗапроса = МойЗапрос.Выполнить();


Возвращает только коллекцию колонок. А самих значений нет
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) Большое спасибо