Имя: Пароль:
1C
1С v8
Обновление формы документа после программного изменения реквизита на ней
0 mixperez
 
25.07.16
13:33
Приветствую, есть документ реализации, на нем есть реквизит. Данный реквизит программно изменяется при проведении другого документа. Форма документа реализации при этом остается открытой. Как без закрытия и открытия формы документа реализации увидеть изменения данного реквизита. Т.е. необходимо программно обновить форму, чтобы увидеть новые данные, которые были изменены.

Пробовал подписываться на событие формы документа Реализации РеквизитПриИзменениии, т.е.

&НаКлиенте
Процедура Реквизит(Элемент)
    ЭтаФорма.Прочитать();
КонецПроцедуры


Не срабатывает.
1 Fish
 
гуру
25.07.16
13:42
Оповестить и ОбработкаОповещения?
2 mixperez
 
25.07.16
13:45
Пытался, только процедура по программному изменению реквизита из другого документа выполняется в модуле менеджера другого документа и там ошибка:

{Документ.СчетФактураВыданный.МодульМенеджера(729,2)}: Процедура или функция с указанным именем не определена (Оповестить)
    <<?>>Оповестить("РеквизитИзменен"); (Проверка: Сервер)
3 Fish
 
гуру
25.07.16
13:59
(2) Правильно. Потому что у Оповестить:
Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
4 mixperez
 
25.07.16
14:23
Отлично, а какое нибудь событие на форме, на которой изменяется программно реквизит можно отловить, после того как реквизит изменен?

РеквизитПриИзменении - не отрабатывает
5 mixperez
 
25.07.16
14:49
Up
6 aleks_default
 
25.07.16
15:18
<<Данный реквизит программно изменяется при проведении другого документа>>.
А сообщения об изменении объекта другим пользователем не возникает? Хотя, при программном изменении по-моему нет
Короче, овнокод детектед.
7 mixperez
 
25.07.16
15:45
А сообщения об изменении объекта другим пользователем не возникает?  - Нет не возникает.

Реквизит данной формы документа программно изменяется при проведении другого документа. Процедура описана в модуле менеджера другого документа и вызвана в обработке проведения в модуле объекта этого документа. Все события выполняются на сервере, поэтому и не могу использовать оповестить.

Если в целом - Из документа реализации мы регистрируем счет фактуру, проводим ее и после проведения изменяется реквизит в форме документа реализации.
8 aleks_default
 
25.07.16
15:50
Если в целом - Из документа реализации мы регистрируем счет фактуру, проводим ее и после проведения изменяется реквизит в форме документа реализации.

Ну так это нужно делать в контексте Документа реализации а не из проведения счет-фактуры.
Т. е. з документа реализации в транзакции вызываешь проведение СФ(хотя это тоже не кошерно), если проводится - меняешь здесь же реквизит, нет - нет.
9 mixperez
 
25.07.16
15:58
Т. е. из документа реализации в транзакции вызываешь проведение СФ(хотя это тоже не кошерно), если проводится - меняешь здесь же реквизит, нет - нет.

А зачем программно вызывать проведение СФ, если смысл в том, что пользователь сам должен переходить на форму документа СФ по гиперссылке и вводить все необходимые данные на ней, и на основании даты проведения - меняется один из реквизитов документа реализации, он меняется на значение даты проведения счет фактуры
10 mixperez
 
25.07.16
16:00
Сам реквизит принимает нужное значение, алгоритм отрабатывает как надо. Вот только форму документа реализации как обновить(она остается открытой), чтобы пользователь смог увидеть изменения на ней сразу, а не только закрыв и открыв ее заново.
11 aleks_default
 
25.07.16
16:00
(9)Я откуда знаю зачем. Это у тебя так в (0) написано.
12 aleks_default
 
25.07.16
16:08
В любом случае при проведении одного документа менять реквизиты другого нельзя.
Можно отображать в форме одного документа реквизит от другого - для этого есть метод ОповеститьОбИзменении
13 hhhh
 
25.07.16
16:24
(9) ну в процедуру обработки этой гиперссылки и встаьте. Типа Объект.Реквизит = ТекущаяДата();
14 mixperez
 
25.07.16
16:33
(13) Оно там и вставлялось. Реквизит менялся - все было ok.
15 mixperez
 
25.07.16
16:38
Проблема решена, всем спасибо за участие. В обработке проведения мне эта процедура самому не нравилась. Учел все.

Перенес исполнение процедуры в обработку ПослеЗаписи в модуле формы СФ, который выполняется на клиенте, после использовал оповестить и в модуле формы ДокументаРеализации в ОбработкеОповещения проверяю это событие и
ЭтаФорма.Прочитать() - отрабатывает!