Предназначена для динамического формирования интерфейса. Также используется в случае изменения типовых форм. Предназначена для динамического формирования интерфейса. Также использовать в случае изменения типовых форма.
- Общий модуль пбп_МодификацияКонфигурацииПереопределяемый используется для маршрутизации из серверных процедур (напр. ПриСозданииНаСервере) по дополнительным модулям разбитым по объектам (напр. пбп_МодификацияКонфигурацииПереопределяемыйДокумент). В сам модуль пбп_МодификацияКонфигурацииПереопределяемый могут добавляться обработчики событий которых нет изначально.
- Для вызова общего модуля пбп_МодификацияКонфигурацииПереопределяемый:
- В случае если в типовой форме которую нужно программно изменить есть в обработчике события вызов типового общего модуля МодификацияКонфигурацииПереопределяемый или СобытияФорм, то необходимо добавить в общий модуль пбп_ОбщегоНазначенияПовтИсп соответствие в нужную функцию (напр. ФормыПриСозданииНаСервере)
- В случае если в типовой форме отсутствуют данные вызовы типовых модулей, то необходимо вызывать сразу общий модуль пбп_МодификацияКонфигурацииПереопределяемый через добавление в расширение обработчика события После.
- В переопределяемом общем модуле для объекта (напр. пбп_МодификацияКонфигурацииПереопределяемыйДокумент) необходимо добавить процедуру-обработчик изменения (напр. ДокументАвансовыйОтчетФормаДокументаПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт)
- Использовать функции и процедуры общего модуля пбп_РаботаСФормами для уменьшения объема текста при добавлении элементов (напр. пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоДата", ГруппаНомерДата, "от", 1, "_ДемоДата"))
- В случае если для нужного типа объекта ещё не был создан общий модуль, создать его и добавить в подсистему пбп_МодификацияФорм
Проверка сущетсвует ли обработчик события в форме из которой была вызвана функция.
Порядок действий:
- Если в общем модуле пбп_МодификацияКонфигурации<директива>Переопределяемый нет функции СуществуетОбработчикСобытия, необходимо добавить согласно примеру ниже
Функция СуществуетОбработчикСобытия(ИмяФормы, Обработчик = "")
Если Обработчик = <ИмяПроверяемогоОбработчика> Тогда
Список = пбп_МодификацияКонфигурации<директива>ПовтИсп.СписокФорм<ИмяПроверяемогоОбработчика>();
КонецЕсли;
Возврат Список.Получить(ИмяФормы) <> Неопределено;
КонецФункции
- Создать в общем модуле пбп_МодификацияКонфигурации<директива>ПовтИсп функцию с именем СписокФорм<ИмяПроверяемогоОбработчика>. Дополнить соответствие строковым представлением формы (Форма.ИмяФормы) в области // Добавление
Функция СписокФорм<ИмяОбработчика>() Экспорт
СписокФорм = Новый Соответствие;
// Добавление
СписокФорм.Вставить("Документ.ДемоРаботаСФормами.Форма.ФормаДокумента", Истина);
СписокФорм.Вставить("ПланВидовХарактеристик.пбп_ПредопределенныеЗначения.Форма.ФормаСписка", Истина);
// КонецДобавления
Возврат Новый ФиксированноеСоответствие(СписокФорм);
КонецФункции
Пример вызова проверки из типового модуля конфигурации МодификацияКонфигурацииПереопределяемый:
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
Если пбп_МодификацияКонфигурацииПереопределяемый.СуществуетОбработчикСобытия(Форма.ИмяФормы, "ПриСозданииНаСервере") = Ложь Тогда
Возврат;
КонецЕсли;
пбп_МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
КонецПроцедуры
Пример вызова проверки в расширении, когда в типовой форме отсутствует вызов типового модуля МодификацияКонфигурацииПереопределяемый:
&После("ПриСозданииНаСервере")
Процедура пбп_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)
Если Отказ Тогда
Возврат;
КонецЕсли;
//Проверяем необходимо ли модифицировать данную форму
Если пбп_МодификацияКонфигурацииПереопределяемый.СуществуетОбработчикСобытия(Форма.ИмяФормы, "ПриСозданииНаСервере") Тогда
пбп_МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
Демо-пример использования методов общего модуля
#Область ДемоПример
#Область РаботаСРеквизитамиФормы
//
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("_ДемоДата", пбп_РаботаСФормами.ОписаниеТипаДатаВремя());
СтруктураРеквизитов.Вставить("_ДемоНомер", пбп_РаботаСФормами.ОписаниеТипаСтрока(11));
СтруктураРеквизитов.Вставить("_ДемоПокупатель", пбп_РаботаСФормами.ОписаниеТипаСправочник("_ДемоКонтрагенты"));
СтруктураРеквизитов.Вставить("_ДемоПлатнаяДоставка", пбп_РаботаСФормами.ОписаниеТипаБулево());
СтруктураРеквизитов.Вставить("_ДемоТолькоБудни", пбп_РаботаСФормами.ОписаниеТипаБулево());
СтруктураРеквизитов.Вставить("_ДемоПолКурьера", пбп_РаботаСФормами.ОписаниеТипаПеречисление("_ДемоПолФизическогоЛица"));
СтруктураРеквизитов.Вставить("_ДемоТовары", пбп_РаботаСФормами.ОписаниеТипаТаблицаЗначений());
СтруктураРеквизитов.Вставить("_ДемоКомментарий", пбп_РаботаСФормами.ОписаниеТипаСтрока(100));
пбп_РаботаСФормами.СоздатьРеквизиты(Форма, СтруктураРеквизитов);
// Реквизит таб. части.
СтруктураРеквизитовТабЧасти = Новый Структура;
СтруктураРеквизитовТабЧасти.Вставить("_ДемоТовар", пбп_РаботаСФормами.ОписаниеТипаСправочник("_ДемоНоменклатура"));
СтруктураРеквизитовТабЧасти.Вставить("_ДемоКоличество", пбп_РаботаСФормами.ОписаниеТипаЧисло(10));
СтруктураРеквизитовТабЧасти.Вставить("_ДемоЦена", пбп_РаботаСФормами.ОписаниеТипаЧисло(10,2));
СтруктураРеквизитовТабЧасти.Вставить("_ДемоУпаковать", пбп_РаботаСФормами.ОписаниеТипаБулево());
СтруктураРеквизитовТабЧасти.Вставить("_ДемоХрупкое", пбп_РаботаСФормами.ОписаниеТипаБулево());
пбп_РаботаСФормами.СоздатьРеквизитыТаблицы(Форма, "_ДемоТовары", СтруктураРеквизитовТабЧасти);
#КонецОбласти
#Область РаботаСГруппамиФормы
//
ГруппаШапка = пбп_РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаШапка", Форма, 3);
ГруппаШапкаЛевая = пбп_РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаШапкаЛевая", ГруппаШапка, 1);
ГруппаНомерДата = пбп_РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаНомерДата", ГруппаШапкаЛевая, 3);
ГруппаШапкаПравая = пбп_РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаШапкаПравая", ГруппаШапка, 1);
ГруппаСтраниц = пбп_РаботаСФормами.СоздатьГруппаСтраниц(Форма, "_ДемоГруппаСтраниц", Форма, 1, 1);
ГруппаТовары = пбп_РаботаСФормами.СоздатьСтраница(Форма, "_ДемоГруппаТовары", ГруппаСтраниц, "Товары",, 1, 1);
ГруппаЗаказы = пбп_РаботаСФормами.СоздатьСтраница(Форма, "_ДемоГруппаЗаказы", ГруппаСтраниц, "Заказы клиента",, 1, 1);
ГруппаПодвал = пбп_РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаПодвал", Форма, 3);
#КонецОбласти
#Область РаботаСЭлементамиФормы
//
НовыйЭлемент = пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоНомер", ГруппаНомерДата, "Номер", 1, "_ДемоНомер");
ШиринаПоля = пбп_РаботаСФормами.СтруктураСвойствРасположение(10,,, 10, Ложь,, Ложь);
ОсновныеНастройкиПоля = пбп_РаботаСФормами.СтруктураСвойствОсновные(,,,,,, Истина);
пбп_РаботаСФормами.УстановитьМножествоСтруктурСвойствЭлементу(НовыйЭлемент, ШиринаПоля, ОсновныеНастройкиПоля);
//
пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоДата", ГруппаНомерДата, "от", 1, "_ДемоДата");
пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоПокупатель", ГруппаШапкаЛевая, "Покупатель", 1, "_ДемоПокупатель");
пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоПлатнаяДоставка", ГруппаШапкаЛевая, "Платная доставка", 2, "_ДемоПлатнаяДоставка");
пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоПолКурьера", ГруппаШапкаПравая, "Пол курьера",1, "_ДемоПолКурьера");
пбп_РаботаСФормами.СоздатьПоле(Форма, "_ДемоКомментарий", ГруппаПодвал, "Комментарий", 1, "_ДемоКомментарий");
// Флажки
пбп_РаботаСФормами.СоздатьПолеФлажок(Форма, "ТолькоБудни", ГруппаШапкаЛевая, "Только будни", 3, "_ДемоТолькоБудни");
// Декорации
пбп_РаботаСФормами.СоздатьДекорацияКартинка(Форма, "_ДемоКартинкаЛоготип", ГруппаПодвал, "_ДемоРазделБизнесПроцессыИЗадачи");
пбп_РаботаСФормами.СоздатьДекорацияНадпись(Форма, "ИнформационнаяНадпись", ГруппаЗаказы, "Заказы по клиенту с начала года", 1);
НовыйЭлемент = пбп_РаботаСФормами.СоздатьДекорацияКартинка(Форма, "_ДемоBotFather", ГруппаПодвал, "BotFather");
ОсновныеНастройкиПоля = пбп_РаботаСФормами.СтруктураСвойствОсновные(,,,, Ложь);
пбп_РаботаСФормами.УстановитьМножествоСтруктурСвойствЭлементу(НовыйЭлемент, ОсновныеНастройкиПоля);
// Выпадающий список
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("Седан");
МассивЗначений.Добавить("Универсал");
МассивЗначений.Добавить("Грузовик");
МассивЗначений.Добавить("Метро");
пбп_РаботаСФормами.СоздатьВыпадающийСписок(Форма, "ВыборТС", ГруппаШапкаПравая, "Тип ТС", МассивЗначений);
// Переключатель
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("Обычная");
МассивЗначений.Добавить("Срочно");
МассивЗначений.Добавить("Вчера");
пбп_РаботаСФормами.СоздатьПереключатель(Форма, "СрочностьДоставки", ГруппаШапкаПравая, "Срочность", МассивЗначений, 1);
// Таблица формы
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("_ДемоТовар", "Товар");
СтруктураКолонок.Вставить("_ДемоКоличество", "Количество");
СтруктураКолонок.Вставить("_ДемоЦена", "Цена");
НовыйЭлемент = пбп_РаботаСФормами.СоздатьТаблицаФормы(Форма, "_ДемоТовары", ГруппаТовары, "_ДемоТовары", СтруктураКолонок);
ВысотаТаблицы = пбп_РаботаСФормами.СтруктураСвойствТаблицыФормы(,,,,,,, 4);
пбп_РаботаСФормами.УстановитьСвойстваЭлементу(НовыйЭлемент, ВысотаТаблицы);
// Колонки таблицы формы
ГруппаКолонки = пбп_РаботаСФормами.СоздатьГруппаКолонокТаблицыФормы(Форма, "_ДемоГруппаДополнительно", НовыйЭлемент, 2,,, "Дополнительно");
пбп_РаботаСФормами.СоздатьКолонкаТаблицыФормы(Форма, "_ДемоУпаковать", ГруппаКолонки, 2, "Упаковать", "_ДемоТовары._ДемоУпаковать");
пбп_РаботаСФормами.СоздатьКолонкаТаблицыФормы(Форма, "_ДемоХрупкое", ГруппаКолонки, 2, "Стекло", "_ДемоТовары._ДемоХрупкое");
// Динамический список
ТекстЗапроса = "ВЫБРАТЬ
| _ДемоСчетФактураПолученный.Ссылка КАК Ссылка,
| _ДемоСчетФактураПолученный.Номер КАК _ДемоНомер,
| _ДемоСчетФактураПолученный.Дата КАК _ДемоДата,
| _ДемоСчетФактураПолученный.Контрагент КАК _ДемоКонтрагент,
| _ДемоСчетФактураПолученный.Сумма КАК _ДемоСумма
|ИЗ
| Документ._ДемоСчетФактураПолученный КАК _ДемоСчетФактураПолученный
|ГДЕ
| _ДемоСчетФактураПолученный.Дата > &Дата";
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("Дата", НачалоГода(ТекущаяДатаСеанса()));
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("_ДемоДата", "");
СтруктураКолонок.Вставить("_ДемоНомер", "");
СтруктураКолонок.Вставить("_ДемоКонтрагент","Покупатель");
СтруктураКолонок.Вставить("_ДемоСумма", "");
НовыйЭлемент = пбп_РаботаСФормами.СоздатьДинамическийСписок(Форма, "_ДемоЗаказы", ГруппаЗаказы, ТекстЗапроса,
ПараметрыЗапроса,, СтруктураКолонок,,, Истина);
пбп_РаботаСФормами.УстановитьСвойстваЭлементу(НовыйЭлемент, ВысотаТаблицы);
#КонецОбласти
#Область РаботаСКомандами
//
пбп_РаботаСФормами.СоздатьКоманду(Форма, "КогдаОбед", НСтр("ru='Когда обед?'; en='When is lunch?'"), "ПодсказатьКогдаОбед");
пбп_РаботаСФормами.СоздатьКнопка(Форма, "КогдаОбед", ГруппаПодвал,, "КогдаОбед", 2);
пбп_РаботаСФормами.СоздатьКоманду(Форма, "СкрытьОтца", "Скрыть отца", "СкрытьОтца");
пбп_РаботаСФормами.СоздатьКнопка(Форма, "СкрытьОтца", ГруппаПодвал,, "СкрытьОтца", 1);
пбп_РаботаСФормами.СоздатьКоманду(Форма, "ПоказатьОтца", "Показать отца", "ПоказатьОтца");
пбп_РаботаСФормами.СоздатьКнопка(Форма, "ПоказатьОтца", ГруппаПодвал,, "ПоказатьОтца", 1);
#КонецОбласти
#КонецОбласти