новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Передача данных между клиентом и сервером 1с 8.2.

  • Добавить свою публикацию
  • для этого требуется регистрация

Была задача суть которой перенести из всех документов табличные части в один документ. Писать и говорить буду языком понятным программистам начинающим по крайней мере, и не буду вдаваться в подробности, мало времени на такую писанину. Итак как передать параметры с сервера на клиент?!?!?




1. Из документа  я вызываю форму обработки кодом:

&НаКлиенте
Процедура ВыбратьДокументы(Команда)
//ВыбратьДокиНаСервере();
Форма = ПолучитьФорму("Обработка.СозданиеПриходаИзНесколькихДокументов.Форма",,ЭтаФорма);
Форма.ОткрытьМодально();
КонецПроцедуры

 

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


КонецПроцедуры

 

 
 
3. И самая интересная часть, тут мы поговорим подробнее:
 
 
&НаКлиенте
Процедура ПеренестиВТЧ(Команда)
ОчиститьСообщения();
ТЧ = Объект.Документы;
Для каждого Стр из ТЧ Цикл
Доки = Стр.ПриходнаяНакладная;
Если Стр.Выбрать = Ложь Тогда
Иначе
Режим = РежимДиалогаВопрос.ДаНет;
Ответ = Вопрос(Нстр ("ru = 'Выполнить операцию заполнения?'"),Режим, 0);
Если Ответ = КодВозвратаДиалога.Да Тогда

м = ПолучитьДанные(Доки);
Для каждого строка из м Цикл
ТЧ = ВладелецФормы.Объект.Товары.Добавить();
ТЧ.Имей = строка.Имей;
ТЧ.Номенклатура = строка.Номенклатура;
ТЧ.Количество = 1;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
 
ЭтаФорма.Закрыть();
КонецПроцедуры

 

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

 

 
Запросом получаем документ, из полей ТЧ заполняем структуру, и структуру помещаем в массив, который возвращается с параметрами на клиент.. То бишь чтобы передать данные с сервера на клиент...
 
Мы засовываем данные в структуру
 
 
СтруктураДанных = Новый Структура("Номенклатура,Имей,Количество");
ЗаполнитьЗначенияСвойств(СтруктураДанных,ВыборкаДетальныеЗаписи);

 

 
 
А структуру пихаем в массив
м.Добавить(СтруктураДанных);

 

и возвращаем массив
 
А вот здесь на клиенте заполняем ТЧ владельца документа
 
 
Для каждого строка из м Цикл
ТЧ = ВладелецФормы.Объект.Товары.Добавить();
ТЧ.Имей = строка.Имей;
ТЧ.Номенклатура = строка.Номенклатура;
ТЧ.Количество = 1;
КонецЦикла;

 

 
 
Спасибо за внимание задавайте вопросы, буду отвечать, написано второпях работы много сорри...ИзображениеИзображение
 

 

 
0
Еще от автора
≡ к списку статей