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