Имя: Пароль:
1C
1С v8
Замена значения реквизита у объектов группы в управляемом приложении
0 brenli
 
22.12.17
15:26
Доброго времени.
Вопрос  о правильности реализации.
Так как с управляемыми формами и клиент-серверным взаимодействием не часто работаю, опыта мало.

Нужно установить значение реквизита у элементов группы, на значение реквизита взятого из родительской для этих элементов группы.

В диалоге модуля формы обрабатываю событие ПриИзменении  
&НаКлиенте
Процедура ЭлементПриИзменении(Элемент)
    ЗаменаЗначенийУЭлементовВгруппе(Объект.Ссылка);
КонецПроцедуры

Передаю ссылку на текущий объект в качестве параметра серверной процедуре. И уже в ней

&НаСервереБезКонтекста
Процедура ЗаменаЗначенийУЭлементовВгруппе(Объект) Экспорт
    Выборка  = Справочники.Номенклатура.Выбрать(Объект);
    Пока Выборка.Следующий() Цикл
        Если Выборка.ЭтоГруппа Тогда
            Продолжить;
        КонецЕсли;    
        Попытка
            ОбъектНом            =    Выборка.ПолучитьОбъект();
            ОбъектНом.МойРекв =  Объект.МойРекв;
            ОбъектНом.Записать();
        Исключение
            Сообщить(" Ошибка !!! Свяжитесь с разработчиком");
        КонецПопытки;    
    КонецЦикла;    
КонецПроцедуры

Вопрос заключается именно в правильности способа передачи измененного реквизита и переопределении  реквизитов элементов выборки.
1 nordbox
 
22.12.17
15:39
а групповая обработка справочников и документов не канает?
2 brenli
 
22.12.17
15:50
(1) Нет. Вопрос чисто практический . Хочу разобраться.

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

Хотя уже и второй параметр добавил и передаю в него правильное значение (которое выбрано)

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

&НаСервереБезКонтекста
Процедура ЗаменаЗначенийУЭлементовВгруппе(Объект, Значение) Экспорт
    Выборка  = Справочники.Номенклатура.Выбрать(Объект);
    Пока Выборка.Следующий() Цикл
        Если Выборка.ЭтоГруппа Тогда
            Продолжить;
        КонецЕсли;    
        Попытка
            ОбъектНом            =    Выборка.ПолучитьОбъект();
            ОбъектНом.МойРекв =  Объект.МойРекв;
            ОбъектНом.Записать();
        Исключение
            Сообщить(" Ошибка !!! Свяжитесь с разработчиком");
        КонецПопытки;    
    КонецЦикла;    
КонецПроцедуры

Отладчиком проверяю, значения все правильные, т.е присваивается объекту из выборки то что нужно.
Но фактически ничего не меняется. Приходится вызывать обработчик заново с тем же значением (уже измененным).
3 nordbox
 
22.12.17
15:54
(0)>>Нужно установить значение реквизита у элементов группы, на значение реквизита взятого из родительской для этих элементов группы.

Что то я у тебя отбора не наблюдаю
4 nordbox
 
22.12.17
15:55
НУ открыл ты выборку
ну проверил ты группу
а ну и чо?
5 nordbox
 
22.12.17
15:58
ОбъектНом.МойРекв в природе существует?
Какой тип
И убери нфиг Попытка, понятнее будет где ошибка, а так он и при ошибке проскочит
6 brenli
 
22.12.17
22:24
(5) ОбъектНом.МойРекв да существует, получается объект из выборки.
Тип реквизита справочник.ссылка.

Вообще я правильно с объектом работаю?
Т.е значение (новое) которое я выбрал в поле формы и которое вызвало событие я получаю так Объект.МойРекв, но это значение еще не записано в БД.
7 triviumfan
 
24.12.17
13:55
Автор, перефразируй вопрос, покажи пример, вообще не понятно, что ты хочешь и пытаешься.
имхо у тебя проблема с пониманием механизмов или изложением мысли.
8 H A D G E H O G s
 
24.12.17
14:02
У автора форма не обновилась после обработки
9 H A D G E H O G s
 
24.12.17
14:03
ОбъектНом.МойРекв =  Объект.МойРекв;
заменить на
ОбъектНом.МойРекв =  МойРекв;

МойРекв - получать до цикла
10 H A D G E H O G s
 
24.12.17
14:04
В остальном - кусок приемлемого б-кода.

позабавило
Сообщить(" Ошибка !!! Свяжитесь с разработчиком");

Телепатируйте.

Хоть бы вывели ОписаниеОшибки()
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.