0
e2e4
17.07.15
✎
18:55
|
На статью в КЗ не тянет - так что оформляю просто темкой свою победу))
Ибо, судя по гуглу, многие как и я боролись с этой темой - может, помогу кому-то потратить меньше времени, чем я.
Итак, тривиальная задачка - при смене контрагента в форме дока автоматически поменять значение реквизита дока Договор на основной договор к-та.
Элементарно можно прямо в модуле формы завести две процедурки:
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
КонтрагентПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
Объект.Договор = Объект.Контрагент.ОсновнойДоговор;
КонецПроцедуры
Потом, с ростом числа доков, где это надо сделать, естественно приходим к мысли - а не вынести ли серверную процедуру в общий модуль, оставив в формах только клиентскую? и... Спотыкаемся (как свидетельствует гугл, многие) об "...Ошибка при установке значения атрибута контекста (Объект)...по причине: Нельзя изменять поле, содержащее объект данных формы".
Поисковые запросы по такому делу массово ведут к употреблению РеквизитФормыВЗначение, ЗначениеВРеквизитФормы. Все замечательно, но... Только если располагать серверную процедуру опять же в модуле формы, а не в общем модуле, который знать не знает про такие функции! Т.е., шило на мыло.
Наконец, "пощупав" типовую конфу, пришел к требуемому рабочему варианту:
- в модуле формы:
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
Серверный.КонтрагентПриИзменении(Объект.Контрагент, Объект.Договор);
КонецПроцедуры
- в серверном общем модуле:
Процедура КонтрагентПриИзменении(Контрагент, Договор) Экспорт
Договор = Контрагент.ОсновнойДоговор;
КонецПроцедуры
Делаем выводы.
...Для кого-то тривиально - но...Если бы я в поисковике сразу нашел что-то подобное - сэкономил бы время!:)
|
|