Как программно добавить новый реквизит формы и элемент формы для этого реквизита из Общего модуля

1. user1053017 20.09.18 04:06 Сейчас в теме
Есть форма документа ("Приходная накладная) с табличной частью ("Запасы"), из модуля формы можно добавить новые реквизиты формы и элементы табличной части с помощью следующего кода:

НовыеРеквизиты = Новый Массив;

НовыйРеквизит = Новый РеквизитФормы("м2", Новый ОписаниеТипов("Число"),"Объект.Запасы", "м2");
НовыйРеквизит2 = Новый РеквизитФормы("м3", Новый ОписаниеТипов("Число"),"Объект.Запасы", "м3");

НовыеРеквизиты.Добавить(НовыйРеквизит);
НовыеРеквизиты.Добавить(НовыйРеквизит2);
ИзменитьРеквизиты(НовыеРеквизиты);
	
НовыйЭлемент = Элементы.Вставить("м2", Тип("ПолеФормы"), Элементы.Запасы, Элементы.Запасы.ПодчиненныеЭлементы.ЗапасыЦена);
НовыйЭлемент.ПутьКДанным = "Объект.Запасы.м2";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
	
НовыйЭлемент2 = Элементы.Вставить("м3", Тип("ПолеФормы"), Элементы.Запасы,Элементы.Запасы.ПодчиненныеЭлементы.ЗапасыЦена);
НовыйЭлемент2.ПутьКДанным = "Объект.Запасы.м3";
НовыйЭлемент2.Вид = ВидПоляФормы.ПолеВвода;
Показать


Так как в дальнейшем планируется добавлять эти реквизиты и элементы в формы разных однотипных документов, как можно вынести их создание в общий модуль, и в последствии вызывать просто процедуру или функцию в модуле форм?
request4t; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 10 20.09.18 07:08 Сейчас в теме
(1) Если конфигурация несамописная, то нужно найти общий модуль МодификацияКонфигурацииПереопределяемый.

В нем есть процедура ПриСозданииНаСервере

В ней пишете

Если Форма.ИмяФормы = "Документ.ЗаказКлиента.Форма.ФормаДокумента"  ИЛИ Форма.ИмяФормы = "МояЕще1Форма"Тогда

НовыеРеквизиты = Новый Массив;

НовыйРеквизит = Новый РеквизитФормы("м2", Новый ОписаниеТипов("Число"),"Объект.Запасы", "м2");
НовыйРеквизит2 = Новый РеквизитФормы("м3", Новый ОписаниеТипов("Число"),"Объект.Запасы", "м3");

НовыеРеквизиты.Добавить(НовыйРеквизит);
НовыеРеквизиты.Добавить(НовыйРеквизит2);
Форма.ИзменитьРеквизиты(НовыеРеквизиты);

НовыйЭлемент = Форма.Элементы.Вставить("м2", Тип("ПолеФормы"), Форма.Элементы.Запасы, Форма.Элементы.Запасы.ПодчиненныеЭлементы.ЗапасыЦена);
НовыйЭлемент.ПутьКДанным = "Объект.Запасы.м2";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    
НовыйЭлемент2 = Форма.Элементы.Вставить("м3", Тип("ПолеФормы"), Форма.Элементы.Запасы,Форма.Элементы.Запасы.ПодчиненныеЭлементы.ЗапасыЦена);
НовыйЭлемент2.ПутьКДанным = "Объект.Запасы.м3";
НовыйЭлемент2.Вид = ВидПоляФормы.ПолеВвода;

КонецЕсли
Показать
3. SlavaKron 20.09.18 08:45 Сейчас в теме
(2)
МодификацияКонфигурацииПереопределяемый

Видел этот модуль в УТ 11, но в БСП (БП 3.0, ЗУП 3.1) такого модуля нет, а значит не универсально. Вот что точно есть в каждой типовой, так это подсистема ПодключаемыеКоманды - почти на каждой форме при создании на сервере вызывается
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения).

И самое главное, можно добавлять свои команды, кнопки без изменения модуля/макета формы, так как во всех модулях форм есть "форточка":
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

Для модификации типовых форм без внесения в них изменений оптимальнее всего использовать эту подсистему.
ixijixi; bohdan-k; ZeroSumGame; +3 Ответить
4. dandykry 10 20.09.18 09:16 Сейчас в теме
(3) Хорошо, если нет МодификацияКонфигурацииПереопределяемый то СобытияФорм есть.
Вообще вроде во всех свежих типовых видел.

ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения).


Как-то многовато телодвижений в этой процедуре для создания 2 реквизитов и элементов, не находите?. Она нагруженная из-за универсальности.

К чему вы привели клиентский метод я вообще не понимаю. Просто похвастались знаниями видимо.
5. SlavaKron 20.09.18 09:31 Сейчас в теме
(4)
СобытияФорм есть

нет

Как-то многовато телодвижений в этой процедуре

Вы не поняли, телодвижения в этой процедуре нас вообще не касаются. Вы делаете одну врезку в типовой модуль ПодключаемыеКоманды, чтобы получить доступ к событию ПриСозданииНаСервере почти любой типовой формы.

К чему вы привели клиентский метод я вообще не понимаю.

Просто добавить реквизиты/элементы - это хорошо, но часто требуется обрабатывать их события, а для этого необходимо иметь клиентскую процедуру, которая есть в каждой форме. Опять же потребуется одна врезка в модуль ПодключаемыеКомандыКлиент.
6. dandykry 10 20.09.18 09:35 Сейчас в теме
(5) ну собственно я понял вас. Тоже вариант. оптимальнее или нет, над проверять
7. bmk74 234 20.09.18 12:04 Сейчас в теме
(6)Я в ерп вообще сделал добавление элементов и реквизитов на формы через макет, в макете просто прописываются наименование и тип реквизитов элементов, имена обработчиков,все остальное делает код в общем модуле...
8. lishniy 132 10.12.18 10:04 Сейчас в теме
Подскажите, а как правильно заполнять и сохранять данные реквизита, допустим из/в регистр сведений?
Просто процедура ПриЧтенииНаСервере вызывается перед созданием, то есть до того как есть новый реквизит, а в ПриСозданииНаСервере не передается объект.
При записи тоже засада. Подписка на событие "перед записью"/"При записи" не подходит, так как нужна форма, а туда передается только объект.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот