Имя: Пароль:
1C
1С v8
запрос по ОЛЕ из 77 к 8.2
,
0 арах
 
15.03.12
14:36
в 8.2 делается так :

   Запрос.Текст = "ВЫБРАТЬ
   |    Реализация.Номер как НомерДок,
   |    Реализация.Дата как ДатаДок,
   |    Реализация.Контрагент,
   |    Реализация.Договор,
   |    Реализация.Товары.(
   |        Номенклатура,
   |        Характеристика,
   |        КоличествоУпаковок,
   |        Количество,
   |        Цена,
   |        Сумма,
   |        СтавкаНДС,
   |        СуммаНДС,
   |        СуммаСНДС
   |    ) КАК товары
   |
   |ИЗ
   |    Документ.РеализацияТоваровУслуг КАК Реализация


Выборка = Запрос.Выполнить().Выбрать();
   
Пока Выборка.Следующий() Цикл
для каждого стр из выборка.товары цикл
  номен= стр.номенклатура;
конеццикла;
конеццикла;


вопрос как туже выборку сделать по ОЛЕ в 77 из этогоже запроса?
1 nicxxx
 
15.03.12
14:46
Запрос = База.NewObject("Запрос");
   
   Запрос.Текст = "ВЫБРАТЬ
   | Док.Ссылка,
   | Док.Номер,
   | Док.Дата,
   | Док.Организация.Код КАК Организация,
   | Док.СкладОтправитель.Код КАК СкладОтправитель,
   | Док.СкладПолучатель.Код КАК СкладПолучатель
   |ИЗ
   | Документ.ПеремещениеТоваров КАК Док
   |ГДЕ
   | Док.Дата = &ДатаНач
   |";
   
   Запрос.УстановитьПараметр("ДатаНач",Дата(2012,01,01));
   
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий()<>0 Цикл
   
       Док = Выборка.Ссылка;

               ...

   КонецЦикла;
2 арах
 
15.03.12
14:46
(1)нет тут конкретно вопрос обхода табличной части
3 andrewks
 
15.03.12
14:48
(2) можно вопрос? нахрена такой запрос тогда, если ты потом собрался ТЧ отдельно обходить? или ты хочешь сделать совсем виртуозно, и зафигачить ещё один запрос в цикле?
4 Rovan
 
гуру
15.03.12
14:48
(1) делай запрос сразу к ТЧ
| выбрать
|Реализация.Ссылка,
|Реализация.Ссылка.дата,
...
|из
|    Документ.РеализацияТоваровУслуг КАК Реализация
5 арах
 
15.03.12
14:50
(3)(4) хочу сделать 1 запрос чтобы не делать еще один запрос к тч в цикле
6 арах
 
15.03.12
14:52
в 8.2 все гуд работает:) а вот как сделать в 77 которая не знает  цикла "для каждого"
7 nicxxx
 
15.03.12
14:53
ну какая разница, обход Таб Части или документов?
вот так работает:
Пока Выборка.Следующий()<>0 Цикл
8 andrewks
 
15.03.12
14:53
(5) ну так и делай один запрос
9 арах
 
15.03.12
14:55
ну делаю я такой запрос как написано в (0) обходится шапка.... а как добраться до строк???
10 Staffa
 
15.03.12
14:56
(9) тебе говорят, выборку строк тоже в запрос засандаль
11 nicxxx
 
15.03.12
14:56
ВЫБРАТЬ
       Реализация.Номер как НомерДок,
       Реализация.Дата как ДатаДок,
       Реализация.Контрагент,
       Реализация.Договор,
       Товары.Номенклатура
       Товары.ХХХХХХ
   
ИЗ
       Документ.РеализацияТоваровУслуг КАК Реализация
       Левое соединение Документ.РеализацияТоваровУслуг.Товары КАК Товары ПО Товары.Ссылка=Реализация.Ссылка
12 viktor_vv
 
15.03.12
14:57
(9) Предопределенная группировка СтрокаДокумента.
13 Rovan
 
гуру
15.03.12
14:58
(11) а мой вариант без соединений !
14 nicxxx
 
15.03.12
15:00
(13) думаешь, без соединений лучше? имхо, субд все равно сделает join 2-х таблиц
15 арах
 
15.03.12
15:03
(12) ето че?
(11) не то ! получится куча строк потом их в выборке сортировать.....
надо именно как в (0) чтоб строка содержала вложенную таблицу товары и моно было потом в выборке пробежаться по этой таблице....
как еще объяснить не знаю:)
16 andrewks
 
15.03.12
15:04
блеать...

у любой коллекции элементов есть индекс. открой для себя, наконец, СП!
17 viktor_vv
 
15.03.12
15:07
(15) А, тормознул. Подумал тебе к 77 запрос семерочный надо.
18 арах
 
15.03.12
15:07
(16) а подробнее? как написать цикл по вложенной табличке?:)
19 арах
 
15.03.12
15:16
блин самбы разобрался бы еслиб в 77 был нормальный отладчик:) а так она сволочь даже не хочет выборка.товары в ТЗ выгружать :(
20 арах
 
15.03.12
15:22
нету идей?
21 Рэйв
 
15.03.12
15:25
тз = Запрос.Выполнить().Выгрузить();
Кол= тз.Количество();
Для н=0 По Кол-1 Цикл
  Стр=тз.Получить(н);
  // дальше все поля запроса получаешь через точку от Стр
КонецЦикла;
22 арах
 
15.03.12
15:30
(21) это чтоб пробежаться по основной выборке? а как пробежаться по таблице товаров в строке выборки?
23 Рэйв
 
15.03.12
15:34
(22)Как вариант.

Выбирай ссылки только. А цикле обращайся к таб частям и пробегай сколько хочешь
24 Rovan
 
гуру
15.03.12
16:27
(22) тогда двумя отдельными запросами
25 арах
 
16.03.12
08:54
(22)эх... ниужто нельзя без второго запроса добраться до вложенной таблицы? в 8.2 же можно легко....
26 nicxxx
 
17.03.12
08:55
использовать Группировку в запросе и иерархическую выборку. понятно о чем я?
27 experimentator76
 
17.03.12
09:29
(0)примени Выбрать() к Товары вместо Для Каждого
28 арах
 
19.03.12
14:09
(27) спасибо, один светлый ум:)
стоко народу тупило... а все просто :

Выборка = Запрос.Выполнить().Выбрать();
   
Пока Выборка.Следующий()<> 0 Цикл
контр =  выборка.Контрагент;
строкиТорг = выборка.товары.Выбрать();
 Пока строкиТорг.Следующий() <> 0 Цикл
  номен= строкиТорг.номенклатура;
 конеццикла;
конеццикла;