В этой статье описываются методы работы с метаданными системы "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С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua