Имя: Пароль:
1C
1С v8
Внешняя обработка заполнения объекта в УФ. Как добраться до формы объекта
, ,
0 zalexey
 
15.02.17
18:37
Делаю внешнюю обработку заполнения объекта и никак не могу понять один момент:

Пользователь вызывает из объекта заполнение. На экране появляется форма (чтобы он выбрал файлы), дальше нажимает загрузить и данные из этих файлов грузятся в документ. А потом нужно вызвать процедуру общего модуля, который доступен только на сервере и туда передать форму документа.

Если у внешней обработки поставить тип "ВызовСерверногоМетода", то в вызываемой процедуре можно достучаться до формы документа через "ПараметрыВыполнения.ЭтаФорма", но в этом случае не могут пользователю показать форму для выбора файлов.


Если у внешней обработки ставлю тип "ОткрытиеФормы", то пользователь может выбрать файлы, но тогда не понимаю как вызвать серверную процедуру ОМ  и туда передать форму документа.

Процедуру ОМ нужну вызвать, чтобы после загрузки заполнились недостающие данные и обновилась видимость элементов стандартными средствами конфигурации (все выносить к себе в обработку не хочется).

Есть варианты?
1 h-sp
 
15.02.17
18:47
ВызовКлиентскогоМетода ставьте.
2 zalexey
 
15.02.17
18:51
(1) а где форма объекта будет в этом случае? Вроде там, в отличии от серверного метода, уже не передаются ПараметрыВыполнения
3 LienXo
 
15.02.17
19:03
Форму не передашь. Если на форме нет левых полей - реквизтформывзначение(объект) и передай объект, Если есть - заполни и передай структуру
4 jsmith82
 
15.02.17
19:04
(2) ЭтаФорма.ВладелецФормы
5 zalexey
 
15.02.17
20:21
(4) НаСервере на эту конструкцию ругается, а с клиента нельзя передать УФ в серверную процедуру
6 Defender aka LINN
 
15.02.17
21:37
(0) Тебе надо не то, что ты изобрел, а по ссылке заполнить документ и записать его.
7 Garykom
 
гуру
15.02.17
21:46
(0) >Есть варианты?

Есть.
8 jsmith82
 
15.02.17
21:58
Зачем форму документа передавать? Не проще объект?
9 jsmith82
 
15.02.17
21:59
Понятно, "управление формой" на сервере. Эко закрутил
10 jsmith82
 
15.02.17
22:02
Сделай у формы документа экспортную процедуру УправлениеФормойНаСервере на сервере с обращением к ОМ
И из формы обработки пиши ЭтаФорма.УправлениеФормойНаСервере()
11 Cyberhawk
 
15.02.17
22:44
"потом нужно вызвать процедуру общего модуля, который доступен только на сервере и туда передать форму документа" // Сделать это можно только из серверного контекста формы. Дальше подумай.
12 zalexey
 
16.02.17
00:55
(6) Объект заполнен корректно после загрузки. Грубо говоря пользователь загрузил данные за период с 1 по 10, нужно чтобы на форме остались только столбцы с 1 по 10, остальное скрылось.
Если документ закрыть и открыть, то все будет красиво, я же хочу, чтобы столбцы скрылись (по факту там много чего еще) сразу после загрузки данных.
В типовой за это отвечает серверная процедура, которая вызывается при изменении реквизита формы. Эту процедуру я их хочу вызвать после загрузки.

(8) Объект не прокатывает. ОМ ругается
(9) Ну вот как это еще назвать, если не управление формой на сервере?

&НаСервере
Процедура ПериодРегистрацииПриИзменении()
  УчетРабочегоВремениРасширенныйФормы.ТабельПериодРегистрацииПриИзменении(ЭтаФорма);

КонецПроцедуры

(10) нужно без изменений конфигураций обойтись
13 zalexey
 
16.02.17
01:00
(11) не соображу, прошу помоще :)
Дело в том, что в контекст формы не передается "форма документа", она доступна только если используется тип "ВызовСерверногоМетода", но в этом случае же не могу я вызвать клиент и показать форму внешней обработки.
14 Сергиус
 
16.02.17
01:03
(12)Перенеси функцию заполнения в обработку
15 toypaul
 
гуру
16.02.17
08:48
Нужно открывать обработку на клиенте. Например объявив через "ОткрытьФорму", а владелец будет доступен как ВладелецФормы.
16 toypaul
 
гуру
16.02.17
08:52
Если после загрузки нужно обновить форму, а нее нет экспортного метода, то ты попал. Либо конфигурацию менять, либо записывать и открывать снова, а может посмотреть форму - может там есть обработка каких-то событий на изменение формы.
17 Cyberhawk
 
16.02.17
09:19
(13) "контекст формы не передается "форма документа", она доступна только если используется тип "ВызовСерверногоМетода"" // На клиенте клиентский контекст формы-владельца доступен. На сервер ты передать эту форму-владелец не можешь. Чтобы стал доступен на сервере серверный контекст формы-владельца, надо прыгнуть в ее контекстную серверную процедуру. Вызови как-нибудь (например, через оповещение из своего кода).
18 Defender aka LINN
 
16.02.17
09:51
(12) ЭтаФорма.Владелец.Прочитать()
19 Cyberhawk
 
16.02.17
12:47
Предложенный в (6) вариант будет не айс в плане удобства, т.к. пользователь не будет иметь возможность откатить сделанные обработкой заполнения _объекта_ изменения, т.к. по факту эти изменения сразу будут записаны в БД. Плюс это не спасает от придумывания способа вызова какого-нибудь отдельного специального обработчика перерисовки элементов формы, т.е. (18) не прокатит.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс