1С Нельзя изменять поле, содержащее объект данных формы
Если на форме есть реквизит и мы его передаем как параметр в процедуру или функцию в 1С Предприятие может возникнуть ошибка Нельзя изменять поле, содержащее объект данных формы.
Предприятие вычисляет внутри процедуры значение, а при завершении работы процедуры возвращает вычисленное значение обратно в параметр переданный в процедуру и дальше возвращает его в поле формы. Но 1С Предприятие запрещает таким образом изменять значение поля, содержащее объект данных формы.
Варианта решения ошибки два:
- Присвоить значение поля сначала в новую переменную, а потом передать переменную как параметр ;
- В процедуре в параметрах заменить тип переменной на “Знач”;
Пример ошибки
&НаКлиенте
Процедура ПроцедураСОшибкой()
ПрибавитьЕдиницу(РеквизитФормы);
КонецПроцедуры
&НаСервере
Процедура ПрибавитьЕдиницу( ЗначениеРеквизитаФормы )
а = ЗначениеРеквизитаФормы + 1;
КонецПроцедуры;
Код исправляющий ошибку первым способом (реализовано присвоение значения поля промежуточной переменной – возврат значения из процедуры будет происходить в нее, а не в поле формы):
Процедура ПроцедураСОшибкой()
б = РеквизитФормы;
ПрибавитьЕдиницу(б);
КонецПроцедуры
&НаСервере
Процедура ПрибавитьЕдиницу( ЗначениеРеквизитаФормы )
а = ЗначениеРеквизитаФормы + 1;
КонецПроцедуры;
Пример исправления вторым способом (изменение типа параметра в процедуре – изменения поля не будет, т.к. помещение значения из поля в новую переменную будет происходить на этапе передачи параметра в процедуру):
Процедура ПроцедураСОшибкой()
ПрибавитьЕдиницу(РеквизитФормы);
КонецПроцедуры
&НаСервере
Процедура ПрибавитьЕдиницу(Знач ЗначениеРеквизитаФормы)
а = ЗначениеРеквизитаФормы + 1;
КонецПроцедуры;