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

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

Автор Kolya123, 07 окт 2014, 15:45

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

cska-fanat-kz

если хотите заполнить несколько строк табличной части...
ну делайте КОНТЕКСТНЫЙ серверный вызов и работайте с ТЧ как в обычном приложении...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Kolya123

Цитата: cska-fanat-kz от 08 окт 2014, 15:47
если хотите заполнить несколько строк табличной части...
ну делайте КОНТЕКСТНЫЙ серверный вызов и работайте с ТЧ как в обычном приложении...
А можете скинуть какой - нибудь код пример этого?
Добавлено: 09 окт 2014, 01:33


Подскажите пожалуйста еще 2 момента:
1) Вот у меня есть кнопка1, нажимая на нее и происходит запрос.
Если нажать на нее выводится
{Документ.Возврат.Форма.ФормаДокумента.Форма(10)}: Значение не является значением объектного типа (Фильм)
      Элементы.Информация.ТекущиеДанные.Фильм = СтрокаМассива;
А если нажать сначала на кнопку Добавить в табличной части, то все нормально, и отсюда вопрос - как можно обойтись только нажатием кнопки1?
2) В табличной части присутствует всего одна строка  и заполняется последним значением, как сделать, чтобы строки сами добавлялись и заполнялись?
&НаКлиенте
Процедура Заполнить(Элемент,Команда,СтандартнаяОбработка)
   Массив = Новый Массив;
   
   ЗаполнитьНаСервере(Массив);
   
   Для каждого СтрокаМассива из Массив Цикл
      Элементы.Информация.ТекущиеДанные.Фильм = СтрокаМассива;
   
   КонецЦикла;
   
КонецПроцедуры


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

   РезультатЗапроса = Запрос.Выполнить();

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

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   Массив.Добавить(ВыборкаДетальныеЗаписи.Фильм);   
   КонецЦикла;

   

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

TreeDogNight

Поставьте точку останова в этом месте
Элементы.Информация.ТекущиеДанные.Фильм = СтрокаМассива;
И вычислите, какое значение и тип оно имеет

cska-fanat-kz

Цитата: Kolya123 от 08 окт 2014, 15:53А если нажать сначала на кнопку Добавить в табличной части, то все нормально, и отсюда вопрос - как можно обойтись только нажатием кнопки1?

проверять количество строк и если =0, то
НоваяСтрока = ТЧ.Добавить();
//далее заполняем
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Kolya123

Спасибо всем, очень помогли =)
Добавлено: 10 окт 2014, 01:06


Подскажите, вроде все верно, а в ТЧ только в первой строке заполнятся последним значением массива

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

    Пока Не Счетчик = МассивФильмов.Количество() Цикл
      ТД.Срок = МассивСрок.Получить(Счетчик);
      ТД.Фильм = МассивФильмов.Получить(Счетчик);
      ТД.Стоимость = МассивСтоимость.Получить(Счетчик);
      
      Элементы.Информация.ДобавитьСтроку();
      
      Счетчик = Счетчик + 1;
      
                 
   КонецЦикла;
   
   
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(МассивФильмов,МассивКоличество,МассивСрок,МассивСтоимость,МассивКлиент,МассивСтатус,МассивДата)

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

   РезультатЗапроса = Запрос.Выполнить();

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

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    МассивФильмов.Добавить(ВыборкаДетальныеЗаписи.Фильм) ;
   МассивКоличество.Добавить(ВыборкаДетальныеЗаписи.Количество) ;
    МассивСрок.Добавить(ВыборкаДетальныеЗаписи.Срок) ;
    МассивСтоимость.Добавить(ВыборкаДетальныеЗаписи.Стоимость) ;
    МассивКлиент.Добавить(ВыборкаДетальныеЗаписи.Клиент) ;
    МассивСтатус.Добавить(ВыборкаДетальныеЗаписи.Статус) ;
    МассивДата.Добавить(ВыборкаДетальныеЗаписи.Дата) ;
      
   КонецЦикла;

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

cska-fanat-kz

&НаСервереБезКонтекста
Процедура ПолучитьДанные()

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

   РезультатЗапроса = Запрос.Выполнить();

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

//или цикл по выборке
//или
//ОбъектСервера.Информация.Загрузить(РезультатЗапроса.Выгрузить());

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

КонецПроцедуры
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Kolya123

Цитата: cska-fanat-kz от 10 окт 2014, 07:28
&НаСервереБезКонтекста
Процедура ПолучитьДанные()

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

   РезультатЗапроса = Запрос.Выполнить();

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

//или цикл по выборке
//или
//ОбъектСервера.Информация.Загрузить(РезультатЗапроса.Выгрузить());

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

КонецПроцедуры
А скажите пожалуйста почему мой вариант не работает?

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Kolya123

Цитата: cska-fanat-kz от 10 окт 2014, 10:19
А мой? Работает?
Спасибо Вам, но я со своим разобрался.
Дело было в ТД = Элементы.Информация.ТекущиеДанные;
Из - за этой строки не обновлялись значения.

Теги:

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

Рейтинг@Mail.ru

Поиск