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