Имя: Пароль:
1C
1С v8
Как обновить значения элементов обычной формы по объекту, измененному программно?
0 simol
 
11.10.17
15:44
1) Есть обработка с обычной формой
2) У формы обработки есть реквизит "ДокОбъект" типа ДокументОбъект.хххх. Реквизиты документа выведены на форму.
3) Навешен обработчик ПодключитьОбработчикИзмененияДанных("ДокОбъект", "ДокументИзменен", Истина);
4) В Процедура ДокументИзменен() у ДокОбъект программно могут быть изменены реквизиты, выведенные на форму.

Вопросы
1) почему-то автоматически измененные реквизиты в п.4 на форме не меняюся. Если смотреть отладчиком, то у элемента формы в свойстве Значение старое значение реквизита, хотя в объекте новое. Свойстов элемента формы "Данные" заполнен корректно.
2) как одним движением обновить значения элементов формы привязанных к ДокОбъект, чтобы у них было тоже, что и в объекте? ЭтаФорма.Обновить() не помогает. Программно перебрать все элементы и самому установить значение - крайний вариант.
1 asady
 
11.10.17
15:46
(0) делай изменения в модуле объекта
2 xXeNoNx
 
11.10.17
15:58
ЗначениеФормыВОбъект и наоборот..., не?
3 simol
 
11.10.17
16:03
(1,2) Обычная форма
(1)Что в обработке ДокОбъект.Реквизит1 = Истина, что ДокОбъект.УстановитьРеквизит1() не решает проблему.
4 xXeNoNx
 
11.10.17
16:05
(3) Тут 2 варианта:
1. Запустил обработку поменял реквизиты, записал, при след. открытии реквизиты изменились?
2. Изменять именно реквизиты формы
5 simol
 
11.10.17
16:29
1. Мне надо в обработке продолжить работу с не записанным документом. Но, например, изменили контрагента - я программно изменил договор. В объекте он поменян ,а на форме показывается старых. После каждого изменения записывать документ костыльно
2. У меня функция изменения реквизитов в модуле документа. Там все равно показывается документ в обработке или в форме документа. Я там не знаю о существовании элементов формы.
6 simol
 
11.10.17
16:39
Сделал костыль

роцедура ОбновитьЗначенияЭлементоыФормыПоОбъекту(ЭлементыФормы, ИмяОбъекта, ЗначениеОбъекта, ПропускатьТабличныеЧасти = Истина)
    //Есть ситуации, когда программное измененеие реквизитов объекта не меняет то, что видно на форме. Тапример измененеие в программной подкиске ПодключитьОбработчикОжидания
    //Табличнфые части оно обновляет вроде как
    
    Для каждого ЭлементФормы Из ЭлементыФормы Цикл
        Если ПустаяСтрока(ЭлементФормы.Данные) Тогда
            Продолжить;
        КонецЕсли;    
        МассивПути = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ЭлементФормы.Данные, ".", Истина);
        Если МассивПути.Количество() < 2 Тогда
            Продолжить;
        КонецЕсли;    
        Если МассивПути[0] <> ИмяОбъекта Тогда
            Продолжить;
        КонецЕсли;    
        
        Если ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда
            Если Не ПропускатьТабличныеЧасти Тогда
                ЭлементФормы.ОбновитьСтроки();
            КонецЕсли;    
        Иначе
            Если МассивПути.Количество() = 2 Тогда
                ЭлементФормы.Значение = ЗначениеОбъекта[МассивПути[1]];
            Иначе
                Путь = "";
                Для ИндексМассива = 2 По МассивПути.ВГраница() Цикл
                    Путь = Путь + "." + МассивПути[ИндексМассива];
                КонецЦикла;    
                Путь = Сред(Путь, 2);
                ЭлементФормы.Значение = ОМ.ПолучитьЗначениеРеквизита(ЗначениеОбъекта[МассивПути[1]], Путь);
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;
    
КонецПроцедуры
7 asady
 
11.10.17
17:24
(6) тебе же в (1) я написал - зачем всё это?

вызывай в модуле формы процедуру модуля объекта и в ней меняй реквизиты объекта - элементы формы обновятся автоматически.
8 simol
 
12.10.17
15:42
(7)В указанной в (1) комбинации не меняет автоматом, в этом и проблема
Есть какой-то глюк видать, если изменять в процедуре подключенной по ПодключитьОбработчикИзмененияДанных
9 h-sp
 
12.10.17
15:50
(8) наверно процедура процедуре подключенная по ПодключитьОбработчикИзмененияДанных какая-то левая
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший