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

Если на форме есть реквизит и мы его передаем как параметр в процедуру или функцию в 1С Предприятие может возникнуть ошибка Нельзя изменять поле, содержащее объект данных формы.

Предприятие вычисляет внутри процедуры значение, а при завершении работы процедуры возвращает вычисленное значение обратно в параметр переданный в процедуру и дальше возвращает его в поле формы. Но 1С Предприятие запрещает таким образом изменять значение поля, содержащее объект данных формы.

Варианта решения ошибки два:

  1. Присвоить значение поля сначала в новую переменную, а потом передать переменную как параметр ;
  2. В процедуре в параметрах заменить тип переменной на “Знач”;

Пример ошибки

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

&НаСервере
Процедура ПрибавитьЕдиницу( ЗначениеРеквизитаФормы )
а = ЗначениеРеквизитаФормы + 1;
КонецПроцедуры;

Код исправляющий ошибку первым способом (реализовано присвоение значения поля промежуточной переменной – возврат значения из процедуры будет происходить в нее, а не в поле формы):

Процедура ПроцедураСОшибкой()
б = РеквизитФормы;
ПрибавитьЕдиницу(б);
КонецПроцедуры

&НаСервере
Процедура ПрибавитьЕдиницу( ЗначениеРеквизитаФормы )
а = ЗначениеРеквизитаФормы + 1;
КонецПроцедуры;

Пример исправления вторым способом (изменение типа параметра в процедуре – изменения поля не будет, т.к. помещение значения из поля в новую переменную будет происходить на этапе передачи параметра в процедуру):

Процедура ПроцедураСОшибкой()
ПрибавитьЕдиницу(РеквизитФормы);
КонецПроцедуры

&НаСервере
Процедура ПрибавитьЕдиницу(Знач ЗначениеРеквизитаФормы)
а = ЗначениеРеквизитаФормы + 1;
КонецПроцедуры;

Поделиться:

Читайте также: