Вход | Регистрация
 

Как получить запрос из Таблицы управляемой формы

Как получить запрос из Таблицы управляемой формы
Я
   23th
 
01.06.21 - 14:34
Есть таблица значений в форме "ТабСум",
с колонками "Номер" и "Сумма".
Пишем запрос:

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

В Обычных формах такое проходит, в управляемых нет,
выходит ошибка: по причине:
"Содержимое объекта данных может быть выбрано только во временную таблицу"
далее:
Временную таблицу, тоже делал, и даже вместо в реквизита формы,
создавал свою таблицу значений, все равно не работает..
 
 Партнерская программа EFSOL Oblako
   aka MIK
 
1 - 01.06.21 - 14:35
"В Обычных формах такое проходит"

Вранье
   Kassern
 
2 - 01.06.21 - 14:36
(0) Ну так поместите во временную таблицу и все у вас заработает, если конечно таблицу верно в параметрах передаете.
   polosov
 
3 - 01.06.21 - 14:37
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТабСум.Номер КАК Номер,
    |    ТабСум.Сумма КАК Сумма
    |ПОМЕСТИТЬ ВТ1
    |ИЗ
    |    &ТабСум КАК ТабСум
    |;
    |ВЫБРАТЬ * ИЗ ВТ1";
    Запрос.УстановитьПараметр("ТабСум", ТабСум);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
   Kassern
 
4 - 01.06.21 - 14:37
(2) только не забудьте потом создать новый пакет запросов, куда будет помещена ваша временная таблица
   youalex
 
5 - 01.06.21 - 14:38
Если в УФ, то скорее всего,  ТабСум.Выгрузить() 
На сервере понятно.
   23th
 
6 - 01.06.21 - 15:21
(3) Делал так уже, да и сейчас снова проверил, ошибка выходит: Что ему не нравиться &, а в обычных работало
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(62)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();;
по причине:
{(6, 2)}: Неверные параметры "ТабСум"
<<?>>&ТабСум КАК ТабСум

по причине:
{(6, 2)}: Неверные параметры "ТабСум"
<<?>>&ТабСум КАК ТабСум
   Kassern
 
7 - 01.06.21 - 15:24
(6) нда...еще раз в постах (3) (5) все уже разжевали как надо. Покажи код запроса в ВТ и типзнч ТабСум, который ты в запрос пихаешь
   Kassern
 
8 - 01.06.21 - 15:25
(7) не удивлюсь если пытаешься коллекцию формы запихать в параметры запроса))
   23th
 
9 - 01.06.21 - 15:36
(8) Не удивляйтесь, ТабСум - это есть данные формы, т.к. это реквизит формы, с типом значений - Таблица значений,
как тогда ее преобразовать в ТЗ, или в какой тип ее надо преобразовать
   Kassern
 
10 - 01.06.21 - 15:39
(9) ТЗ=ТабСум.Выгрузить(); где ТабСум  - данные формы коллекции. Вам же написали в (5)
   23th
 
11 - 01.06.21 - 15:44
(10) Сделал,
теперь выходит ошибка:Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(22)}:    ТабРез = ПолучитьЗапрос() ;

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения ти
   RomanYS
 
12 - 01.06.21 - 15:52
(11) На клиент ТЗ не передать, делай реквизитом формы и заполняй на сервере
   23th
 
13 - 01.06.21 - 15:53
(12) Как это сделать? Тем более у меня ТабСум и так Таблица значений, зачем делать еще Таблицу значений на форме
   polosov
 
14 - 01.06.21 - 15:55
(13) Из криокамеры вылез? Добро пожаловать в дивный новый мир!
   Kassern
 
15 - 01.06.21 - 15:55
(13) покажи весь свой код
   Kassern
 
16 - 01.06.21 - 15:57
(11) и желательно вместе с директивами (&НаКлиенте, &НаСервере и т.д.)
   Kassern
 
17 - 01.06.21 - 15:57
(13) не надо делать еще таблицу на форме...
   23th
 
18 - 01.06.21 - 15:58
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    НовСтрока = ТабСум.Добавить();
    НовСтрока.Номер = "001";
    НовСтрока.Сумма = 1;
    
    НовСтрока = ТабСум.Добавить();
    НовСтрока.Номер = "002";
    НовСтрока.Сумма = 1.20;
    
    НовСтрока = ТабСум.Добавить();
    НовСтрока.Номер = "003";
    НовСтрока.Сумма = 1.55;
    
КонецПроцедуры


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


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

    |ВЫБРАТЬ
    |    ВТ1.Номер КАК Номер,
    |    ВТ1.Сумма КАК Сумма
    |ИЗ
    |    ВТ1 КАК ВТ1";
    Запрос.УстановитьПараметр("ТабСум", ТЗ);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    возврат РезультатЗапроса;
    
КонецФункции
   23th
 
19 - 01.06.21 - 15:59
(15) ответил выше
   Kassern
 
20 - 01.06.21 - 16:02
(19) И зачем вы возвращаете на клиент ТЗ? Для чего? Получили вы ТЗ по запросу, так обработайте его на сервере. Если уж так приспичило ТЗ передать на клиент, то можно через массив структур сделать, но вам это явно ни к чему. Если вам нужно заполнить текущую ТЗ на форме, то и заполняйте ее на сервере, а не передавайте на клиент.
   23th
 
21 - 01.06.21 - 16:08
(20) СПАСИБО Извините, я плохо вижу, у минус 20 зрение, пишет мой ученик под диктовку, я все осознал
на будущее для других вот код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    НовСтрока = ТабСум.Добавить();
    НовСтрока.Номер = "001";
    НовСтрока.Сумма = 1;
    
    НовСтрока = ТабСум.Добавить();
    НовСтрока.Номер = "002";
    НовСтрока.Сумма = 1.20;
    
    НовСтрока = ТабСум.Добавить();
    НовСтрока.Номер = "003";
    НовСтрока.Сумма = 1.55;
    
КонецПроцедуры

&НаКлиенте
Процедура Проверить(Команда)
    
 ПроверитьНаСервере() ;
        
КонецПроцедуры

Процедура ПроверитьНаСервере()

    
ТабРез = ПолучитьЗапрос() ;
    
КонецПроцедуры

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

    |ВЫБРАТЬ
    |    ВТ1.Номер КАК Номер,
    |    ВТ1.Сумма КАК Сумма
    |ИЗ
    |    ВТ1 КАК ВТ1";
    Запрос.УстановитьПараметр("ТабСум", ТЗ);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    возврат РезультатЗапроса;
    
КонецФункции
   polosov
 
22 - 01.06.21 - 16:15
(21) Ну вот. Мне стало стыдно за (14). Прошу прощения.
   Kassern
 
23 - 01.06.21 - 16:24
(21) на будущее - не подменяйте понятия. Результат запроса это Запрос.Выполнить(). ТЗ=Результат.Выгрузить(); Если отдельные результаты пакетов запроса не нужны, то можно просто НужноеНазваниеТЗ=Запрос.Выполнить().Выгрузить();
   23th
 
24 - 01.06.21 - 16:26
(23) Все верно! Это просто ученик из хелповки Инфостарта сделал копипаст. (22) Да все норм, так и работаем
   hhhh
 
25 - 01.06.21 - 16:32
(24) это как в анекдоте: Доктор, у моего друга проблема. - Показывайте уже вашего друга.
   RomanYS
 
26 - 01.06.21 - 16:34
(21) Перед 
Процедура ПроверитьНаСервере()
должно быть 
&НаСервере
   hhhh
 
27 - 01.06.21 - 16:54
(26) нормально, &НаСервере по умолчанию идет
   Kassern
 
28 - 01.06.21 - 17:03
(27) лучше явно указывать
   RomanYS
 
29 - 01.06.21 - 17:06
(27) По идее так. Только вот судя по (11) процедура почему-то выполняется на клиенте, иначе непонятно где там ошибка передачи
   Kassern
 
30 - 01.06.21 - 17:08
(29) потому что в (18) было явно возвращение ТЗ на клиент "&НаКлиенте Процедура Проверить(Команда)" На это у ТС и ругалось, 1ска не умеет ТЗ передавать на клиент.
 
 


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.