|   |   | 
| 
 | Внешняя обработка заполнения объекта в УФ. Как добраться до формы объекта | ☑ | ||
|---|---|---|---|---|
| 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) не прокатит.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |