Запрос проверить реквизит на заполненность

Проверка на заполненность в запросе реквизита составного типа

Я
   DK_L

08.02.07 — 09:03

например выбираю «Возвраты товаров от покупателей», там есть реквизит составного типа,поставить Сделка <> &ПустаяСсылка(а в параметрах указать ссылку на пустой документ «ЗаказыПокупателей») не будет правильным , т.к Сделка может быть еще доком «Реализация», что делать ?

  

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

   ТелепатБот

1 — 08.02.07 — 09:03

   DK_L

2 — 08.02.07 — 09:11



ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

       ПО ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент

           И (ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Сделка

               ИЛИ ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Ссылка)

           И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.РеализацияТоваровУслуг

               ИЛИ ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя)

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И РеализацияТоваровУслуг.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка <> НЕОПРЕДЕЛЕНО // не срабатывает, т.к определено , но с пустой ссылкой

   DK_L

3 — 08.02.07 — 09:12

т.е могут быть ситуации , когда это поле не заполнено, но тип определен и приведен соответственно или заполенно

   MikleV

4 — 08.02.07 — 09:45

NULL?

   DK_L

5 — 08.02.07 — 09:49

не нул, не нул ?

ВЫБРАТЬ РАЗЛИЧНЫЕ

   ВозвратТоваровОтПокупателя.Ссылка КАК Возврат,

   ВозвратТоваровОтПокупателя.Дата КАК ДатаВозвртата,

   ВозвратТоваровОтПокупателя.Организация КАК ОрганизацияВозврата,

   ВозвратТоваровОтПокупателя.СуммаДокумента КАК СуммаВозврата,

   ВозвратТоваровОтПокупателя.Контрагент КАК Контрагент,

   РеализацияТоваровУслуг.Ссылка КАК Реализация,

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

   РеализацияТоваровУслуг.Дата КАК ДатаРеализации,

   ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)) КАК РазностьМеждуВозвратомИРеализацией,

   ВозвратТоваровОтПокупателя.СкладОрдер КАК СкладВозврата,

   РеализацияТоваровУслуг.Склад КАК СкладРеализации,

   ВозвратТоваровОтПокупателя.Сделка КАК ОснованиеВозврата

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

       ПО ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент

           И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя)

           И ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Сделка

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И РеализацияТоваровУслуг.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка <> &ПустойЗаказ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ВозвратТоваровОтПокупателя.Ссылка,

   ВозвратТоваровОтПокупателя.Дата,

   ВозвратТоваровОтПокупателя.Организация,

   ВозвратТоваровОтПокупателя.СуммаДокумента,

   ВозвратТоваровОтПокупателя.Контрагент,

   РеализацияТоваровУслуг.Ссылка,

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

   РеализацияТоваровУслуг.Дата,

   ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)),

   ВозвратТоваровОтПокупателя.СкладОрдер,

   РеализацияТоваровУслуг.Склад,

   ВозвратТоваровОтПокупателя.Сделка

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

       ПО ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Ссылка

           И ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент

           И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.РеализацияТоваровУслуг)

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И РеализацияТоваровУслуг.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка <> &ПустаяРеализация

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ВозвратТоваровОтПокупателя.Ссылка,

   ВозвратТоваровОтПокупателя.Дата,

   ВозвратТоваровОтПокупателя.Организация,

   ВозвратТоваровОтПокупателя.СуммаДокумента,

   ВозвратТоваровОтПокупателя.Контрагент,

   NULL,

   NULL,

   NULL,

   NULL,

   ВозвратТоваровОтПокупателя.СкладОрдер,

   NULL,

   NULL

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя

   И ВозвратТоваровОтПокупателя.Сделка = &ПустойЗаказ

ИТОГИ

   СУММА(СуммаВозврата),

   СУММА(СуммаРеализации)

ПО

   ОБЩИЕ,

   Контрагент

   DK_L

6 — 08.02.07 — 09:52

только вот еще одно НО, как обойти тот факт, что если по одному заказу у нас было более одной реализации — в текущем решении задваиваются некоторые строки

   Dionisious

7 — 08.02.07 — 09:52

Если у тебя сделка — документ можно сделать так: Сделка.Дата ЕСТЬ NULL

   DK_L

8 — 08.02.07 — 09:53

(7) можно и так :), а по 6 пункту

   DK_L

9 — 08.02.07 — 09:56

