Задать вопрос
@ITF

Почему не работает процедура общего модуля в 1С расширении (Хочу передавать реквизиты формы)?

Изначально задача такая: на форме есть реквизиты, мне нужно обрабатывать их значения в модулях объекта и менеджера. Например использовать при формировании движений по регистрам.

Варианты которые нашел в интернете:
1. Создавать глобальные переменные для их хранения
2. Создать у объекта реквизит и сохранять их все туда, например в JSON
3. Передавать через ДополнительныеСвойства объекта - решил что это самый адекватный способ.

Так у меня работает сначала в модуле формы сохраняю доп. свойства, потом в модуле менеджера передаю объект и читаю его доп. свойства.
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)		
	ТекущийОбъект.ДополнительныеСвойства.Вставить("Реквизит1", ЭтаФорма.Реквизит1);
	ТекущийОбъект.ДополнительныеСвойства.Вставить("Реквизит2", ЭтаФорма.Реквизит2);
КонецПроцедуры


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


А модуль формы изменил следующим образом:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	РеквизитыФормы = Новый Массив;
		РеквизитыФормы.Добавить("Реквизит1");
		РеквизитыФормы.Добавить("Реквизит2");	
		
		МойОбщийМодуль.ЗапомнитьРеквизитыФормы(ТекущийОбъект, РеквизитыФормы, ЭтаФорма);
		
	//ТекущийОбъект.ДополнительныеСвойства.Вставить("Реквизит1", ЭтаФорма.Реквизит1);
	//ТекущийОбъект.ДополнительныеСвойства.Вставить("Реквизит2", ЭтаФорма.Реквизит2);
КонецПроцедуры


Выходит ошибка: Метод объекта не обнаружен (ЗапомнитьРеквизитыФормы)
Общий модуль проставил все доступные галки: на сервере, на клиенте, вызов сервера.
Директивы у процедуры общего модуля так же проверил: НаСервере, НаКлиентеНаСервере - не работает.

Что не так с моим кодом?
Может есть способы лучше передавать значения реквизитов формы в серверные процедуры?
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Stepik
    ПБУ 18/02 "Учет расчетов по налогу на прибыль"
    1 неделя
    Далее
  • Академия Эдюсон
    1С: Бухгалтерия 8.3
    2 месяца
    Далее
  • Институт профессиональных квалификаций
    Бухгалтерский учет «1С: Бухгалтерия»
    2 месяца
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы