Допустим, мы делаем какую-то внешнюю обработку, в форме которой размещаем реквизит с типом "Таблица значений". Назовём этот реквизит СчетаФактуры.

Также на форме размещаем кнопку команды, например, с названием "Обработать счета-фактуры". Задаём действие для команды:

&НаКлиенте
Процедура ОбработатьСчетаФактуры(Команда)
	
	ОбработатьСчетаФактурыНаСервере(СчетаФактуры);
	
КонецПроцедуры


&НаСервере
Процедура ОбработатьСчетаФактурыНаСервере(СчетаФактуры)
	
	// Тело процедуры.	

КонецПроцедуры

Параметр СчетаФактуры – это наш реквизит формы.

При попытке запустить команду получаем ошибку:

"Нельзя изменять поле, содержащее объект данных формы".

Дело в том, что в параметре процедуры ОбработатьСчетаФактурыНаСервере(СчетаФактуры) мы передаём данные формы с типом ДанныеФормыКоллекция, и потом на сервере пытаемся их изменить.

Для исправления ошибки нужно всего навсего объявить переменную и присвоить ей значение реквизита.

&НаКлиенте
Процедура ОбработатьСчетаФактуры(Команда)
	
	перем_СчетаФактуры = СчетаФактуры;
		
	ОбработатьСчетаФактурыНаСервере(перем_СчетаФактуры);
	
КонецПроцедуры


&НаСервере
Процедура ОбработатьСчетаФактурыНаСервере(перем_СчетаФактуры)
	
	// Тело процедуры.	

КонецПроцедуры

Комментарии   

0 #7 ReKS 28.09.2019 10:22
Извиняюсь, но дело совершенно в другом!
Параметр процедуры ОбработатьСчетаФактурыНаСервере передается по ссылке, а значит при завершении процедуры этот параметр возвращается и пытается присвоиться реквизиту, что запрещено.
Ваш совет копирует реквизит в переменную, которая не является реквизитом и поэтому без проблем возвращается. Тот же самый эффект можно получить просто указав в объявлении процедуры ключевое слово Знач
Процедура ОбработатьСчетаФактурыНаСервере(Знач перем_СчетаФактуры)
Однако таким способом нельзя вернуть из процедуры измененное значение, для этого все-таки необходимо сделать так, как вы указали, а затем использовать процедуру КопироватьДанныеФормы(перем_СчетаФактуры, СчетаФактуры);
Цитировать
0 #6 Максим Донецкий 02.07.2019 23:55
Цитирую Ирина:
СПасибо!!! Работает!!!!
только имя серверной процедуры на клиенте не совпадает с именем показанной на сервере,
ОбработатьСчетаФактурыНаСервере и СформироватьДвиженияНаСервере.

Спасибо, исправил.
Цитировать
+1 #5 Ирина 02.07.2019 22:05
СПасибо!!! Работает!!!!
только имя серверной процедуры на клиенте не совпадает с именем показанной на сервере,
ОбработатьСчетаФактурыНаСервере и СформироватьДвиженияНаСервере.
Цитировать
+1 #4 Максим Донецкий 28.03.2019 12:52
Цитирую ANdreyKa:
А я то думал "Что за хрень!?".. Переносил блок в разные места.. А тут такое..

Спасибо большое!

На здоровье!
Цитировать
+2 #3 ANdreyKa 28.03.2019 09:48
А я то думал "Что за хрень!?".. Переносил блок в разные места.. А тут такое..

Спасибо большое!
Цитировать
+8 #2 MariNew 20.06.2018 15:36
Отлично!!! У меня получилось!!!! СПАСИБО!
Цитировать
+11 #1 lsnr 14.05.2018 17:05
Наконец то нашел внятный ответ.. Спасибо.
Цитировать