Имя: Пароль:
1C
1С v8
запрос к таблице значений
,
0 Deenka
 
20.06.12
12:16
пробую построить запрос к таблице значений. тз3 с полем Док
Как обратится к результату запроса?
Запрос = Новый Запрос;
   МВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МВТ;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ТЗ3.Док
   |ПОМЕСТИТЬ
   |    ТЗ3
   |ИЗ
   |    &ТЗ3 КАК ТЗ3";
   
       Запрос.УстановитьПараметр("ТЗ3", тз3);
       Результат = Запрос.Выполнить();
       Вибірка = Результат.Выбрать();      
       Пока Вибірка.Следующий() Цикл
          сообщить(Вибірка.док);    
       КонецЦикла;
1 zak555
 
20.06.12
12:17
ТЗ получено из запроса ?
2 Deenka
 
20.06.12
12:18
вылетает ошибка
{Форма.Форма.Форма(85)}: Поле об`єкту не виявлено (док)
          сообщить(Вибірка.док);
3 zak555
 
20.06.12
12:18
+ ещё язык english добавь
4 ssh2006
 
20.06.12
12:20
> Как обратится к результату запроса?

       Результат = Запрос.Выполнить();
       Вибірка = Результат.Выбрать();
5 Reset
 
20.06.12
12:20
"тз3 с полем Док"
противоречит
"Поле об`єкту не виявлено (док)"

Покажи формирование тз3
6 Нуф-Нуф
 
20.06.12
12:21
"Вибірка" и не впадлу ж вам раскладку переключать дл i
7 Жан Пердежон
 
20.06.12
12:21
(0) у тебя в запросе ничего не выбирается
8 Жан Пердежон
 
20.06.12
12:22
+ к (7): учу пользоваться поиском дорого
9 ssh2006
 
20.06.12
12:22
В результате такого запроса содержится одна строка с количеством записей, как-то так вроде
10 KA-52
 
20.06.12
12:24
(0) обрабатывать полученную временную таблицу религия запрещает?
11 Deenka
 
20.06.12
12:24
ТЗ3=Новый ТаблицаЗначений;
   ТЗ3.Колонки.Добавить("Док",Новый ОписаниеТипов("Строка"));
       
   ФайлДаних = Новый XBase();
       ФайлДаних.ОткрытьФайл("C:\ЖО.dbf");
   ФайлДаних.Первая();
               
   Пока НЕ ФайлДаних.ВКонце() Цикл
   НоваяСтрока1 = ТЗ3.Добавить();
       НоваяСтрока1["Док"] = СокрЛП(ФайлДаних.DOC);

       ФайлДаних.Следующая();

так заполняю тз3
       
   КонецЦикла;
12 Жан Пердежон
 
20.06.12
12:26
(11) молодец
13 zak555
 
20.06.12
12:27
1. что в ЖО.dbf ?
2. в имени файла буквы не пропущены ?
14 Reset
 
20.06.12
12:27
(11) В (7) ответ правильный, я смотрел невнимательно
15 ssh2006
 
20.06.12
12:28
> ФайлДаних = Новый XBase();

Здесь ошибка, нужно так:

ФайлДаНах = Новый XBase();
16 KA-52
 
20.06.12
12:28
пилят, набери в яндексе "запрос к таблице значений ". Первая ссылка  - ответ
17 Рэйв
 
20.06.12
12:28
"ВЫБРАТЬ
   |    Т.Док
   |ПОМЕСТИТЬ
   |    ТЗ3
   |ИЗ
   |    &ТЗ3 КАК Т
;
Выбрать * Из ТЗ3
";
18 Рэйв
 
20.06.12
12:31
за ТЗ3 - руки оторвать. Будут потом люди разбираться где там 3 а где З
19 MaXpaT
 
20.06.12
12:31
вот здесь ошибка:
надо вместо "КонецЦикла"  писать "КонэцЦiклу"
20 Рэйв
 
20.06.12
12:32
Тогда уж ПiсецЦiклу
21 KA-52
 
20.06.12
12:35
(20) нене, СлаваГiроям
22 Deenka
 
