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