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

  1. Андрей 28.03.2016 в 11:21

    1. Для работы со складами, в документы добавил следующие процедуры:

    В документ ПоступлениеТоваровИУслуг:

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
       
        Если ЗначениеЗаполнено(Объект.Организация) Тогда
            Элементы.Склад.Видимость = Объект.Организация.ВестиУчетПоСкладам;     
        Иначе
            Элементы.Склад.Видимость = Ложь;
        КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ОрганизацияПриИзменении(Элемент)
            Элементы.Склад.Видимость = Объект.Организация.ВестиУчетПоСкладам;     
    КонецПроцедуры

    В документ РеализацияТоваровИУслуг:

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
        Если ЗначениеЗаполнено(Объект.Организация) Тогда
            Элементы.Товары.ПодчиненныеЭлементы.ТоварыСклад.Видимость = Объект.Организация.ВестиУчетПоСкладам;        
        Иначе
            Элементы.Товары.ПодчиненныеЭлементы.ТоварыСклад.Видимость = Ложь;
        КонецЕсли;
    КонецПроцедуры

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

    2. Создал обработку Метаданные документа

    В форме добавил реквизит для выбора любого вида документа, в модуле формы следующий код:

    &НаКлиенте
    Процедура ВывестиДанные(Команда)
        СобратьИнформациюНаСервере(Объект.ДокументДляРазбора);
    КонецПроцедуры

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

    &НаСервере
    Процедура ВывестиСтроки(Дерево, Имя, Таблица)
       
        СтрокаР1 = Дерево.Строки.Добавить();
        СтрокаР1.Данные = Имя;

        Для каждого Строка Из Таблица Цикл
       
            СтрокаР2 = СтрокаР1.Строки.Добавить();
            СтрокаР2.Данные = Строка;
       
        КонецЦикла;
       
    КонецПроцедуры

    &НаСервере
    Процедура ВывестиСтрокиТабличныхЧастей(Дерево, Имя, Таблица)
       
        СтрокаР1 = Дерево.Строки.Добавить();
        СтрокаР1.Данные = Имя;

        Для каждого Строка Из Таблица Цикл
       
            СтрокаР2 = СтрокаР1.Строки.Добавить();
            СтрокаР2.Данные = Строка;   
           
            ВывестиСтроки(СтрокаР2, "Реквизиты", Строка.Реквизиты);
           
        КонецЦикла;
       
    КонецПроцедуры

    &НаСервере
    Процедура СобратьИнформациюНаСервере(ДокументДляРазбора)

        ДеревоОбъект = Новый ДеревоЗначений;
       
        МетаДанныеДок = ДокументДляРазбора.ПолучитьОбъект().Метаданные();       
        ДеревоОбъект.Колонки.Добавить("Данные", Новый ОписаниеТипов("Строка"));
       
        ВывестиСтроки(ДеревоОбъект, "Реквизиты", МетаДанныеДок.Реквизиты);
        ВывестиСтроки(ДеревоОбъект, "Формы", МетаДанныеДок.Формы);
        ВывестиСтрокиТабличныхЧастей(ДеревоОбъект, "Табличные части", МетаДанныеДок.ТабличныеЧасти);

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

        ЗначениеВРеквизитФормы(ДеревоОбъект, "Дерево");

        ЭлементДерево = Элементы.Добавить("Дерево", Тип("ТаблицаФормы"));
        ЭлементДерево.ПутьКДанным = "Дерево";
        ЭлементДерево.Отображение = ОтображениеТаблицы.Дерево;

        Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл
                НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ЭлементДерево);
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
            НовыйЭлемент.ПутьКДанным = "Дерево." + Колонка.Имя;
        КонецЦикла;
       
    КонецПроцедуры // СобратьИнформациюНаСервере()