Книга знаний

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

v8: Проверка типов

Не всегда из любого типа можно получить вид типа или менеджер типа. В таких случаях помогает перебор. Давайте вместе составим библиотеку таких функцийАвтор статьи: Гений 1С | Редакторы: Волшебник
Последняя редакция №4 от 12.05.06 | История
URL: http://kb.mista.ru/article.php?id=123

Ключевые слова: тип, вид, менеджер, перебор


Прошу коллег добавить комментарии и свои функции по определению типов объектов.


Функция Типизация_СправочникСписок_ВидСправочника(ТипСправочникСписок) Экспорт
    Для Каждого Эл Из Метаданные.Справочники Цикл
        Если Тип("СправочникСписок."+Эл.Имя)=ТипСправочникСписок Тогда
            Возврат Эл.Имя;
        КонецЕсли;
    КонецЦикла;
    Возврат Неопределено;
КонецФункции

Функция Типизация_ДокументСписок_ВидДокумента(ТипДокументСписок) Экспорт
    Для Каждого Эл Из Метаданные.Документы  Цикл
        Если Тип("СправочникСписок."+Эл.Имя)=ТипДокументСписок Тогда
            Возврат Эл.Имя;
        КонецЕсли;
    КонецЦикла;
    Возврат Неопределено;
КонецФункции

Функция Типизация_МетаданныеФормы(Форма) Экспорт
    Рез=Новый Структура();
    Рез.Вставить("Класс", Неопределено);
    Рез.Вставить("Тип", Неопределено);
    Рез.Вставить("Вид", Неопределено);
    Рез.Вставить("Список", Неопределено);
    Если Форма.ЭлементыФормы.Найти("ДокументОбъект")<>Неопределено Тогда
        Рез.Класс="Документ";
        Рез.Вид=Форма.ДокументОбъект.Метаданные().Имя;
        Рез.Список=ложь;        
    ИначеЕсли Форма.ЭлементыФормы.Найти("СправочникОбъект")<>Неопределено Тогда
        Рез.Класс="Справочник";
        Рез.Вид=Форма.СправочникОбъект.Метаданные().Имя;
        Рез.Список=ложь;        
    ИначеЕсли Форма.ЭлементыФормы.Найти("СправочникСписок")<>Неопределено Тогда
        Рез.Класс="Справочник";
        Рез.Вид=Типизация_СправочникСписок_ВидСправочника(ТипЗнч(Форма.СправочникСписок));
        Рез.Список=ложь;        
    ИначеЕсли Форма.ЭлементыФормы.Найти("СправочникСписок")<>Неопределено Тогда
        Рез.Класс="Справочник";
        Рез.Вид=Типизация_СправочникСписок_ВидСправочника(ТипЗнч(Форма.ДокументСписок));
        Рез.Список=ложь;        
    КонецЕсли;
    Возврат Рез;
КонецФункции

Функция Типизация_ЭтоВнешняяОбработка(Тип)
    //Взято из регламентированных отчетов
    ЭтоВнешняяОбработка = (Лев(СтроковоеПредставлениеТипаОбъекта, 24) = "Внешняя обработка объект");
КонецФункции





Нашел ошибку - Форма.ЭлементыФормы.Найти("ДокументОбъект") и Форма.ЭлементыФормы.Найти("СправочникОбъект") - неправильная запись. Невозможно проверить, это форма документа-объекта или справочника-объекта без Попытка-Исключение. Так что нужно использовать в этой функции Попытка-Исключение. Позже исправлю.

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

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