|
Как получить запрос из Таблицы управляемой формы | ☑ | ||
---|---|---|---|---|
0
23th
01.06.21
✎
14:34
|
Есть таблица значений в форме "ТабСум",
с колонками "Номер" и "Сумма". Пишем запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТабСум.Номер КАК Номер, | ТабСум.Сумма КАК Сумма |ИЗ | &ТабСум КАК ТабСум"; Запрос.УстановитьПараметр("ТабСум", ТабСум); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); В Обычных формах такое проходит, в управляемых нет, выходит ошибка: по причине: "Содержимое объекта данных может быть выбрано только во временную таблицу" далее: Временную таблицу, тоже делал, и даже вместо в реквизита формы, создавал свою таблицу значений, все равно не работает.. |
|||
1
aka MIK
01.06.21
✎
14:35
|
"В Обычных формах такое проходит"
Вранье |
|||
2
Kassern
01.06.21
✎
14:36
|
(0) Ну так поместите во временную таблицу и все у вас заработает, если конечно таблицу верно в параметрах передаете.
|
|||
3
polosov
01.06.21
✎
14:37
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ТабСум.Номер КАК Номер, | ТабСум.Сумма КАК Сумма |ПОМЕСТИТЬ ВТ1 |ИЗ | &ТабСум КАК ТабСум |; |ВЫБРАТЬ * ИЗ ВТ1"; Запрос.УстановитьПараметр("ТабСум", ТабСум); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); |
|||
4
Kassern
01.06.21
✎
14:37
|
(2) только не забудьте потом создать новый пакет запросов, куда будет помещена ваша временная таблица
|
|||
5
youalex
01.06.21
✎
14:38
|
Если в УФ, то скорее всего, ТабСум.Выгрузить()
На сервере понятно. |
|||
6
23th
01.06.21
✎
15:21
|
(3) Делал так уже, да и сейчас снова проверил, ошибка выходит: Что ему не нравиться &, а в обычных работало
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(62)}: Ошибка при вызове метода контекста (Выполнить) РезультатЗапроса = Запрос.Выполнить().Выгрузить();; по причине: {(6, 2)}: Неверные параметры "ТабСум" <<?>>&ТабСум КАК ТабСум по причине: {(6, 2)}: Неверные параметры "ТабСум" <<?>>&ТабСум КАК ТабСум |
|||
7
Kassern
01.06.21
✎
15:24
|
(6) нда...еще раз в постах (3) (5) все уже разжевали как надо. Покажи код запроса в ВТ и типзнч ТабСум, который ты в запрос пихаешь
|
|||
8
Kassern
01.06.21
✎
15:25
|
(7) не удивлюсь если пытаешься коллекцию формы запихать в параметры запроса))
|
|||
9
23th
01.06.21
✎
15:36
|
(8) Не удивляйтесь, ТабСум - это есть данные формы, т.к. это реквизит формы, с типом значений - Таблица значений,
как тогда ее преобразовать в ТЗ, или в какой тип ее надо преобразовать |
|||
10
Kassern
01.06.21
✎
15:39
|
(9) ТЗ=ТабСум.Выгрузить(); где ТабСум - данные формы коллекции. Вам же написали в (5)
|
|||
11
23th
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 по причине: Ошибка отображения ти |
|||
12
RomanYS
01.06.21
✎
15:52
|
(11) На клиент ТЗ не передать, делай реквизитом формы и заполняй на сервере
|
|||
13
23th
01.06.21
✎
15:53
|
(12) Как это сделать? Тем более у меня ТабСум и так Таблица значений, зачем делать еще Таблицу значений на форме
|
|||
14
polosov
01.06.21
✎
15:55
|
(13) Из криокамеры вылез? Добро пожаловать в дивный новый мир!
|
|||
15
Kassern
01.06.21
✎
15:55
|
(13) покажи весь свой код
|
|||
16
Kassern
01.06.21
✎
15:57
|
(11) и желательно вместе с директивами (&НаКлиенте, &НаСервере и т.д.)
|
|||
17
Kassern
01.06.21
✎
15:57
|
(13) не надо делать еще таблицу на форме...
|
|||
18
23th
01.06.21
✎
15:58
|
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) НовСтрока = ТабСум.Добавить(); НовСтрока.Номер = "001"; НовСтрока.Сумма = 1; НовСтрока = ТабСум.Добавить(); НовСтрока.Номер = "002"; НовСтрока.Сумма = 1.20; НовСтрока = ТабСум.Добавить(); НовСтрока.Номер = "003"; НовСтрока.Сумма = 1.55; КонецПроцедуры &НаКлиенте Процедура Проверить(Команда) ТабРез = ПолучитьЗапрос() ; КонецПроцедуры &НаСервере Функция ПолучитьЗапрос() ТЗ=ТабСум.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТабСум.Номер КАК Номер, | ТабСум.Сумма КАК Сумма |ПОМЕСТИТЬ ВТ1 |ИЗ | &ТабСум КАК ТабСум |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ1.Номер КАК Номер, | ВТ1.Сумма КАК Сумма |ИЗ | ВТ1 КАК ВТ1"; Запрос.УстановитьПараметр("ТабСум", ТЗ); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); возврат РезультатЗапроса; КонецФункции |
|||
19
23th
01.06.21
✎
15:59
|
(15) ответил выше
|
|||
20
Kassern
01.06.21
✎
16:02
|
(19) И зачем вы возвращаете на клиент ТЗ? Для чего? Получили вы ТЗ по запросу, так обработайте его на сервере. Если уж так приспичило ТЗ передать на клиент, то можно через массив структур сделать, но вам это явно ни к чему. Если вам нужно заполнить текущую ТЗ на форме, то и заполняйте ее на сервере, а не передавайте на клиент.
|
|||
21
23th
01.06.21
✎
16:08
|
(20) СПАСИБО Извините, я плохо вижу, у минус 20 зрение, пишет мой ученик под диктовку, я все осознал
на будущее для других вот код: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) НовСтрока = ТабСум.Добавить(); НовСтрока.Номер = "001"; НовСтрока.Сумма = 1; НовСтрока = ТабСум.Добавить(); НовСтрока.Номер = "002"; НовСтрока.Сумма = 1.20; НовСтрока = ТабСум.Добавить(); НовСтрока.Номер = "003"; НовСтрока.Сумма = 1.55; КонецПроцедуры &НаКлиенте Процедура Проверить(Команда) ПроверитьНаСервере() ; КонецПроцедуры Процедура ПроверитьНаСервере() ТабРез = ПолучитьЗапрос() ; КонецПроцедуры &НаСервере Функция ПолучитьЗапрос() ТЗ=ТабСум.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТабСум.Номер КАК Номер, | ТабСум.Сумма КАК Сумма |ПОМЕСТИТЬ ВТ1 |ИЗ | &ТабСум КАК ТабСум |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ1.Номер КАК Номер, | ВТ1.Сумма КАК Сумма |ИЗ | ВТ1 КАК ВТ1"; Запрос.УстановитьПараметр("ТабСум", ТЗ); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); возврат РезультатЗапроса; КонецФункции |
|||
22
polosov
01.06.21
✎
16:15
|
(21) Ну вот. Мне стало стыдно за (14). Прошу прощения.
|
|||
23
Kassern
01.06.21
✎
16:24
|
(21) на будущее - не подменяйте понятия. Результат запроса это Запрос.Выполнить(). ТЗ=Результат.Выгрузить(); Если отдельные результаты пакетов запроса не нужны, то можно просто НужноеНазваниеТЗ=Запрос.Выполнить().Выгрузить();
|
|||
24
23th
01.06.21
✎
16:26
|
(23) Все верно! Это просто ученик из хелповки Инфостарта сделал копипаст. (22) Да все норм, так и работаем
|
|||
25
hhhh
01.06.21
✎
16:32
|
(24) это как в анекдоте: Доктор, у моего друга проблема. - Показывайте уже вашего друга.
|
|||
26
RomanYS
01.06.21
✎
16:34
|
(21) Перед
Процедура ПроверитьНаСервере() должно быть &НаСервере |
|||
27
hhhh
01.06.21
✎
16:54
|
(26) нормально, &НаСервере по умолчанию идет
|
|||
28
Kassern
01.06.21
✎
17:03
|
(27) лучше явно указывать
|
|||
29
RomanYS
01.06.21
✎
17:06
|
(27) По идее так. Только вот судя по (11) процедура почему-то выполняется на клиенте, иначе непонятно где там ошибка передачи
|
|||
30
Kassern
01.06.21
✎
17:08
|
(29) потому что в (18) было явно возвращение ТЗ на клиент "&НаКлиенте Процедура Проверить(Команда)" На это у ТС и ругалось, 1ска не умеет ТЗ передавать на клиент.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |