Допустим, мы делаем какую-то внешнюю обработку, в форме которой размещаем реквизит с типом "Таблица значений". Назовём этот реквизит СчетаФактуры.
Также на форме размещаем кнопку команды, например, с названием "Обработать счета-фактуры". Задаём действие для команды:
&НаКлиенте Процедура ОбработатьСчетаФактуры(Команда) ОбработатьСчетаФактурыНаСервере(СчетаФактуры); КонецПроцедуры &НаСервере Процедура ОбработатьСчетаФактурыНаСервере(СчетаФактуры) // Тело процедуры. КонецПроцедуры
Параметр СчетаФактуры – это наш реквизит формы.
При попытке запустить команду получаем ошибку:
"Нельзя изменять поле, содержащее объект данных формы".
Дело в том, что в параметре процедуры ОбработатьСчетаФактурыНаСервере(СчетаФактуры) мы передаём данные формы с типом ДанныеФормыКоллекция, и потом на сервере пытаемся их изменить.
Для исправления ошибки нужно всего навсего объявить переменную и присвоить ей значение реквизита.
&НаКлиенте Процедура ОбработатьСчетаФактуры(Команда) перем_СчетаФактуры = СчетаФактуры; ОбработатьСчетаФактурыНаСервере(перем_СчетаФактуры); КонецПроцедуры &НаСервере Процедура ОбработатьСчетаФактурыНаСервере(перем_СчетаФактуры) // Тело процедуры. КонецПроцедуры
Комментарии
&НаСервере
Процедура ОбработатьСчетаФактурыНаСервере(Знач СчетаФактуры)
// Тело процедуры.
КонецПроцедуры
Ваш совет копирует реквизит в переменную, которая не является реквизитом и поэтому без проблем возвращается. Тот же самый эффект можно получить указав в объявлении процедуры ключевое слово Знач
Процедура ОбработатьСчетаФактурыНаСервере(Знач перем_СчетаФактуры)
Однако таким способом нельзя вернуть из процедуры измененное значение, для этого все-таки необходимо сделать так, как вы указали, а затем использовать процедуру КопироватьДанныеФормы(перем_СчетаФактуры, СчетаФактуры);
Спасибо, исправил.
только имя серверной процедуры на клиенте не совпадает с именем показанной на сервере,
ОбработатьСчетаФактурыНаСервере и СформироватьДвиженияНаСервере.
На здоровье!
Спасибо большое!
RSS лента комментариев этой записи