Один Ответ на “Продвинутый курс. Занятие №3”

  1. Александр 03.12.2012 в 08:18

    1.Создал функциональную опцию ВестиУчетПоСкладам с хранением в одноименном реквизите справочника Организации и параметр функциональных опций Организация со ссылкой на одноименный справочник.
    В ФормахДокументов создал по две процедуры:

    &НаКлиенте
    Процедура ОрганизацияПриИзменении(Элемент)
        ПараметрыФО = Новый Структура("Организация",Объект.Организация);
        УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
    КонецПроцедуры

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        ПараметрыФО = Новый Структура("Организация",Объект.Организация);
        УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
    КонецПроцедуры

    2.В форме обработки “Метаданные документа” разместил код

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
       
        Для каждого Документ Из Метаданные.Документы Цикл
       
            Элементы.МетаДокумент.СписокВыбора.Добавить(Документ.Имя, Документ.Синоним); 
       
        КонецЦикла;
       
    КонецПроцедуры

    &НаСервере
    Процедура ДобавитьСтрокуВСтруктуруНаСервере(Реквизит, Строка)
        Для каждого ТипРеквизита Из Реквизит.Тип.Типы() Цикл
            Если Не ТипРеквизита = Тип("Дата")
                И Не ТипРеквизита = Тип("Число")
                И Не ТипРеквизита = Тип("Строка")
                И Не ТипРеквизита = Тип("Булево") Тогда
                Ссылка = Новый(ТипРеквизита);
                Для каждого СсылкаРеквизит Из Ссылка.Метаданные().Реквизиты Цикл
                    НоваяСтрока = Строка.Строки.Добавить();
                    НоваяСтрока.Структура = СсылкаРеквизит.Имя;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
    КонецПроцедуры   
       
    &НаСервере
    Процедура ЗаполнитьСтруктуруНаСервере()

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

    КонецПроцедуры // ЗаполнитьСтруктуруНаСервере()()


    &НаКлиенте
    Процедура МетаДокументПриИзменении(Элемент)
       
        ЗаполнитьСтруктуруНаСервере();
       
    КонецПроцедуры