Имя: Пароль:
1C
1С v8
Надо сделать ДеревоЗначений из 4 справочников.
0 student2012
 
05.02.12
18:46
Здравствуйте! Есть 4 справочника: Цеха, Участки(владелец Цеха), Бригады(владелец Участки), Звено(владелец Бригады). Нужно в обработке на форме вывести в дерево значений справочники и элементы.
Написал запрос, но выводит криво. Как должен правильно выглядеть запрос? Спасибо.
База (http://ifolder.ru/28521704)130 кб.
Мой запрос:

Запрос = Новый Запрос;
Запрос.Текст =
   "ВЫБРАТЬ
   |   Цеха.Наименование КАК Цех,
   |    Участки.Наименование КАК Участок,
   |    Бригады.Наименование КАК Бригада,
   |    Звено.Наименование КАК Звено
   |ИЗ  
   |    Справочник.Звено КАК Звено
   |   Правое СОЕДИНЕНИЕ Справочник.Бригады КАК Бригады
   |    Правое СОЕДИНЕНИЕ Справочник.Участки КАК Участки
   |    Правое СОЕДИНЕНИЕ Справочник.Цеха КАК Цеха
   |            ПО Участки.Владелец = Цеха.Ссылка
   |            ПО Бригады.Владелец = Участки.Ссылка
   |            ПО Звено.Владелец = Бригады.Ссылка  
   |ИТОГИ
   |
   | ПО
   | Цех, Участок, Бригада,Звено";
   Результат = Запрос.Выполнить();      
   Выгрузка = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
   ЭлементыФормы.ТабличноеПоле.Дерево = Истина;
   ЭлементыФормы.ТабличноеПоле.Значение = Выгрузка;
   ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
   ЭлементыФормы.ТабличноеПоле.ОбновитьСтроки();
1 DrShad
 
05.02.12
19:17
а почему ПРАВОЕ?
2 DrShad
 
05.02.12
19:18
наоборот нужно делать
3 student2012
 
05.02.12
20:01
Если сделать Левое то в дереве будет выводиться только Цех1.
4 DrShad
 
05.02.12
20:03
а если все изначально соединять с цехами через левое соединение?
5 student2012
 
05.02.12
20:05
не совсем понял что значит изначально?
6 student2012
 
05.02.12
20:41
При левом выводит так:
http://s018.radikal.ru/i518/1202/2d/a780e214c4cd.png

При правом выводит так:
http://s018.radikal.ru/i501/1202/99/893cd68a2044.png

Надо чтобы выводило так:
http://s017.radikal.ru/i439/1202/64/3cc0797859f8.png
7 Кокос
 
05.02.12
20:48
попробуй что нибудь типа ВЫБОР КОГДА НЕ ЕстьНулл(Бригада) ТОГДА Участок ИНАЧЕ ВЫБОР КОГДА НЕ ЕСТЬНУЛЛ(Участок) ТОГДА Участок ИНАЧЕ ЦЕХ КОНЕЦ КОНЕЦ КОНЕЦ КАК УзелДерева
8 Кокос
 
05.02.12
20:48
только код неточный.:) ну ты мысль понял :) итоги только по узелдерева собирай
9 Кокос
 
05.02.12
20:49
ну и со звена начни. я его забыл указать
10 DrShad
 
05.02.12
20:54
(7) это то накуя?
11 Кокос
 
05.02.12
20:55
(10) ну там в целевой таблице разные элементы в одном узле. вроде должно сработать. :)
12 DrShad
 
05.02.12
20:58
тут тогда соединения некатят
13 DrShad
 
05.02.12
21:03
и это уже не дерево а собственная иерархия справочников описанная в книге Хрусталевой
14 Кокос
 
05.02.12
21:11
(12) ну судя по результату у него почти получилось. только нет корневого узла. может ему там не ИТОГИ надо а Группировку.
15 DrShad
 
05.02.12
21:12
да нет соединение даст все равно 4 поля, а нужно 1, так что тут через объединение наборов
16 student2012
 
05.02.12
21:14
А можно пример, я не понимаю.
17 Кокос
 
05.02.12
21:15
(15) ну да. но в прицнипе если сделать как у меня узловое поле и в табличной форме вывода дерева вырубить остальные колонки то будет результат как надо выглядеть :)
18 student2012
 
06.02.12
00:45
19 DrShad
 
06.02.12
01:05
мля, нет такого в языке запросов ЕстьNULL() юзай
20 Кокос
 
06.02.12
01:42
(18) ты язык запросов изучи. мне просто лень было переключать на английский :)
21 Кокос
 
06.02.12
01:43
там еще много что нужно по другому написать :)))
22 student2012
 
06.02.12
01:49
да, это я понял :)
23 student2012
 
07.02.12
21:29
При таком запросе:
ВЫБРАТЬ РАЗЛИЧНЫЕ
  Звено.Владелец.Владелец.Владелец.Наименование КАК Цех,
  Звено.Владелец.Владелец.Наименование КАК Участок,
  Звено.Владелец.Наименование КАК Бригада,
  Звено.Наименование КАК Звено
ИЗ
  Справочник.Цеха КАК Цеха
     ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
        Участки.Владелец КАК Владелец,
        Участки.Наименование КАК Наименование,
        Участки.Ссылка КАК Ссылка
     ИЗ
        Справочник.Участки КАК Участки) КАК Участки
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
           Бригады.Владелец КАК Владелец,
           Бригады.Наименование КАК Наименование,
           Бригады.Ссылка КАК Ссылка
        ИЗ
           Справочник.Бригады КАК Бригады) КАК Бригады
           ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
              Звено.Ссылка КАК Ссылка,
              Звено.Владелец КАК Владелец,
              Звено.Наименование КАК Наименование
           ИЗ
              Справочник.Звено КАК Звено) КАК Звено
           ПО Бригады.Ссылка = Звено.Владелец
        ПО Участки.Ссылка = Бригады.Владелец
     ПО Цеха.Ссылка = Участки.Владелец

УПОРЯДОЧИТЬ ПО
  Цеха.Наименование,
  Участок,
  Бригада,
  Звено
ИТОГИ ПО
  Цеха.Ссылка,
  Участки.Ссылка,
  Бригады.Ссылка,
  Звено.Ссылка

результат такой:
http://s018.radikal.ru/i507/1202/6e/12661641fb84.png
24 student2012
 
08.02.12
21:13
up
25 student2012
 
13.02.12
18:52
up!
26 student2012
 
13.02.12
19:19
может кто подскажет почему при выполнении последнего запроса в первом столбце узлы дерева пустые (только плюсики)?
27 vyaz
 
13.02.12
19:48
третья картинка в (6) точно правильная? в консоли запросов в одной колонке разные типы?
28 student2012
 
13.02.12
19:55
это я сам в paint'е нарисовал. это так должен выглядеть результат. Или так нельзя сделать?
29 student2012
 
13.02.12
19:57
или нужно в цикле забивать результаты запроса в дерево?
30 vyaz
 
13.02.12
20:02
(29) если в дереве должна быть одна колонка, то в цикле
31 Vladal
 
13.02.12
20:04
Погляди-ка сюда: http://infostart.ru/public/72380/
32 student2012
 
13.02.12
20:08
ок, спасибо за наводку.
33 vyaz
 
13.02.12
20:24
забираю слова из 30 взад)))
34 student2012
 
13.02.12
20:28
#33 почему?
35 vyaz
 
13.02.12
20:35
(34) поэтому http://files.mail.ru/HBIMRS?t=1 ))) это тест на твоих данных, чот я затупил про выбор в итогах
36 vyaz
 
13.02.12
20:37
+35 но все равно в жизни я бы сделал в цикле, уж сильно изъеб@cто будет писать запрос такой
37 BOZKURT
 
13.02.12
20:43
(0) Сто лет к 1С не подходил, но вот чёта загорелся, вот результат:

Выбрать
   Ссылка.Владелец.Владелец.Владелец Как Цех,
   Ссылка.Владелец.Владелец Как Участок,
   Ссылка.Владелец Как Бригада,
   Ссылка как Звено
Из
   Справочник.Звено
Упорядочить по
   Цех, Участок, Бригада, Звено
Итоги по
   Цех, Участок, Бригада, Звено
38 vyaz
 
13.02.12
20:51
(37) шляпа твой запрос))) а если есть участок без бригад и звеньев? ну и речь о том, чтоб всю иерархию в одну колонку пихнуть.
ПС: Теперь понятно как, но уже лень)))
39 student2012
 
13.02.12
20:53
(37) результат вашего запроса такой:
http://i067.radikal.ru/1202/fe/d4613420bdcd.png
40 student2012
 
13.02.12
20:54
(38) может хоть на словах объясните?
41 vyaz
 
13.02.12
21:00
(40) на моей картинке в первой колонке видно сначала цех 1, потом участок 1, что достигается конструкцией ИТОГИ ВЫБОР КОГДА ...
твоя задача получить таблицу в которой есть все возможные сочетания цехов, участков, звеньев, бригад, а потом по этой таблице сделать итоги с ВЫБОР КОГДА вложенным друг в друга. как то так.
42 student2012
 
13.02.12
21:02
(41) спасибо
43 vyaz
 
13.02.12
21:03
+41 либо завести пятую колонку, которая будет заполняться от того, что в предыдущих четырех есть нуль, так даж проще
44 BOZKURT
 
13.02.12
21:05
(38) точно, я ж говорю, забыл....

Выбрать
   спрЦех.Ссылка Как Цех,
   спрУчасток.Ссылка Как Участок,
   спрБригада.Ссылка Как Бригада,
   спрЗвено.Ссылка как Звено
Из
   Справочник.Цех как спрЦех
   
   Левое соединение Справочник.Участок как спрУчасток
   по спрУчасток.Владелец = спрЦех.Ссылка
   
   Левое соединение Справочник.Бригада как спрБригада
   по спрБригада.Владелец = спрЦех.Ссылка
   
   Левое соединение Справочник.Звено как спрЗвено
   по спрЗвено.Владелец = спрЦех.Ссылка
   
Упорядочить по
   Цех, Участок, Бригада, Звено
Итоги по
   Цех, Участок, Бригада, Звено
45 BOZKURT
 
13.02.12
21:07
(44)+ нее, тоже фигня получилась, нуиванах, забыл, и нехочу вспоминать..))
46 vyaz
 
13.02.12
21:09
(45) совсем забыл))))
47 student2012
 
27.02.12
15:34
при таком запросе

ВЫБРАТЬ
       Цеха.Наименование КАК Цех,
       Участки.Наименование КАК Участок,
       Бригады.Наименование КАК Бригада,
       Звено.Наименование КАК Звено
       
   ИЗ  
      Справочник.Цеха КАК Цеха
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Участки КАК  Участки
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Бригады КАК Бригады
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Звено КАК Звено
               ПО Звено.Владелец = Бригады.Ссылка  
               ПО Бригады.Владелец = Участки.Ссылка
               ПО Участки.Владелец = Цеха.Ссылка
                               
  ИТОГИ
  ВЫБОР
         КОГДА Звено.Наименование ЕСТЬ НЕ NULL ТОГДА Звено.Наименование
         КОГДА Бригады.Наименование ЕСТЬ НЕ NULL ТОГДА Бригады.Наименование
       КОГДА Участки.Наименование ЕСТЬ НЕ NULL ТОГДА Участки.Наименование
       КОГДА Цеха.Наименование ЕСТЬ НЕ NULL ТОГДА Цеха.Наименование
       
  КОНЕЦ  КАК Цех
  ПО  
  Цех,
  Участок,
  Бригада,
  Звено

