Имя: Пароль:
1C
1С v8
Табличная часть реквизита табличной части, и всё это в запросе
0 Asmody
 
03.05.12
12:35
Дано: "Документ" с табличной частью "ТабЧасть", в тч есть реквизит Элемент типа Справочник.Элементы. У справочника есть таб.часть "Состав", в которой есть реквизит "Составляющая" типа Справочник.Составляющие. У него есть реквизит "ВидСоставляющей"

Что хочу: запрос по документам "Документ", с вложенными таблицами, т.е. чтобы результат был такой:

Документ1, Дата1, Номер1
 ТабЧасть:
--- НомерСтроки1, Элемент1
---- Состав:
------ НомерСтроки1, Составляющая1, ВидСоставляющей1
------ НомерСтроки2, Составляющая2, ВидСоставляющей2
--- НомерСтроки2, Элемент2
---- Состав:
.....
Документ2, Дата2, Номер2
 ТабЧасть:
--- НомерСтроки1, Элемент1
... и т.д


т.е. чтобы была вложенная таблица второго уровня
1 Господин ПЖ
 
03.05.12
12:37
предлагаю переложить в дерево руками
2 Asmody
 
03.05.12
12:38
(1) запросом хочу…
3 fisher
 
03.05.12
12:43
(0) Забей вообще на вложенные таблицы. Даже когда кажется что с ними проще, в итоге оказывается наоборот. Не завтра так послезавтра.
4 Ненавижу 1С
 
гуру
03.05.12
12:43
совсем обнаглели
ну и +(3)
5 PR
 
03.05.12
12:45
(0) Вить, а что мешает плясать от таблицы документов с левым соединением по табличной части?
6 Ненавижу 1С
 
гуру
03.05.12
12:46
(5) я думаю он до этого догадался и сам ))
7 Asmody
 
03.05.12
12:47
(5) у меня 2 табличных части и обе так разворачиваются
8 PR
 
03.05.12
12:50
(7) Так объединение сделай :))
9 Ненавижу 1С
 
гуру
03.05.12
12:50
(7) получи плоскую единую ТЗ и поиграйся с параметрами её метода Скопировать()
10 Asmody
 
03.05.12
12:55
слишком развесистая клюква получится
11 PR
 
03.05.12
12:58
(10) Ты про объединение?
Да ладно, проще пареной репы.
12 Asmody
 
03.05.12
13:00
(11) я про результат запроса вообще. мысль была получить выборку, потом пробежаться по ней и обработать каждый док в отдельных фукциях, чтобы уже больше в базу не лезть
13 Ненавижу 1С
 
гуру
03.05.12
13:01
(12) ну вот и делай именно так, в чем проблема? зачем тебе именно вложенные ТЗ?
14 Asmody
 
03.05.12
13:02
(13) чтобы данные ТЗ уже висели в результате в строке документа
15 fisher
 
03.05.12
13:02
(12) Так и делай. Просто коллекции формируй сам из выборки.
16 Ненавижу 1С
 
гуру
03.05.12
13:02
(14) визуально?
17 Asmody
 
03.05.12
13:02
(16) внутре
18 fisher
 
03.05.12
13:03
(15) Просто разбей на группировки и при обходе группировок детальные записи по ним выгружай целиком из подвыборок в ТЗ.
19 ptrtss
 
03.05.12
13:04
левое соединение
(выбрать
1 как Номер
объединить все
выбрать
2 как Номер) КАК Таблицы
по истина
левое соединение Первая КАК Первая
по Таблицы.Номер = 1 и <условие связи>
левое соединение Вторая КАК Вторая
по Таблицы.Номер = 1 и <условие связи>
20 ptrtss
 
03.05.12
13:04
Ошибся, во втором по Номер = 2
21 Ненавижу 1С
 
гуру
03.05.12
13:05
(17) снова ((

ДеревоЗначений самое то
22 ptrtss
 
03.05.12
13:06
(20) ну и итоги по Таблицы.Номер надо
23 Asmody
 
03.05.12
13:07
грубо так хочу:

///....
ВыборкаПоДокументам=Запрос.Выполнить().Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл
  ОбработатьДокумент(ВыборкаПоДокументам);
КонецЦикла;
///....
Процедура ОбработатьДокумент(СтрокаВыборкиДокумента)
 //...
 ВыборкаПоТЧ1=СтрокаВыборкиДокумента.ТЧ1.Выбрать();
 Пока ВыборкаПоТЧ1.Следующий() Цикл
   ОбработатьСтрокуТЧ1(ВыборкаПоТЧ1);
 КонецЦикла;
 //...
 ВыборкаПоТЧ2=СтрокаВыборкиДокумента.ТЧ2.Выбрать();
 Пока ВыборкаПоТЧ2.Следующий() Цикл
   ОбработатьСтрокуТЧ2(ВыборкаПоТЧ2);
 КонецЦикла;

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

и т.д.
24 Asmody
 
03.05.12
13:08
(21) я хочу, чтобы ДеревоЗначений получилось запросом само! Вот
25 ptrtss
 
03.05.12
13:08
(24) Я написал тебе как это сделать
26 fisher
 
03.05.12
13:10
(23) Три запроса в одном пакете делай. По одной ТЧ, по второй ТЧ и список доков.
Тогда просто обходишь выборку списка доков, а в остальных двух выборках просто позиционируешься.
27 PR
 
03.05.12
13:17
(12) Так сделай группировку по регистратору, а потом выборку из нее по детальным записям.
Я так постоянно делаю :))
28 PR
 
03.05.12
13:19
(23) В разных объединениях сделай поле "НомерТабличнойЧасти" и в первое объединение пиши 1, во второе 2, а потом выборки: по регистратору, потом по номеру табличной части, потом по детальным записям.
29 Ненавижу 1С
 
гуру
03.05.12
13:19
(23)

Процедура ОбработатьДокумент(СтрокаВыборкиДокумента)
 //...

 ВыборкаПоТЧ1=СтрокаВыборкиДокумента.ТЧ1.Выбрать();
 Пока ВыборкаПоТЧ1.Следующий() Цикл
   ОбработатьСтрокуТЧ1(ВыборкаПоТЧ1);
 КонецЦикла;
 //...

 ВыборкаПоТЧ2=СтрокаВыборкиДокумента.ТЧ2.Выбрать();
 Пока ВыборкаПоТЧ2.Следующий() Цикл
   ОбработатьСтрокуТЧ2(ВыборкаПоТЧ2);
 КонецЦикла;

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

то есть связи между ТЧ1 и ТЧ2 не будет?
30 ptrtss
 
03.05.12
13:20
Пример №1:


ВЫБРАТЬ
   "Товары" КАК ИмяТЧ
ПОМЕСТИТЬ ТЧ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Услуги"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Док.Ссылка КАК Ссылка,
   ТЧ.ИмяТЧ КАК ИмяТЧ,
   ТЧТовары.НомерСтроки КАК Товары_НомерСтроки,
   ТЧТовары.Номенклатура КАК Товары_Номенклатура,
   ТЧУслуги.НомерСтроки КАК Услуги_НомерСтроки,
   ТЧУслуги.Номенклатура КАК Услуги_Номенклатура
ИЗ
   Документ.РеализацияТоваровУслуг КАК Док
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЧ КАК ТЧ
       ПО (ИСТИНА)
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТЧТовары
       ПО (ТЧ.ИмяТЧ = "Товары")
           И Док.Ссылка = ТЧТовары.Ссылка
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК ТЧУслуги
       ПО (ТЧ.ИмяТЧ = "Услуги")
           И Док.Ссылка = ТЧУслуги.Ссылка

УПОРЯДОЧИТЬ ПО
   Товары_НомерСтроки,
   Услуги_НомерСтроки
ИТОГИ ПО
   Ссылка,
   ИмяТЧ
31 fisher
 
03.05.12
13:24
(28) Просто чем больше будет видов ТЧ и чем разнороднее данные в них - тем страшнее будут мичуринские результаты сведения их в одну таблицу.
32 ptrtss
 
03.05.12
13:25
Пример №2:


ВЫБРАТЬ
   Д.Ссылка
ПОМЕСТИТЬ втД
ИЗ
   Документ.РеализацияТоваровУслуг КАК Д
ГДЕ
   Д.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   "Товары" КАК ИмяТЧ,
   ТЧТовары.Ссылка,
   ТЧТовары.НомерСтроки,
   ТЧТовары.Номенклатура
ПОМЕСТИТЬ втТЧ
ИЗ
   втД КАК втД
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТЧТовары
       ПО втД.Ссылка = ТЧТовары.Ссылка

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Услуги",
   ТЧУслуги.Ссылка,
   ТЧУслуги.НомерСтроки,
   ТЧУслуги.Номенклатура
ИЗ
   втД КАК втД
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК ТЧУслуги
       ПО втД.Ссылка = ТЧУслуги.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Д.Ссылка КАК Ссылка,
   ТЧ.ИмяТЧ КАК ИмяТЧ,
   ТЧ.НомерСтроки КАК НомерСтроки,
   ТЧ.Номенклатура
ИЗ
   втД КАК Д
       ЛЕВОЕ СОЕДИНЕНИЕ втТЧ КАК ТЧ
       ПО Д.Ссылка = ТЧ.Ссылка

УПОРЯДОЧИТЬ ПО
   НомерСтроки
ИТОГИ ПО
   Ссылка,
   ИмяТЧ
33 Asmody
 
03.05.12
14:06
(29) нет
34 Asmody
 
03.05.12
14:09
кстати, ДеревоЗначений мне не сильно подходит. Скорее это будет "Дерево массивов структур"
35 Господин ПЖ
 
03.05.12
14:10
дерево таблиц значений соответствий...
36 Asmody
 
03.05.12
20:34
забил на запрос, сделал все через СКД
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.