|
v7: Обновить в форме документа вывод реквизитов справочника | ☑ | ||
---|---|---|---|---|
0
akovpashko
04.03.13
✎
14:14
|
Есть форма документа, в которой выводятся свойства клиента в виде Клиент.Реквизит. При выборе клиента выполняется процедура, которая изменяет реквизиты клиента. Необходимо сразу после изменения реквизитов отобразить новые данные в форме документа.
Форма.Обновить() не помогает. Есть ли какой-то "красивый" путь без повторного поиска элемента в справочнике и присваивания его как значение реквизиту документа? |
|||
1
Эльниньо
04.03.13
✎
14:57
|
Как выводится?
Выводи текстом на форме. |
|||
2
akovpashko
04.03.13
✎
16:50
|
(1) Выводится текстом. В формуле текста стоит например Клиент.Скидка. В формуле реквизита Клиент указана процедура ПриИзмененииКлиента(), которая если выполняются некоторые условия, увеличивает значение скидки. Выбираю клиента, у которого 10% скидки. При выборе скидка увеличивается до 15% и записывается в элемент справочника этого клиента. В форме документа по прежнему отображается скидка 10%.
|
|||
3
mvk
04.03.13
✎
17:08
|
Форма.Обновить() в проц. ПриИзмененииКлиента() после записи справочника была? Или где?
|
|||
4
zladenuw
04.03.13
✎
17:11
|
(2) ну так там же обнови реквизит скидку
|
|||
5
NS
04.03.13
✎
17:12
|
(0) Врятли. Я нигде другого способа кроме повторного поиска и присваивания не видел.
|
|||
6
NS
04.03.13
✎
17:18
|
Только зачем поиск? Верни из процедуры изменения измененного клиента, и его присвой в реквизит.
|
|||
7
mvk
04.03.13
✎
17:18
|
(5) Ну почему. Можно выводить на форму значение переменной модуля. А ее обновлять при открытии и проц. ПриИзмененииКлиента(). Тогда Форма.Обновить() точно поможет.
|
|||
8
NS
04.03.13
✎
17:22
|
(7) У тебя допустим есть реквизит документа клиент.
На форме в виде текста висят формулы клиент.договор, клиент.глубинакредита и т.д. Если ты изменишь в клиенте договор и глубину кредита, пока ты не присвоишь новый, изменный объект клиенту - все текстовые формулы на форме будут выдавать закешированные значения. |
|||
9
NS
04.03.13
✎
17:23
|
(7) переменные модуля, и изменять можно. Но это геммор.
|
|||
10
mvk
04.03.13
✎
17:25
|
(8) Это да. Перечитывания реквизитов в данном случае не происходит. Я же говорил о:
Перем ТекСкидка; ... Процедура ПриОткрытии() ... ТекСкидка = ""; Если Клиент.Выбран() = 1 Тогда ТекСкидка = Клиент.Скидка; КонецЕсли ... Процедура ПриИзмененииКлиента() ... ТекСкидка = НоваяСкидка; Форма.Обновить(); |
|||
11
NS
04.03.13
✎
17:26
|
(10) Да я понял. Но это гемморно. Реквизит может быть не один.
|
|||
12
NS
04.03.13
✎
17:27
|
А если клиент в ТЧ - то совсем гемморно.
|
|||
13
mvk
04.03.13
✎
17:29
|
Тогда уж прямо в
Процедура ПриИзмененииКлиента() ... СпрКлиент.Записать(); Клиент = СпрКлиент.ТекущийЭлемент(); Форма.Обновить(); Короче, я думаю, мы ответили :) |
|||
14
akovpashko
04.03.13
✎
17:29
|
(10) спасибо за подсказку. Правда реквизит действительно не один и в документе еще в куче мест используется. Проще наверное повторно найти и назначить клиента.
|
|||
15
akovpashko
04.03.13
✎
17:30
|
(13) как ни странно такой вариант тоже пробовал и он не сработал. До меня было написано
Процедура ПриИзмененииКлиента() ... СпрКлиент.Записать(); СпрКлиент.НайтиЭлемент(Клиент); Клиент = СпрКлиент.ТекущийЭлемент(); Форма.Обновить(); |
|||
16
mvk
04.03.13
✎
17:31
|
(15) Сделай как в (13).
Не надо перепозиционироваться - убери СпрКлиент.НайтиЭлемент(Клиент); |
|||
17
NS
04.03.13
✎
17:38
|
Есть подозрение что надо делать форма.обновить(1);
|
|||
18
akovpashko
04.03.13
✎
17:39
|
(16) у меня в ПриИзмененииКлиента() вызывается функция перерассчета скидок, которой передается позиционированный объект справочника. В таком виде не работает, хотя параметр вроде как передается по ссылке.
Процедура ПриИзмененииПокупателя() СпрСклиенты = СоздатьОбъект("Справочник.Клиенты"); Если (Покупатель.Выбран() = 1) И (СпрСклиенты.НайтиЭлемент(Покупатель) = 1) Тогда ПересчитатьОсновнуюСкидкуЧБ(СпрСклиенты); Покупатель = СпрСклиенты.ТекущийЭлемент(); Форма.Обновить(); КонецЕсли; Процедура ПересчитатьОсновнуюСкидкуЧБ(Клиент) // тут еще куча условий Клиент.РазмОснСкидки = Клиент.РазмОснСкидки + Константа.БонуснаяСкидкаЧБ; Клиент.Записать(); КонецПроцедуры |
|||
19
NS
04.03.13
✎
17:41
|
А если
покупатель=""; покупатель=спрСклиенты.Текущийэлемент(); |
|||
20
mvk
04.03.13
✎
17:47
|
(19) Да не, это уже шаманство и камлание :)
Остановись отладчиком на Форма.Обновить() и посмотри на Клиент.РазмОснСкидки. Что пишет? |
|||
21
akovpashko
04.03.13
✎
18:00
|
(20) Действительно шаманство. Останавливаюсь на строке
Покупатель = СпрСклиенты.ТекущийЭлемент(); из кода (16) В табло уже добавлено Покупатель.РазмОснСкидки и значение 10 (старое) Смотрю значение СпрСклиенты.РазмОснСкидки - 13 (новое). Еще раз смотрю значение Покупатель.РазмОснСкидки, а там уже 13. Еще раз добавляю в табло, уже существующая там запись Покупатель.РазмОснСкидки меняет значение на 13. |
|||
22
akovpashko
04.03.13
✎
18:01
|
(19) этот вариант сработал.
|
|||
23
mvk
04.03.13
✎
18:12
|
(22) Н-дя. А релиз движка какой, если не секрет?
|
|||
24
akovpashko
04.03.13
✎
18:23
|
(23) 7.70.027 - это последний вроде бы.
|
|||
25
akovpashko
04.03.13
✎
18:36
|
Вопрос решился - ну и хорошо. Всем спасибо!
|
|||
26
monsterZE
05.03.13
✎
10:00
|
было уже (тоже натыкался) про кэш 1сы.. (19) как раз и помогает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |