| 
    
        
     
     | 
    
    
  | 
Аналог ЗначениеЗаполнено в запросе | ☑ | ||
|---|---|---|---|---|
| 
    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) Большое спасибо     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |