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

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

Помогите разобраться с вопросомУ меня есть документ "Заказ" у него есть реквизит "НуженВедущий" - тип Булево и Табличная часть "УслугиПраздник"Нужно чтобы при изменении значения "Заказ" в табличную часть добавлялась новая строка. Пишу следующий код

ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, Объект.УслугиПраздник, ПредопределенноеЗначение("Справочник.Услуги.Ведущий"));

Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) Если ЭлОбъект = Истина Тогда НоваСтрока = ТабЧасть.Добавить(); НоваСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры

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

Хм. это хорошо. Значит действительно нельзя отрывать от данных формы ее часть, - Объект.УслугиПраздник, - где-то в стороне ее модифицировать и пытаться присвоить обратно данным формы.

Тогда передавайте в свою процедуру имя этой табличной части, - УслугиПраздник, - а в самой процедуре по имени обращайтесь к табличной части - Объект["УслугиПраздник"].

На сколько я понял нужно было сделать так:

&НаКлиентеПроцедура ЗаказВедущегоПриИзменении(Элемент) ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, "УслугиПраздник", ПредопределенноеЗначение("Справочник.Услуги.Ведущий")); КонецПроцедуры

Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) Если ЭлОбъект = Истина Тогда НоваяСтрока = Объект[Таблица].Добавить(); НоваяСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры

Выдает ту же самую ошибку, считывает передаваемые параметры без проблем, а создавать не хочет.По ходу придется для каждого элемента свою процедуру писать.

И зачем вы так настойчиво исполняете Процедура ДобавитьСтрокуТЧ() на сервере?

Напишите перед ней &НаКлиенте.

Что-то вы не договариваете. У нас ваш код работает.

У вас какая-то несвежая версия 1С:Предприятия, полугодичной давности :).

Но даже на ней ваш код все равно работает.

Если не сможете разобраться самостоятельно, выкладывайте демонстрационный пример.

Так если на на 10.77 у вас не работает, то и на новой работать не будет.

Дело не в платформе, а в том, что есть что-то еще, кроме того, что вы рассказали.

Сказал Хорошо, и ушел)

у меня такая же проблемка. пытаюсь разобраться..

Видимо проблема в том, что из формы передаю ТабЧасть док-та в функцию на сервере и при возврате в метсто вызова 1С ругается..

Ошибка была вот в чёмЯ с клиента передавал на сервер "Объект", Там его менял, а затем при передаче обратно на клиента система ругалась.

ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, Объект.УслугиПраздник, ПредопределенноеЗначение("Справочник.Услуги.Ведущий"));

Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) Если ЭлОбъект = Истина Тогда НоваСтрока = ТабЧасть.Добавить(); НоваСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры

Нужно было вот как&НаКлиентеПроцедура ЗаказВедущегоПриИзменении(Элемент)

ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, "УслугиПраздник", ПредопределенноеЗначение("Справочник.Услуги.Ведущий"));

&НаСервереПроцедура ДобавитьСтрокуТЧ(ЭлОбъект, ИмяТаблицы, Услуга) Если ЭлОбъект = Истина Тогда НоваСтрока = Объект[ИмяТаблицы].Добавить(); НоваСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры

Так как таблиц много в итоговом варианте сделал так

&НаКлиентеПроцедура ЗаказВедущегоПриИзменении(Элемент) ДобавитьСтрокуЗаказВедущего(); КонецПроцедуры

ДобавитьСтрокуВТабличнуюЧасть(Объект.ТаблицаПроведение, Справочники.Услуги.Ведущий); ДобавитьСтрокуВТабличнуюЧасть(Объект.ТаблицаПроведение, Справочники.Услуги.Дискотека);

&НаСервереПроцедура ДобавитьСтрокуВТабличнуюЧасть(ТабЧасть, Услуга)

НоваяСтрока = ТабЧасть.Добавить(); НоваяСтрока.Наименование = Услуга; НоваяСтрока.Количество = 1;

> Если перед процедурой не стоит ни чего ни &НаКлиенте, ни &НаСервере она выполняется по умолчанию на сервере?

> а так ошибка выдается в момент когда процедура возвращается в точку вызова.

Гм. вы нас заинтриговали. Придется все таки поставить эксперимент. Подождите некоторое время.

По ходу смущает вот это:

Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) .

НоваяСтрока = Объект[Таблица].Добавить();

Но можно и для каждого элемента свою процедуру написать. Тоже вариант.

Когда я делал так, всё получалось, но у меня несколько таких табличных частей и не хотелось бы для каждой писать отдельную процедуру.

Процедура ДобавитьСтрокуТЧ() Если ЭлОбъект = Истина ТогдаТабЧасть = Объект.УслугиПраздник; НоваСтрока = ТабЧасть.Добавить(); НоваСтрока.Наименование = Справочники.Услуги.Ведущий; КонецЕсли; КонецПроцедуры

📎📎📎📎📎📎📎📎📎📎