20.06.12
12:41
подскажите, пожалуйста, как правильно построить запрос
23 Агент Инфостарта
 
20.06.12
12:42
(22) Вам в посте 17 показали.
24 Рэйв
 
20.06.12
12:42
(22) Чем (17) не устроило?
25 Рэйв
 
20.06.12
12:43
только палки надо добавить к трем строкам. а то щас начнеь постить об синтаксической ошибке:-)
26 Deenka
 
20.06.12
12:50
Рэйв, спасибо! работает
27 Deenka
 
20.06.12
13:42
хочу в этот же запрос добавить условие


Для Каждого Строкатз1 Из тз1 Цикл
           
               Запрос = Новый Запрос;
               МВТ = Новый МенеджерВременныхТаблиц;
               Запрос.МенеджерВременныхТаблиц = МВТ;
               Запрос.Текст =
               "ВЫБРАТЬ
               |    Т.Док,
               |ПОМЕСТИТЬ
               |    ТЗ3
               |ИЗ
               |    &ТЗ3 КАК Т;
               |ВЫБРАТЬ * ИЗ ТЗ3
               |ГДЕ
               |ТЗ3.Док = &Строка";

                   Запрос.УстановитьПараметр("ТЗ3", Тз3);
                   Запрос.УстановитьПараметр("Строка", Строкатз1["док"]);

                   Результат = Запрос.Выполнить();
                   Вибірка = Результат.Выбрать();      
                   Пока Вибірка.Следующий() Цикл
                       сообщить(Вибірка.Док);
                       сообщить
                       сообщить("--------------");
                   КонецЦикла;
28 Deenka
 
20.06.12
13:44
но при исполнении вылетает ошибка

{Форма.Форма.Форма(136)}: Помилка при виклику методу контексту (Выполнить)
                   Результат = Запрос.Выполнить();
через:
{(14, 10)}: Неправильні параметри в операції порівняння. Не можна порівнювати поля
необмеженої довжини і поля несумісних типів.
ТЗ3.Док <<?>>= &Строка
29 Агент Инфостарта
 
20.06.12
13:47
(28) Моя твой не понимай.
30 Deenka
 
20.06.12
13:49
Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченой длины и поля несоответсвующих типов
31 Рэйв
 
20.06.12
13:55
Если уж взялся заталкивать тз в запросы, то закинь и вторую таблицу в запрос, а там соедини по полю Док.

А за запрос в цикле будешь гореть в аду:-) Тем боле с повторным созданием объектов.
32 Deenka
 
20.06.12
14:03
мне надо перебрать все значения из тз1 по полю Док и на основании каждого значения нужно создать Документ Операция, который будет заполнятся соответсвующими данными из тз3
33 Рэйв
 
20.06.12
14:04
(32)Не возражаю. (31) тебе в помощь
34 Deenka
 
20.06.12
14:05
вот и мучаюсь как составить запрос
35 Рэйв
 
20.06.12
14:07
повтори (17) для тз1 таблице, только сделай
Поместить тз1

Потом

Выбрать тз1.Док,ЕстьNULL(тз3.Док,"нет соответсвия") КАК Док_тз3 Из тз1
Левое Соединение тз3
По тз1.Док=тз3.Док


как то так.
36 Рэйв
 
20.06.12
14:09
+ ну и нужные данные кроме Док вытягивай из тз3, я ж нен знаю что там у тебя
37 Reset
 
20.06.12
14:11
ВЫБРАТЬ
|    Т.Док,    // Здесь нужно Выразить(Т.Док КАК Строка(100)) // Вместо 100 - нужна длина строки
|ПОМЕСТИТЬ
....

==>

ВЫБРАТЬ
|    Выразить(Т.Док КАК Строка(100)) КАК Док  // Вместо 100 - нужна длина строки
|ПОМЕСТИТЬ
....
38 Reset
 
20.06.12
14:12
Вероятно, можно и без указания длины (то есть просто СТРОКА) - задачу не знаю
39 Reset
 
20.06.12
14:13
(37) (38) Пояснение к (28)