1с проверить существование реквизита в запросе

Как в запросе проверить наличие реквизита у документа?

Я
   WED

07.07.08 — 14:26

Есть ряд документов, у которых реквизита контрагент нет, а есть документы у которых он есть.

В запросе нужно получить выборку из регистра накопления по регистратору с контрагентом = &Контрагент и без контрагента вовсе…

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

Проблема именно в том, как узнать есть реквизит у документа или нет?

  

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

   Mitriy

1 — 07.07.08 — 14:29

Есть Null?

   GenV

2 — 07.07.08 — 14:29

(0) Через ВЫБОР ССЫЛКА проверяй на тип документов с Контрагентом, для остальных ставь пусто. Выбор в тексте запроса можно сформировать динамически по метаданным.

   WED

3 — 07.07.08 — 14:33

(1) ммм.. может быть, надо проверить
(2) не понял насчет динамического формирования выбора

   WED

4 — 07.07.08 — 14:34

По идее мне надо аналог такого:

Регистратор.Ссылка.Метаданные().Реквизиты.Найти(«Контрагент»)

   Лефмихалыч

5 — 07.07.08 — 14:35

(0) при помощи Метаданные строй текст запроса динамически

   GenV

6 — 07.07.08 — 14:35

(3) Обходишь типы регистратора, проверяешь у них наличие реквизита Контрагент по метаданным, если есть — добавляешь условие на ВЫБОР.

Можно сделать наоборот, если регистраторов без контрагента меньше.

   WED

7 — 07.07.08 — 14:36

(5) Не пойдет, ибо в запросе мне надо получить ВСЕ регистраторы у которых контрагент = Пупкин и плюсом все документы вообще без контрагента…

   WED

8 — 07.07.08 — 14:37

(6) Построение текста запроса отпадает по причине (7)

   acsent

9 — 07.07.08 — 14:37

Контрагент ЕСТЬ NULL ИЛИ Контрагент = &Контрагент

   Mitriy

10 — 07.07.08 — 14:38

(9) Где Док.Контрагент ЕСТЬ NULL ИЛИ Док.Контрагент = &Контрагент

   WED

11 — 07.07.08 — 14:39

(10) Вот и я к тому же пришел только что :)

   BAGER

12 — 07.07.08 — 14:39

Ставь в условие:

ВЫБРАТЬ

   Док.Ссылка,

   Док.Контрагент

ИЗ

   Документ.<Твой документ> КАК Док

ГДЕ

   ЕСТЬNULL(Док.Контрагент, &Контрагент) = &Контрагент

   Mitriy

13 — 07.07.08 — 14:39

Док = Регистратор

   kumena

14 — 07.07.08 — 14:40

при чем сами документы и контрагент в них если запрос по регистру, контрагент в регистр не пишется?

   BAGER

15 — 07.07.08 — 14:42

Смотри условие, а не источник данных

   GenV

16 — 07.07.08 — 14:43

(11) Ну-ну :) Ну и как, не ругается на синтаксическую ошибку, если док без реквизита контрагент?

   Mitriy

17 — 07.07.08 — 14:44

(16) самому попытать слабо?

   GenV

18 — 07.07.08 — 14:53

(17) Мне давно уже не слабо :) Иначе и не писал бы :)

   Лефмихалыч

19 — 07.07.08 — 14:58

(6) чудак человек… невозможно это, если реквзита КОнтрагент у регистратора нет, то при обращении к нему в запросе получишь куй в виде рантайм-ошибки

   Лефмихалыч

20 — 07.07.08 — 14:58

(19) >> (7)

промазал

   BAGER

21 — 07.07.08 — 14:58

Лови обороты за период по контрагенту+без контрагента (это на 1С:Предприятие 8.1):

ВЫБРАТЬ

   ТоварыНаСкладахОбороты.Номенклатура,

   ТоварыНаСкладахОбороты.Регистратор,

   СУММА(ТоварыНаСкладахОбороты.КоличествоОборот) КАК КоличествоОборот,

   СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход,

   СУММА(ТоварыНаСкладахОбороты.КоличествоРасход) КАК КоличествоРасход

