1С: Предприятие 8. Как в запросе проверить заполнение реквизита с составным типом данных
Описание ошибки:
В общем-то откровенно это вопиющей ошибкой не назовешь, но выполнению задачи воспрепятствовало изрядно. Поэтому бросился уточнять, как же в 1С 8 «как в запросе проверить заполнение составной тип данных».
Найденные решения:
Задача была простой — нужно было в запросе выполнять условие при проверке заполнения реквизита документа, который имел составной тип данных, т.е. в реквизите можно было указать разные типы документов. Каковым, к примеру, является реквизит «Сделка» документа «Реализация товаров и услуг» конфигурации 1С: Управление торговлей 8 ред. 10.3.
Был составлен запрос с условием, но условие определенно не хотело работать, данные выводимые в консоли запросов, были неверными. Условие: Реализации.Ссылка.Сделка <> NULL не срабатывало, равно как и Реализации.Ссылка.Сделка <> НЕОПРЕДЕЛЕНО
Поиск решения в интернете подсказал на одной изстраниц обсуждения форума сайта www.forum.mista.ru, что в таком случае слудет дополнительно обратиться к ссылке составного реквизита:
Внимание было обращено на эту мелочь, и приведение текста запроса к виду: Реализации.Ссылка.Сделка.Ссылка <> НЕОПРЕДЕЛЕНО дало положительный рабочий результат.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
06-02-2017
Журавлев А.С.
(Сайт www.azhur-c.ru)
Проверка на заполненность в запросе реквизита составного типа |
Я |
08.02.07 — 09:03
например выбираю «Возвраты товаров от покупателей», там есть реквизит составного типа,поставить Сделка <> &ПустаяСсылка(а в параметрах указать ссылку на пустой документ «ЗаказыПокупателей») не будет правильным , т.к Сделка может быть еще доком «Реализация», что делать ?
1 — 08.02.07 — 09:03
2 — 08.02.07 — 09:11
…
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент
И (ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Сделка
ИЛИ ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Ссылка)
И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.РеализацияТоваровУслуг
ИЛИ ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя)
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И РеализацияТоваровУслуг.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка <> НЕОПРЕДЕЛЕНО // не срабатывает, т.к определено , но с пустой ссылкой
3 — 08.02.07 — 09:12
т.е могут быть ситуации , когда это поле не заполнено, но тип определен и приведен соответственно или заполенно
4 — 08.02.07 — 09:45
NULL?
5 — 08.02.07 — 09:49
не нул, не нул ?
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВозвратТоваровОтПокупателя.Ссылка КАК Возврат,
ВозвратТоваровОтПокупателя.Дата КАК ДатаВозвртата,
ВозвратТоваровОтПокупателя.Организация КАК ОрганизацияВозврата,
ВозвратТоваровОтПокупателя.СуммаДокумента КАК СуммаВозврата,
ВозвратТоваровОтПокупателя.Контрагент КАК Контрагент,
РеализацияТоваровУслуг.Ссылка КАК Реализация,
РеализацияТоваровУслуг.СуммаДокумента КАК СуммаРеализации,
РеализацияТоваровУслуг.Дата КАК ДатаРеализации,
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)) КАК РазностьМеждуВозвратомИРеализацией,
ВозвратТоваровОтПокупателя.СкладОрдер КАК СкладВозврата,
РеализацияТоваровУслуг.Склад КАК СкладРеализации,
ВозвратТоваровОтПокупателя.Сделка КАК ОснованиеВозврата
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент
И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя)
И ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Сделка
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И РеализацияТоваровУслуг.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка <> &ПустойЗаказ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Дата,
ВозвратТоваровОтПокупателя.Организация,
ВозвратТоваровОтПокупателя.СуммаДокумента,
ВозвратТоваровОтПокупателя.Контрагент,
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.СуммаДокумента,
РеализацияТоваровУслуг.Дата,
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)),
ВозвратТоваровОтПокупателя.СкладОрдер,
РеализацияТоваровУслуг.Склад,
ВозвратТоваровОтПокупателя.Сделка
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Ссылка
И ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент
И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.РеализацияТоваровУслуг)
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И РеализацияТоваровУслуг.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка <> &ПустаяРеализация
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Дата,
ВозвратТоваровОтПокупателя.Организация,
ВозвратТоваровОтПокупателя.СуммаДокумента,
ВозвратТоваровОтПокупателя.Контрагент,
NULL,
NULL,
NULL,
NULL,
ВозвратТоваровОтПокупателя.СкладОрдер,
NULL,
NULL
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя
И ВозвратТоваровОтПокупателя.Сделка = &ПустойЗаказ
ИТОГИ
СУММА(СуммаВозврата),
СУММА(СуммаРеализации)
ПО
ОБЩИЕ,
Контрагент
6 — 08.02.07 — 09:52
только вот еще одно НО, как обойти тот факт, что если по одному заказу у нас было более одной реализации — в текущем решении задваиваются некоторые строки
7 — 08.02.07 — 09:52
Если у тебя сделка — документ можно сделать так: Сделка.Дата ЕСТЬ NULL
8 — 08.02.07 — 09:53
(7) можно и так :), а по 6 пункту
9 — 08.02.07 — 09:56
(7) не прокатило
10 — 08.02.07 — 09:57
(9) тогда Сделка.Дата=&ПустаяДата
Запрос.УстановитьПараметр(«ПустаяДата»,’00010101′);
11 — 08.02.07 — 09:58
попробуй поменять
И ВозвратТоваровОтПокупателя.Сделка <> НЕОПРЕДЕЛЕНО // не срабатывает, т.к определено , но с пустой ссылкой
на
И ВозвратТоваровОтПокупателя.Сделка.Ссылка ЕСТЬ NULL
12 — 08.02.07 — 09:59
секундочку …
13 — 08.02.07 — 09:59
(6) во внутреннем запросе группировать реализации по заказу.
14 — 08.02.07 — 10:03
(11) не прокатило, вот ведь какая штука у одного и второго дока поле Сделка не заполенено(имеет тип ДокументСсылка.ЗаказаПокупателя), один выводится в отчет , у которого в структуре подчиненности нет ничего, а другой не выводится , у которого есть в структуре и заказ и релизация — что это ???
15 — 08.02.07 — 10:07
(10) вообще не выводит те возвраты, которые с пустыми сделками
16 — 08.02.07 — 10:07
попробуй так
И ВозвратТоваровОтПокупателя.Сделка.Ссылка НЕ В (&СписокСсылок)
СписокСсылок = Новый СписокЗначений;
СписокСсылок.Добавить(Пустаяссылкадокумента1);
…
СписокСсылок.Добавить(ПустаяссылкадокументаN);
Запрос.УстановитьПараметр(«СпискоСсылок»,СписокСсылок)
17 — 08.02.07 — 10:08
(15) для этих добавляешь усливе на NULL как в (7)
18 — 08.02.07 — 10:11
(16) точно, е мое :))
(17) секундочку … ща попробую
19 — 08.02.07 — 10:13
(17),(16) по (11) что можно сказать
20 — 08.02.07 — 10:14
+(19) по (14) извиняюсь
21 — 08.02.07 — 10:15
делаю все в консоли запросов и поэтому пока с типами не определюсь не составляю отчет (14) пункт не могу понять как так получается
22 — 08.02.07 — 10:18
платформа 16, 10.2.11.3 переделанная не в части среды выполнения запроса
23 — 08.02.07 — 10:23
выложи окончательный запрос
24 — 08.02.07 — 10:31
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВозвратТоваровОтПокупателя.Ссылка КАК Возврат,
ВозвратТоваровОтПокупателя.Дата КАК ДатаВозвртата,
ВозвратТоваровОтПокупателя.Организация КАК ОрганизацияВозврата,
ВозвратТоваровОтПокупателя.СуммаДокумента КАК СуммаВозврата,
ВозвратТоваровОтПокупателя.Контрагент КАК Контрагент,
РеализацияТоваровУслуг.Ссылка КАК Реализация,
РеализацияТоваровУслуг.СуммаДокумента КАК СуммаРеализации,
РеализацияТоваровУслуг.Дата КАК ДатаРеализации,
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)) КАК РазностьМеждуВозвратомИРеализацией,
ВозвратТоваровОтПокупателя.СкладОрдер КАК СкладВозврата,
РеализацияТоваровУслуг.Склад КАК СкладРеализации,
ВозвратТоваровОтПокупателя.Сделка КАК ОснованиеВозврата
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент
И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя)
И ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Сделка
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И РеализацияТоваровУслуг.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка <> &ПустойЗаказ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Дата,
ВозвратТоваровОтПокупателя.Организация,
ВозвратТоваровОтПокупателя.СуммаДокумента,
ВозвратТоваровОтПокупателя.Контрагент,
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.СуммаДокумента,
РеализацияТоваровУслуг.Дата,
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(РеализацияТоваровУслуг.Дата, ВозвратТоваровОтПокупателя.Дата, СЕКУНДА) / (24 * 60 * 60) КАК ЧИСЛО(3, 0)),
ВозвратТоваровОтПокупателя.СкладОрдер,
РеализацияТоваровУслуг.Склад,
ВозвратТоваровОтПокупателя.Сделка
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВозвратТоваровОтПокупателя.Сделка = РеализацияТоваровУслуг.Ссылка
И ВозвратТоваровОтПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент
И (ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.РеализацияТоваровУслуг)
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И РеализацияТоваровУслуг.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка <> &ПустаяРеализация
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Дата,
ВозвратТоваровОтПокупателя.Организация,
ВозвратТоваровОтПокупателя.СуммаДокумента,
ВозвратТоваровОтПокупателя.Контрагент,
NULL,
NULL,
NULL,
NULL,
ВозвратТоваровОтПокупателя.СкладОрдер,
NULL,
NULL
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Сделка ССЫЛКА Документ.ЗаказПокупателя
И (ВозвратТоваровОтПокупателя.Сделка = &ПустойЗаказ
ИЛИ ВозвратТоваровОтПокупателя.Сделка.Ссылка = НЕОПРЕДЕЛЕНО)// проверял в обработке Сообщить(ТипЗнч(дВозврат.Сделка)); выдавала НЕОПРЕДЕЛЕНО , а тут не срабатывает на те возвраты , у которых ТипЗнч(Сделка) = НЕОПРЕДЕЛЕНО
ИТОГИ
СУММА(СуммаВозврата),
СУММА(СуммаРеализации)
ПО
ОБЩИЕ,
Контрагент
25 — 08.02.07 — 10:39
там где у тебя стоит
И РеализацияТоваровУслуг.Проведен = ИСТИНА
убери «= Истина» и попробуй
26 — 08.02.07 — 10:42
(25) Должна быть так, как не буду же я реализации выводить непроведенными, по последнему
27 — 08.02.07 — 10:44
все этот вопрос закрыл перевыбором «пустого» дока, хотя не понятно, как там вообще неопределено затесалось
28 — 08.02.07 — 10:45
(27) вернее не как оно там оказалось, а почему не реагировало на поиск по «неопределено»
29 — 08.02.07 — 10:45
помоему ты не понял
замени
И РеализацияТоваровУслуг.Проведен = ИСТИНА
на просто
И РеализацияТоваровУслуг.Проведен
30 — 08.02.07 — 10:53
(29) ИМХО никакой разницы, попробовал — ничего, вот ведь какая штука создал копию возврата по одному исследуемому контрагенту, в обработке дает тип ДокументСсылка.ЗаказПокупателя а в отчет где условие на пустой заказ не выводится
31 — 08.02.07 — 11:01
проверяй по частям
возми ту часть запроса и убери условие на пустую ссылку
добавь условие на контрагента
посмотри что вернет и от этого пляши
32 — 08.02.07 — 11:03
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Дата,
ВозвратТоваровОтПокупателя.Контрагент,
ВозвратТоваровОтПокупателя.СуммаДокумента
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ГДЕ
ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВозвратТоваровОтПокупателя.Контрагент = &Абдрашитов
И ВозвратТоваровОтПокупателя.Сделка = &ПустойЗаказ
отдельный запрос срабатывает, вообще не пойму — крышу уже срывает ((((
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С
В случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка).
В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион.
ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.БизнесРегион = ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)
Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:
Партнеры.БизнесРегион <> ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)
Пустая строка
Для проверки строковых типов производится сравнение с другим образцом. В данном случае – «».
Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием.
ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.Наименование = «»
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С 8.2 и 8.3
- Проверка на пустую строку в запросе 1С
- Проверка на NULL
- Пустая дата
- Пустая ссылка в запросе 1С
- Пустая строка
Пустая дата в запросе 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. Мы работаем в Москве и области.
- 5
- 4
- 3
- 2
- 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С
В случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка).
В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион.
ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.БизнесРегион = ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)
Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:
Пустая строка
Для проверки строковых типов производится сравнение с другим образцом. В данном случае – «».
Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием.
ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.Наименование = «»
Как в языке запросов 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. Более подробно с материалом можно ознакомиться […]
в запросе указать что реквизит заполнен
Автор mikel10, 24 окт 2013, 13:41
0 Пользователей и 1 гость просматривают эту тему.
управление торговлей. я написал несложный запрос. Мне нужно продолжить строчку и указать что МенеджерРФО непустой, т.е. этот реквизит заполнен. Подскажите пожалуйста несложный оператор.
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| Количество(*) КАК КолвоЗаказов
|
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя
|
|ГДЕ
|
|
| ЗаказПокупателя.ПометкаУдаления = ЛОЖЬ
| И ЗаказПокупателя.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И ЗаказПокупателя.МенеджерРФО …… «;
Как-то так
И НЕ ЗаказПокупателя.МенеджерРФО = ЗНАЧЕНИЕ(Справочник.<какой справочник менеджеров в УТ?>.ПустаяСсылка)
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
в запросе указать что реквизит заполнен
Похожие темы (5)