Такой результат : http://s002.radikal.ru/i198/1202/24/db57c234bb07.png
Что нужно исправить чтобы получить необходимый результат??
48 student2012
 
27.02.12
16:39
help!
49 student2012
 
27.02.12
20:42
кто-нибудь!
50 student2012
 
04.03.12
17:35
апну
51 Fragster
 
гуру
04.03.12
17:37
(50) соединяй не с 1 таблицей, а с таблицей- владельцем. осиль уже консоль запросов.
52 student2012
 
04.03.12
17:48
51 типа такого?
ВЫБРАТЬ
   Звено.Владелец.Владелец.Владелец.Наименование КАК Цех,
     Звено.Владелец.Владелец.Наименование КАК Участок,
     Звено.Владелец.Наименование КАК Бригада,
     Звено.Наименование КАК Звено
   
ИЗ  Справочник.Звено КАК Звено
53 Fragster
 
гуру
04.03.12
17:49
(52) ну хотя бы так
54 Fragster
 
гуру
04.03.12
17:49
хотя в таком случае не выберуться элементы верхнего уровня, у которых неполная иерархия
55 student2012
 
04.03.12
17:51
(54) да, пробовал.
в конструкции выбор проблема вроде.
56 Fragster
 
гуру
04.03.12
17:52
(55) осиль уже конструктор по нормальному
57 Fragster
 
гуру
04.03.12
17:52
да и нафига тебе "выбор"?
58 student2012
 
04.03.12
17:55
(57)в (31) показали пример у него получилось. У меня тоже почти получилось, http://s002.radikal.ru/i198/1202/24/db57c234bb07.png.
59 student2012
 
04.03.12
17:55
только почему то в цех 1 правильно выводит. а в остальных цехах неправильно
60 student2012
 
04.03.12
17:56
(59) *почти правильно
61 Fragster
 
гуру
04.03.12
18:06
ты текст запроса специально не показываешь?
62 student2012
 
04.03.12
18:10
(61) в (47) текст
63 Fragster
 
гуру
04.03.12
18:12
(62) в (47) - фигня, прочитай (51) еще раз, делай соединения через конструктор
64 student2012
 
04.03.12
18:15
(63) читать то читал, только мало что понял. первая таблица это Цеха?
65 Fragster
 
гуру
04.03.12
18:17
ну да, ты цепляешь все к цехам, а надо - цеплять к таблице-владельцу.

ну и сделай отдельное вычисляемое поле и по нему уже итоги
66 Fragster
 
гуру
04.03.12
18:17
для начала вообще ВЫБОР убери
67 student2012
 
04.03.12
18:25
(66) а разве без Выбора получится вывести все справочники в 1 колонку?
68 Fragster
 
гуру
04.03.12
18:29
(67) ты пока без него попробуй, да
69 Fragster
 
гуру
04.03.12
18:29
пусть тебе выведет как надо но не в ё колонку
70 echo77
 
04.03.12
18:31
Я ни хера не пойму в чем вопрос: вроде бы дерево правильно строится...
71 student2012
 
04.03.12
18:40
(70) неправильно. Звено 1 содержит в себе Цех 1. Цех 5 содержит в себе Цех 5. На картинке этого не видно
72 student2012
 
04.03.12
18:43
73 echo77
 
04.03.12
18:51
По звену итоги не делай и все
74 echo77
 
04.03.12
18:54
А если бригад нет на участке... то все равно разворачивает группировку участок... :-/
надо постобработкой дерева значений фигню убирать
75 student2012
 
04.03.12
18:55
76 student2012
 
04.03.12
18:56
(74) что такое постобработка дерева?
77 echo77
 
04.03.12
19:03
(76) это обработка дерева значений после того как оно получено из запроса
78 echo77
 
04.03.12
19:41
Вроде так это делается: http://depositfiles.com/files/bsn6hkh19
79 student2012
 
04.03.12
20:06
(78) большое спасибо!
Закон Брукера: Даже маленькая практика стоит большой теории.