|
Иерархия в табличном поле, данными является табличная часть | ☑ | ||
---|---|---|---|---|
0
Invis91
20.04.12
✎
23:00
|
Всем добрый вечер. Подскажите пожалуйста, вот есть у меня табличная часть с реквизитам Родитель и Номенклатура,оба типа СправочникСсылка.Номенклатура, как сделать так, чтобы в связанном с табличной частью табличном поле отобразить иерархию по родителям. ну на всякий случай пример:
+ родитель1 - номенклатура1 - номенклатура2 + родитель2 - номенклатура3 - номенклатура4 |
|||
1
ProProg
20.04.12
✎
23:00
|
юзай дерево
|
|||
2
ProProg
20.04.12
✎
23:02
|
на форму вешаешь дерево которой заполняешь табличной частью измененйи в дереве также обратно фиксируешь в табличную часть. Работа непростая с нулевыми знаниями
|
|||
3
zak555
20.04.12
✎
23:04
|
ТЧ чего ?
|
|||
4
Invis91
20.04.12
✎
23:06
|
Табличная часть справочника
|
|||
5
le_
20.04.12
✎
23:07
|
(0) Если это не собственное дерево, а иерархия из справочника, то строится оч. просто запросом.
|
|||
6
Invis91
20.04.12
✎
23:13
|
Да, знаний, к сожалению, не так много, пока только учусь, вроде со всем сам разбирался, но тут конечно в ступор попал. По поводу запроса думал уже, но там тоже не очень простая реализация будет при добавлении/удалении элемента.
|
|||
7
Злобный Фей
20.04.12
✎
23:24
|
(6) при добавлении/удалении элемента ничего делать не надо.
|
|||
8
Invis91
21.04.12
✎
00:26
|
Я немного неправильно наверно написал, напишу еще раз более конкретно. Есть 2ух уровневый иерархический справочник "Разделы номенклатуры"(1ый уровень раздел,2ой - подраздел), вида:
+Вентиляция - Холод - Кондиционирование +Холодильное оборудование - Холод - Электрика Дело в том, что в форме элемента справочника "Номенклатура", нужно указать к каком подразделу/подразделам, конкретная номенклатура относится, и так как вы видите, в данном примере подраздел "Холод" есть как в первом, так и во втором разделе, и вследствие этого, мне необходимо сделать отображение по иерархии в форме справочника "Номенклатура", дабы наглядно было видно что к чему. Я не прошу указывать мне точных алгоритмов, сам стараюсь во всем разбираться, но тут не получается, прошу лишь указать мне ход мысли, в какую сторону двигаться для решения этой проблемы. Заранее спасибо. |
|||
9
le_
21.04.12
✎
00:45
|
(8) В справочник номенклатуры можно добавить ТЧ "Разделы", которую заполнять разделами, без родителей. Например, у элемента справочника Номенклатура1 в ТЧ будет Электрика и Кондиционирование.
На форме будет табличное поле с типом дерево значений, которое будет строиться запросом: ВЫБРАТЬ
Параметр в запрос устанавливается так: Запрос.УстановитьПараметр("ВыбранныеРазделы", ЭлемНоменклатура1.Разделы.ВыгрузитьКолонку("Раздел"));//раздел - это единственный реквизит в ТЧ "Разделы" Выводится дерево оч. просто: Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); После удаления или добавления элементов в ТЧ "Разделы" перестраиваешь дерево запросом. При добавлении элемента в дерево, добавляешь его в ТЧ. |
|||
10
Invis91
21.04.12
✎
00:56
|
(9) Спасибо большое, le_, теперь понял вроде)
|
|||
11
Invis91
21.04.12
✎
21:19
|
ВЫБРАТЬ
РазделыНоменклатуры.Ссылка Как Раздел ИЗ Справочник.РазделыНоменклатуры КАК РазделыНоменклатуры ГДЕ РазделыНоменклатуры.Ссылка В(&ВыбранныеРазделы) УПОРЯДОЧИТЬ ПО РазделыНоменклатуры.Ссылка ИЕРАРХИЯ АВТОУПОРЯДОЧИВАНИЕ В результате на выходе получаю лишь выбранные подразделы без иерархии, родителей не получаю. Как всегда с примером для наглядности: Вход: Справочник.РазделыНоменклатуры: +Вентиляция - Холод - Кондиционирование +Холодильное оборудование - Холод - Электрика В данном случае параметр "Выбранные разделы" = "Кондиционирование" Выход: Кондиционирование |
|||
12
ProProg
21.04.12
✎
21:22
|
пипец. ты скажи слепой? признайся
УПОРЯДОЧИТЬ ПО РазделыНоменклатуры.Ссылка ИЕРАРХИЯ или читать не умеешь? вот что ты написал? прочитай сто раз и вдумайся |
|||
13
Invis91
21.04.12
✎
21:56
|
наверно еще и тупой, потому что проблему я вижу в том, что я в запросе не выбираю родителей, а вследствие этого они не выводятся и никакой иерархии, соответственно, нет.
|
|||
14
Maniac
21.04.12
✎
22:01
|
нужно СГРУППИРОВАТЬ ПО а не УПОРЯДОЧИТЬ
|
|||
15
Maniac
21.04.12
✎
22:02
|
плюс ИТОГИ ПО
|
|||
16
Maniac
21.04.12
✎
22:02
|
и вот в итогах есть ИЕРАРХИЯ
|
|||
17
le_
21.04.12
✎
22:03
|
(13) Все дело в обходе результата запроса.
|
|||
18
le_
21.04.12
✎
22:07
|
(15) Здесь можно обойтись без итогов.
|
|||
19
le_
21.04.12
✎
22:08
|
+(17)(13) Если проверяешь запрос в консоли, вывод сделай не в список, а в дерево.
|
|||
20
Invis91
21.04.12
✎
22:13
|
Спасибо, Maniac. le_, а причем здесь обход результатов, если в результате выполнения запроса, я самой иерархии не получаю. Да, я в консоль именно в дерево и выгружаю.
|
|||
21
le_
21.04.12
✎
22:19
|
(20) Слово ИЕРАРХИЯ в запросе (9) по-твоему, для красоты вставлено?
|
|||
22
Invis91
21.04.12
✎
22:29
|
Да я понимаю, просто если я конкретно не выбираю родителей, а я их конкретно не выбираю, то ниче я собсна не получу, ну да ладно.
|
|||
23
le_
21.04.12
✎
22:35
|
(22) А в справочнике РазделыНоменклатуры иерархия элементов или групп и элементов?
|
|||
24
Maniac
21.04.12
✎
22:40
|
еще раз чтобы етбя было как ты хочешь дерево надо делать ИТОГИ ПО
|
|||
25
Maniac
21.04.12
✎
22:41
|
только ИТОГИ ПО могу выводить иерархию в нужном виде.
|
|||
26
Maniac
21.04.12
✎
22:44
|
это единственным метод который выводит в запросе группы справочника!
|
|||
27
GoldenCalf
21.04.12
✎
22:47
|
(26) Ложь
|
|||
28
Maniac
21.04.12
✎
22:48
|
(27) меня не интересуют посты без аргументов. хочешь доказать обратное - конкретно пиши.
|
|||
29
Maniac
21.04.12
✎
22:50
|
без итогов ПО в котором доступен метод ИЕРАРХИЯ любые запросы работают прямолинейно и выводят только записи таблиц данных в которых содержаться только элементы. Чтобы программа выводила иерархию (т/е/ добавляла в результат запроса еще и группы соответствующего справочника) это единственный метод. Хочешь доказать обратное - докажи!
|
|||
30
Maniac
21.04.12
✎
22:51
|
можно конечно еще сделать в запросе переменные типа через точку 7Родитель и делать сгруппировать НО это будет неправильным подходом для многоуровневого справочника с разным количеством групп разных элементов!
|
|||
31
le_
21.04.12
✎
22:52
|
(29) Справочник номенклатуры есть в базе?
Выполни запрос: ВЫБРАТЬ
|
|||
32
Maniac
21.04.12
✎
22:54
|
(31) епона мать. в сабже речь не сказана о справочнике. а о табличной части, в которой я на сто процентов верен еще есть числовые показатели и прочая лабуда и без итогов никак не обойтись. неужели сложно так догадаться.
|
|||
33
GoldenCalf
21.04.12
✎
22:54
|
(29)
ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка, Номенклатура.ЭтоГруппа ИЗ Справочник.Номенклатура КАК Номенклатура Результат Ссылка ЭтоГруппа Новая группа истина Новая услуга ложь Новый товар ложь |
|||
34
GoldenCalf
21.04.12
✎
22:55
|
(32) в (26) ты сам пишешь про справочник
|
|||
35
Maniac
21.04.12
✎
22:55
|
(33) иди отдыхай. у тебя полная фуйня. это не дерево
|
|||
36
Maniac
21.04.12
✎
22:56
|
(34) справочник как одна из части данных запроса.
|
|||
37
le_
21.04.12
✎
22:59
|
В (9) действительно есть косяк ) Группы по условию не пройдут.
Итоги - да, покажут группы. |
|||
38
GoldenCalf
21.04.12
✎
22:59
|
Это был ответ на (26). Я сказал что это не правда. Привел пример. Теперь ты начал отмазываться
|
|||
39
Maniac
21.04.12
✎
23:00
|
когда вы уже научитесь задачи воспринимать как следует а не с примитивной стороны. и за этого вашего примитива у людей ничерта и не получается. потому что до конца задачу воспринимать не желаете. Я сразу например понял что речь идет о построенни дерева с данными а не тупой выборки справочника. Убиваете и свое время и автор ничерта понять не моет почему все не так.
|
|||
40
Maniac
21.04.12
✎
23:02
|
(38) какая нафиг отмазка. ты решил влезть не пытаясь ни на каплю вникнуть в сабж. впрочем читай (39)
|
|||
41
Maniac
21.04.12
✎
23:09
|
(38) правда в том что ты потратил мое время на читание твоего обвинения в лжи, когда в действительности сам понес ересь. Всю тему 20 раз было сказано - нужно ДЕРЕВО а ты влез с нулывыми знаниями элементарных вещей.
|
|||
42
Maniac
21.04.12
✎
23:15
|
(0) ктстати заранее предупреждаю (прдвижу) следующую твою проблему!!! Если ты будешь выгружать запрос в дерево? а именно только так и не иначе ты получишь ДЕРЕВО в нем на последнем уровне строк дерева будут идти детальные записи. а это значит что если ты хочешь в форме увидеть это дерево то в нем будет идти еще один + который будет дубливароть две строки. Это особенность!
Чтобы убрать эти строки понадобится специальный рекурсивный обход дерева полученного из запроса для построения нормального дерева на форме. Этто еще добавит код в котором нужно знать как сделат рекурсивный обход дерева. Но это даже плюс. Потому что в случае еще дополнительных расчетов или условий которые произойдут в обходе можно будет добавлять еще какие то свои расчеты специфические которые можно будет выполнять программно. |
|||
43
Maniac
21.04.12
✎
23:19
|
+(42) причем эта проблема ОТСУТСТВУЕТ если речь идет об 82 на управляемых формах и запрос был получае программно при помощи СКД и программно выгружен в дерево. Тюкю в СКД группировки и значение иерархии не нужно задавать в запросе и там отсутствует понятие ИТОГИ ПО. группировки и ерархия задаются в самом СКД и выгрузка такого запроса в дерево происходит без детальных записей (т/е/ не будет задвоения нижних уровней по каждой строке).
Впрочем я думаю все чт оя описал никому нихрена из тех кто в этой ветке учавствовал даже неизвестно по прчине недостаточного уровня знаний. |
|||
44
Invis91
21.04.12
✎
23:24
|
Ого, тут дискуссия)(22) Извиняюсь, что сразу не сказал - иерархия элементов.
ну в общем, после метода проб и ошибок, на выходе получил единственный работающий вариант: ВЫБРАТЬ РазделыНоменклатуры.Ссылка КАК Раздел ИЗ Справочник.РазделыНоменклатуры КАК РазделыНоменклатуры ГДЕ РазделыНоменклатуры.Ссылка В(&ВыбранныеРазделы) ИТОГИ ПО Раздел ТОЛЬКО ИЕРАРХИЯ Чтобы был такой же функционал с УПОРЯДОЧИТЬ ПО, как я понимаю, необходимо явно выбирать группы и элементы этой самой иерархии. А с ИТОГИ ПО ТОЛЬКО ИЕРАРХИЯ, необходимо выбрать лишь один элемент какого-нибудь уровня иерархии, вобщем в моем случае намного удобней. Всем спасибо. |
|||
45
le_
21.04.12
✎
23:28
|
(43) Вот вариант без дублирования элементов в дереве. (!)Только для справочника с известным количеством уровней. Для задачи Invis91 вполне сгодится. Здесь не нужно будет обходить дерево.
ВЫБРАТЬ
|
|||
46
Invis91
21.04.12
✎
23:28
|
(42) а может просто добавить после ИТОГИ ПО взамен ключевого слово ИЕРАРХИЯ, кл.слово ТОЛЬКО ИЕРАРХИЯ, если я правильно понял. Да, вначале была такая проблема, но после добавления ТОЛЬКО ИЕРАРХИЯ - исчезла
|
|||
47
le_
21.04.12
✎
23:31
|
(46) Если бы у тебя был справочник с иерархией групп это не прокатило бы...
|
|||
48
Maniac
21.04.12
✎
23:33
|
(44) уПОРЯДОЧИТЬ ПО не делает никакого дерева. эио метод сортировки!! Т7к если ты будешь делать запрос по обычному справочнику - запрос сделает обращение к базе и выведет все элементы справочника в результат запроса (все группы и элементы) но это не будет ИЕРАРХИЕЙ и ДЕРЕВОМ. он тупо выведет все как есть в таблицах базы данных. метод УПОРЯДОЧИТЬ ПО тупо просто сделает сортировку как она у тебя выглядит в справочнике - НО это не будет ДЕРЕВОМ. это просто окажется таблицей в которой в действительности все будет упорядочено НО ты никогда не получишь дерева с плюсиками и минусиками. Это будет обыяная таблица значений в которой будут конечно будут папки и элементы но это будет просто упорядоченной таблицей и не более.
|
|||
49
Invis91
21.04.12
✎
23:35
|
(47)хм, да, согласен, не прокатило бы
|
|||
50
Maniac
21.04.12
✎
23:36
|
(45) для простых задач может быть.. хотя надо смотреть на замеры. Для сложных задач (у меня например есть запрос по 10 регистрам в результате которого формируется дерево с полным перечнем всех данных и еще кучи наворотов. включая то что мне рекусрия потом в любом случае необходимо из за количества нстроек пользовтеля которые он может задавать при расчетах и которые в запрос просто вообще никак не воткнуть.
|
|||
51
Invis91
21.04.12
✎
23:39
|
Спасибо всем, ребят, что помогли) У самого бы заняло это куда больше времени)
|
|||
52
Maniac
21.04.12
✎
23:41
|
Опят таки логически - если зачем то понадобилось дерево на форме - я уверен на 100 процентов что не просто так. Кому то и зачем то это понадобилось для работы! а это значит кто то и что то будет делать в ней. И в любом случае все что будет связано с работой пользователя с работйо в дереве неизбежно приведет в рекурсиям.
|
|||
53
le_
21.04.12
✎
23:41
|
(48) А вот это уже неправда.
Пример: Процедура КнопкаВыполнитьНажатие(Кнопка)
(50) Замеры замерами, а дерево обходить не нужно. В обоих запросах объединения установлены параметры. Отработает довольно быстро. |
|||
54
Maniac
21.04.12
✎
23:41
|
(51) я думаю что ты сейчас решаил тольк процентов 20 того что еще потом навешается с этими деревьями.
|
|||
55
le_
21.04.12
✎
23:43
|
(52) Я делал подобное просто для представления данных в дереве. Пользователям так проще было ориентироваться. Ничего особенного они с ним не делали, только добавляли/удаляли элементы, которые хранились в ТЧ.
|
|||
56
Maniac
21.04.12
✎
23:43
|
(53) у тебя простой запрос. не хочу уже делать усложнений. реально тема надоела) как и сама 1С)) пора отдыхать.
Но могу скзать что вряд ли я буду такую конструкцию использовать т/к/ у меня задачи все равно в стократном размере сложнее |
|||
57
le_
21.04.12
✎
23:45
|
(56) Конечно, к разным задачам разный подход. Не спорю.
|
|||
58
Maniac
21.04.12
✎
23:45
|
у номенклатуры никогда не бывает одного уровня. а это онсоновй справочник по кторому 99.99 процентов работы приходится делаьт всем 1Сникам вместе взятым.
|
|||
59
le_
21.04.12
✎
23:47
|
(58) Здесь я справочник номенклатуры использовал только потому, что он в большинстве типовых есть и любой сможет проверить примеры.
|
|||
60
Maniac
21.04.12
✎
23:51
|
(59) Давай отдыхать) Удачи)
|
|||
61
Invis91
24.04.12
✎
17:16
|
Так, задача усложнилась, вот, например, есть у меня справочник "Номенклатура", в ТЧ "Разделы" у Справочника записаны все подразделы (разделы мы берем из СправочникСсылка.РазделыНоменклатуры), к которым принадлежит Номенклатура.
Справочник.РазделыНоменклатуры: +Вентиляция - Холод - Кондиционирование +Холодильное оборудование - Холод - Электрика Номенклатура "Кондиционер Toshiba" ТЧ "Разделы: Кондиционирование Электрика Так вот, необходимо, чтобы в созданной мною обработке, при добавлении в Табличное Поле "Обработка"(тип Дерево Значений) номенклатуры, добавлялась и вся иерархия разделов, ну вот пример: Табличное Поле "Обработка" + Вентиляция -Кондиционирование -Кондиционер Toshiba +Холодильное Оборудование -Электрика -Кондиционер Toshiba |
|||
62
Invis91
24.04.12
✎
17:21
|
Как добавить иерархию разделов, в этой теме уже написали, но как к этой иерархии, добавить еще один уровень и отображать там Номенклатуру, которая относится к данному подразделу - вот это действительно проблема, ничего путного в голову не приходит. Если только программно добавлять к подразделам подчиненные записи в дереве
|
|||
63
le_
24.04.12
✎
17:37
|
(62) А не проще вместо справочника "Разделы номенклатуры" завести группы в справочнике "Номенклатура"?
|
|||
64
Invis91
24.04.12
✎
17:42
|
(63) К сожалению нет, группы используются для другой цели, необходимо функционал именно со справочником "Разделы Номенклатуры". Были бы просто группы - было бы конечно намного проще)
|
|||
65
le_
24.04.12
✎
17:54
|
(62) Можно делать запрос к ТЧ разделов, выбирать разделы и ссылку на саму номенклатуру и добавить ее (ссылку) в итоги.
|
|||
66
Invis91
24.04.12
✎
18:22
|
Сделал так(Оборудование - ТП Дерево Значений), немного кривовато, но пока что первый вариант:
Процедура Кнопка1Нажатие(Элемент) ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора(); Значение = ФормаВыбора.ОткрытьМодально(); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | НоменклатураРазделыНоменклатуры.РазделНоменклатуры КАК Раздел, | НоменклатураРазделыНоменклатуры.Ссылка КАК Номенклатура | |ИЗ | Справочник.Номенклатура.РазделыНоменклатуры КАК НоменклатураРазделыНоменклатуры |ГДЕ | НоменклатураРазделыНоменклатуры.Ссылка = &Номенклатура |ИТОГИ ПО Раздел ТОЛЬКО ИЕРАРХИЯ |"; Запрос.УстановитьПараметр("Номенклатура", Значение); //Номенклатура РезультатЗапроса = Запрос.Выполнить(); ВыборкаРазделов = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаРазделов.Следующий() Цикл Строка = Оборудование.Строки.Добавить(); Строка.Наименование = ВыборкаРазделов.Раздел; Выборка = ВыборкаРазделов.Выбрать(); Пока Выборка.Следующий() Цикл СтрокаПодраздела = Строка.Строки.Добавить(); СтрокаПодраздела.Наименование = Выборка.Раздел; СтрокаНоменклатуры = СтрокаПодраздела.Строки.Добавить(); СтрокаНоменклатуры.Наименование = Выборка.Номенклатура; КонецЦикла; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |