Имя: Пароль:
1C
 
Помогите как изменить доп. реквизит на форме при изменении другого реквизита?
0 Металлист Балалайкин
 
04.08.20
18:10
На форме есть обычный реквизит и дополнительный общий реквизит формы.

надо чтоб при изменении первого реквизита менялся второй.

Захожу в "ПриИзменении

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


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

При этом функция

        УстановитьЗначениеДополнительногоРеквизитаОбъекта

работает внутри обработки. Если Например. в этом коде:

ТекТовар = Товар.ПолучитьОбъект();
УстановитьЗначениеДополнительногоРеквизитаОбъекта(ТекТовар, "Коллекция_16b08aba18d04901b360ee88d7eca768", Марка);



А сама функция

&НаСервере
Функция ПолучитьСвойство(Имя)

    Возврат ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", Имя);        

КонецФункции
&НаСервере
Процедура УстановитьЗначениеДополнительногоРеквизитаОбъекта(Объект, ИмяРеквизита, Значение) Экспорт

    Свойство = ПолучитьСвойство(ИмяРеквизита);    
    Строки = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство",Свойство));
    Если Строки.Количество()>0 Тогда
        Строки[0].Значение = Значение;
        Возврат;    
    КонецЕсли;
    
    ДоступныеСвойства = УправлениеСвойствами.СвойстваОбъекта(Объект,Истина,Ложь);    
    Если ДоступныеСвойства.Найти(Свойство)=Неопределено Тогда
        ВызватьИсключение "Нет реквизита "+ИмяРеквизита;
    КонецЕсли;    
    Строка = Объект.ДополнительныеРеквизиты.Добавить();
    Строка.Свойство = Свойство;
    Строка.Значение = Значение;
    
КонецПроцедуры
1 asady
 
04.08.20
18:35
(0) тебе надо не объект менять а значение на форме - остальное форма сделает сама

вот здесь почитай
http://catalog.mista.ru/1c/articles/867282/
2 Металлист Балалайкин
 
04.08.20
19:36
(1)а не подскажете как обойти ошибку
Отсутствует отображение для типа 'ФормаКлиентскогоПриложения'
{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(755)}:        Поле = ПолучитьЗначениеДополнительногоРеквизитаНаФорме(ЭтаФорма, "brand");

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ФормаКлиентскогоПриложения'


&НаКлиенте
Процедура МаркаПриИзменении(Элемент)
    Если Объект.Марка.Пустая() Тогда
        НаименованиеМарки = "";
    Иначе
        НаименованиеМарки = Строка(Объект["Марка"]);
        Поле = ПолучитьЗначениеДополнительногоРеквизитаНаФорме(ЭтаФорма, "brand");
    КонецЕсли;
    ПриИзмененииПараметраИменования(Элемент.Имя,Истина);
КонецПроцедуры
3 hhhh
 
04.08.20
20:11
(2) форму нельзя передавать на сервер
4 Металлист Балалайкин
 
04.08.20
20:12
(3)Спасибо. разобрался.  ПОменял немного те функции.