При программном изменении формы может возникнуть ошибка:
Нельзя изменять поле, содержащее объект данных формы
Ошибка возникает при следующем коде:
1 2 3 4 5 6 7 8 9 |
&НаКлиенте Процедура ПробитьЧек(Команда) ПробитьЧекНаСервере(Объект); КонецПроцедуры &НаСервере Процедура ПробитьЧекНаСервере(Док) ОбщийМодуль.ЗаписатьВБазуДокумент(Док); КонецПроцедуры |
В параметре процедуры ПробитьЧекНаСервере() мы передаем данные формы с типом ДанныеФормыКоллекция, и потом на сервере пытаемся их изменить.
Даже если эти данные мы не меняем внутри процедуры, 1С на всякий случай ругнется.
Параметр Док процедуры ПробитьЧекНаСервере передается по ссылке, а значит при завершении процедуры этот параметр возвращается и пытается присвоиться реквизиту, что запрещено.
Если объект не планируется изменять в процедуре
ПробитьЧекНаСервере(), то достаточно скопировать реквизит во временную переменную, которая не является реквизитом и поэтому без проблем “возвратится” обратно из процедуры.
1 2 3 4 5 |
&НаКлиенте Процедура ПробитьЧек(Команда) ДокКопия = Объект; ПробитьЧекНаСервере(ДокКопия); КонецПроцедуры |
1 2 3 4 5 6 7 8 9 |
&НаКлиенте Процедура ПробитьЧек(Команда) ПробитьЧекНаСервере(Объект); КонецПроцедуры &НаСервере Процедура ПробитьЧекНаСервере(Знач ТожеДокКопия) ОбщийМодуль.ЗаписатьВБазуДокумент(ТожеДокКопия); КонецПроцедуры |
1 2 3 4 5 6 |
&НаКлиенте Процедура ПробитьЧек(Команда) ДокКопия = Объект; ПробитьЧекНаСервере(ДокКопия); КопироватьДанныеФормы(ДокКопия, Объект); КонецПроцедуры |
7 thoughts on “Ошибка “Нельзя изменять поле, содержащее объект данных формы” (1С)”