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

Как узнать, что ссылка на справочник, документ или на объект другого корневого типа конфигурации?

Ключевые слова: Ссылка, ТипВсеСсылки, СодержитТип

Есть функция глЧтото(Парам), в качестве параметра в оную может передаваться либо Метаданные.Справочники.ХХХ, либо же Метаданные.Документы.ХХХ. Собственно, вопрос: как в функции глЧтото

узнать Парам — это справочник, или объект?

————-

Ответ:

Дяпти:

ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(МояНепонятноКакаяСсылка));

аналогично:

ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(МояНепонятноКакаяСсылка));

——————————

В типовых еще используется функция ПринадлежностьКлассуМетаданных

Функция ПринадлежностьКлассуМетаданных(Класс, Объект) Экспорт 
   Для Каждого МДОбъект Из Метаданные[Класс] Цикл 
       Если МДОбъект = Объект Тогда 
           Возврат Истина; 
       КонецЕсли; 
   КонецЦикла; 
   Возврат Ложь; 
КонецФункции 

———

TormozIT

ОЧЕНЬ ПОЛЕЗНАЯ ФУНКЦИЯ!

Вот универсальное решение. Функция возвращает имя корневого типа конфигурации:

для значения перечисления — «Перечисление»,

для элемента справочника — «Справочник»,

для документа — «Документ»,

для записи регистра сведений — «РегистрСведений»

и т.д.

// Определяет корневой тип конфигурации по описанию типов, типу, метаданным, ссылке или объекту.
// Для описания типов берется первый тип массива типов.
// Для субобъектов конфигурации не возвращает имя корневого типа.
//
// Параметры:
//  пОбъект      – Произвольный – для чего получаем метаданные.
//
// Возвращаемое значение:
//               – Строка - имя типа конфигурации;
//  Неопределено - не удалось получить имя типа.
//
Функция ЛксПолучитьКорневойТипКонфигурации(Знач пОбъект) Экспорт

    Если ТипЗнч(пОбъект) = Тип("ОбъектМетаданных") Тогда 
        МетаданныеТипа = пОбъект;
    Иначе
        Если ТипЗнч(пОбъект) = Тип("ОписаниеТипов") Тогда
            Если пОбъект.Типы().Количество() > 0 Тогда 
                пОбъект = пОбъект.Типы()[0];
            Иначе
                Возврат Неопределено;
            КонецЕсли;
        КонецЕсли;
        Если ТипЗнч(пОбъект) = Тип("Тип") Тогда
            МетаданныеТипа = Метаданные.НайтиПоТипу(пОбъект);
        Иначе
            МетаданныеТипа = Метаданные.НайтиПоТипу(ТипЗнч(пОбъект));
        КонецЕсли;
    КонецЕсли;
    Если МетаданныеТипа <> Неопределено Тогда 
        МассивФрагментов = ЛксПолучитьМассивИзСтрокиСРазделителем(МетаданныеТипа.ПолноеИмя());
        Если МассивФрагментов.Количество() = 2 Тогда 
            Возврат МассивФрагментов[0];
        Иначе
            // Ссылка на субобъект
        КонецЕсли;
    КонецЕсли;
    Возврат Неопределено;
    
КонецФункции // ЛксПолучитьКорневойТипКонфигурации()

// Функция разбивает строку разделителем.
// 
// Параметры:
//  пСтрока      - Строка - которую разбиваем;
//  *пРазделитель - Строка - символ-разделитель.
//
// Возвращаемое значение:
//               - Массив - содержащий фрагменты, на которые разбивает строку разделитель.
//
Функция ЛксПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель = ".") Экспорт
    
    Массив = Новый Массив;
    лСтрока = СтрЗаменить(пСтрока, пРазделитель, Символы.ПС);
    Для Счетчик = 1 По СтрЧислоСтрок(лСтрока) Цикл 
        Массив.Добавить(СтрПолучитьСтроку(лСтрока, Счетчик));
    КонецЦикла;
    Возврат Массив;
    
КонецФункции // ЛксПолучитьМассивИзСтрокиСРазделителем()

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

Сегодня мы поговорим подробнее про типы объектов конфигурации 1С (тип документа 1С, тип справочника 1С и др.)

Так как в программном коде мы работаем со значениями, то периодически требуется знать их тип. Тип 1С всегда указывается в метаданных у реквизитов — в справочниках, документах.

Работа с типами 1С часто используется:

  • Условия в программе
    Разные действия в зависимости от типа значения 1С в конструкции «Если … Тогда …»
  • Ограничения при работе в интерфейсе
    Запрет или разрешение пользователю вводить в поле на форме значения определенных типов 1С.
  • Определение фактического параметра функции/процедуры
    Если параметр функции/процедуры может быть любого типа 1С, то нужно его определить, чтобы правильно получить значение.

Тип 1С можно получить:

  • Определить тип фактического значения 1С
  • Значения-объекты имеют свойства, в которых указан разрешенный тип 1С (например типы 1С разрешенные в колонке таблицы, в поле на форме, в метаданных) или методы, которые возвращают эти типы 1С
  • Из метаданных – можно получить тип 1С так, как он указан в метаданных в конфигураторе.

Типы 1С можно разделить на три вида:

  • Базовые типы 1С
  • Типы 1С базы данных (ссылочные, объекты)
  • Типы 1С.

Определение типа 1С и сравнение типов 1С

Узнать тип значения 1С можно с помощью функции ТипЗнч(Переменная)

Чтобы понять какой тип 1С эта функция вернула – нужно указать нужный нам Тип(«ИмяТипа»)

Например, определение (сравнение) типа 1С переменной:
Если ТипЗнч(Переменная) = Тип("ИмяТипа") Тогда

Какие типы писать в качестве ИмяТипа?

Базовые типы

Базовые типы 1С — число, строка, дата, булево.

Например:
Знч = 12;
Если ТипЗнч(Знч) = Тип("Число") Тогда
ИначеЕсли Знч = Тип("Строка") Тогда
ИначеЕсли Знч = Тип("Дата") Тогда
ИначеЕсли Знч = Тип("Булево") Тогда
КонецЕсли;

Типы базы данных

1С хранит данные в базе данных, но не в виде отдельных записей, а в виде объектов.

Большинство сохраняемых объектов (в том числе: справочники, документы, перечисления, бизнес-процессы, задачи) доступны в виде Объекта (для изменения и записи) и в виде Ссылки (для чтения). Подробнее см. «Ссылки и объекты».

Например:
Знч = Справочники.Организации.ПустаяСсылка();
Если ТипЗнч(Знч) = Тип("СправочникСсылка.Организации") Тогда
ИначеЕсли Знч = Тип("СправочникОбъект.Организации") Тогда
ИначеЕсли ТипЗнч(Знч) = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
ИначеЕсли Знч = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда
КонецЕсли;

Регистры могут быть представлены различными типами. Имя типа регистра составное:
РегистрТипрегистраТипдоступа.ИмяРегистра

Типы 1С регистров:

  • Сведений
  • Накопления
  • Бухгалтерии
  • Расчета.

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

  • НаборЗаписей
  • Список
  • Выборка
  • Запись
  • КлючЗаписи.

Итого, пример:
Если ТипЗнч(Знч) = Тип("РегистрСведенийСписок.ИмяРегистра") Тогда
ИначеЕсли Знч = Тип("РегистрНакопленияНаборЗаписей.ИмяРегистра") Тогда
КонецЕсли;

Типы 1С

Язык 1С позволяет работать со множеством объектов, создаваемых динамически в программе, например – массив, список значений, таблица значений, структура…

Такие типы 1С указываются по их названию (одним словом, без пробелов). Например:
Если ТипЗнч(Знч) = Тип("Массив") Тогда
ИначеЕсли Знч = Тип("СписокЗначений") Тогда
КонецЕсли;

Определение значения ссылочного типа 1С

Работа со всеми объектами базы данных (справочники, документы…) ведется через ссылки. Например, если мы хотим в документе сделать реквизит – справочник, то его тип 1С будет «СправочникСсылка.ИмяСправочника».

Мы можем определить является ли ссылка справочником или документом с помощью метода ТипВсеСсылки()

Например:
Значение = Справочники.Организации.ПустаяСсылка();
Если Справочники.ТипВсеСсылки().Содержит( ТипЗнч(Значение) ) Тогда
     //это справочник
