&НаСервере
Процедура хот_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
НоваяКоманда = ЭтаФорма.Команды.Добавить("СкопироватьСвойство");
НоваяКоманда.Заголовок = "+";
НоваяКоманда.Действие = "хот_СкопироватьСвойство";
НоваяКоманда = ЭтаФорма.Команды.Добавить("УдалитьСвойство");
НоваяКоманда.Заголовок = "-";
НоваяКоманда.Действие = "хот_УдалитьСвойство";
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если НЕ стрДополнительногоРеквизита.Свойство.МножественныйРеквизит Тогда
Продолжить;
КонецЕсли;
Если Элементы.Найти("КнопкаСкопироватьСвойство") = Неопределено Тогда
НоваяКнопка = Элементы.Добавить("КнопкаСкопироватьСвойство", Тип("КнопкаФормы"), Элементы.Найти("ГруппаДополнительныеРеквизитыКнопки"));
НоваяКнопка.ИмяКоманды = "СкопироватьСвойство";
КонецЕсли;
КонецЦикла;
спМножественныхСвойств = ПолучитьСписокМножественныхСвойств();
Если спМножественныхСвойств.Количество() > 0 Тогда
НоваяКнопка = Элементы.Добавить("КнопкаУдалитьСвойство", Тип("КнопкаФормы"), Элементы.Найти("ГруппаДополнительныеРеквизитыКнопки"));
НоваяКнопка.ИмяКоманды = "УдалитьСвойство";
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьСписокМножественныхСвойств()
спМножественныхСвойств = Новый СписокЗначений;
вт_Свойства = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.Выгрузить();
вт_Свойства.Колонки.Добавить("Счетчик");
вт_Свойства.ЗаполнитьЗначения(1, "Счетчик");
вт_Свойства.Свернуть("Свойство", "Счетчик");
Для Каждого стрСвойство из вт_Свойства Цикл
Если стрСвойство.Счетчик > 1 Тогда
спМножественныхСвойств.Добавить(стрСвойство.Свойство);
конецЕсли
КонецЦикла;
Возврат спМножественныхСвойств;
КонецФункции
&НаСервере
Функция ПолучитьСписокМножественныхСвойствВсе()
спМножественныхСвойств = Новый СписокЗначений;
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если НЕ спМножественныхСвойств.НайтиПоЗначению(стрДополнительногоРеквизита.Свойство) = Неопределено Тогда
Продолжить;
КонецЕсли;
Если стрДополнительногоРеквизита.Свойство.МножественныйРеквизит Тогда
спМножественныхСвойств.Добавить(стрДополнительногоРеквизита.Свойство);
КонецЕсли;
КонецЦикла;
Возврат спМножественныхСвойств;
КонецФункции
&НаКлиенте
Процедура хот_СкопироватьСвойство()
спМножественныхСвойств = ПолучитьСписокМножественныхСвойствВсе();
Оповещение = Новый ОписаниеОповещения("хот_ПослеВыбораИзМеню", ЭтотОбъект);
ПоказатьВыборИзМеню(Оповещение, спМножественныхСвойств, Элементы.КнопкаСкопироватьСвойство);
КонецПроцедуры
&НаКлиенте
Процедура хот_УдалитьСвойство()
//Список свойств, для которых есть несколько значений
спМножественныхСвойств = ПолучитьСписокМножественныхСвойств();
спМножественныхСвойствВыбор = Новый СписокЗначений;
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если спМножественныхСвойств.НайтиПоЗначению(стрДополнительногоРеквизита.Свойство) = Неопределено Тогда
Продолжить;
КонецЕсли;
спМножественныхСвойствВыбор.Добавить(стрДополнительногоРеквизита, СокрЛП(стрДополнительногоРеквизита.Свойство) + " " + СокрЛП(ЭтаФорма[стрДополнительногоРеквизита.ИмяРеквизитаЗначение]));
КонецЦикла;
Оповещение = Новый ОписаниеОповещения("хот_ПослеВыбораИзМенюУдалитьСвойство", ЭтотОбъект);
ПоказатьВыборИзМеню(Оповещение, спМножественныхСвойствВыбор, Элементы.КнопкаУдалитьСвойство);
КонецПроцедуры
&НаКлиенте
Процедура хот_ПослеВыбораИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
хот_ДобавитьРеквизиты(ВыбранныйЭлемент.Значение)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура хот_ПослеВыбораИзМенюУдалитьСвойство(ВыбранныйЭлемент, Параметры) Экспорт
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
УдалитьСвойство(ВыбранныйЭлемент.Значение.ИмяРеквизитаЗначение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьСвойство(ИмяРеквизитаЗначение)
Элементы.Удалить(Элементы.Найти(ИмяРеквизитаЗначение));
НайденныеСтроки = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("ИмяРеквизитаЗначение", ИмяРеквизитаЗначение));
Для Каждого стрСвойство Из НайденныеСтроки Цикл
ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.Удалить(стрСвойство);
КонецЦикла;
Конецпроцедуры
&НаСервере
Процедура хот_ДобавитьРеквизиты(ДопРеквизит)
ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если стрДополнительногоРеквизита.Свойство = ДопРеквизит Тогда
ОписаниеТипа = стрДополнительногоРеквизита.ТипЗначения;
Прервать;
КонецЕсли;
КонецЦикла;
ИмяРеквизита = СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки("ДополнительныйРеквизит_" + Строка(Новый УникальныйИдентификатор));
лСвойство = ДопРеквизит;
лМассив = Новый Массив;
лМассив.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипа,,ДопРеквизит.Наименование, Истина));
ИзменитьРеквизиты(лМассив);
НовЭлемент = Элементы.Вставить(ИмяРеквизита, Тип("ПолеФормы"), Элементы.Найти("ГруппаДополнительныеРеквизиты"));
НовЭлемент.ПутьКДанным = ИмяРеквизита;
НовЭлемент.Вид = ВидПоляФормы.ПолеВвода;
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.Владелец", лСвойство));
Элементы[ИмяРеквизита].ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
ДобавитьСвойство(ЭтаФорма, ИмяРеквизита, лСвойство);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ДобавитьСвойство(лФорма, ИмяРеквизита, Свойство)
лШаблон = лФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("Свойство", Свойство));
НовоеСвойство = лФорма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить();
Если лШаблон.Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(НовоеСвойство, лШаблон[0]);
НовоеСвойство.ИмяРеквизитаЗначение = ИмяРеквизита;
КонецЕсли;
КонецПроцедуры
|