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