ИначеЕсли Документы.ТипВсеСсылки().Содержит( ТипЗнч(Значение)) Тогда
     //это документ
КонецЕсли;

Работа с типами 1С в запросе

В запросе тип 1С можно проверить двумя способами.

Первый – аналогично описанному, но в имени типа 1С не указывается «Ссылка» или «Объект», то есть вместо «СправочникСсылка.Организации» пишем «Справочник.Организации»

Получение доступных типов 1С

У множества объектов есть свойство .ТипЗначения, которое содержит список типов 1С:

  • Поле на форме толстого клиента
    ЭлементыФормы.ИмяПоля.ТипЗначения
  • Поле на форме тонкого клиента (исключение: называется ДоступныеТипы)
    Элементы.ИмяПоля.ДоступныеТипы
  • Колонка таблицы значений, дерева значений
  • Реквизит формы
  • Элемент отбора

Как работать с этим списком типов 1С в поле .ТипЗначения – см. «ОписаниеТипов» в разделе «Язык 1С».

Работа с типами 1С реквизитов в метаданных конфигурации

При добавлении и редактировании реквизитов в конфигураторе программист указывает тип(ы) 1С реквизита. В программном коде на языке 1С можно получить (узнать) тип(ы) 1С реквизита.

Подробнее про работу с метаданными см. далее «Работа с метаданными».

Основные методы:

  • У объекта 1С вызвать метод Метаданные(), который возвращает метаданные конкретного объекта и далее работать со списком реквизитов (и реквизитов табличной части)
    Документы.ПоступлениеТоваров.ПустаяСсылка().Метаданные().Реквизиты
  • Использовать глобальную переменную «Метаданные», которая возвращает все метаданные конфигурации, и далее выйти на реквизиты конкретного объекта
    Метаданные.Документы.ПоступлениеТоваров.Реквизиты

У реквизита есть свойство .Тип, которое содержит список типов 1С, установленный в конфигураторе у этого реквизита.

Как работать с этим списком типов 1С – см. «ОписаниеТипов» в разделе «Язык 1С».

Указать фильтр типов 1С

У многих объектов возможно указать фильтр типов значений 1С, возможных к использованию, например:

  • Список значений (.ДоступныеЗначения)
  • Поле формы управляемого клиента (.ДоступныеТипы)

Там, где фильтра не доступен к изменению, доступно указать фильтр в методе объекта. Например у колонки таблицы (дерева) значений есть .ТипЗначения и мы не можем его изменять, но при добавлении колонки с помощью метода .Добавить() вторым параметром можно указать список доступных типов 1С.

Чтобы указать список типов 1С для фильтра – используется список типов 1С, как с ним работать – см. «Описание типов» в разделе «Язык 1С».

Загрузка…

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

Содержание

Вместо предисловия

Статья не ставит целью пересказ встроенной справки или руководства разработчика. Подразумевается, что читатели самостоятельно могут посмотреть необходимую информацию в синтакс-помощнике, глоссарии терминов 1С, или другой документации.

Примитивные типы значений в 1С

Значения примитивных типов не содержат в себе ничего, кроме литерала своего типа. Например, значение типа число может определяться литералом 12345, типа строка – “12345”, типа булево – Истина, и т.д.

Всего примитивных типов в 1С шесть:

  1. Число
  2. Строка
  3. Дата
  4. Булево
  5. Неопределено
  6. NULL

Значения примитивных типов могут преобразовываться к другим типам. Для явного преобразования используются соответствующие методы глобального контекста – например, Строка(12345) приведет число к строке, Дата(“20210101”) – преобразует строку в дату 01.01.2021, и др.

Но самое интересное начинается при неявном преобразовании типов. Значения преобразуются по определенным правилам. Так, например, второй операнд  и последующие преобразуются к первому операнду выражения, до тех пор, пока это подразумевается используемыми операторами Т.е. если первым идет число, последующие операнды также будут преобразовываться к числу, если строка – к строке.
Но если в выражении попадается оператор, который работает только с конкретным типом, то будет повторное преобразование к этому типу.

Пример:

Строка1 = 1;
Строка2 = "2";
Строка3 = Строка1 + Строка2; // Вернет число 3
Строка4 = Строка2 + Строка1; // Вернет строку "21"
Строка5 = "2" + 2 - 2 ; // Вернет число 20, т.к. оператор "минус" не работает со строковыми выражениями, и оба его операнда преобразуются к числу.

Значение типа Неопределено – это специальное значение, которое используется как значение по умолчанию для полей составных типов, а также для обозначения неуказанного значения. Объявленные переменные, в которые еще не поместили значение, будут иметь тип Неопределено.

Значение Null – это литерал, обозначающий отсутствие значения в выборке данных. Прежде всего это значение используется при работе с запросами, например, при левом соединении двух таблиц, отсутствующие значения в левой таблице будут заменены значениями Null. Также значение Null будет иметь реквизит иерархического справочника для элемента-группы, если в свойствах реквизита указано, что данный реквизит используется только для элементов. Аналогично для реквизитов, которые используются только для групп, их значения в обычных элементах справочника будут равны Null.

Прикладные типы значений

Прикладные типы значений создаются платформой, когда разработчик добавляет новые прикладные объекты – документы, справочники, регистры и т.д. При этом при создании одного прикладного объекта становятся доступны сразу несколько прикладных типов данных. Например, при добавлении в конфигурацию справочника “Пользователи”, платформа создаст следующие типы:

  • СправочникСсылка.Пользователи
  • СправочникОбъект.Пользователи
  • СправочникМенеджер.Пользователи
  • СправочникСписок.Пользователи
  • СправочникВыборка.Пользователи

Каждый прикладной тип служит для определенной функциональности – например, ссылка нужна для доступа к свойствам конкретного элемента на чтение, объект – для возможности редактировать свойства это элемента, выборка – для перебора коллекции элементов, и т.п.

Изначально прикладные типы платформой не поддерживаются, и существуют только в конкретном прикладном решении. Следует иметь в виду, что при создании двух разных справочников, даже с одинаковым набором реквизитов, например “Покупатели” и “Поставщики”, для платформы это будут разные типы данных, несмотря на одинаковый реквизитный состав, и унаследованную базовую функциональность типа “Справочники”.

Интерфейсные типы данных в 1С

К интерфейсным типам относятся типы данных, позволяющие организовать интерактивное взаимодействие прикладного решения с пользователем. Прежде всего, это типы, связанные с формами и их элементами, например “КнопкаФормы”, “ПолеФормы” и др. Также к интерфейсным типам данных относятся значения, позволяющие работать с избранным, историей, окном клиентского приложения, и т.д.

Общие типы данных

Платформа предоставляет специфичные объекты языка, отвечающие за различную функциональность: ТабличныйДокумент, Диаграмма, ПостроительЗапроса, Картинка и др.

В отличие от примитивных типов, значения общих типов представляют собой совокупность значений свойств конкретного объекта. Каждое значение общего типа называется “экземпляром объекта”, и создается ключевым словом Новый – Новый ТекстовыйДокумент, Новый ХранилищеЗначения, и т.д.

Универсальные коллекции значений

Для работы с временными наборами данных в течение сеанса работы пользователя используются универсальные коллекции, такие как Массив, ТаблицаЗначений, Структура и др. Они не являются объектами базы данных, и в ней не хранятся. Универсальные коллекции используются для сбора, группировки, анализа и обработки данных.
Значения типа универсальной коллекции создаются при помощи ключевого слова Новый, например – Новый СписокЗначений, Новый ДеревоЗначений.
Платформа также предоставляет разработчику связанные типы значений, такие как КолонкаТаблицыЗначений, СтрокаДереваЗначений,  КлючИЗначение, для работы с содержимым универсальных коллекций.

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

Составные типы значений

Реквизиты объектов конфигурации могут иметь составной тип. Например, для реквизита “Платежный документ” может быть указаны типы “Приходная накладная”, “Авансовый отчет”, “Оприходование товаров”. В этом случае разработчик указывает, что реквизит имеет составной тип, и отмечает нужные типы на этапе конфигурирования, а пользователь в процессе эксплуатации может выбрать в реквизит значение одного из доступных типов. Следует иметь в виду, что в каждый конкретный момент времени значение имеет только один конкретный тип. Если значение составного типа не указано, тип будет Неопределено. Одновременно двух типов значение составного типа быть не может.

Проверка типа конкретного значения

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

Для такой проверки используется два метода глобального контекста: Тип и ТипЗнч.

Пример. Реквизит Плательщик имеет составной тип – плательщиками могут быть Сотрудники и Контрагенты. Нам нужно проверить, что выбранное значение реквизита является элементом справочника Контрагенты:

Если ТипЗнч(Плательщик) = Тип("СправочникСсылка.Контрагенты") Тогда

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

Иногда в коде нужно определить, что переданное значение или параметр является справочником или документом. Например, это может быть необходимо в общей подписке на события при записи объектов. Для этого следует использовать методы ТипВсеСсылки() и Содержит().

Пример. В подписке ПриЗаписи мы получаем параметр Источник, который может быть как любым элементом любого справочника, так и любым документом.

Если Справочники.ТипВсеСсылки().Содержит(ТипЗнч(Источник)) Тогда
// Это справочник
ИначеЕсли Документы.ТипВсеСсылки().Содержит(ТипЗнч(Источник)) Тогда
// Это документ
КонецЕсли;

Для определения типа значения в 1С существуют специальные методы и конструкции встроенного языка программирования и языка запросов.

На встроенном языке

Функция ТипЗнч(<Значение>) по значению возвращает тип.
Функция Тип(<Строка>) по описанию возвращает тип.

Если ТипЗнч(Значение) = Тип("Число") Тогда
Сообщить("Тип значения - Число");ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда
Сообщить("Тип значения - Строка");ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
Сообщить("Тип значения - Дата");ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
Сообщить("Тип значения - Булево");ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.Справочник1") Тогда
Сообщить("Тип значения - Справочник1");ИначеЕсли ТипЗнч(Значение) = Тип("ДокументСсылка.Документ1") Тогда
Сообщить("Тип значения - Документ1");//...
//...
//...

КонецЕсли;

В запросах

Для определения типа значения можно применить оператор ССЫЛКА или воспользоваться функциями языка заросов ТИПЗНАЧЕНИЯ() и ТИП().

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗарплатаКВыплате.Сотрудник,
| ЗарплатаКВыплате.СуммаКВыплате
|ИЗ
| РегистрНакопления.ЗарплатаКВыплате КАК ЗарплатаКВыплате
|ГДЕ
| ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВозвратНДФЛ"
;

Запрос

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

В 1С:Предприятии все значения имеют определенный тип. Во встроенном языке есть специальные методы для приведения типа значения.

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

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

Во-вторых, в 1С:Предприятии 8 нет двух понятий — «Тип» и «Вид». Для каждого объекта метаданных имеется свой набор типов используемых во встроенном языке для работы с описываемым им прикладным объектом. То есть при использовании конфигурации не будет существовать такого типа как «ДокументСсылка», а будут существовать конкретные типы, например, «ДокументСсылка.Счет», «ДокументОбъект.Счет», «ДокументСсылка.Накладная», и т.д.

Кроме того, в 1С:Предприятии 8 для манипулирования типами используются не их строковые наименования, а специальный тип «Тип». Значение типа Тип может быть получено функцией Тип(), получающей в качестве параметра имя типа.

Чтобы проверить тип значения переменной нужно определить ее тип функцией ТипЗнч() и использовать функцию Тип() для получения типа по имени.

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

Во-вторых, в 1С:Предприятии 8 нет двух понятий — «Тип» и «Вид». Для каждого объекта метаданных имеется свой набор типов используемых во встроенном языке для работы с описываемым им прикладным объектом. То есть при использовании конфигурации не будет существовать такого типа как «ДокументСсылка», а будут существовать конкретные типы, например, «ДокументСсылка.Счет», «ДокументОбъект.Счет», «ДокументСсылка.Накладная», и т.д.

Кроме того, в 1С:Предприятии 8 для манипулирования типами используются не их строковые наименования, а специальный тип «Тип». Значение типа Тип может быть получено функцией Тип(), получающей в качестве параметра имя типа.

Чтобы проверить тип значения переменной нужно определить ее тип функцией ТипЗнч() и использовать функцию Тип() для получения типа по имени.

Если ТипЗнч(Основание) = Тип(«ДокументСсылка.ПриходнаяНакладная») Тогда

Для проверки типа поля в запросе 1С 8.3 можно воспользоваться функцией языка запросов ТИПЗНАЧЕНИЯ( ).

Функция ТИП( ) получает тип по его имени. Имена примитивных типов: Число, Строка, Булево, Дата. Имена ссылочных типов строятся по следующему принципу: Документ.РеализацияТоворовУслуг или Справочник.Номенклатура.

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

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

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

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

Рассмотрим примеры использования. Вывод в результат запроса типа Регистратора:

Закупки.Регистратор КАК Регистратор ,

ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) КАК ТипРегистратора

РегистрНакопления.Закупки КАК Закупки

Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:

Закупки.Регистратор КАК Регистратор

РегистрНакопления.Закупки КАК Закупки

ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )

Литерал ТИП

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

Примеры имен типов:

ТИП(Строка)
ТИП(Число)
ТИП( Перечисление.СтавкиНДС )
ТИП( Справочник.Номенклатура )
ТИП( Документ.ПриобретениеТоваровУслуг )
ТИП( ПланСчетов.Хозрасчетный )
ТИП( ПланОбмена.Полный )

Использование в запросе:

Закупки.Регистратор КАК Регистратор ,

КОГДА ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )

ТОГДА «Приобретение товаров»

КОНЕЦ КАК ТипИсточника

РегистрНакопления.Закупки КАК Закупки

Оператор ССЫЛКА

Оператор позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, указанную слева. Результат оператора — значение типа Булево.

Закупки.Регистратор КАК Регистратор

РегистрНакопления.Закупки КАК Закупки

Закупки.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг

Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения

Остались вопросы?
Спросите в комментариях к статье.

1 комментарий

Скажите, пжст, для оптимальной производительности что лучше использовать:

Как проверить тип значения в запросе

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

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(3) в справочнике так же

ГДЕ Измерение ССЫЛКА Справочник.Номенклатура

ГДЕ Измерение ССЫЛКА Перечисление.ВидыПлатежейВБюджет

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

С проверкой типа значения в запросе — всё понятно. есть ключевое слово ССЫЛКА, если надо из запроса получить колонку с типом объекта (Справочник/Документ/Перечисление) и название типа справочника/документа/перечисления — как быть?

И вот еще странность: ТИПЗНАЧЕНИЯ() в данном запросе у меня вместо ожидаемого «Контрагенты» выдает «Контрагент». Если смотреть на справочник в конфигураторе 8.3, там есть «Представление объекта:» и там как раз написано Контрагент, а как же получить в запросе название типа, чтобы было так:
Иванов Иван Иванович | Справочник | Контрагенты |

В результате хотелось бы в запросе к реквизиту объекта получить вид и тип ссылочного типа. Реквизит может иметь составной тип данных.

Справочник | Контрагенты | Иванов Иван Иванович
Документ | РасходныйКссовыйОрдер | Расходный кассовый ордер №00001 от 01.01.2014

Есть значение в запросе, которое может содержать ссылку либо на справочник, либо на документ. Ссылку на конкретный документ проверить можно так: «НашеЗначение ССЫЛКА Документ.ИмяНужногоДокумента». А как проверить или это ссылка на любой документ?

Проверяй на типы документов. Если речь о Запросе, но скорее всего реализация поставленной задачи не корректное, так что лучше переделать

ВЫБОР КОГДА… правда сначала глянь чего у тебя в базе меньше, справочников или документов)

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

Мне нужно из регистра сведений выбрать все записи, у которого реквизит Объект ссылается на документы (любой документ базы). Через «ВЫБОР КОГДА …» перечислять все документы конфигурации как-то некрасиво, это УПП, там сотня документов или больше. Как вариант, сейчас попробую.

В ерп сервер умрет от такого запроса )))

может запрос надо переписать ?

КОГДА ТИПЗНАЧЕНИЯ(НашеЗначение) В (&ТипыВсехДокументов) ТОГДА Документ

Тэги: 1С 8

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

 0 

   

Распечатать

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

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

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

Код 1C v 8.х

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

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

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

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

Код 1C v 8.х

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

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

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

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

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