Платформа 8.2 Нельзя изменить поле, содержащее объект данных формы в модуле
Помогите разобраться с вопросомУ меня есть документ "Заказ" у него есть реквизит "НуженВедущий" - тип Булево и Табличная часть "УслугиПраздник"Нужно чтобы при изменении значения "Заказ" в табличную часть добавлялась новая строка. Пишу следующий код
ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, Объект.УслугиПраздник, ПредопределенноеЗначение("Справочник.Услуги.Ведущий"));
Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) Если ЭлОбъект = Истина Тогда НоваСтрока = ТабЧасть.Добавить(); НоваСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры
Система выдает ошибку "Нельзя изменить поле, содержащее объект данных формы"
Хм. это хорошо. Значит действительно нельзя отрывать от данных формы ее часть, - Объект.УслугиПраздник, - где-то в стороне ее модифицировать и пытаться присвоить обратно данным формы.
Тогда передавайте в свою процедуру имя этой табличной части, - УслугиПраздник, - а в самой процедуре по имени обращайтесь к табличной части - Объект["УслугиПраздник"].
На сколько я понял нужно было сделать так:
&НаКлиентеПроцедура ЗаказВедущегоПриИзменении(Элемент) ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, "УслугиПраздник", ПредопределенноеЗначение("Справочник.Услуги.Ведущий")); КонецПроцедуры
Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) Если ЭлОбъект = Истина Тогда НоваяСтрока = Объект[Таблица].Добавить(); НоваяСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры
Выдает ту же самую ошибку, считывает передаваемые параметры без проблем, а создавать не хочет.По ходу придется для каждого элемента свою процедуру писать.
И зачем вы так настойчиво исполняете Процедура ДобавитьСтрокуТЧ() на сервере?
Напишите перед ней &НаКлиенте.
Что-то вы не договариваете. У нас ваш код работает.
У вас какая-то несвежая версия 1С:Предприятия, полугодичной давности :).
Но даже на ней ваш код все равно работает.
Если не сможете разобраться самостоятельно, выкладывайте демонстрационный пример.
Так если на на 10.77 у вас не работает, то и на новой работать не будет.
Дело не в платформе, а в том, что есть что-то еще, кроме того, что вы рассказали.
Сказал Хорошо, и ушел)
у меня такая же проблемка. пытаюсь разобраться..
Видимо проблема в том, что из формы передаю ТабЧасть док-та в функцию на сервере и при возврате в метсто вызова 1С ругается..
Ошибка была вот в чёмЯ с клиента передавал на сервер "Объект", Там его менял, а затем при передаче обратно на клиента система ругалась.
ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, Объект.УслугиПраздник, ПредопределенноеЗначение("Справочник.Услуги.Ведущий"));
Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) Если ЭлОбъект = Истина Тогда НоваСтрока = ТабЧасть.Добавить(); НоваСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры
Нужно было вот как&НаКлиентеПроцедура ЗаказВедущегоПриИзменении(Элемент)
ДобавитьСтрокуТЧ(Объект.ЗаказВедущего, "УслугиПраздник", ПредопределенноеЗначение("Справочник.Услуги.Ведущий"));
&НаСервереПроцедура ДобавитьСтрокуТЧ(ЭлОбъект, ИмяТаблицы, Услуга) Если ЭлОбъект = Истина Тогда НоваСтрока = Объект[ИмяТаблицы].Добавить(); НоваСтрока.Наименование = Услуга; КонецЕсли; КонецПроцедуры
Так как таблиц много в итоговом варианте сделал так
&НаКлиентеПроцедура ЗаказВедущегоПриИзменении(Элемент) ДобавитьСтрокуЗаказВедущего(); КонецПроцедуры
ДобавитьСтрокуВТабличнуюЧасть(Объект.ТаблицаПроведение, Справочники.Услуги.Ведущий); ДобавитьСтрокуВТабличнуюЧасть(Объект.ТаблицаПроведение, Справочники.Услуги.Дискотека);
&НаСервереПроцедура ДобавитьСтрокуВТабличнуюЧасть(ТабЧасть, Услуга)
НоваяСтрока = ТабЧасть.Добавить(); НоваяСтрока.Наименование = Услуга; НоваяСтрока.Количество = 1;
> Если перед процедурой не стоит ни чего ни &НаКлиенте, ни &НаСервере она выполняется по умолчанию на сервере?
> а так ошибка выдается в момент когда процедура возвращается в точку вызова.
Гм. вы нас заинтриговали. Придется все таки поставить эксперимент. Подождите некоторое время.
По ходу смущает вот это:
Процедура ДобавитьСтрокуТЧ(ЭлОбъект, ТабЧасть, Услуга) .
НоваяСтрока = Объект[Таблица].Добавить();
Но можно и для каждого элемента свою процедуру написать. Тоже вариант.
Когда я делал так, всё получалось, но у меня несколько таких табличных частей и не хотелось бы для каждой писать отдельную процедуру.
Процедура ДобавитьСтрокуТЧ() Если ЭлОбъект = Истина ТогдаТабЧасть = Объект.УслугиПраздник; НоваСтрока = ТабЧасть.Добавить(); НоваСтрока.Наименование = Справочники.Услуги.Ведущий; КонецЕсли; КонецПроцедуры