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.Структура = Макет.Имя;
КонецЦикла;
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
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.Структура = Макет.Имя;
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоМетаДокумента, "МетаСтруктура");
КонецПроцедуры // ЗаполнитьСтруктуруНаСервере()()
&НаКлиенте
Процедура МетаДокументПриИзменении(Элемент)
ЗаполнитьСтруктуруНаСервере();
КонецПроцедуры