Как найти тип справочника 1с

Найти справочник по типу

Я
   DomanM

23.03.15 – 18:58

Есть тип (из описаниетипов.типы()) как найти какой конкретно справочник в виде “Контрагенты” (например) соответствует этому типу?

   Cyberhawk

1 – 23.03.15 – 18:59

СодержитТип()

   DomanM

2 – 23.03.15 – 19:06

(1) это булево же мне перебирать все справочники чтоли и сравнивать?

   Cyberhawk

3 – 23.03.15 – 19:08

“сравнивать” предполагает два источника. Один, как Я понял, это ОписаниеТипов.Типы(). А второй источник – это что?

   DomanM

4 – 23.03.15 – 19:11

(3) не типы. а уже конкретный тип, второй источник типзнач каждого справочника?

   DomanM

5 – 23.03.15 – 19:11

(3) хочется сразу в виде текста этот справочник получить

   Cyberhawk

6 – 23.03.15 – 19:13

Какой “этот”?

   DomanM

7 – 23.03.15 – 19:14

(6) этот, тип которого, в моем ТИПе

   Записьдампа

8 – 23.03.15 – 19:15

Метаданные.НайтиПоТипу(Тип).Имя

   Cyberhawk

9 – 23.03.15 – 19:15

Я так и не понял до конца, но Метаданные.НайтиПоТипу() тебе в помощь

  

DomanM

10 – 23.03.15 – 20:02

(9) спс, то что нужно

Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс

Во-первых, во встроенном языке для работы с одним прикладным объектом реализовано несколько типов.

Например, задачи, которые в 1С:Предприятии 7.7 решал тип Документ решаются теперь несколькими типами. Они разделены по своему назначению.

Тип ДокументСсылка используется для хранения ссылок на объект базы данных в реквизитах других объектов.

Тип ДокументОбъект используется для записи и удаления отдельных документов.

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

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

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

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

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

Например:

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

В предыдущей статье типы и значения 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С:Предприятие 8 один прикладной объект может реализовывать одновременно несколько типов значений. К примеру, в сравнении с прошлыми версиями 1С:Предприятие, где для решения некоторых задач необходим был тип значения «Документ», в 1С:Предприятие 8 подобные задачи могут решаться различными типами значений. Каждый тип отличается от другого своим предназначением. Например, тип значения «ДокументСсылка» выполняет функцию сохранения ссылок для объекта из информационной базы внутри реквизитов иных отличных объектов. А тип значения «ДокументОбъект» необходим для того, чтобы записывать и проводить удаление конкретной документации. Её один схожий по первичному названию, но иной по функционалу – это тип записи «ДокументВыборка», который предназначен для выполнения перебора по документам, которые состоят в информационной базе. Также есть множество иных типов записи, которые предназначены для совершения действий с документацией.

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

В конфигурациях 1С, чтобы производить работу с типами, нужно задействовать не строчное представление типов, а вид типа «Тип», внутри которого и задаётся конкретный тип записи. Чтобы присвоить значение типу, следует воспользоваться функцией «Тип()», параметром в которой и будет сам конкретный тип.

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

Для наглядности всего описанного ниже приведен пример получения типа значения:

Рисунок 1 Пример получения типа значения в 1С 8
Рисунок 1 Пример получения типа значения в 1С 8

Проверка принадлежности типа значения

Рассмотрим, как узнать, относится ли конкретный тип значения к документации или справочникам, или чему-то иному.

Объекты, которые отвечают за описание некоторых прикладных документов, имеют сразу несколько различных типов, необходимых для проведения операций с такими объектами метаданных. К примеру, если есть некоторый документ «Счёт», то он будет иметь такой набор типов значений: «ДокументСписок.Счёт», «ДокументОбъект.Счёт», «ДокументМенеджер.Счёт», «ДокументВыборка.Счёт» и «ДокументСсылка.Счёт».

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

Рисунок 2 Алгоритм определения принадлежности типа значения определенному виду объекта
Рисунок 2 Алгоритм определения принадлежности типа значения определенному виду объекта

Специалист компании KoderLine

Фархутдинов Айдар

Узнать тип объекта (справочник, документ, перечисление…), можно используя функцию “XMLТипЗнч”.

//Если СоединениеС1С_.Справочники.ТипВсеСсылки().СодержитТип(СоединениеС1С_.ТипЗнч(Источник)) Тогда
    Если Найти(СоединениеС1С_.XMLТипЗнч(источник).TypeName,”CatalogRef”)>0 Тогда

       

        Вид = Источник.Метаданные().Имя;
        Если Вид=”Партнеры” Тогда
            Вид=”Контрагенты”;
        КонецЕсли;
        Если Источник.Пустая() Тогда
            Возврат Справочники[Вид].ПустаяСсылка();
        КонецЕсли;
        УиИст = СоединениеС1С_.string(Источник.УникальныйИдентификатор());
        Уи = Новый УникальныйИдентификатор(УиИст);
        Нашли = Справочники[Вид].ПолучитьСсылку(Уи);
        Если Найти(строка(Нашли),”<Объект не найден>”)>0 Тогда
            Сообщить_(“Не нашли в УТ:”+вид+”: “+Источник.Наименование);
        КонецЕсли;
        Возврат Нашли;
    //ИначеЕсли СоединениеС1С_.Перечисления.ТипВсеСсылки().СодержитТип(СоединениеС1С_.ТипЗнч(Источник)) Тогда    
    ИначеЕсли Найти(СоединениеС1С_.XMLТипЗнч(источник).TypeName,”EnumRef”)>0 Тогда
        ИмяПеречисления = Источник.Метаданные().Имя;
        НужныйИндекс = СоединениеС1С_.Перечисления[ИмяПеречисления].Индекс(Источник);
        ИмяЗначения = СоединениеС1С_.Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.получить(НужныйИндекс).имя;

       
        Возврат Перечисления[ИмяПеречисления][ИмяЗначения];
    КонецЕсли;

DocumentRef - документ ссылка
DocumentObject - документ объект 
CharOfAccountsRef - план счетов

 

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