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