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

Передача результатов запроса между клиентом и сервером

Автор gigi1988, 06 дек 2010, 17:26

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

gigi1988

Мне нужно динамически заполнять форму. На сервере выполняю запрос, а как результаты выборки передать обратно клиенту не знаю.
Выборку он возвращать не хочет.

&НаКлиенте
Процедура ГрОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Выборка=Получить(ВыбранноеЗначение);
Пока Выборка.Следующий() Цикл
   КонецЦикла;
КонецПроцедуры

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

            Ссылка=Справочники.Группы.НайтиПоКоду(ВыбранноеЗначение);
            Запрос.Параметры.Вставить("Ссылка", Ссылка);
            Выборка = Запрос.Выполнить().Выбрать();
   
   Возврат Выборка;   
КонецФункции

Vit1501

Попробуй выборку преобразовать в массив или структуру

gigi1988

Цитата: Vit1501 от 06 дек 2010, 17:41
Попробуй выборку преобразовать в массив или структуру
А как передать массив?
Выдает:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:

Vit1501

 массив можно передавать между клиентом и сервером, но там помоему были какие- то ограничения. Попробой тогда в структуру. однозначно могу скачать, что между сервером и клиентом нельзя передавать ссылочные типы-обрати на это внимание.

markantonio

Выборка = Запрос.Выполнить().Выбрать()

тип значения сего - "ВыборкаИзРезультатаЗапроса"

Доступность:
Сервер, толстый клиент, внешнее соединение.

так что, мил человек, никак его не передашь без преобразования.
Да и не к чему это, я думаю.

Пробуй заполнять прямо на серваке. Можно использовать "ПоместитьВоВременноеХранилище " и "ПолучитьИзВременногоХранилища"

Второй путь (если это форма списка какого нить) - выбираем тип объекта "Произвольный запрос" и пихаем туда нужный запрос.

Буду рад если смог помочь..  B)

gigi1988

Цитата: markantonio от 07 дек 2010, 14:28
Выборка = Запрос.Выполнить().Выбрать()

тип значения сего - "ВыборкаИзРезультатаЗапроса"

Доступность:
Сервер, толстый клиент, внешнее соединение.

так что, мил человек, никак его не передашь без преобразования.
Да и не к чему это, я думаю.

Пробуй заполнять прямо на серваке. Можно использовать "ПоместитьВоВременноеХранилище " и "ПолучитьИзВременногоХранилища"

Второй путь (если это форма списка какого нить) - выбираем тип объекта "Произвольный запрос" и пихаем туда нужный запрос.

Буду рад если смог помочь..  B)

Суть в следующем. Есть Документ ведомость. Нужно чтобы при выборе группы отражался список студентов этой группы и соответственно туда же ставились оценки, дата и т.д. и чтобы все это дело сохранялось после проводки документа в соответствующие справочники. Но все эти поля из разных справочников. 1С я только осваиваю, а курсовая горит сейчас :). Нужно сделать минимальный функционал.

markantonio

надо же.... уже курсовые по 8.2 народ пишет....

ну за тебя конечно не напишу, но если есть желание разобраться - разберешься.

Привожу кусок кода из мой конфы. Задача похожая.


&НаКлиенте
Процедура Подбор(Команда)
АдресМатериаловДокумента = ПоместитьТаблицуВХранилище("ТаблицаСырья");

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("АдресМатериаловДокумента", АдресМатериаловДокумента);
СтруктураПараметров.Вставить("ДатаЗапроса", Объект.Дата);

АдресЗапасовВХранилище = ОткрытьФормуМодально("Документ.ПереработкаСырья.Форма.ФормаПодбораБревен", СтруктураПараметров, ЭтаФорма);

Если ЗначениеЗаполнено(АдресЗапасовВХранилище) Тогда
ПолучитьТаблицуИзХранилища(АдресЗапасовВХранилище);
КонецЕсли;
КонецПроцедуры



Здесь создана доп форма у документа Документ.ПереработкаСырья.Форма.ФормаПодбораБревен
в ней далее будут производиться какие то действия по выбору и переносу данных в док.

Код самой большой. привожу тока ее инициализацию, дабы ты увидел сам механизм передачи параметров из одной формы в другую:

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



после определенных действий в этой форме (в твоем случае, проставки всякой информации) передаем обратно в основную форму дока:


// ФормаПодбораБревен
&НаКлиенте
Процедура ДобавитьВДокумент(Команда)
    Закрыть(ПоместитьТаблицуВХранилище());
КонецПроцедуры

markantonio

смею еще заметить, что сохранение динамических данных в справочнике - не самый лучший вариант. рекомендую попробовать регистр сведений.
В твоем случае возможно подойдет простейшая структура типа:

измерения:
сотрудник

ресурсы:
параметр1
параметр2
параметр3
.............

с периодом "По позиции регистратора"

gigi1988

Цитата: markantonio от 07 дек 2010, 15:25
смею еще заметить, что сохранение динамических данных в справочнике - не самый лучший вариант. рекомендую попробовать регистр сведений.
В твоем случае возможно подойдет простейшая структура типа:

измерения:
сотрудник

ресурсы:
параметр1
параметр2
параметр3
.............

с периодом "По позиции регистратора"

В общем данные на сервере есть. А как теперь их добавить в таблицу формы?

gigi1988


Теги:

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

Рейтинг@Mail.ru

Поиск