Внешняя обработка заполнения для УТ 11

  1. 8 г. назад

    Делаю загрузку из эксель в виде внешней обработки заполнения Заказа клиента.
    Открывается форма обработки, юзер настраивает загрузку, жмякает Загрузить, а потом....
    А как потом мне обновить уже открытую форму Заказа?

    Поделитесь примером.

  2. оповеститьобизменении()?

    Ответы: (2)
  3. (1) скорее всего, нет

    Ответы: (3)
  4. (2) а как ещё? в УФ внеш.обработки работают по ссылке, а не с объектом

  5. Помогло

    ФормаДок.Прочитать();

  6. полный текст метода:

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

или зарегистрируйтесь чтобы ответить!