Перестал работать код. Мне кажется платформа обновилась и что-то пошло не так...
это кусок кода из обработки заполнения табличной части документа.
Суть кода в том, что мы ищем окно открытого документа, получаем его форму, из которой берем объект, проводим с ним манипуляции и возвращаем измененные данные объекта в его форму.
Для Каждого ОбъектНазначенияСсылка Из Параметры.ОбъектыНазначения Цикл
ОбъектОбработки = ОбъектНазначенияСсылка;
КлючПоиска = Новый Структура("Ключ",ОбъектОбработки);
Окна = ПолучитьОкна();
Для Каждого Окно из Окна Цикл
Если не окно.Основное и найти(Окно.Заголовок,ОбъектОбработки) Тогда
Форма = ОткрытьФорму("Документ.ТребованиеНакладная.Форма.ФормаДокумента",КлючПоиска,,,Окно);
НовыйОбъект = Форма.объект;
ЗаполнитьДокументНаСервере(НовыйОбъект,ФильтрСписокСчетов);
КопироватьДанныеФормы(НовыйОбъект,Форма.Объект);
КонецЕсли;
КонецЦикла;
ЭтаФорма.Закрыть();
КонецЦикла;
Показать
проблема в строке
Если не окно.Основное и найти(Окно.Заголовок,ОбъектОбработки) Тогда
заголовки у всех не основных окон одинаковые, поэтому не могу найти нужное окно с моим документом.
Я думаю, что проблема в том, что когда запускается моя ЗТЧ, открывается форма с выбором счетов (которые используются как параметры запроса).
Счета выбрали, нажали заполнить, заполняется документ, форма с выбором счетов закрывается, и мы попадаем в наш уже заполненный документ.
Я сейчас нашел ЗТЧ для другого документа.http://infostart.ru/public/287060/ Там реализовано без формы выбора параметров.
Хотя форма обработки присутствует и в модуле формы есть код.
Но там все просто - в документе жмешь Заполнить, данные заполняются. Никаких параметров юзер выбрать не может.
Я могу так сделать, но мне надо получить данные в зависимости от параметров, которые задаст пользователь.
&НаКлиенте
Процедура ЗаполнитьДокумент(ИдентификаторКоманды)
ОбъектыНазначенияМассив = Параметры.ОбъектыНазначения;
//начнем перебирать все документы, у которых мы планируем заполнить табличную часть
Для каждого Элемент из ОбъектыНазначенияМассив Цикл
//Зададим ключ поиска документа, из которого вызвана данная обработка,
//чтобы получить ссылку на редактирумый документ в удобном виде для
//функции ОткрытьФорму()
КлючПоиска = Новый Структура("Ключ", Элемент);
//Но нам не надо открывать новую форму (окно) для изменяемого документа, а
//Нам надо все изменения показать в уже открытых у клиента окнах
Окна = ПолучитьОкна();
Для каждого Окно из Окна Цикл
//Окно изменяемого документа будет точно не основным, а вспомогательным, поэтому
//сразу пропускаем основное окно, а далее идем на не очень хороший способ поиска открытого окна
//изменяемого документа. Мы просто переберем все окна, а в заголовке, которых будет встречаться
//Наименование, номер и дата нужного документа - будем изменять
Если НЕ Окно.Основное
И Найти(Окно.Заголовок, Элемент) Тогда
//Передадим ключ поиска (можно сказать ссылку на объект) и данные о найденном открытом окне
//в функцию ОткрытьФорму()
//Код находится в цикле на тот случай, если открытых окон изменяемого документа больше одного
Форма = ОткрытьФорму("Документ.ТребованиеНакладная.Форма.ФормаДокумента",КлючПоиска,,,Окно);
//Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
//В объекте содержатся все реквизиты (элементы) формы
НовыйОбъект = Форма.Объект;
//Мы помещаем объект формы в переменную,
//так как должны передать её в процедуру на сервере,
//где нельзя изменять объект формы, зато можно править переменную содержащую его
ЗаполнитьДокументНаСервере(НовыйОбъект,ФильтрСписокСчетов);
//После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект,
//которую необходимо передать в уже полученную нами форму
КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
КонецЕсли;
КонецЦикла;
ЭтаФорма.Закрыть();
КонецЦикла;
КонецПроцедуры
Если еще не разобрались - вот решение проблемы:
https://partners.v8.1c.ru/forum/topic/1457879 Окно - это не локальная переменная, а свойство формы, появилось в 8.3.7, нужно просто переименовать.