Книга знаний

1С:Предприятие

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

Автор статьи: Волшебник | Редакторы: TormozIT, х86
Последняя редакция №20 от 16.04.12 | История
URL: http://kb.mista.ru/article.php?id=5

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


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

-------------
Ответ:

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


аналогично:

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


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

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

--------

TormozIT
ОЧЕНЬ ПОЛЕЗНАЯ ФУНКЦИЯ!
Вот универсальное решение. Функция возвращает имя корневого типа конфигурации:
для значения перечисления - "Перечисление",
для элемента справочника - "Справочник",
для документа - "Документ",
для записи регистра сведений - "РегистрСведений"
и т.д.
// Определяет корневой тип конфигурации по описанию типов, типу, метаданным, ссылке или объекту.
// Для описания типов берется первый тип массива типов.
// Для субобъектов конфигурации не возвращает имя корневого типа.
//
// Параметры:
//  пОбъект      – Произвольный – для чего получаем метаданные.
//
// Возвращаемое значение:
//               – Строка - имя типа конфигурации;
//  Неопределено - не удалось получить имя типа.
//
Функция ЛксПолучитьКорневойТипКонфигурации(Знач пОбъект) Экспорт

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

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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика