Метаданные в 1С

Универсальные методы работы с объектами в 1С

В этой статье описываются методы работы с метаданными системы "1С:Предприятие 7.7".

Агрегатные объекты

//функция возвращает тип реквизита объекта метаданных
Функция гТипРеквизита(Атрибут) Экспорт
     Тип=Атрибут.Тип;
     Если Найти("Справочник,Документ,Перечисление",Тип)=0 Тогда
          Возврат(Тип);
     Иначе
          Возврат(Тип+"."+Атрибут.Вид);
     КонецЕсли;
КонецФункции

Документы

//функция возвращает список видов документов, на основании которых вводится заданный вид документа
Функция гВводящиеНаОсновании(Список,Вид,ФлагСтрока=0,ИсключатьСебя=1) Экспорт
     Для i=1 По Метаданные.Документ() Цикл
          Ж=Метаданные.Документ(i);
          //исключать из списка документ-основание
          Если (ИсключатьСебя=1) И (Ж.Идентификатор=Вид) Тогда
               Продолжить;
          КонецЕсли;
          //список
          Для j=1 По Ж.ВводимыеНаОснованииДокументы.Количество() Цикл
               Если Ж.ВводимыеНаОснованииДокументы.Получить(j).Идентификатор=Вид Тогда
                    Если ФлагСтрока=0 Тогда
                         Список.ДобавитьЗначение(Ж);
                    Иначе
                         Список.ДобавитьЗначение(Ж.Идентификатор);
                    КонецЕсли;
                    Прервать;
               КонецЕсли;
          КонецЦикла;
     КонецЦикла;
     //проверка
     Если Список.РазмерСписка()=0 Тогда
          Возврат(0);
     ИначеЕсли ФлагСтрока=0 Тогда
          Возврат(1);
     Иначе
          Список=Список.ВСтрокуСРазделителями();
          Список=СтрЗаменить(Список,Симв(34),"");
          Возврат(1);
     КонецЕсли;
КонецФункции

//функция возвращает первый подчинённый документ заданного вида
Функция гПодчиненныйДокумент(Ко,ВидДок) Экспорт
     //поиск
     Если Ко.Выбран()=1 Тогда
          Д=СоздатьОбъект("Документ");
          Если Д.ВыбратьПодчиненныеДокументы(,,Ко.ТекущийДокумент())=1 Тогда
               Пока Д.ПолучитьДокумент()=1 Цикл
                    Если Д.Вид()=ВидДок Тогда
                         Возврат Д.ТекущийДокумент();
                    КонецЕсли;
               КонецЦикла;
          КонецЕсли;
     КонецЕсли;
     //возврат
     Возврат ПолучитьПустоеЗначение("Документ."+ВидДок);
КонецФункции

//функция возвращает ссылку на заданный реквизит объекта метаданных Документ
Функция гРеквизитДокумента(Документ,Реквизит) Экспорт
     Если Метаданные.Документ(Документ).РеквизитШапки(Реквизит).Выбран()=1 Тогда
          Возврат Метаданные.Документ(Документ).РеквизитШапки(Реквизит);
     ИначеЕсли Метаданные.Документ(Документ).РеквизитТабличнойЧасти(Реквизит).Выбран()=1 Тогда
          Возврат Метаданные.Документ(Документ).РеквизитТабличнойЧасти(Реквизит);
     ИначеЕсли Метаданные.ОбщийРеквизитДокумента(Реквизит).Выбран()=1 Тогда
          Возврат Метаданные.ОбщийРеквизитДокумента(Реквизит);
     КонецЕсли;
КонецФункции

//функция создаёт список реквизитов документа
Процедура гСписокРеквизитовДокумента(Список,Документ,ФлагПредставление=0) Экспорт
     //шапка
     Для i=1 По Метаданные.Документ(Документ).РеквизитШапки() Цикл
          Ж=Метаданные.Документ(Документ).РеквизитШапки(i);
          Если ФлагПредставление=0 Тогда
               Представление=Ж.Идентификатор;
          Иначе
               Представление=Ж.Представление();
          КонецЕсли;
          Список.ДобавитьЗначение(Ж.Идентификатор,"Ш: "+Представление);
     КонецЦикла;
     //многострочка
     Для i=1 По Метаданные.Документ(Документ).РеквизитТабличнойЧасти() Цикл
          Ж=Метаданные.Документ(Документ).РеквизитТабличнойЧасти(i);
          Если ФлагПредставление=0 Тогда
               Представление=Ж.Идентификатор;
          Иначе
               Представление=Ж.Представление();
          КонецЕсли;
          Список.ДобавитьЗначение(Ж.Идентификатор,"Т: "+Представление);
     КонецЦикла;
     //общий
     Для i=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
          Ж=Метаданные.ОбщийРеквизитДокумента(i);
          Если ФлагПредставление=0 Тогда
               Представление=Ж.Идентификатор;
          Иначе
               Представление=Ж.Представление();
          КонецЕсли;
          Список.ДобавитьЗначение(Ж.Идентификатор,"О: "+Представление);
     КонецЦикла;
КонецПроцедуры

Эпилог

В статье описаны методы работы с метаданными системы "1С:Предприятие 7.7". Образцы практического применения описанных методов Вы сможете найти в статьях "Отчёты для 1С" и "Обработки для 1С".

Совет:
Файл синтаксис-помощника с описанием недокументированных методов работы с метаданными системы "1С:Предприятие", составленный под редакцией Моисеенко, можно скачать здесь.
Реклама:
Смотрите также:
Обработки для 1С
Отчёты для 1С
Скачать программы для 1С