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

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

  • автор:

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

Для того чтобы получить имя объекта, следует воспользоваться свойством «Имя» объекта метаданных, который можно получить методом «Метаданные».

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

ИмяСправочника Для типов, не имеющих метода Метаданные() , можно использовать поиск в структуре метаданных конфигурации. Например, если переменная "ВыборкаНоменклатуры" имеет тип СправочникВыборка.Номенклатура, тогда:
ОбъектОписания  

Разработчику о работе с 1С:Предприятие, Pascal, Паскаль

Решение вопросов, возникающие при автоматизации учета с помощью 1С:Предприятие. Паскаль.

Как проверить тип значения в 1С, программно? Как определить тип объекта в 1С?

07.03.2017 | Автор Дмитрий

Как проверить тип значения в 1С, программно? Как определить тип объекта в 1С?
Используем функцию Тип (ТекСтрока) и ТипЗнч (ТекЗначение).

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

Функция Тип (ТекСтрока) возвращает тип по строковому имени ТекСтрока.
Функция ТипЗнч (СсылкаНаОбъект) возвращает тип объекта СсылкаНаОбъект. СсылкаНаОбъект — значение может быть любым типом.

Рубрика: 1С:Предприятие 8.2, Новости

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С не указывается «Ссылка» или «Объект», то есть вместо «СправочникСсылка.Организации» пишем «Справочник.Организации»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проголосовать за этот пост:

Особенности использования типов данных, предназначенных для манипулирования объектами базы данных

В модели разработки прикладных решений 1С:Предприятия для ряда сущностей предметной области используется объектный подход манипулирования данными. Эти сущности описываются в конфигурации объектами метаданных: Справочник , Документ , ПланВидовХарактеристик , ПланСчетов и ПланВидовРасчета . С точки зрения модели данных 1С:Предприятия, в базе данных для этих сущностей хранятся объекты. Разумеется, язык запросов предоставляет доступ к этим сущностям, как и ко всем другим данным, в модели реляционных таблиц. Но доступ специализированными объектами встроенного языка, предназначенными для манипулирования этими данными, предоставляется именно в объектной технике.

Рассмотрим состав типов, используемых для манипулирования этими сущностями в конфигурации. Мы будем рассматривать состав типов и их использование на примере справочника. Для других перечисленных объектов метаданных имеется аналогичный состав типов.

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

Тип СправочникМенеджер предоставляют доступ к общим действиям, относящимся к конкретному справочнику. С помощью его методов выполняются действия, относящиеся к справочнику, а не к его конкретным объектам. Например, его методы позволяют создать новый объект или найти объект по коду. Менеджер является своего рода "точкой входа" в конкретный справочник в объектной модели встроенного языка.

Заметим, что объекты типа СправочникиМенеджер и СправочникМенеджер имеются в системе в единственном экземпляре.

Подробнее остановимся на типах СправочникСсылка и СправочникОбъект . На следующем рисунке изображено хранение справочника в базе данных.

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

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

Для манипулирования справочником во встроенном языке существуют два основных типа СправочникСсылка.ХХХХ и СправочникОбъект.ХХХХ , где ХХХХ — имя справочника в метаданных. Важно, что имеются отдельные типы для каждого справочника, они появляются в системе при создании справочника в метаданных. Таким образом, типы ссылок двух разных справочников не будут совпадать между собой.

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

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

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

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

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

Для объектов обеспечивается оптимистическая блокировка. То есть объект не может быть записан, если он был изменен в базе данных после считывания. Этот механизм обеспечивает логическую целостность изменения объектов. Каждый, кто меняет объект, может быть уверен, что его изменения не "затрут" изменений сделанных другими пользователями (сессиями) или другими объектами в этой же сессии. Такая блокировка не препятствует изменению объекта другими сессиями или этой сессией. Однако если с момента считывания объекта и до попытки его записи объект был изменен в базе данных, то запись не будет выполнена.

Кроме того, существует механизм пессимистической блокировки, который запрещает изменения другими сессиями или этой сессией, до снятия блокировки этим объектом встроенного языка. Данный механизм необходимо включать в явном виде методом Заблокировать() . В основном он предназначен для блокировки объектов, редактируемых в форме. Расширение формы элемента справочника автоматически включает блокировку, чтобы пользователь был уверен что, начав редактировать объект, он сможет его записать.

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *