Заполнить дополнительные реквизиты форме. Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств.
// Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере.
//
// Объект - Неопределено - взять объект из реквизита формы "Объект".
// - Объект - СправочникОбъект, ДокументОбъект, ..., ДанныеФормыСтруктура (по типу объекта).
//
// ПоляНадписей - Булево - если указать Истина, то вместо полей ввода на форме будут созданы поля надписей.
//
// СкрытьУдаленные - Неопределено - не менять текущий режим скрытия удаленных, установленный ранее.
// - Булево - установить/отключить режим скрытия удаленных.
// При вызове процедуры ПередЗаписьюНаСервере в режиме скрытия удаленных, удаленные значения
// очищаются (не переносятся обратно в объект), а режим СкрытьУдаленные устанавливается Ложь.
//
Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено, ПоляНадписей = Ложь, СкрытьУдаленные = Неопределено) Экспорт
Если НЕ Форма.Свойства_ИспользоватьСвойства
ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(СкрытьУдаленные) = Тип("Булево") Тогда
Форма.Свойства_СкрытьУдаленные = СкрытьУдаленные;
КонецЕсли;
Если Объект = Неопределено Тогда
ОписаниеОбъекта = Форма.Объект;
Иначе
ОписаниеОбъекта = Объект;
КонецЕсли;
Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта = Новый СписокЗначений;
КлючНазначения = Неопределено;
НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(
ОписаниеОбъекта, КлючНазначения);
УправлениеСвойствамиСлужебный.ЗаполнитьНаборыСДополнительнымиРеквизитами(
НаборыСвойствОбъекта,
Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта);
ОбновитьКлючНазначенияФормы(Форма, КлючНазначения);
ОписаниеСвойств = УправлениеСвойствамиСлужебный.ЗначенияСвойств(
ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(),
Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта,
Ложь);
ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение");
ОписаниеСвойств.Колонки.Добавить("СтрокаСсылочногоТипа");
ОписаниеСвойств.Колонки.Добавить("ИмяСсылочногоРеквизитаЗначение");
ОписаниеСвойств.Колонки.Добавить("ИмяУникальнаяЧасть");
ОписаниеСвойств.Колонки.Добавить("ДополнительноеЗначение");
ОписаниеСвойств.Колонки.Добавить("Булево");
УдалитьСтарыеРеквизитыИЭлементы(Форма);
// Создание реквизитов.
ДобавляемыеРеквизиты = Новый Массив();
Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения;
СписокТипов = ТипЗначенияСвойства.Типы();
СтроковыйРеквизит = (СписокТипов.Количество() = 1) И (СписокТипов[0] = Тип("Строка"));
// Поддержка строк неограниченной длины.
ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку(
ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода);
Если ИспользоватьНеограниченнуюСтроку Тогда
ТипЗначенияСвойства = Новый ОписаниеТипов("Строка");
ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Строка"))
И ТипЗначенияСвойства.КвалификаторыСтроки.Длина = 0 Тогда
// Если нельзя использовать неограниченную строку, а в свойствах реквизита она неограниченная,
// то устанавливаем ограничение в 1024 символа.
ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения,
,,, Новый КвалификаторыСтроки(1024));
КонецЕсли;
ОписаниеСвойства.ИмяУникальнаяЧасть =
СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x")
+ "_"
+ СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x");
ОписаниеСвойства.ИмяРеквизитаЗначение =
"ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
ОписаниеСвойства.СтрокаСсылочногоТипа = Ложь;
Если СтроковыйРеквизит
И Не ИспользоватьНеограниченнуюСтроку
И ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
ФорматированнаяСтрока = Новый ОписаниеТипов("ФорматированнаяСтрока");
ОписаниеСвойства.СтрокаСсылочногоТипа = Истина;
ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение = "СсылочныйДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
ДобавляемыеРеквизиты.Добавить(Реквизит);
КонецЕсли;
Если ОписаниеСвойства.Удалено Тогда
ТипЗначенияСвойства = Новый ОписаниеТипов("Строка");
КонецЕсли;
Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ОписаниеСвойства.ДополнительноеЗначение =
УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства);
ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево"));
КонецЦикла;
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
// Создание элементов формы.
Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения;
Если ТипЗнч(ИмяЭлементаДляРазмещения) <> Тип("СписокЗначений") Тогда
Если ИмяЭлементаДляРазмещения = Неопределено Тогда
ИмяЭлементаДляРазмещения = "";
КонецЕсли;
ЭлементРазмещения = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]);
Иначе
РазделыДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения;
РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению(ОписаниеСвойства.Набор);
Если РазмещениеНабора = Неопределено Тогда
РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению("ВсеОстальные");
КонецЕсли;
ЭлементРазмещения = Форма.Элементы[РазмещениеНабора.Представление];
КонецЕсли;
ФормаОписаниеСвойства = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить();
ЗаполнитьЗначенияСвойств(ФормаОписаниеСвойства, ОписаниеСвойства);
// Заполнение таблицы зависимых дополнительных реквизитов.
Если ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.Количество() > 0
И Не ОписаниеСвойства.Удалено Тогда
ОписаниеЗависимогоРеквизита = Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Добавить();
ЗаполнитьЗначенияСвойств(ОписаниеЗависимогоРеквизита, ОписаниеСвойства);
КонецЕсли;
Для Каждого СтрокаТаблицы Из ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов Цикл
Если СтрокаТаблицы.ЗависимоеСвойство = "ЗаполнятьОбязательно"
И ОписаниеСвойства.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда
Продолжить;
КонецЕсли;
Если ОписаниеСвойства.Удалено Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(СтрокаТаблицы.Реквизит) = Тип("Строка") Тогда
ПутьКРеквизиту = "Параметры.ОписаниеОбъекта." + СтрокаТаблицы.Реквизит;
Иначе
ОписаниеДополнительногоРеквизита = ОписаниеСвойств.Найти(СтрокаТаблицы.Реквизит, "Свойство");
Если ОписаниеДополнительногоРеквизита = Неопределено Тогда
Продолжить; // Дополнительный реквизит не существует, условие игнорируется.
КонецЕсли;
ПутьКРеквизиту = "Параметры.Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение;
КонецЕсли;
// Преобразование старого условия для обратной совместимости.
УсловиеЧастями = СтрРазделить(СтрокаТаблицы.Условие, " ");
НовоеУсловие = "";
Если УсловиеЧастями.Количество() > 0 Тогда
Для Каждого ЧастьУсловия Из УсловиеЧастями Цикл
НовоеУсловие = НовоеУсловие + ВРег(Лев(ЧастьУсловия, 1)) + Сред(ЧастьУсловия, 2);
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(НовоеУсловие) Тогда
СтрокаТаблицы.Условие = НовоеУсловие;
КонецЕсли;
ШаблонУсловия = "";
Если СтрокаТаблицы.Условие = "Равно" Тогда
ШаблонУсловия = "%1 = %2";
ИначеЕсли СтрокаТаблицы.Условие = "НеРавно" Тогда
ШаблонУсловия = "%1 <> %2";
КонецЕсли;
Если СтрокаТаблицы.Условие = "ВСписке" Тогда
ШаблонУсловия = "%2.НайтиПоЗначению(%1) <> Неопределено"
ИначеЕсли СтрокаТаблицы.Условие = "НеВСписке" Тогда
ШаблонУсловия = "%2.НайтиПоЗначению(%1) = Неопределено"
КонецЕсли;
ПравоеЗначение = "";
Если ЗначениеЗаполнено(ШаблонУсловия) Тогда
ПравоеЗначение = "Параметры.ЗначенияПараметров[""" + ПутьКРеквизиту + """]";
КонецЕсли;
Если СтрокаТаблицы.Условие = "Заполнено" Тогда
ШаблонУсловия = "ЗначениеЗаполнено(%1)";
ИначеЕсли СтрокаТаблицы.Условие = "НеЗаполнено" Тогда
ШаблонУсловия = "Не ЗначениеЗаполнено(%1)";
КонецЕсли;
Если ЗначениеЗаполнено(ПравоеЗначение) Тогда
КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту, ПравоеЗначение);
Иначе
КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту);
КонецЕсли;
Если СтрокаТаблицы.ЗависимоеСвойство = "Доступен" Тогда
УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеДоступности, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие);
ИначеЕсли СтрокаТаблицы.ЗависимоеСвойство = "Виден" Тогда
УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеВидимости, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие);
Иначе
УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие);
КонецЕсли;
КонецЦикла;
Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда
Если ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда
Значение = ОписаниеСвойства.ТипЗначения.ПривестиЗначение(ОписаниеСвойства.Значение);
СтрокаЗначение = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(Значение);
Иначе
Значение = НСтр("ru = 'не задано'");
СсылкаРедактирования = "НеЗадано";
СтрокаЗначение = Новый ФорматированнаяСтрока(Значение,, ЦветаСтиля.ЦветПустойГиперссылки,, СсылкаРедактирования);
КонецЕсли;
Форма[ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение] = СтрокаЗначение;
КонецЕсли;
Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение;
Если ОписаниеСвойства.Удалено И Форма.Свойства_СкрытьУдаленные Тогда
Продолжить;
КонецЕсли;
Если НаборыСвойствОбъекта.Количество() > 1 Тогда
ЭлементСписка = Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.НайтиПоЗначению(
ОписаниеСвойства.Набор);
Если ЭлементСписка <> Неопределено Тогда
Родитель = Форма.Элементы[ЭлементСписка.Представление];
Иначе
ОписаниеНабора = НаборыСвойствОбъекта.Найти(ОписаниеСвойства.Набор, "Набор");
Если ОписаниеНабора = Неопределено Тогда
ОписаниеНабора = НаборыСвойствОбъекта.Добавить();
ОписаниеНабора.Набор = ОписаниеСвойства.Набор;
ОписаниеНабора.Заголовок = НСтр("ru = 'Удаленные реквизиты'")
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОписаниеНабора.Заголовок) Тогда
ОписаниеНабора.Заголовок = Строка(ОписаниеСвойства.Набор);
КонецЕсли;
ИмяЭлементаНабора = "НаборДополнительныхРеквизитов" + ОписаниеСвойства.ИмяУникальнаяЧасть;
Родитель = Форма.Элементы.Добавить(ИмяЭлементаНабора, Тип("ГруппаФормы"), ЭлементРазмещения);
Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Добавить(
ОписаниеСвойства.Набор, Родитель.Имя);
Если ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы")
И ЭлементРазмещения.Вид = ВидГруппыФормы.Страницы Тогда
Родитель.Вид = ВидГруппыФормы.Страница;
Иначе
Родитель.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Родитель.Отображение = ОтображениеОбычнойГруппы.Нет;
КонецЕсли;
Родитель.ОтображатьЗаголовок = Ложь;
Родитель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ЗаполненныеСвойстваГруппы = Новый Структура;
Для каждого Колонка Из НаборыСвойствОбъекта.Колонки Цикл
Если ОписаниеНабора[Колонка.Имя] <> Неопределено Тогда
ЗаполненныеСвойстваГруппы.Вставить(Колонка.Имя, ОписаниеНабора[Колонка.Имя]);
КонецЕсли;
КонецЦикла;
ЗаполнитьЗначенияСвойств(Родитель, ЗаполненныеСвойстваГруппы);
КонецЕсли;
Иначе
Родитель = ЭлементРазмещения;
КонецЕсли;
Если ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
ИмяГруппыГиперссылки = "Группа_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
ГруппаГиперссылки = Форма.Элементы.Добавить(ИмяГруппыГиперссылки, Тип("ГруппаФормы"), Родитель);
ГруппаГиперссылки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаГиперссылки.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаГиперссылки.ОтображатьЗаголовок = Ложь;
ГруппаГиперссылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
ГруппаГиперссылки.Заголовок = ОписаниеСвойства.Наименование;
Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), ГруппаГиперссылки);
РеквизитДоступен = РеквизитДоступенПоФункциональнымОпциям(ОписаниеСвойства);
Если РеквизитДоступен И Не ПоляНадписей Тогда
ИмяКнопки = "Кнопка_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
Кнопка = Форма.Элементы.Добавить(
ИмяКнопки,
Тип("КнопкаФормы"),
ГруппаГиперссылки);
Кнопка.ТолькоВоВсехДействиях = Истина;
Кнопка.ИмяКоманды = "РедактироватьГиперссылкуРеквизита";
Кнопка.ОтображениеФигуры = ОтображениеФигурыКнопки.ПриАктивности;
КонецЕсли;
Если Не ОписаниеСвойства.СтрокаСсылочногоТипа И ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда
Элемент.Гиперссылка = Истина;
КонецЕсли;
Иначе
Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель);
КонецЕсли;
ФормаОписаниеСвойства.ЭлементФормыДобавлен = Истина;
Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда
Элемент.Вид = ВидПоляФормы.ПолеФлажка;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
Иначе
Если ПоляНадписей Тогда
Элемент.Вид = ВидПоляФормы.ПолеВвода;
ИначеЕсли ОписаниеСвойства.ВыводитьВВидеГиперссылки
И (ОписаниеСвойства.СтрокаСсылочногоТипа
Или ЗначениеЗаполнено(ОписаниеСвойства.Значение))Тогда
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.АвтоОтметкаНезаполненного = ОписаниеСвойства.ЗаполнятьОбязательно И НЕ ОписаниеСвойства.Удалено;
КонецЕсли;
Элемент.РастягиватьПоВертикали = Ложь;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;
КонецЕсли;
Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда
Элемент.ПутьКДанным = ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение;
Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_СвойстваВыполнитьКоманду");
Иначе
Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение;
КонецЕсли;
Элемент.Подсказка = ОписаниеСвойства.Подсказка;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита");
Если Элемент.Вид = ВидПоляФормы.ПолеВвода
И Не ИспользоватьНеограниченнуюСтроку
И ОписаниеСвойства.ТипЗначения.Типы().Найти(Тип("Строка")) <> Неопределено Тогда
Элемент.СвязьПоТипу = Новый СвязьПоТипу("Свойства_ОписаниеДополнительныхРеквизитов.Свойство",
ОписаниеСвойств.Индекс(ОписаниеСвойства));
КонецЕсли;
Если ОписаниеСвойства.МногострочноеПолеВвода > 0 Тогда
Если НЕ ПоляНадписей Тогда
Элемент.МногострочныйРежим = Истина;
КонецЕсли;
Элемент.Высота = ОписаниеСвойства.МногострочноеПолеВвода;
КонецЕсли;
Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства)
И Не ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
Если ПоляНадписей Тогда
Элемент.Формат = ОписаниеСвойства.ФорматСвойства;
Иначе
ФорматнаяСтрока = "";
Массив = СтрРазделить(ОписаниеСвойства.ФорматСвойства, ";", Ложь);
Для каждого Подстрока Из Массив Цикл
Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда
Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда
Подстрока = СтрЗаменить(Подстрока, "ддд", "дд");
Подстрока = СтрЗаменить(Подстрока, "ddd", "dd");
КонецЕсли;
Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда
Подстрока = СтрЗаменить(Подстрока, "дддд", "дд");
Подстрока = СтрЗаменить(Подстрока, "dddd", "dd");
КонецЕсли;
Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда
Подстрока = СтрЗаменить(Подстрока, "МММ", "ММ");
Подстрока = СтрЗаменить(Подстрока, "MMM", "MM");
КонецЕсли;
Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда
Подстрока = СтрЗаменить(Подстрока, "ММММ", "ММ");
Подстрока = СтрЗаменить(Подстрока, "MMMM", "MM");
КонецЕсли;
КонецЕсли;
Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда
Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда
Подстрока = СтрЗаменить(Подстрока, "ДД", "Д");
Подстрока = СтрЗаменить(Подстрока, "DD", "D");
КонецЕсли;
КонецЕсли;
ФорматнаяСтрока = ФорматнаяСтрока + ?(ФорматнаяСтрока = "", "", ";") + Подстрока;
КонецЦикла;
Элемент.Формат = ФорматнаяСтрока;
Элемент.ФорматРедактирования = ФорматнаяСтрока;
КонецЕсли;
КонецЕсли;
Если ОписаниеСвойства.Удалено Тогда
Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет;
Элемент.ШрифтЗаголовка = ШрифтыСтиля.УдаленныйДополнительныйРеквизитШрифт;
Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
Элемент.КнопкаОчистки = Истина;
Элемент.КнопкаВыбора = Ложь;
Элемент.КнопкаОткрытия = Ложь;
Элемент.КнопкаВыпадающегоСписка = Ложь;
Элемент.РедактированиеТекста = Ложь;
КонецЕсли;
КонецЕсли;
Если НЕ ПоляНадписей И ОписаниеСвойства.ДополнительноеЗначение И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
ПараметрыВыбора = Новый Массив;
ПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Владелец",
?(ЗначениеЗаполнено(ОписаниеСвойства.ВладелецДополнительныхЗначений),
ОписаниеСвойства.ВладелецДополнительныхЗначений, ОписаниеСвойства.Свойство)));
Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора);
КонецЕсли;
КонецЦикла;
// Установка видимости, доступности и обязательности заполнения дополнительных реквизитов.
Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл
Если ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки Тогда
ОбрабатываемыйЭлемент = СтрЗаменить(ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение, "ДополнительныйРеквизитЗначение_", "Группа_");
Иначе
ОбрабатываемыйЭлемент = ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение;
КонецЕсли;
Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда
Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеДоступности);
Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
Если Элемент.Доступность <> Результат Тогда
Элемент.Доступность = Результат;
КонецЕсли;
КонецЕсли;
Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда
Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеВидимости);
Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
Если Элемент.Видимость <> Результат Тогда
Элемент.Видимость = Результат;
КонецЕсли;
КонецЕсли;
Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено Тогда
Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно
Или Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение].Вид = ВидПоляФормы.ПолеВвода Тогда
Продолжить;
КонецЕсли;
Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения);
Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
Если Не ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки
И Элемент.АвтоОтметкаНезаполненного <> Результат Тогда
Элемент.АвтоОтметкаНезаполненного = Результат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Структура = Новый Структура("ПараметрыСвойств");
ЗаполнитьЗначенияСвойств(Структура, Форма);
Если ТипЗнч(Структура.ПараметрыСвойств) = Тип("Структура")
И Структура.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") Тогда
Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация = Истина;
// Удаление временной декорации, если она была добавлена.
Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда
Для Каждого ИмяДекорации Из Форма.ПараметрыСвойств.КоллекцияДекораций Цикл
Форма.Элементы.Удалить(Форма.Элементы[ИмяДекорации]);
КонецЦикла;
Форма.ПараметрыСвойств.Удалить("ДобавленаПустаяДекорация");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ЗаполнитьНаборыСДополнительнымиРеквизитами (БСП)
ЗаполнитьЗначениеРеквизитаУпорядочивания (БСП)
ПослеЗагрузкиДополнительныхРеквизитов (БСП)
ОбновитьЭлементыДополнительныхРеквизитов (БСП)
ЗаполнитьКоллекциюЭлементовДереваДанныхФормы (БСП)
ЗаполнитьПрофильРедактированиеПечатныхФорм (БСП)
ЗаполнитьДополнительныеДанныеФайла (БСП)
Групповое изменение реквизитов, вытащить дополнительный реквизит
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)