ИЗ

   РегистрНакопления.ТоварыНаСкладах.Обороты(&НачДата, &КонДата, Регистратор, ) КАК ТоварыНаСкладахОбороты

ГДЕ

   ЕСТЬNULL(ТоварыНаСкладахОбороты.Регистратор.Контрагент, &Контрагент) = &Контрагент

СГРУППИРОВАТЬ ПО

   ТоварыНаСкладахОбороты.Номенклатура,

   ТоварыНаСкладахОбороты.Регистратор

   Лефмихалыч

22 — 07.07.08 — 15:10

(21) не взлетит в случае (0)

   BAGER

23 — 07.07.08 — 15:31

(22) Ошибаешься, в список попадают ВСЕ документы по указанному контрагенту и ВСЕ документы без реквизита «контрагент»

(19) Никаких ошибок, ибо запрос для документа без контрагента как раз NULL и подставляет
(21) Взлетело, ибо это почти аналог моего запроса :)

Вопрос закрыт.
Спасибо Mitriy
и его (10) Где Док.Контрагент ЕСТЬ NULL ИЛИ Док.Контрагент = &Контрагент

Подскажите как  в запросе можно проверить на наличие реквизита, количество. Дело в том, что в некоторых документах он есть, в некоторых отсутствует, если количество отсутствует выводить нуль.

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

у тебя имя объекта через переменную в запрос попадает? Тогда формируй текст запроса динамически, в зависимости от наличия реквизита

Находил посты где люди ЕСТЬNULL проверяли и всё было ок

ток у меня чет не получается.

У тебя в собеседовании куча дебильных задач на работу с метаданными.

в этом случае можно через параметр в запрос сунуть проверку Выбор когда &НетКоличества тогда 0 Иначе документ.количество НетКоличества узнай перед запросом

Точняк, такая скука, щас сдохну, всякая херь, ниче интересного в целом.

Спасибо сделал как сказал, а то бы мучился с ЕСТЬNULL

«Док.Ссылка.Сумма» лишнее, достаточно Док.Сумма и вместо выбора можно короче — «ЕСТЬNULL(Док.Сумма, 0) КАК Сумма»

+ Но если в документе нет реквизита «Сумма» — вам запрос не помощник — нет в языке запросов функционала, позволяющего обработать ситуацию обращения к «отсутствующему».

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

Тэги: 1С 8

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

Вопрос Как определить программно, существует ли у документа требуемый реквизит

С давних времен в типовых конфигурациях для этого существовала специальная функция.
В конфигурациях последних редакций эта функция стала более универсальной и кроме того стала неожиданно оригинальной, даже эстетически восхитительной.

Так, на сегодня, в 2019 г., эта функция называется ЕстьРеквизитИлиСвойствоОбъекта и располагается в общем модуле ОбщегоНазначенияКлиентСервер. Обращение к функции:

ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "ПериодРегистрацииИсправленногоДокумента")

Сама функция проверки выглядит сейчас (2019 год) так:

// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным.
//
// Параметры:
//  Объект       - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства;
//  ИмяРеквизита - Строка       - имя реквизита или свойства.
//
// Возвращаемое значение:
//  Булево - Истина, если есть.
//
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
	
	КлючУникальности   = Новый УникальныйИдентификатор;
	СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
	ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
	
	Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
	
КонецФункции

В типовых конфигурациях 1С по состоянию на 2010 г. для этой цели использовалась функция, например, «ЕстьРеквизитДокумента» общего модуля «ОбщегоНазначения» и была построена на получении метаданных. Обращение к функции:

Если ОбщегоНазначения.ЕстьРеквизитДокумента("БанковскийСчет", МетаданныеДокумента) Тогда ...

где «БанковскийСчет» — пример наименования искомого реквизита,
«МетаданныеДокумента«:

МетаданныеДокумента = ДокументОбъект.Метаданные();

Сама функция проверки (расположенная в общем модуле «ОбщегоНазначения«):

// Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры: 
//  ИмяРеквизита - строковое имя искомого реквизита, 
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт
	Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
		Возврат Ложь;
	Иначе
		Возврат Истина;
	КонецЕсли; 

КонецФункции // ЕстьРеквизитДокумента()

Next Post

  • v8

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

Ср Ноя 10 , 2010

Примеры работы с регистами сведений см. также в Шпаргалке по программированию для системы 1С:Предприятие 8.2 Оглавление 1. Как из регистра сведений «РасчетчикиЗарплатыОрганизации» получить в виде массива всех расчетчиков зарплаты определенного подразделения организации 2. Как добавить запись в непериодический независимый регистр сведений 3. Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты» […]

Breaking News

Язык запросов 1С 8.3 для начинающих программистов: функции и операторы для работы с типами (ТИПЗНАЧЕНИЯ, ТИП, ССЫЛКА, ЕСТЬNULL, ВЫРАЗИТЬ)

Автор уроков и преподаватель школы: Владимир Милькин

Давайте вспомним, что каждый реквизит (свойство, поле) справочника, документа или любого другого прикладного объекта имеет свой тип. И этот тип мы можем посмотреть в конфигураторе:

01

В языке запросов существует целый класс функций и операторов для работы с типами реквизитов. Давайте рассмотрим их.

Функция ТИПЗНАЧЕНИЯ

Эта функция принимает один параметр (значение) и возвращает его тип. Для описанного на картинке (выше) реквизита Вкус справочника Еда вернётся следующее:

ВЫБРАТЬ
    Наименование,
    Вкус,
    ТИПЗНАЧЕНИЯ(Вкус)
ИЗ
    Справочник.Еда

02

Если мы запросим тип поля Наименование, то, как и ожидается, получим Строка:

ВЫБРАТЬ
    Наименование,
    ТИПЗНАЧЕНИЯ(Наименование)
ИЗ
    Справочник.Еда

03

А теперь давайте рассмотрим реквизит ОтличительныйПризнак у справочника Города:

04

Вы видите, что этот реквизит может иметь один из нескольких типов: Строка, Справочник.Вкусы, Справочник.Цвета. Такой тип реквизитов называется СОСТАВНЫМ.

Если мы попытаемся заполнить значение такого реквизита в режиме 1С:Предприятие, то система спросит нас, какого типа будет вводимое значение:

05

И только после нашего выбора позволит ввести значение выбранного типа.

Таким образом, элементы справочника одного вида (Справочник.Города) смогут хранить в одном и том же реквизите (ОтличительныйПризнак) значения разных типов (Строка, Цвета или Вкусы).

Вы можете убедиться в этом сами пощёлкав по элементам справочника Города в режиме 1С:Предприятие. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Здесь значение отличительного признака является элементом справочника Вкусы:

06

Здесь строкой:

07

А здесь вообще элементом справочника Цвета:

09

Вот какие возможности открывает перед нами составной тип данных!

Интересно, как поведёт себя функция ТИПЗНАЧЕНИЯ на реквизите ОтличительныйПризнак, имеющий составной тип данных:

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города

Это уже очень интересно. Давайте разбираться с каждой строкой в отдельности.

Тип значения отличительного признака для элемента Россия равен NULL. Мы впервые сталкиваемся с этим типом. Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных.

Так и есть, ведь элемент Россия является группой, а не обычным элементом справочника Города, поэтому у него отсутствует поле ОтличительныйПризнак. А тип у отсутствующего значения, как мы прочитали выше, всегда равен NULL.

Идём дальше.

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

Для Красноярска тип признака равен Цвета, потому что значение выбранное в базе является ссылкой на элемент справочника Цвета.

Для Воронежа тип признака равен Строка, потому что значение введенное в базе является обычной строкой.

Индия снова группа, поэтому значение отсутствует. А тип у отсутствующего значения, как мы помним, равен NULL.

Далее всё аналогично, кроме Сан-Паулу. Это не группа, а обычный элемент справочника (город), но тип его значения пустой. Как так?

А дело вот в чём. Если вы зайдёте в элемент справочника Города с наименованием Сан-Паулу, то увидите, что поле ОтличительныйПризнак совершенно никак не заполнено. Оно пустое. А все незаполненные поля составного типа имеют специальное значение НЕОПРЕДЕЛЕНО.

С НЕОПРЕДЕЛЕНО мы также сталкиваемся впервые.

Значение НЕОПРЕДЕЛЕНО применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Это как раз наша ситуация.

А тип для значения, которое не принадлежит ни к одному из типов, как вы уже наверное догадались отсутствует.

Функция ТИП

Она принимает всего один параметр — имя примитивного типа (СТРОКА, ЧИСЛО, ДАТА, БУЛЕВО), либо имя таблицы, тип ссылки которой нужно получить.

Результатом данной конструкции будет значение типа Тип для указанного типа.

Звучит туманно, не правда ли? :)

Давайте рассмотрим применение данной конструкции и всё сразу станет на свои места.

Пусть нам требуется отобрать все записи справочника Города, у которых составной реквизит ОтличительныйПризнак имеет значение типа СТРОКА:

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

01

Теперь давайте отберём все записи, у которых значения реквизита ОтличительныйПризнак являются ссылками на элементы справочника Цвета (таблица Справочник.Цвета):

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак) = ТИП(Справочник.Цвета)

02

Отступление

Как вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак. Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL.

Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL, которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Вот пример его использования:

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак ЕСТЬ NULL

03

Отлично.

Но есть и такие элементы (Сан-Паулу), у которых реквизит ОтличительныйПризнак (составного типа) просто не заполнен и равен специальному значению НЕОПРЕДЕЛЕНО.

Чтобы отобрать такие записи следует использовать другую конструкцию:

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак,
    ТИПЗНАЧЕНИЯ(ОтличительныйПризнак)
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак = НЕОПРЕДЕЛЕНО

Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов.

Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом:

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак
ИЗ
    Справочник.Города
ГДЕ
    ОтличительныйПризнак ЕСТЬ НЕ NULL

Логический оператор ССЫЛКА

Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу, указанную справа.

К примеру, давайте выберем из справочника Города только те записи, у которых значение составного реквизита ОтличительныйПризнак являются ссылкой на элемент справочника Вкусы:

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

05

Как вы помните, эту же задачу мы могли бы решить используя ТИПЗНАЧЕНИЯ и ТИП:

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

Функция ЕСТЬNULL

Функция предназначена для замены значения NULL на другое значение.

Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует.

Как например, реквизит ОтличительныйПризнак для групп справочника Города:

ВЫБРАТЬ
    Наименование,
    ОтличительныйПризнак
ИЗ
    Справочник.Города

06

Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Пусть в данном случае это будет строка «Такого реквизита нет!»:

ВЫБРАТЬ
    Наименование,
    ЕСТЬNULL(ОтличительныйПризнак, "Такого реквизита нет!")
ИЗ
    Справочник.Города

08

Получается, что если первый параметр функции ЕСТЬNULL не равен NULL, то возвращается он. Если же он равен NULL, то возвращается второй параметр.

Функция ВЫРАЗИТЬ

Эта функция предназначена только для полей, имеющих составной тип. Отличным примером такого поля является свойство ОтличительныйПризнак у элементов справочника Города.

Как мы помним, составные поля могут быть одного из нескольких типов, указанных в конфигураторе.

Для поля ОтличительныйПризнак такими допустимыми типами являются СТРОКА, Справочник.Цвета и Справочник.Вкусы.

Иногда возникает необходимость привести значения составного поля к какому-либо определенному типу.

Давайте приведём все значения поля ОтличительныйПризнак к типу Справочник.Цвета:

ВЫБРАТЬ
    Наименование,
    ВЫРАЗИТЬ(ОтличительныйПризнак КАК Справочник.Цвета)
ИЗ
    Справочник.Города

09

В результате, все значения элементов, которые имели тип Справочник.Цвета, остались заполненными и оказались приведенными к указанному типу. Все значения других типов (СТРОКА, Справочник.Вкусы) теперь стали равны NULL. В этом состоит особенность приведения типа при помощи функции ВЫРАЗИТЬ.

Приводить тип можно или к примитивному типу (БУЛЕВО, ЧИСЛО, СТРОКА, ДАТА) или к ссылочному типу. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но тип, к которому делается приведение, обязательно должен входить в список типов для данного составного поля, иначе система выдаст ошибку.

Пройдите тест

а) Напишите запрос, который запрашивает из справочника Города реквизиты Наименование и Мэр, а также тип значения, которое находится в составном поле Мэр:

 0 

   

Распечатать

1С 8.3 : Функции ЕстьРеквизитДокумента и ЕстьРеквизитОбъекта

При разработке частенько нужно проверить наличие реквизита в документе или справочнике.

Ниже приведены функции позволяющие проверить наличие заданных реквизитов в объектах конфигурации:

Код 1C v 8.х

 // Позволяет определить есть ли среди реквизитов шапки Объекта реквизит с переданным именем.
Функция ЕстьРеквизитОбъекта(ИмяРеквизита, Объект) Экспорт

МетаданныеОбъекта = Объект.Метаданные();
Если МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли; 

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

Для документа:

Код 1C v 8.х

 // Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры: 
//  ИмяРеквизита - строковое имя искомого реквизита, 
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт

Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли; 

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

P.S. Посмотрите еще Полезные функции по работе с метаданными

Войти или зарегистрироваться

8.х Как проверить реквизит/Объект метаданных на существование?

Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем alp, 17 апр 2010.




0/5,
Голосов: 0
  1. TopicStarter Overlay

    alp

    Offline

    alp
    Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    434
    Симпатии:
    0
    Баллы:
    26

    есть Список реквизитов:
    Контрагент
    Договор
    Договор2
    ….
    Как проверить существует ли этот реквизит в объекте?
    подобно методу Выбран() в 77.


    alp,
    17 апр 2010
    #1

  2. mialord

    Offline

    mialord
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.460
    Симпатии:
    53
    Баллы:
    54

    Здраствуйте!

    Если Вы хотите проверить существует ли реквизит у объекта метаданных контрагент, то самый простой способ попытаться его получить через Метаданные() с использованием оператора Попытка … КонецПопытки;


    mialord,
    17 апр 2010
    #2

  3. Stack_G

    Offline

    Stack_G
    Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    29

    Из типовой:

    Код:
    МетаданныеДокумента = ДокументОбъект.Метаданные();
    
    
    Код:
    // Позволяет определить есть ли среди реквизитов шапки документа
    // реквизит с переданным именем.
    //
    // Параметры: 
    //  ИмяРеквизита - строковое имя искомого реквизита, 
    //  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
    //
    // Возвращаемое значение:
    //  Истина - нашли реквизит с таким именем, Ложь - не нашли.
    //
    
    
    Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт
    
    Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
    Возврат Ложь;
    Иначе
    Возврат Истина;
    КонецЕсли; 
    
    КонецФункции // ЕстьРеквизитДокумента()
    

    Переписать под любой объект не составляет труда:

    Код:
    Функция ЕстьРеквизитОбъекта(ИмяРеквизита, Объект) Экспорт
    
    МетаданныеОбъекта = Объект.Метаданные();
    Если МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
    Возврат Ложь;
    Иначе
    Возврат Истина;
    КонецЕсли; 
    
    КонецФункции 
    

    Как говорит «начальника форума»: «все украдено до нас» :)


    Stack_G,
    17 апр 2010
    #3
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. GRUV

    8.х
    Как проверить существование переменной

    GRUV,
    15 май 2008
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    5
    Просмотров:
    6.698
    BabySG
    20 май 2008

  2. МалышкА

    8.х
    Как созданную в SQL таблицу превратить в объект метаданных 1С 8.2?

    МалышкА,
    8 мар 2014
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    4
    Просмотров:
    849
    Thelearning
    12 мар 2014

  3. man37

    7.7
    Проверить существование файла запросом

    man37,
    21 ноя 2015
    , в разделе: Конфигурирование на платформе «1С:Предприятие 7.7»
    Ответов:
    8
    Просмотров:
    2.765
    man37
    23 ноя 2015

  4. Aidis

    [РЕШЕНО]
    Как проверить существование узла при чтении ФабрикаXDTO

    Aidis,
    27 ноя 2015
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    3
    Просмотров:
    2.723
    hawksib
    24 сен 2019

Загрузка…
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

В этой статье будут рассмотрены способы проверки на пустое значение в зависимости от типа проверяемого реквизита в запросе 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с проверить существование реквизитов на форме
  • Diablo 3 что делать после прохождения компании
  • 1с проверка заполнения обязательных реквизитов
  • Dpd как расшифровывается транспортная компания
  • 1с программно создать реквизит табличной части