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