Как проверить тип значения документа, справочника?
Во-первых, во встроенном языке 1С:Предприятия 8 для работы с одним прикладным объектом реализовано несколько типов. Например, задачи, которые в 1С:Предприятии 7.7 решал тип «Документ» решаются теперь несколькими типами. Они разделены по своему назначению. Тип «ДокументСсылка» используется для хранения ссылок на объект базы данных в реквизитах других объектов. Тип «ДокументОбъект» используется для записи и удаления отдельных документов. Тип «ДокументВыборка» используется для перебора документов, хранящихся в базе данных. Существуют и другие типы данных, предназначенные для работы с документом. При написании модулей используются те типы, которые необходимы для решения конкретных задач.
Во-вторых, в 1С:Предприятии 8 нет двух понятий — «Тип» и «Вид». Для каждого объекта метаданных имеется свой набор типов используемых во встроенном языке для работы с описываемым им прикладным объектом. То есть при использовании конфигурации не будет существовать такого типа как «ДокументСсылка», а будут существовать конкретные типы, например, «ДокументСсылка.Счет», «ДокументОбъект.Счет», «ДокументСсылка.Накладная», и т.д.
Кроме того, в 1С:Предприятии 8 для манипулирования типами используются не их строковые наименования, а специальный тип «Тип». Значение типа Тип может быть получено функцией Тип(), получающей в качестве параметра имя типа.
Чтобы проверить тип значения переменной нужно определить ее тип функцией ТипЗнч() и использовать функцию Тип() для получения типа по имени.
Проверка типа значения во встроенном языке или в запросах
Функция ТипЗнч(<Значение>) по значению возвращает тип.
Функция Тип(<Строка>) по описанию возвращает тип.
В запросах
Для определения типа значения можно применить оператор ССЫЛКА или воспользоваться функциями языка заросов ТИПЗНАЧЕНИЯ() и ТИП().
В 1С:Предприятии все значения имеют определенный тип. Во встроенном языке есть специальные методы для приведения типа значения.
Комментарии (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С».
Проверка типа в запросе
Для работы с типами в запроса для сравнения и отборов существует две функции: ТИП() и ТИПЗНАЧЕНИЯ(), а также конструкция <Значение> ССЫЛКА <Тип> для ссылочных типов. В общем случае тип значения применяется для работы с составными полями, так как в других случаях тип значения известен заранее или не меняется.
Примеры проверки типа в запросах:
Получить тип в полях выборки:
ВЫБРАТЬ ТИП(Строка), ТИП(Справочник.Контрагенты)
Получить совпадение типа в выборке
Выбрать ТИПЗНАЧЕНИЯ(Ссылка) = ТИП(Справочник.Контрагенты)
Отбор по типу значения:
ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты ГДЕ ТИПЗНАЧЕНИЯ(ОсновнойМенеджер) = ТИП(Справочник.ФизическиеЛица)
Использование конструкции ССЫЛКА:
ВЫБРАТЬ ИНН ИЗ Справочник.Контрагенты ГДЕ ОсновнойМенеджер ССЫЛКА Справочник.ФизическиеЛица
Последние две конструкции идентичны по результату исполнения, но последняя применима только к ссылочным типам, что не всегда так, но более компактна.
Допустимо использование данных конструкций и в качестве условия для соединения таблиц.
На тип значения можно проверять не только поля из выборки запроса, но и параметры:
ВЫБРАТЬ * из Справочник.Контрагенты ГДЕ ТИПЗНАЧЕНИЯ(&Параметр) = ТИП(Справочник.Контрагенты)
Параметром функции ТИПЗНАЧЕНИЯ могут выступать:
СТРОКА, ЧИСЛО, ДАТА, а также все ссылочные типы.
Чтобы проверить на несколько значений применяется условие ИЛИ или множество В()
ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи ГДЕ ФизЛицо ССЫЛКА Справочник.ФизическиеЛица ИЛИ Физлицо ССЫЛКА Справочник.Пользователи
ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи ГДЕ ТИПЗНАЧЕНИЯ(Физлицо) В (ТИП(Справочник.ФизическиеЛица),ТИП(Справочник.Пользователи))
При сравнении ссылочных типов пустые ссылки, также дают совпадение, то есть для проверки на заполненность они применимы только как вспомогательные функции
Выбрать * ИЗ Справочник.Пользователи ГДЕ ТИПЗНАЧЕНИЯ(Физлицо) <> ТИП(Неопределено) И ТИПЗНАЧЕНИЯ(Физлицо) <> ТИП(NULL) И НЕ Физлицо = ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
Реклама — это искусство делать из полуправды целую ложь.
— Эдгар Шоафф