(7) не прокатило :(

   Dionisious

10 — 08.02.07 — 09:57

(9) тогда Сделка.Дата=&ПустаяДата

Запрос.УстановитьПараметр(«ПустаяДата»,’00010101′);

   Vbif

11 — 08.02.07 — 09:58

попробуй поменять

И ВозвратТоваровОтПокупателя.Сделка <> НЕОПРЕДЕЛЕНО // не срабатывает, т.к определено , но с пустой ссылкой

на

И ВозвратТоваровОтПокупателя.Сделка.Ссылка ЕСТЬ NULL

   DK_L

12 — 08.02.07 — 09:59

секундочку …

   Dionisious

13 — 08.02.07 — 09:59

(6) во внутреннем запросе группировать реализации по заказу.

   DK_L

14 — 08.02.07 — 10:03

(11) не прокатило, вот ведь какая штука у одного и второго дока поле Сделка не заполенено(имеет тип ДокументСсылка.ЗаказаПокупателя), один выводится в отчет , у которого в структуре подчиненности нет ничего, а другой не выводится , у которого есть в структуре и заказ и релизация — что это ???

   DK_L

15 — 08.02.07 — 10:07

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

   Vbif

16 — 08.02.07 — 10:07

попробуй так

И ВозвратТоваровОтПокупателя.Сделка.Ссылка НЕ В (&СписокСсылок)

СписокСсылок = Новый СписокЗначений;

СписокСсылок.Добавить(Пустаяссылкадокумента1);



СписокСсылок.Добавить(ПустаяссылкадокументаN);

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

   Dionisious

17 — 08.02.07 — 10:08

(15) для этих добавляешь усливе на NULL как в (7)

   DK_L

18 — 08.02.07 — 10:11

(16) точно, е мое :))

(17) секундочку … ща попробую

   DK_L

19 — 08.02.07 — 10:13

(17),(16) по (11) что можно сказать

   DK_L

20 — 08.02.07 — 10:14

+(19) по (14) извиняюсь

   DK_L

21 — 08.02.07 — 10:15

делаю все в консоли запросов и поэтому пока с типами не определюсь не составляю отчет (14) пункт не могу понять как так получается

   DK_L

22 — 08.02.07 — 10:18

платформа 16, 10.2.11.3 переделанная не в части среды выполнения запроса

   Vbif

23 — 08.02.07 — 10:23

выложи окончательный запрос

   DK_L

24 — 08.02.07 — 10:31

ВЫБРАТЬ РАЗЛИЧНЫЕ

   ВозвратТоваровОтПокупателя.Ссылка КАК Возврат,

   ВозвратТоваровОтПокупателя.Дата КАК ДатаВозвртата,

   ВозвратТоваровОтПокупателя.Организация КАК ОрганизацияВозврата,

   ВозвратТоваровОтПокупателя.СуммаДокумента КАК СуммаВозврата,

   ВозвратТоваровОтПокупателя.Контрагент КАК Контрагент,

   РеализацияТоваровУслуг.Ссылка КАК Реализация,

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

   РеализацияТоваровУслуг.Дата КАК ДатаРеализации,

   ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)) КАК РазностьМеждуВозвратомИРеализацией,

   ВозвратТоваровОтПокупателя.СкладОрдер КАК СкладВозврата,

   РеализацияТоваровУслуг.Склад КАК СкладРеализации,

   ВозвратТоваровОтПокупателя.Сделка КАК ОснованиеВозврата

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

       ПО ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент

           И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя)

           И ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Сделка

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И РеализацияТоваровУслуг.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка <> &ПустойЗаказ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ВозвратТоваровОтПокупателя.Ссылка,

   ВозвратТоваровОтПокупателя.Дата,

   ВозвратТоваровОтПокупателя.Организация,

   ВозвратТоваровОтПокупателя.СуммаДокумента,

   ВозвратТоваровОтПокупателя.Контрагент,

   РеализацияТоваровУслуг.Ссылка,

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

   РеализацияТоваровУслуг.Дата,

   ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)),

   ВозвратТоваровОтПокупателя.СкладОрдер,

   РеализацияТоваровУслуг.Склад,

   ВозвратТоваровОтПокупателя.Сделка

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

       ПО ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Ссылка

           И ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент

           И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.РеализацияТоваровУслуг)

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И РеализацияТоваровУслуг.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка <> &ПустаяРеализация

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ВозвратТоваровОтПокупателя.Ссылка,

   ВозвратТоваровОтПокупателя.Дата,

   ВозвратТоваровОтПокупателя.Организация,

   ВозвратТоваровОтПокупателя.СуммаДокумента,

   ВозвратТоваровОтПокупателя.Контрагент,

   NULL,

   NULL,

   NULL,

   NULL,

   ВозвратТоваровОтПокупателя.СкладОрдер,

   NULL,

   NULL

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

ГДЕ

   ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

   И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя

   И (ВозвратТоваровОтПокупателя.Сделка = &ПустойЗаказ

           ИЛИ ВозвратТоваровОтПокупателя.Сделка.Ссылка = НЕОПРЕДЕЛЕНО)// проверял  в обработке Сообщить(ТипЗнч(дВозврат.Сделка)); выдавала НЕОПРЕДЕЛЕНО , а тут не срабатывает на те возвраты , у которых ТипЗнч(Сделка) = НЕОПРЕДЕЛЕНО

ИТОГИ

   СУММА(СуммаВозврата),

   СУММА(СуммаРеализации)

ПО

   ОБЩИЕ,

   Контрагент

   Vbif

25 — 08.02.07 — 10:39

там где у тебя стоит

И РеализацияТоваровУслуг.Проведен = ИСТИНА

убери «= Истина» и попробуй

   DK_L

26 — 08.02.07 — 10:42

(25) Должна быть так, как не буду же я реализации выводить непроведенными, по последнему

   DK_L

27 — 08.02.07 — 10:44

все этот вопрос закрыл перевыбором «пустого» дока, хотя не понятно, как там вообще неопределено затесалось

   DK_L

28 — 08.02.07 — 10:45

(27) вернее не как оно там оказалось, а почему не реагировало на поиск по «неопределено»

   Vbif

29 — 08.02.07 — 10:45

помоему ты не понял

замени

И РеализацияТоваровУслуг.Проведен = ИСТИНА

на просто

И РеализацияТоваровУслуг.Проведен

   DK_L

30 — 08.02.07 — 10:53

(29) ИМХО никакой разницы, попробовал — ничего, вот ведь какая штука создал копию возврата по одному исследуемому контрагенту, в обработке дает тип ДокументСсылка.ЗаказПокупателя а в отчет где условие на пустой заказ не выводится

   Vbif

31 — 08.02.07 — 11:01

проверяй по частям

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

добавь условие на контрагента

посмотри что вернет и от этого пляши

   DK_L

32 — 08.02.07 — 11:03

ВЫБРАТЬ

   ВозвратТоваровОтПокупателя.Ссылка,

   ВозвратТоваровОтПокупателя.Дата,

   ВозвратТоваровОтПокупателя.Контрагент,

   ВозвратТоваровОтПокупателя.СуммаДокумента

ИЗ

   Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя

ГДЕ

   ВозвратТоваровОтПокупателя.Проведен = ИСТИНА

   И ВозвратТоваровОтПокупателя.Контрагент = &Абдрашитов

   И ВозвратТоваровОтПокупателя.Сделка = &ПустойЗаказ

отдельный запрос срабатывает, вообще не пойму — крышу уже срывает ((((

   Vbif

33 — 08.02.07 — 11:06

что то ты его сильно упростил

оставь ВСЕ условия кроме проверки на пустой заказ

  

DK_L

34 — 08.02.07 — 11:39

(33) Извиняюсь покорнейше, с датой ступил ДатаКон — все работает

В этой статье будут рассмотрены способы проверки на пустое значение в зависимости от типа проверяемого реквизита в запросе 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С

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

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

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

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

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

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

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

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

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

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)

 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) Проверка заполнения реквизита.

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

2) Построение запроса

    Если в запросе реквизит составного типа участвует в отборах или в соединениях, то следует использовать функцию ВЫРАЗИТЬ(), что уменьшит время выполнения запроса.
    Ответ таков: в таких условия система производит левое соединение реквизита с таблицами, которые указаны в его типе, а потом уже отсекает лишние записи. Добавив функцию ВЫРАЗИТЬ в запрос, мы явно указываем с какой таблицей выполнять левое соединение. Умно выражаясь, данная функция выполняет приведение значения к определенному типу.

Синтаксис функции: ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> ).

Пример.
У справочника ТочкиКартыМаршуртаБизнесПроцесса имеется реквизит ВладелецТочки, который имеет составной тип: СправочникСсылка.ШаблоныБизнесПроцессов,  БизнесПроцессСылка.БизнесПроцессУниверсальный. Требуется получить выборку, содержащая информацию о всех точках маршрута, которые относятся к шаблонам бизнес-процессов, а так же наименования этих шаблонов:


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(ТочкиКартыМаршрутаБизнесПроцесса.ВладелецТочки КАК Справочник.ШаблоныБизнесПроцесса).Наименование КАК ШаблонБизнесПроцесса,
| ТочкиКартыМаршрутаБизнесПроцесса.Наименование КАК НаименованиеТочкиМаршрута,
| ТочкиКартыМаршрутаБизнесПроцесса.ВидТочки КАК ВидТочкиМаршрута
|ИЗ
| Справочник.ТочкиКартыМаршрутаБизнесПроцесса КАК ТочкиКартыМаршрутаБизнесПроцесса
|ГДЕ
| ВЫРАЗИТЬ(ТочкиКартыМаршрутаБизнесПроцесса.ВладелецТочки КАК Справочник.ШаблоныБизнесПроцесса) ЕСТЬ НЕ NULL
| И НЕ ТочкиКартыМаршрутаБизнесПроцесса.ПометкаУдаления";

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

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

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

3) Проявление отрицательной стороны

При задании составного типа реквизиту старайтесь избегать включения в составной тип примитивных типов (число, булево, строка). Смешивая ссылочные типы с примитивными, увеличивается размер базы данных (создаются дополнительные колонки в таблице реляционной БД), может пострадать индексация реквизита (включение с составной тип неограниченной длины строку). Все это повлияет на производительность.

Вот такой вот коварный составной тип!

Понравилась статья? Поделить с друзьями:
  • Заработная плата бизнес аналитика в москве
  • Зарайская ветеринарная станция часы работы
  • Зарегистрировать машину в гаи время работы
  • Зарегистрировать организацию в гугл бизнес
  • Зарегистрировать почту яндекс для компании