Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
01 июл 2024, 09:31

Как передать данные запроса с сервера на клиент?

Автор mila1231, 15 дек 2017, 05:40

0 Пользователей и 1 гость просматривают эту тему.

mila1231

Привыкла в обычном приложении всё делать, но тут управляемое ...Собственно задача открыть форму документа и заполнить её по средствам данных из другого документа.
Создаётся внешняя обработка...Далее есть реквизит, ссылка на документ.

&НаСервере
Функция Команда1НаСервере()
    ОбъектОбработки=РеквизитФормыВЗначение("Объект");
    Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
              | СчетНаОплатуПокупателюТовары.Номенклатура,
              -------
              |ИЗ
              | Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
              |ГДЕ
              | СчетНаОплатуПокупателюТовары.Ссылка = &ссылка" ;

Запрос.УстановитьПараметр("ссылка", Объект.НужныйДокумент);


Результат = Запрос.Выполнить().Выгрузить();
//Объект.дата.Загрузить(Результат);



КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
    ОткрытьФорму( "Документ.СчетНаОплатуПоставщика.Форма.ФормаДокумента");

    как обратиться к полученным данным из запроса?


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


Зы вроде инфу нашла, но в моем случае что-то не так.

mila1231

запихала в массив,
массивДанные = Новый Массив();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СтруктураДанных = Новый Структура("Номенклатура,Содержание,Количество");
ЗаполнитьЗначенияСвойств(СтруктураДанных,ВыборкаДетальныеЗаписи);
массивДанные.Добавить(СтруктураДанных);
КонецЦикла;

Возврат массивДанные;
соответственно на клиенте
Форма = ОткрытьФорму("Документ.СчетНаОплатуПоставщика.Форма.ФормаДокумента",,ЭтаФорма);
   
массивданные = ПолучитьДанные();
Для каждого строка из массивДанные Цикл

сообщить(строка.Номенклатура) ;
КонецЦикла;    
и собственно Номенклатура сообщается, но получается как обратиться к табличной части открытого документа


AIFrame

Функция Команда1НаСервере()
Функция предполагает Возврат. У вас его нет.

Данные с сервера на клиент передаются также как обмен между переменной и функцией в обычных формах.
&НаКлиенте
Процедура Команда1(Команда)
    Результат = Команда1НаСервере();   
КонецПроцедуры

Вместо открыть форму, вы можете Форма = ПолучитьФорму() и заполнить реквизиты как обычно. Форма.Реквизит = значение.
После проделанных манипуляций - Форма.Открыть();



mila1231

Цитата: AIFrame от 15 дек 2017, 07:17

Вместо открыть форму, вы можете Форма = ПолучитьФорму() и заполнить реквизиты как обычно. Форма.Реквизит = значение.
После проделанных манипуляций - Форма.Открыть();

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

Запрос.УстановитьПараметр("ссылка", Объект.НужныйДокумент);


РезультатЗапроса = Запрос.Выполнить();
массивДанные = Новый Массив();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СтруктураДанных = Новый Структура("Номенклатура,Содержание,Количество");
ЗаполнитьЗначенияСвойств(СтруктураДанных,ВыборкаДетальныеЗаписи);
массивДанные.Добавить(СтруктураДанных);
КонецЦикла;

Возврат массивДанные;

КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
 
ДанныеизЗапроса = ПолучитьДанные();

Форма = ПолучитьФорму("Документ.СчетНаОплатуПоставщика.Форма.ФормаДокумента");

форма.Склад = "Основной";   //т.е тут просто грубо, чтоб проверить , соответственно тут ошибк, что нет поля склвд
Для каждого строка из ДанныеизЗапроса Цикл

сообщить(строка.Номенклатура) ;
КонецЦикла;
Форма.Открыть();
КонецПроцедуры

Добавлено: 15 дек 2017, 08:03


Склада и правда нет... поменяла на Организацию, всё равно пишет нет такого реквизита.....

AIFrame

Цитата: mila1231 от 15 дек 2017, 07:49форма.Склад = "Основной";
А реквизит формы Склад - это строка?
Откройте форму этого документа, и посмотрите на поле Склад - тип данных и значение в свойстве данные. Скорее всего там Объект.Склад.
Чтобы не заморачиваться сейчас с получением ссылки справочника, потренеруйтесь на поле комментария у документа.


temrmal

Что вы делаете??? На клиенте заполнять документ неверно в корне.

&НаКлиенте
Процедура Команда(Команда)

Форма = ПолучитьФорму("Документ.НашДокумент.ФормаОбъекта");
ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
ЗаполнитьДокументНаСервере(ДанныеФормы); // Заполняем документ на сервере !!!!!
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Открыть();

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


Также прочитайте про ОбработкаЗаполнения

mila1231

Цитата: AIFrame от 15 дек 2017, 09:07
Цитата: mila1231 от 15 дек 2017, 07:49форма.Склад = "Основной";
А реквизит формы Склад - это строка?
Откройте форму этого документа, и посмотрите на поле Склад - тип данных и значение в свойстве данные. Скорее всего там Объект.Склад.
Чтобы не заморачиваться сейчас с получением ссылки справочника, потренеруйтесь на поле комментария у документа.

Спасибо всё заработало. У меня ещё один вопрос, если не трудно.... я данные отправила в массив, а какие ещё есть варианты, т.е, чтоб не перечислять данные, которые необходимы, а, чтоб от запроса зависело ?

AIFrame

До тех пор, пока вы не пытаетесь получить объекты, закрытые на стороне клиента (реквизит ссылки, например), можно получать в любом виде.
Можете .Выгрузить(), можете .Выбрать(), можете в ТЧ, можете в массив, в СписокЗначений. В цикле результат перебирать необязательно, есть такие методы как .ЗагрузитьЗначения() .ВыгрузитьКолонку().

Например
&НаКлиенте
Процедура ПамПам(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СписокВыбора = ПолучитьСписокВыбораНаСервере(ТекущиеДанные.Параметр);
Если СписокВыбора.Количество() <> 0 Тогда
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(СписокВыбора);
КонецЕсли;

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

&НаСервере
Функция ПолучитьСписокВыбораНаСервере(СсылкаНаПараметр)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БиблиотекаЗначенийУстройств.Ссылка КАК Ссылка
|ИЗ
| Справочник.БиблиотекаЗначенийУстройств КАК БиблиотекаЗначенийУстройств
|ГДЕ
| БиблиотекаЗначенийУстройств.Родитель = &Родитель
| И БиблиотекаЗначенийУстройств.ЭтоГруппа = ЛОЖЬ";
Запрос.УстановитьПараметр("Родитель", СсылкаНаПараметр);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.ВыгрузитьКолонку("Ссылка");
КонецФункции


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск