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