Делаю загрузку из эксель в виде внешней обработки заполнения Заказа клиента.
Открывается форма обработки, юзер настраивает загрузку, жмякает Загрузить, а потом....
А как потом мне обновить уже открытую форму Заказа?
Поделитесь примером.
Делаю загрузку из эксель в виде внешней обработки заполнения Заказа клиента.
Открывается форма обработки, юзер настраивает загрузку, жмякает Загрузить, а потом....
А как потом мне обновить уже открытую форму Заказа?
Поделитесь примером.
(2) а как ещё? в УФ внеш.обработки работают по ссылке, а не с объектом
Помогло
ФормаДок.Прочитать();
полный текст метода:
&НаКлиенте Процедура ОбработкаПодтвержденияОПерезаписиДокумента(Ответ, ДопПараметры) ЭКСПОРТ Если НЕ ИзДокумента Тогда Если Ответ = КодВозвратаДиалога.Да Тогда ЗаполнитьОбъектНаКлиенте(Неопределено); КонецЕсли; Иначе ОбъектыНазначенияМассив = Параметры.ОбъектыНазначения.ВыгрузитьЗначения(); Если Ответ = КодВозвратаДиалога.Да Тогда //Если пользователь дал разрешение на продолжение, то начнем перебирать все //документы, у которых мы планируем заполнить табличную часть Для каждого Элемент из ОбъектыНазначенияМассив Цикл //Зададим ключ поиска документа, из которого вызвана данная обработка, //чтобы получить ссылку на редактирумый документ в удобном виде для //функции ОткрытьФорму() КлючПоиска = Новый Структура("Ключ", Элемент); //Но нам не надо открывать новую форму (окно) для изменяемого документа, а //Нам надо все изменения показать в уже открытых у клиента окнах Окна = ПолучитьОкна(); Для каждого Окно из Окна Цикл //Окно изменяемого документа будет точно не основным, а вспомогательным, поэтому //сразу пропускаем основное окно, а далее идем на не очень хороший способ поиска открытого окна //изменяемого документа. Мы просто переберем все окна, а в заголовке, которых будет встречаться //Наименование, номер и дата нужного документа - будем изменять Если НЕ Окно.Основное И Найти(Окно.Заголовок, Элемент) Тогда //Передадим ключ поиска (можно сказать ссылку на объект) и данные о найденном открытом окне //в функцию ОткрытьФорму() //Код находится в цикле на тот случай, если открытых окон изменяемого документа больше одного ФормаДок = ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаДокумента",КлючПоиска,,,Окно); //Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную //В объекте содержатся все реквизиты (элементы) формы ДокО = ФормаДок.Объект; //Сообщить("ТИП ОБЪЕКТА: "+ТипЗнч(ДокО)); //Мы помещаем объект формы в переменную, //так как должны передать её в процедуру на сервере, //где нельзя изменять объект формы, зато можно править переменную содержащую его ЗаполнитьОбъектНаКлиенте(ДокО); //После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект, //которую необходимо передать в уже полученную нами форму КопироватьДанныеФормы(ДокО, ФормаДок.Объект); //ЭтаФорма.Закрыть(); //Сообщить("ОБНОВЛЯЮ ФОРМУ ДОКУМЕНТА"); ФормаДок.ОбновитьОтображениеДанных(); ФормаДок.Прочитать(); //ФормаДок.Элементы.Товары.Обновить(); КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры
Только непонятно, почему в момент вызова ЗаполнитьОбъектНаКлиенте() (а в нем - вызов сервера и заполнение на сервере) закрывается текущая форма обработки, контекст передается в форму документа, оно заполняется в фоне, а потом только обновляет форму документа.