1с запрос проверка на незаполненный реквизит

В этой статье будут рассмотрены способы проверки на пустое значение в зависимости от типа проверяемого реквизита в запросе 1С 8.3, в том числе пустой ссылки.

запрос

Проверка на NULL

Значение NULL возвращается в том случае, когда реквизита попросту нет. Тип в этом случае будет тоже NULL. Например, вы объединяете две таблицы через левое соединение. В том случае, когда для левой таблицы не будет найдено ни одного значения в правой, вернется NULL.

Проверку на данное значение можно осуществить при помощи конструкции «ЕСТЬ NULL» и «ЕСТЬNULL()». В первом случае возвращается Истина или Ложь. Во втором случае можно сразу задать другое значение в том случае, когда возвращается NULL.

В приведенном ниже запросе 1С 8.3 будут возвращен список контактных лиц тех партнеров, у кого не задан сегмент.

ВЫБРАТЬ
КонтактныеЛицаПартнеров.Ссылка
ИЗ
Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СегментыПартнеров КАК СегментыПартнеров
ПО КонтактныеЛицаПартнеров.Владелец = СегментыПартнеров.Родитель
ГДЕ
СегментыПартнеров.Ссылка ЕСТЬ NULL

Пустая дата

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

Связаться с нами можно по телефону +7 499 350 29 00.

Услуги и цены можно увидеть по ссылке.

Будем рады помочь Вам!

Проверка значения на пустую дату производится путем сравнения с конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0). Пример использования приведен ниже:

ВЫБРАТЬ
Встреча.Ссылка
ИЗ
Документ.Встреча КАК Встреча
ГДЕ
Встреча.Дата = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

Пустая ссылка в запросе 1С

В случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка).

В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион.

ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.БизнесРегион = ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)

Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:

Партнеры.БизнесРегион <> ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)

Пустая строка

Для проверки строковых типов производится сравнение с другим образцом. В данном случае – «».

Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием.

ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.Наименование = «»

запрос: проверка на пустое значение реквизита составного типа

Я
   серый КТУЛХУ

03.10.21 — 16:44

а не изобретен ли случайно (или неслучйно) коллективным разумом (или каким-нибудь неколлективным) способ проверить в запросе значение реквизита составного типа на пустое значение (которое может быть пустым значением любого доступного для этого реквизита типа!) — без перебора его в богато ветвящейся конструкции «ВЫБОР КОГДА ТОГДА КОГДА ТОГДА …» на равенство пустым значениям всех возможных типов?.. (а то ДАЖЕ использовав эту монструозную конструкцию — с дрожью думаешь о том, что же придется делать если вдруг в состав такого реквизита когда-нибудь добавится еще тип)…

на IS NULL / ISNULL() — не работает…

  

Партнерская программа EFSOL Oblako

   ДенисЧ

1 — 03.10.21 — 16:46

реквизит.Ссылка есть NULL

   ДенисЧ

2 — 03.10.21 — 16:46

Если там строк и чисел нет

   тук-тук

3 — 03.10.21 — 16:48

Неопределено

   ДенисЧ

4 — 03.10.21 — 16:49

(3) Зачёт не сдан, на переподготовку.

   серый КТУЛХУ

5 — 03.10.21 — 16:51

(1),(2): сам-то пробовал? годится только если тип не укахан. а если значение пустое с указанным типом — не работает (я же вроде про «IS NULL» упомянул — это то же самое что «есть NULL»)

я читал про такой способ — проверку на реальных данных с установленным непустым (агрегатным) типом реквизита — не работает.

(3) сам-то пробовал: (см.выше)

   ДенисЧ

6 — 03.10.21 — 16:53

(5) Ты не заметил .ссылка? О_о

   тук-тук

7 — 03.10.21 — 16:57

ЕСТЬNULL(СправочникИмя.РеквизитСоставной.Представление, Неопределено)=Неопределено

   hhhh

8 — 03.10.21 — 16:58

(0) вообще-то сейчас приняли за правило в перед записью проверять, если пустая ссылка, то принудительно туда писать НЕОПРЕДЕЛЕНО. Чтобы пустых ссылок в базе не было. А в запросе просто пишут ВЫБОР КОГДА реквизит = НЕОПРЕДЕЛЕНО ТОГДА

   серый КТУЛХУ

9 — 03.10.21 — 16:58

(6): таак. щя пойду перепроверю… благо запросы еще в консоли вроде сохранились (ну почти)).

   тук-тук

10 — 03.10.21 — 16:58

ЕСТЬNULL(СправочникИмя.РеквизитСоставной.Представление, Неопределено)=Неопределено — для выбранного типа

СправочникИмя.РеквизитСоставной = Неопределено — для невыбранного типа в реквизите

   ДенисЧ

11 — 03.10.21 — 16:58

(8) Правила существуют, чтобы их нарушать )))

   серый КТУЛХУ

12 — 03.10.21 — 16:59

(7) тоже не работает. потому что оно НЕ NULL

   Ненавижу 1С

13 — 03.10.21 — 17:16

Какая интересная тема

   vde69

14 — 03.10.21 — 17:26

для любых ссылочных типов:

ВЫБОР

КОГДА ЕСТЬNULL(а, Неопределено)=Неопределено ТОГДА ЛОЖЬ

КОГДА а.ссылка.Версия есть null ТОГДА ЛОЖЬ

ИНАЧЕ ИСТИНА

КонецВыбор

   серый КТУЛХУ

15 — 03.10.21 — 17:56

(1),(6): гут, работает. спасибо тебе. добрый человек (пойду в запрос поменяю дерево проверок на одно условие)

и тогда — сразу вопрос: это еще одно лазание «через точку» (.Ссылка) — не затормозит запрос? как-то оптимизировать в этом месте можно или нинада?

(14): Поле не найдено РеализацияТоваровУслуг.Сделка.Версия

КОГДА РеализацияТоваровУслуг.Сделка.<<?>>Версия IS NULL ТОГДА «авто-очистка!»

   серый КТУЛХУ

16 — 03.10.21 — 17:59

(15)+:

(14) та же байда со ссылкой:

КОГДА РеализацияТоваровУслуг.Сделка.Ссылка.<<?>>Версия IS NULL ТОГДА «авто-очистка!»

   ДенисЧ

17 — 03.10.21 — 18:05

(15) Затормозит.

Если нужно быстро, тогда используй (8)

   vde69

18 — 03.10.21 — 18:27

(16) тут вопрос будет если ссылка но битая…. или если ссылка но доступа нет….

   Ненавижу 1С

19 — 03.10.21 — 18:27

Еще есть тема написать универсальную функцию, которая по метаданным реквизита собирает все возможные пустые ссылки и неопределено в массив

и потом писать соответственно Реквизит В (&МассивПустыхСсылок)

а можно и не по метаданным, вообще все пустые ссылки и неопределено )))

   vde69

20 — 03.10.21 — 18:32

(19) я недавно в типовой видел похожую, в динамическом списке файлов есть параметр «пустойпользователь», туда суется похожий массив.

   серый КТУЛХУ

21 — 03.10.21 — 19:06

(17): наверное потому что .Ссылка будет дергать все таблицы. абыдна. ну да ладно, в (19) норм тема если тормоза полезут. хотя и там тоже — будет дергать все(!) таблицы документов, которые есть в составе…

спасибо, люди.

   Ненавижу 1С

22 — 03.10.21 — 19:09

(21) почему там будут дергаться все таблицы? ссылка, она как бы не требует ничего

   vde69

23 — 03.10.21 — 19:15

(22) (21) будет дергатся все таблицы, начиная с таблицы конфиг…

составной тип — зло, гораздо красивее выходит использование ПВХ, хотя то-же не сахар…

хотя без составных типов обойтись очень тяжело, у меня сейчас есть задачка похожая, я знаю, что сейчас делаю медленную телегу, но когда данных будет побольше вот тогда и буду переделывать

   pechkin

24 — 03.10.21 — 19:17

А пвх значит не составной тип?

   youalex

25 — 03.10.21 — 19:18

(0) если искомый тип ссылка конкретной таблицы то тупо джойн к этой таблице

   Ненавижу 1С

26 — 03.10.21 — 19:20

(23) ПВХ тоже самое — составной тип

а для обхода всех метаданных ничего кроме метаданных не надо, имхо

   youalex

27 — 03.10.21 — 19:20

(23) ПВХ в этом смысле ничем не лучше

   youalex

28 — 03.10.21 — 19:22

(25) + еще не факт что 1С задействует при этом нужный индекс при неактуальной статистике.

   pechkin

29 — 03.10.21 — 19:25

В (19) никаких лишних соединений не будет

   серый КТУЛХУ

30 — 03.10.21 — 19:27

(29): о.

Ок, спасибо.

   ГдеСобакаЗарыта

31 — 03.10.21 — 19:31

   Ненавижу 1С

32 — 03.10.21 — 19:55

Но думаю обход метаданных будет сложно организовать, надо будет обегать дерево, когда реквизит не прямо у таблицы берется, например:

ТоварыКОтбору.Распоряжение.ДокументОснование

где Распоряжение сам составного типа и у каждого из них ДокументОснование состоит из разных типов

   vde69

33 — 03.10.21 — 20:10

(32) для твоего случая следует создать и использовать «критерииОтбора», и хотя там нет никаких доп таблиц, но запросы строятся с учетом специфики составных полей, и с индексами там все хорошо будет

   Ненавижу 1С

34 — 03.10.21 — 20:38

(33) я не думаю, что он тут необходим и чем-то вообще поможет

   pechkin

35 — 03.10.21 — 20:47

(33) критерий отбора просто создает индекс по выбранным полям

   roman52

36 — 03.10.21 — 20:54

а вот интересно: были ли у кого-нибудь задачи, в которых нужны И Неопределено и пустые ссылки?

Т.е. когда нельзя пустую ссылку приводить к Неопределено.

Ну не знаю, например, если в реквизите Неопределено, то от пользователя доп.действий не требуется, а если в реквизите пустая ссылка определенного типа, то пользователь должен указать уже непустую ссылку этого типа.

   vde69

37 — 03.10.21 — 21:01

(36) да такие задачи бывают, обычно это связано с необходимостью работать с результатом например по индексу после разыменования (или что более правильно после джойна)

   Ненавижу 1С

38 — 03.10.21 — 21:05

(36) в типовой была тема, что если скидка применялась для всех (складов или договора) то нужно было ставить ссылку на пустой договор. Наверное осталось когда реквизит не был составным.

Мое мнение прежнее — тема надуманная. Не нужно их различать, а 1с просто неудачно модель выстроила. Имхо null там должен быть. Но имеем то, что имеем

   acanta

39 — 03.10.21 — 22:16

И поэтому в справочнике появились предопределенные значения ПоУмолчанию.

   серый КТУЛХУ

40 — 03.10.21 — 22:58

(32): нет, не сложно.

    СписокПустыхСсылок = Новый Массив;

    Для Каждого ТипИзСоставного Из Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты.Сделка.Тип.Типы() Цикл

        ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипИзСоставного);

        Если Метаданные.Справочники.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.Документы.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.Перечисления.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.Задачи.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных)

            ИЛИ Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных)

            Тогда

            СписокПустыхСсылок.Добавить(Новый(ТипИзСоставного));

        КонецЕсли;

    КонецЦикла;

    ЗапросПроверкаПоСпискуПустыхСсылок.Параметры.Вставить(«ПустыеСделки», СписокПустыхСсылок);

(код «с запасом»)

   серый КТУЛХУ

41 — 03.10.21 — 23:05

в общем сделал тестовое сравнение времени запросов с проверкой на пустые значения составных реквизитов (все типы в составе агрегатные, всего 29 типов документов в реквизите Сделка м.б.):

1-е место по скорости: проверка на вхождение в список пустых значений всех типов для составного типа (реквизита), включая время составления списка по метаданным — см.(40)

2-е место — с развесистым деревом типа:

ВЫБОР КОГДА РеализацияТоваровУслуг.Сделка = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка) ТОГДА

  КОГДА РеализацияТоваровУслуг.Сделка = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) ТОГДА

  …

КОНЕЦ

— в 1.2 — 1.5 раз медленнее варианта 1

3-е место — с проверкой на .Ссылка IS NULL — в 3.2 — 3.5 раз медленнее варианта 1

вусем спасибо, надеюсь мои тесты кому-нибудь пригодятся (в качестве благодарности за продуктивный обмен мнениями по интересующему меня вопросу).

   Ненавижу 1С

42 — 03.10.21 — 23:13

(40) вы это сделали скажем так для поля

Документы.РеализацияТоваровУслуг.Сделка

Я же говорил про ситуацию

Документы.РеализацияТоваровУслуг.Сделка.ДокументОснование

Причем:

Сделка сама по себе составной тип и ДокументОснование составной, причем состав типов разный у разных типов сделок

Вообще вложенность точек может быть длиннее

   Ненавижу 1С

43 — 03.10.21 — 23:15

(40) теперь это надо функцией оформить для общего случая и будет ОК

   Ненавижу 1С

44 — 03.10.21 — 23:17

А если вместо (40) сделать универсальный список ВСЕХ пустых? Понятно, что список длиннее будет, но зато его готовить не надо долго. Вообще в параметры сеанса можно запихнуть

   серый КТУЛХУ

45 — 03.10.21 — 23:40

(44): угу, мысль хорошая…

(ну кроме элементарных типов — они-то пустые даже — не совсем пустые как бы, особняком от агрегатных стоят, да и при желании в виде прямой формулы легко получаются)

   серый КТУЛХУ

46 — 03.10.21 — 23:45

(42): а давайте на «ты». я с начал интернетов, фидо, чатов-форумов еще, и как-то привык. что доброжелательное и уважительное общение — это как раз на «ты»; а «вы»-канье — это уже демостративное дистанцирование с как минимум оттенком неодобрения.

(ну, кроме естественной ниши для «вы» — деловой переписки, переписки с публичными фигурами и с теми, с кем в реале знаком и на «вы» общаешься).

   TormozIT

47 — 04.10.21 — 00:37

Если устроит генератор выражения проверки условия «Значение заполнено» для поля любого составного типа, то «Конструктор запроса (ИР)» умеет это делать.

Правда для булева типа он работает не так как встроенный язык — значение «Ложь» считает незаполненным. Мне так показалось логичнее.

https://i.imgur.com/5N9fbrP.png

   серый КТУЛХУ

48 — 04.10.21 — 01:14

(47): спасибо. только я так понимаю это типа автоматическая генерация в сам текст запроса того самого развесистого дерева со сравнением по типам — нет? если «да» то это немного не то, я как раз про универсальный (не зависящий от состава допустимых типов реквизита) условие(сравнение) спрашивал.

(ага, ложь в качестве незаполненного кажется весьма логичной интерпретацией)

   Конструктор1С

49 — 04.10.21 — 09:22

Совершенно незачем дёргать метаданные для этой задачи. Выручит СхемаЗапроса

   Конструктор1С

50 — 04.10.21 — 09:22

Функция ПустыеЗначенияПоляСоставногоТипа(ПутьКТаблице, ИмяПоля)

    
    ТекстЗапроса = СтрШаблон(«ВЫБРАТЬ %1 ИЗ %2», ИмяПоля, ПутьКТаблице);

    
    СхемаЗапроса = Новый СхемаЗапроса;

    СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);

    
    ОписаниеТиповПоля = СхемаЗапроса.ПакетЗапросов[0].Колонки[0].ТипЗначения;

    
    ПустыеЗначения = Новый Массив;

    ПустыеЗначения.Добавить(Неопределено);

    
    Для каждого ТипЗначения Из ОписаниеТиповПоля.Типы() Цикл

        
        МассивТипов = Новый Массив;

        МассивТипов.Добавить(ТипЗначения);

        
        ОписаниеТипа = Новый ОписаниеТипов(МассивТипов);

        
        Значение = ОписаниеТипа.ПривестиЗначение(Неопределено);

        
        ПустыеЗначения.Добавить(Значение)

    
    КонецЦикла;

    
    Возврат ПустыеЗначения;

    
КонецФункции

   Конструктор1С

51 — 04.10.21 — 09:31

(40) а если в составе окажется примитивный тип?

   Ненавижу 1С

52 — 04.10.21 — 09:35

(50) это таже рефлексия, вид с другой стороны

   Конструктор1С

53 — 04.10.21 — 09:41

(52) тока схема запроса легче справляется. На шальном поле с типом ЛюбаяСсылка или хотя бы ДокументСсылка перебор всех метаданных может вылиться в значительное время. СхемаЗапроса моментально выплюнет все необходимые типы

   серый КТУЛХУ

54 — 04.10.21 — 13:05

(51): см.(47), и — у примитивных типов данных де-факто не бывает пустых значений. 0, «», «01.01.01», Ложь/Истина — не пустые значения. для всех этих типов пустое значение — нетипизированное Неопределено, а оно охватывается в коде простым условием.

   Ненавижу 1С

55 — 04.10.21 — 13:09

(53) вы прилагательными не говорите, вы количественные тесты приведите

   серый КТУЛХУ

56 — 04.10.21 — 13:09

(53): нет. перебор метаданных не «выливается в значительное время». проверено на практике, замер для (41) — там для этого варианта (п.1) «включая время составления списка по метаданным» по не очень маленькому списку ~30 типов.

не веришь — сделай хронометраж, и покажи — как мерял и что получилось.

   серый КТУЛХУ

57 — 04.10.21 — 13:09

(55): опередил заразюка )))

   серый КТУЛХУ

58 — 04.10.21 — 13:18

прим.: и — мне тоже для тестирования — в (50) как убрать элементарные (неагрегатны) типы из списка (пропустить при составлении списка) — дай код с этой оговоркой, пжалст.

   H A D G E H O G s

59 — 04.10.21 — 13:22

(1) Херовое решение.

   серый КТУЛХУ

60 — 04.10.21 — 13:40

(59): как насчет (41)?

   серый КТУЛХУ

61 — 04.10.21 — 13:53

(53):

// на обсуждаемом реквизите (Документ.РеализацияТоваровУслуг.Сделка) составного типа (29 типов):

Функция ЭтоАгрегатныйТип(ТипЗначения)

    ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);

    Возврат    Метаданные.Справочники.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.Документы.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.Перечисления.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.Задачи.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных)

        ИЛИ Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных);

КонецФункции

Функция ПустыеЗначенияПоляСоставногоТипаПоСхемеЗапроса(ПутьКТаблице, ИмяПоля)

    ТекстЗапроса = «ВЫБРАТЬ » + ИмяПоля + » ИЗ » + ПутьКТаблице;

    СхемаЗапроса = Новый СхемаЗапроса;

    СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);

    ОписаниеТиповПоля = СхемаЗапроса.ПакетЗапросов[0].Колонки[0].ТипЗначения;

    ПустыеЗначения = Новый Массив;

    ПустыеЗначения.Добавить(Неопределено);

    Для Каждого ТипЗначения Из ОписаниеТиповПоля.Типы() Цикл

        Если ЭтоАгрегатныйТип(ТипЗначения) Тогда

            МассивТипов = Новый Массив;

            МассивТипов.Добавить(ТипЗначения);

            ОписаниеТипа = Новый ОписаниеТипов(МассивТипов);

            Значение = ОписаниеТипа.ПривестиЗначение(Неопределено);

            ПустыеЗначения.Добавить(Значение)

        КонецЕсли;

    КонецЦикла;

    Возврат ПустыеЗначения;

КонецФункции

Функция ПустыеЗначенияПоляСоставногоТипаИзМетаданных(ТипДанных, ВидДанных, ИмяПоля)

    ПустыеЗначения = Новый Массив;

    Для Каждого ТипЗначения Из Метаданные[ТипДанных][ВидДанных].Реквизиты[ИмяПоля].Тип.Типы() Цикл

        ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);

        Если ЭтоАгрегатныйТип(ТипЗначения) Тогда

            ПустыеЗначения.Добавить(Новый(ТипЗначения));

        КонецЕсли;

    КонецЦикла;

    Возврат ПустыеЗначения;

КонецФункции

    ТаймерыПолученияПустыхСсылок = Новый Структура(«ПоСхемеЗапроса, ПоМетаданным», 0, 0);

    КоличествоТестов = 100;

    
    СписокПустыхСсылок = ПустыеЗначенияПоляСоставногоТипаПоСхемеЗапроса(«Документ.РеализацияТоваровУслуг», «Сделка»);

    СписокПустыхСсылок = Неопределено;

    ТаймерыПолученияПустыхСсылок.ПоСхемеЗапроса = ТекущаяУниверсальнаяДатаВМиллисекундах();

    Для СчетчикТестов = 1 По КоличествоТестов Цикл;

        СписокПустыхСсылок = ПустыеЗначенияПоляСоставногоТипаПоСхемеЗапроса(«Документ.РеализацияТоваровУслуг», «Сделка»);

        СписокПустыхСсылок = Неопределено;

    КонецЦикла;

    ТаймерыПолученияПустыхСсылок.ПоСхемеЗапроса = ТекущаяУниверсальнаяДатаВМиллисекундах() — ТаймерыПолученияПустыхСсылок.ПоСхемеЗапроса;

    Сообщить(«Составление списка пустых значений по Схеме запроса: миллсекунд = » + ТаймерыПолученияПустыхСсылок.ПоСхемеЗапроса + » / » + КоличествоТестов);

    
    СписокПустыхСсылок = ПустыеЗначенияПоляСоставногоТипаИзМетаданных(«Документы»,»РеализацияТоваровУслуг», «Сделка»);

    СписокПустыхСсылок = Неопределено;

    ТаймерыПолученияПустыхСсылок.ПоМетаданным = ТекущаяУниверсальнаяДатаВМиллисекундах();

    Для СчетчикТестов = 1 По КоличествоТестов Цикл;

        СписокПустыхСсылок = ПустыеЗначенияПоляСоставногоТипаИзМетаданных(«Документы»,»РеализацияТоваровУслуг», «Сделка»);

        СписокПустыхСсылок = Неопределено;

    КонецЦикла;

    ТаймерыПолученияПустыхСсылок.ПоМетаданным = ТекущаяУниверсальнаяДатаВМиллисекундах() — ТаймерыПолученияПустыхСсылок.ПоМетаданным;

    Сообщить(«Составление списка пустых значений по Метаданным: миллсекунд = » + ТаймерыПолученияПустыхСсылок.ПоМетаданным + » / » + КоличествоТестов);

результат:

Составление списка пустых значений по Схеме запроса: миллсекунд = 220 / 100

Составление списка пустых значений по Метаданным: миллсекунд = 179 / 100

(да и как-то короче и понятнее кажется код по Метаданным)

   H A D G E H O G s

62 — 04.10.21 — 14:01

Лучше всего через составной тип

    Запрос=Новый Запрос;

    Запрос.Текст=

    «ВЫБРАТЬ

    |    ДатыСоздания.ДатаСоздания КАК ДатаСоздания

    |ИЗ

    |    РегистрСведений.ДатыСоздания КАК ДатыСоздания

    |ГДЕ

    |    НЕ ДатыСоздания.СкладскойДокумент В (НЕОПРЕДЕЛЕНО, &МассивПустыхСкладскихДокументов)»;

    МассивПустыхСкладскихДокументов=Новый Массив;

    Для Каждого Тип Из Метаданные.ОпределяемыеТипы.СкладскиеДокументы.Тип.Типы() Цикл

        МассивПустыхСкладскихДокументов.Добавить(Новый(Тип));

    КонецЦикла;

    Запрос.УстановитьПараметр(«МассивПустыхСкладскихДокументов»,МассивПустыхСкладскихДокументов);

    Результат=Запрос.Выполнить().Выгрузить();

Но с типовыми конечно так не получится

   H A D G E H O G s

63 — 04.10.21 — 14:02

(62) Пардон

через составной тип-> через определяемый тип

   pechkin

64 — 04.10.21 — 14:15

(62) в конкретном случае можно напрямую к метаданным реквизита регистра обратиться, без всяких опрпделяемых типов

   H A D G E H O G s

65 — 04.10.21 — 14:24

(64) Да, это гораздо лучше!

   Конструктор1С

66 — 04.10.21 — 14:39

(58) можно приводить тип к строке и проверять

ИмяТипаXML = XMLТип(ПроверяемыйТип).ИмяТипа;

На выходе

CatalogRef.Номенклатура

DocumentRef.ПриходнаяНакладная

вот по подстроке «Ref.» можно ориентироваться. Соответственно, без Ref это какой-то примитивный тип.

   pechkin

67 — 04.10.21 — 14:42

(66) это быстрее? строки в 1с не быстро работают

   Конструктор1С

68 — 04.10.21 — 16:05

(67) гораздо быстрее обращения к метаданным. XMLТип() скорее всего завязано на движок обмена данными 1с, поэтому хорошо оптимизировано

   TormozIT

69 — 04.10.21 — 19:07

(53) Ну это очень смелое утверждение. Я много раз проверял — схема запроса также буксует на широких по составу описаниях типов полей, как и остальные механизмы платформы. И это вполне ожидаемо.

   TormozIT

70 — 04.10.21 — 19:11

(69) + Если конечно сравнивать с буквальным перебором метаданных, то выигрыш будет только первый раз за счет разовой загрузки метаданных. Супертип ЛюбаяСсылка развернется в массив типов без загрузки всех метаданных в память.

  

Конструктор1С

71 — 05.10.21 — 06:44

(69) не также она буксует, значительно быстрее отрабатывает

 0 

   

Распечатать

1С 8.x : Условия сравнения и проверки в Запросах. Отбор не заполненного значения

Как задать отбор по Типу документа?
Как указать условие для отбора не определенного значения?
Как в языке запросов 1С отобрать не заполненное значение?
Какое условие указать в запросе после ключевого слова «ГДЕ», когда нужно сделать отбор по не заполненным полям?

Код 1C v 8.х

  Запрос.Текст =
"ВЫБРАТЬ
| усЕдиницыХранения.Ссылка
|ИЗ
| Справочник.усЕдиницыХранения КАК усЕдиницыХранения"

// Пример 1. сравнение с не заполненным булевым значением:
|ГДЕ
| усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь

// Пример 2. но если это булево определено, то лучше так: // условие на отрицательное булево:
|ГДЕ
| НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны

// Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа"
|ГДЕ
| усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка)

// Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа"
|ГДЕ
| НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка)

// Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле)
|ГДЕ
| (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка)
| ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка)
| ИЛИ ...(и т.д. - последовательно перечисляем условия для всех возможных типов этого составного поля))

// Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие:
|ГДЕ
| усЕдиницыХранения.Наименование > """"

// Пример 5. если нужно выбрать документы конкретного типа, при составном типе данных, например в регистре "ВыполняемыеЗадания" ресурс "Задание" имеет составной тип, среди значений которого возможен документ "Отбор"
|ГДЕ
| ВЫРАЗИТЬ(РегистрСведенийВыполняемыеЗадания.Задание КАК Документ.Отбор) ССЫЛКА Документ.Отбор

// Пример 5а. Еще аналогичный пример, когда нужно выбрать документы конкретного типа
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг
| ТОГДА ""ПоступлениеТоваровУслуг""
| КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА ""РеализацияТоваровУслуг""
| ИНАЧЕ """"
| КОНЕЦ КАК ВидДокумента

// Пример 6. выбор по условию не определенного значения:
|ГДЕ
| СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО

// Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" - аналогично):
|ГДЕ
| РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

// Пример 8. Как в запросе указать, что выполнять запрос не нужно (например, нужно программно в зависимости от какого-то
// условия вернуть пустой результат запроса -
// Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");).
// Для этого достаточно добавить условие "Где Ложь".
// Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно.
|ГДЕ ЛОЖЬ

// Пример 9. Проверка на то, что результат выполнения запроса содержит данные:
Если НЕ Запрос.Выполнить().Пустой() Тогда

// Пример 10. выбор по условию не заполненной даты:
|ГДЕ
| тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1)

источник

На чтение 5 мин. Просмотров 3.5k. Опубликовано 15.12.2019

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. Проверку того, что результат выполнения запроса не содержит строк следует выполнять с помощью метода Пустой . Поскольку на получение выборки из результата запроса (выгрузка его в таблицу значений) будет затрачиваться дополнительное время.

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;

Возврат НЕ Запрос.Выполнить().Пустой()

Методическая рекомендация (полезный совет)

2. В то же время если требуется выбрать (или выгрузить) результат запроса, то предварительный вызов метода Пустой не требуется.
Например, вместо:

РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
.

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
.

Рассмотрим основные методы использования пустых значений в условиях запросов 1С 8.3.

Проверка на NULL

выполняется с помощью конструкции ЕСТЬ NULL, например:

ВЫБРАТЬ
ВнутренниеЗаказыОстатки.Заказчик,
ВнутренниеЗаказыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ВнутренниеЗаказы.Остатки КАК ВнутренниеЗаказыОстатки
ГДЕ
ВнутренниеЗаказыОстатки.КоличествоОстаток ЕСТЬ NULL

Получите 267 видеоуроков по 1С бесплатно:

Содержание

  1. Пустая дата в запросе 1С
  2. Пустая ссылка (значение) в запросе 1С 8.2 и 8.3
  3. Проверка на пустую строку в запросе 1С
  4. Проверка на NULL
  5. Пустая дата
  6. Пустая ссылка в запросе 1С
  7. Пустая строка

Пустая дата в запросе 1С

Пустая дата в запросе устанавливается конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), пример:

ВЫБРАТЬ
СчетНаОплатуПокупателю.Ссылка,
СчетНаОплатуПокупателю.ДатаОтгрузки
ИЗ
Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
ГДЕ
СчетНаОплатуПокупателю.ДатаОтгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

Пустая ссылка (значение) в запросе 1С 8.2 и 8.3

Для ссылочных значений (справочники, документы, перечисления, планы счетов и т.д) для проверки необходимо использовать конструкцию «ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка)». Например:

ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

Проверка на пустую строку в запросе 1С

В условиях для нахождения пустой строки необходимо использовать пустое значение строки — «», например:

Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(0 голосов, в среднем: 0 из 5)

Поддержите нас, расскажите друзьям!

СПРОСИТЕ в комментариях!

Запрос1.Текст = «ВЫБРАТЬ
|РемонтныйЛист.Номер,
|РемонтныйЛистМатериалыЗамена.ДатаРемонта,
|РемонтныйЛист.Проведен,
|РемонтныйЛист.Водитель1,
|РемонтныйЛист.Водитель2,
|РемонтныйЛист.Водитель3,
|РемонтныйЛистМатериалыЗамена.КолвоЧасов
|ИЗ
|Документ.РемонтныйЛист.МатериалыЗамена КАК РемонтныйЛистМатериалыЗамена
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.РемонтныйЛист КАК РемонтныйЛист
|ПО РемонтныйЛистМатериалыЗамена.Ссылка = РемонтныйЛист.Ссылка
|ГДЕ
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= Значение(«ДатаНач») И РемонтныйЛистМатериалыЗамена.ДатаРемонта = Значение(“ДатаНач”)
ПРАВИЛЬНО
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= &ДатаНач

НЕ ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель3.ПустаяСсылка)
ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 <> Значение(Справочник.Водители.ПустаяСсылка)

Где «Водители» имя справочника, тип которого имеет реквизит «Водитель3» (возможно сотрудники или физические лица)

Синтаксис не правильный так как я тока учусь:) спасибо большое. но водитель это реквизит не справочника а документа. имеет ли это значение?
а еще подскажите пожалуйста как вот на основании этого же запроса заполнить ячейки в отчете на пересечении водителя и даты необходимо поставить колво часов сколько он был в ремонте

РемонтныйЛист.Водитель3 — Это реквизит
Значение(Справочник.Водители.ПустаяСсылка) — это значение, которое вы передаете что бы наложить отбор, а Справочник.Водители — это ТИП реквизита РемонтныйЛист.Водитель3.

В конечном счете суть условия какая? Отобрать только те позиции, для которых выражение будет равняться ИСТИНА.

С этим я уже разобралась. вы правы были что это реквизит справочника Физические лица.у меня теперь проблема в том что он ругается на РемонтныйЛист.Проведен = Истина

В этой статье будут рассмотрены способы проверки на пустое значение в зависимости от типа проверяемого реквизита в запросе 1С 8.3, в том числе пустой ссылки.

Проверка на NULL

Значение NULL возвращается в том случае, когда реквизита попросту нет. Тип в этом случае будет тоже NULL. Например, вы объединяете две таблицы через левое соединение. В том случае, когда для левой таблицы не будет найдено ни одного значения в правой, вернется NULL.

Проверку на данное значение можно осуществить при помощи конструкции «ЕСТЬ NULL» и «ЕСТЬNULL()». В первом случае возвращается Истина или Ложь. Во втором случае можно сразу задать другое значение в том случае, когда возвращается NULL.

В приведенном ниже запросе 1С 8.3 будут возвращен список контактных лиц тех партнеров, у кого не задан сегмент.

ВЫБРАТЬ
КонтактныеЛицаПартнеров.Ссылка
ИЗ
Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СегментыПартнеров КАК СегментыПартнеров
ПО КонтактныеЛицаПартнеров.Владелец = СегментыПартнеров.Родитель
ГДЕ
СегментыПартнеров.Ссылка ЕСТЬ NULL

Пустая дата

Проверка значения на пустую дату производится путем сравнения с конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0). Пример использования приведен ниже:

ВЫБРАТЬ
Встреча.Ссылка
ИЗ
Документ.Встреча КАК Встреча
ГДЕ
Встреча.Дата = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

Пустая ссылка в запросе 1С

В случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка).

В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион.

ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.БизнесРегион = ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)

Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:

Пустая строка

Для проверки строковых типов производится сравнение с другим образцом. В данном случае – «».

Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием.

ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.Наименование = «»

Бывает необходимо получить в запросе пустую ссылку на какой-то объект или выбрать объекты с незаполненным реквизитом, установив отбор по пустой ссылке. Разберем в статье разные варианты получение и отбора по пустой ссылке, а также способы проверки на заполненность. В этой заметке во всех примерах будет устанавливаться отбор или сравнение на пустую ссылку в справочнике и пустую ссылку в документе.

Отбор по пустой ссылке

Для указания пустой ссылки в запросе можно использовать несколько способов:

Пустая ссылка через установить параметр

В примере устанавливаем пустую ссылку с помощью функции запроса УстановитьПараметр.

Запрос = Новый Запрос("
|	...
|	ГДЕ РеквизитСправочника = &ПустаяСсылкаСправочник
|	И РеквизитДокумента = &ПустаяСсылкаДокумент)";

Запрос.УстановитьПараметр("ПустаяСсылкаСправочник",Справочники.Номенклатура.ПустаяСсылка());
Запрос.УстановитьПараметр("ПустаяСсылкаДокумент",Документы.ЗаказКлиента.ПустаяСсылка());

Пустая ссылка в запросе

Пустую ссылку можно указать в запросе или в соединении, с помощью команды ЗНАЧЕНИЕ.

Запрос = Новый Запрос("
|	...
|	ГДЕ РеквизитСправочника = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|	И РеализацияТоваровУслуг.ДокументОснование = ЗНАЧЕНИЕ(Документ.Заказ.ПустаяСсылка)

Отбор объектов с не заполненными ссылками

Иногда в объекте может быть не пустая ссылка, а не заполненное значение в запросе отобрать их можно, с помощью оператора ЕСТЬ NULL.

Запрос = Новый Запрос("
|	...
|	ГДЕ ТоварыНаСкладах.Регистратор.ДокументОснование.Ссылка ЕСТЬ NULL";  

Отбор объектов с заполненными значениями. Обратная ситуация и с ней есть особенности. В этом случае нужно использовать оператор “ЕСТЬ НЕ NULL”, а не ставить НЕ в начало условия.

Запрос = Новый Запрос("
|	...
|	ГДЕ РеализацияТоваровУслуг.Сделка.Ссылка ЕСТЬ НЕ NULL"; 

Получение пустого значения в запросе

Получение пустой ссылки в запросе аналогично отбору по пустой ссылке, работает по формуле:

  1. ЗНАЧЕНИЕ(Справочник.НаименованиеСправочника.ПустаяСсылка)
  2. ЗНАЧЕНИЕ(Документ.НаименованиеДокумента.ПустаяСсылка)
Запрос.Текст = "ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК ПустаяСсылкаНоменклатура,
	|	ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка) КАК ПустаяСсылкаЗаказ,
	|	"""" КАК ПустаяСтрока,
	|	0 КАК Число0,
	|	Истина КАК БулевоИстина,
	|	Ложь КАК БулевоЛожь,
	|ИЗ
	|	РегистрСведений.Расш1_ТестовыйРегистр КАК Расш1_ТестовыйРегистр
	|";

Материалы по теме:

  1. Про пустые значения на ИТС – ссылка
  2. Больше материалов по программирование на 1с – ссылка

Как в языке запросов 1С отобрать не заполненное значение. Какое условие указать в запросе после ключевого слова «ГДЕ», когда нужно сделать отбор по не заполненным полям?
Есть запрос:

    Запрос.Текст =
    "ВЫБРАТЬ 
    |    усЕдиницыХранения.Ссылка
    |ИЗ
    |    Справочник.усЕдиницыХранения КАК усЕдиницыХранения

Требуется отобрать по условию, что у справочника усЕдиницыХранения реквизит РазрешитьОтборИзРезервнойЗоны пустой
Реквизит РазрешитьОтборИзРезервнойЗоны имеет тип булево
Вариант 1. сравнение с не заполненным булевым значением:

    |ГДЕ
    |     усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь

Вариант 2. Если это булево определено, то лучше так:

    // условие на отрицательное булево значение:
    |ГДЕ
    |     НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны

Требуется отобрать по условию, что у справочника усЕдиницыХранения реквизит АктивнаяОбластьОтбора пустой
Реквизит АктивнаяОбластьОтбора имеет тип Справочник.усОбластиОтбора

    // Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа"
     |ГДЕ
    |    усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка)

Требуется отобрать по условию, что у регистра сведений НашРегистрСведений реквизит Документ пустой
Реквизит Документ имеет тип Документ.НашДокумент1

    // Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа"
    |ГДЕ
    |    НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка)

Требуется отобрать по условию, что у регистра сведений НашРегистрСведений реквизит Документ пустой
Реквизит Документ имеет составной тип значения: Документ.НашДокумент1, Документ.НашДокумент2 и т.д.

    // Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле)
    |ГДЕ
    |    (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка)
    |    ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка) 
    |    ИЛИ ...(и т.д. - последовательно перечисляем условия для всех возможных типов этого составного поля))

Требуется отобрать по условию, что реквизит не пустой (заполнен хоть чем-то)
Тип значения реквизита — Строка.

    
    // Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие:
    |ГДЕ
    |    усЕдиницыХранения.Наименование > """"

Допустим требуется отобрать данные, при условии, что реквизит Задание регистра сведений ВыполняемыеЗадания содержит какой-либо Документ.Отбор
Реквизит Задание имеет составной тип значения: Документ.Отбор, Документ.Поступление и т.д.

    // Пример 5. если нужно выбрать документы конкретного типа, при составном типе данных, например в регистре "ВыполняемыеЗадания" ресурс "Задание" имеет составной тип, среди значений которого возможен документ "Отбор"
    |ГДЕ
    |    ВЫРАЗИТЬ(РегистрСведенийВыполняемыеЗадания.Задание КАК Документ.Отбор) ССЫЛКА Документ.Отбор

Еще аналогичный пример, когда нужно выбрать документы конкретного типа

    // Пример 5а. Еще аналогичный пример, когда нужно выбрать документы конкретного типа
    |	ВЫБОР
    |		КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг
    |			ТОГДА ""ПоступлениеТоваровУслуг""
    |		КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг
    |			ТОГДА ""РеализацияТоваровУслуг""
    |		ИНАЧЕ """"
    |	КОНЕЦ КАК ВидДокумента

Отобрать по условию не определенного значения:

    // Пример 6. выбор по условию не определенного значения:
    |ГДЕ
    |    СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО

Отобрать по условию, что вид движения — Приход

    // Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" - аналогично):
    |ГДЕ
    |    РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

Как в запросе указать, что выполнять запрос не нужно (например, нужно программно, в зависимости от какого-то условия, вернуть пустой результат запроса: Запрос.Текст = СтрЗаменить(Запрос.Текст, «ГДЕ Док.Ссылка = &ДокументСсылка», «ГДЕ ЛОЖЬ»);).
Для этого достаточно добавить условие «Где Ложь». Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно.

    // Пример 8. Не исполнять запрос:
    |ГДЕ ЛОЖЬ

Проверка на то, что результат выполнения запроса содержит данные:

    // Пример 9. Проверка на то, что результат выполнения запроса содержит данные:
    Если НЕ Запрос.Выполнить().Пустой() Тогда

Отобрать записи с не заполненной датой (реквизит ДатаОтмены имеет тип Дата)

    // Пример 10. выбор по условию не заполненной даты:
    |ГДЕ
    |    тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1)

Next Post

  • SQL Server

  • v8

  • Программисту 1C

Установка 1С: Предприятие. Установка 1С:Предприятия 8 в варианте «клиент-сервер» (на SQLServer) (1С)

Вт Май 18 , 2010

Вопрос Как установить 1С: Предприятие в клиент-серверном варианте. Раздел содержит практические рекомендации по решению проблем, возникающих при установке и настройке клиент-серверного варианта 1С:Предприятия 8. При подготовке раздела учтен опыт партнеров и пользователей, которым в процессе установки 1С:Предприятия потребовалась дополнительная настройка различных служб Microsoft Windows. Более подробно с материалом можно ознакомиться […]

1С: Предприятие 8. Как в запросе проверить заполнение реквизита с составным типом данных

Описание ошибки:
В общем-то откровенно это вопиющей ошибкой не назовешь, но выполнению задачи воспрепятствовало изрядно. Поэтому бросился уточнять, как же в 1С 8 «как в запросе проверить заполнение составной тип данных».

Найденные решения:

Задача была простой — нужно было в запросе выполнять условие при проверке заполнения реквизита документа, который имел составной тип данных, т.е. в реквизите можно было указать разные типы документов. Каковым, к примеру, является реквизит «Сделка» документа «Реализация товаров и услуг» конфигурации 1С: Управление торговлей 8 ред. 10.3.

Был составлен запрос с условием, но условие определенно не хотело работать, данные выводимые в консоли запросов, были неверными. Условие: Реализации.Ссылка.Сделка <> NULL не срабатывало, равно как и Реализации.Ссылка.Сделка <> НЕОПРЕДЕЛЕНО

1С 8 как проверить в запросе на пустое заполнение значение составного типа

Поиск решения в интернете подсказал на одной изстраниц обсуждения форума сайта www.forum.mista.ru, что в таком случае слудет дополнительно обратиться к ссылке составного реквизита: 

1c 8 как в запросе проверить заполнение составной тип данных

Внимание было обращено на эту мелочь, и приведение текста запроса к виду: Реализации.Ссылка.Сделка.Ссылка <> НЕОПРЕДЕЛЕНО дало положительный рабочий результат.

1C 8 запрос реквизит имеет составной тип данных как проверить заполнение пустое значение

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

06-02-2017

Журавлев А.С.
(Сайт www.azhur-c.ru)

Понравилась статья? Поделить с друзьями:
  • Югинвестбанк славянск на кубани часы работы
  • 1с запрос условие на заполненность реквизита
  • Юго восточная производственная компания ооо
  • 1с значение свойства дополнительный реквизит
  • Югория мед страховая компания горячая линия