Имя: Пароль:
1C
1С v8
Результат запрос вывести на форму в виде дерева
0 Wefast
 
29.07.15
18:07
По кнопке заполнить в модуле формы:
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Дальше как мне это правильно сгруппировать и вывести на форму?

Создать в обработке Табличную часть с реквизитами, вывести на форму и указать что это дерево?

Или создать реквизит типа ДеревоЗначений, вывести на форму и уже на ней создать реквизиты?

ЗначениеВРеквизитФормы(тДерево, "Дерево"); почему то не помогло, пишет что второй параметр не верен, это тот самый реквизит типа ДеревоЗначений
1 Euguln
 
29.07.15
18:09
(0) Колонки должны совпадать. Надо предварительно создать реквизиты и элементы формы по всем колонкам дерева.
2 Wefast
 
29.07.15
18:09
У меня есть поля Склад, Склад2, номенклатура, остаток

Нужно чтобы было
Склад2
   Склад
      Номенклатура | Остаток
3 Wefast
 
29.07.15
18:10
(1) Он же вываливается с ошибкой на второй параметр. Так то он должен был заполнить совпадающее, а на другой забить.

Впрочем у меня они все совпадают
4 Euguln
 
29.07.15
18:12
(3) неправда.
5 Wefast
 
30.07.15
09:15
(4) что не правда то? Не работает
6 DexterMorgan
 
30.07.15
09:29
(5) создать реквизит типа дерево значений, создать колонки. Имена колонок должны совпадать с тем, что возвращает
РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

ну и дальше ЗначениеВРеквизитФормы
7 Wefast
 
30.07.15
09:39
Забыл в самом начале сделать так:
тДерево = РеквизитФормыВЗначение("Объект.Дерево");

И не через "объект" вызывал


Теперь проблема в выводе.
Выглядит оно так сейчас:
http://i.imgur.com/nkf2sJ2.png

Надо чтобы нормальное дерево было

Хотя бы чтобы группировочное поле не называлось "СКлады" а было наименованием этого склада

МОЕ1
   Склад А
     Номенклатура
     Номенклатура
   Склад В
     Номенклатура
МОЕ2
   Склад А
     Номенклатура

Ну или если в одной колонке такое не делается, то
МОЕ1    |        |
        |Склад 1 |
        |        | Номенклатура 1
        |        | Номенклатура 2
        |Склад 2 |
        |        | Номенклатура 1
МОЕ2    |        |
        |Склад1  |
        |        | Номенклатура 1

Конечное главное чтобы потом это дерево можно было легко обработать превратив в таблицу значений
8 Wefast
 
30.07.15
09:47
В разных вроде получилось.
В запросе в закладке Итоги у меня у полей Склад1 и Склад2 стояли Тип итогов стоял Только иерархия или иерархия и элементы. Поставил Элементы просто и стало вот как во втором варианте но хотя бы понятно что происходит.

Честно говоря жутко злит что все методом тыка получается, не пойму что тогда делает другой тип итогов.
9 DexterMorgan
 
30.07.15
10:33
(7) что такое нормальное дерево?
10 hhhh
 
30.07.15
10:37
(7) пользуйтесь СКД. Тогда не будет таких диких мучений.
11 Wefast
 
30.07.15
10:39
(9) На котором все понятно

Где идет разветвление очевидное

Группа 1
  Подгруппа 1
  Подрруппа 2
Группа 2
  Подгруппа 1
    ПодПодгруппа 1
    ПодПодгруппа 2
Группа 3

Как то так я себе вижу дерево. В общем все вывелось в том виде, что меня устраивает.

Теперь мучаюсь как сделать колонку с галочками. Чтобы при выборе все подчиненные объект тоже выбирались

(10) Ну так я дерево и получаю путем использования СКД
12 hhhh
 
30.07.15
10:42
ну там ведь и выводится сразу.  Зачем писать такое мегадерьмо из девяытнадцатого века, да ещё ворчать при этом, что это вас злит?
13 Fish
 
30.07.15
10:44
(11) Вот здесь то, что тебе нужно: http://www.obrabotki.com/1s-tree-table-managedforms-3/
14 DexterMorgan
 
30.07.15
10:46
(13) ваще не о том)
15 DexterMorgan
 
30.07.15
10:47
(13) ему не надо программно выводить дерево на форму, у него оно уже есть
16 Fish
 
30.07.15
10:47
(14) Что значит, не о том? Как раз о : "Теперь мучаюсь как сделать колонку с галочками. Чтобы при выборе все подчиненные объект тоже выбирались"
17 Wefast
 
30.07.15
10:48
(12) не понял, что не так. Я и выгрузил из СКД дерево с Группировкой и иерархией. А потом вывел на форму.

(13) Не получается так, я не знаю где так делается, но обращение к элементам таким образом у меня не проходит

(15) Там на второй странице функция ПриИзменение
18 Wefast
 
30.07.15
10:50
Нашел более подходящий вариант, но он тоже не работает

Процедура ДеревоПриИзмененииФлажка(Элемент, Колонка)
  ТекущаяСтрока = Элемент.ТекущаяСтрока;   // Вот тут уже ничего не выходит. Получается Только ЭлементЫ.Дерево.ТекущиеДанные

  Если ТекущаяСтрока.Пометка = 2 Тогда
     ТекущаяСтрока.Пометка = 0;
  КонецЕсли;

  УстановкаФлажков(ТекущаяСтрока, ТекущаяСтрока.Пометка);

  Пока ТекущаяСтрока.Родитель <> Неопределено Цикл
     ТекущаяСтрока.Родитель.Пометка =
                      ?(УстановленноДляВсех(ТекущаяСтрока), ТекущаяСтрока.Пометка, 2);
     ТекущаяСтрока = ТекущаяСтрока.Родитель;
  КонецЦикла;

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




Процедура УстановкаФлажков(ТекущаяСтрока,Значение)

    Для Каждого Стр Из ТекущаяСтрока.Строки Цикл  // А вот тут уже нет возможности ничего перебрать. Через отладку не нашел где вообще можно перебрать строки
       Стр.Пометка = Значение;
       УстановкаФлажков(Стр, Стр.Пометка);
    КонецЦикла;

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


Функция УстановленноДляВсех(Строка)
   Для Каждого Стр Из Строка.Родитель.Строки Цикл
      Если Стр.Пометка <> Строка.Пометка Тогда
         Возврат Ложь;
      КонецЕсли;
   КонецЦикла;
   Возврат Истина;

КонецФункции
19 Fish
 
30.07.15
10:51
(15) А какая разница? Переделать этот пример для не программно выведенного дерева - раз плюнуть.
20 DexterMorgan
 
30.07.15
10:55
(18) установка/снятие флажков для всех подчиненных элементов - нужна рекурсия
21 Fish
 
30.07.15
10:55
(18) Вот рабочий вариант. Проверено: http://www.obrabotki.com/1s-tree-table-managedforms-3/2/
22 DexterMorgan
 
30.07.15
10:55
(18) а у тебя вроде так
23 Wefast
 
30.07.15
10:56
(19) Ну вот не выходит его переделать
{Форма.Форма.Форма(146)}: Поле объекта не обнаружено (Дерево)
        ЭлементКоллекции = ЭтаФорма["Дерево"].НайтиПоИдентификатору(ИДТекущейСтроки);
24 Wefast
 
30.07.15
10:57
(22) Вторая процедура УстановкаФлажков рекурсивно же вроде как должна устонавливать. Но пока не нашел как обойти эти самые строки
25 Fish
 
30.07.15
10:57
(23) Так поменяй "Дерево" на название своего элемента формы.
26 Wefast
 
30.07.15
10:58
(25) Серьезно? Оно у меня так и называется.
27 Fish
 
30.07.15
11:01
(26) Если бы это было так, то тогда не писало бы: "Поле объекта не обнаружено (Дерево)" :))
28 Wefast
 
30.07.15
11:03
Там вообще не получается через ЭтаФорма. обратиться к какому либо элементу этой самой формы

http://i.imgur.com/cFaiNo8.png?1
29 Wefast
 
30.07.15
11:05
30 Wefast
 
30.07.15
11:13
Вышло так
ЭлементКоллекции = Объект.Дерево.НайтиПоИдентификатору(ИДТекущейСтроки);

Надеюсь это тоже самое. Сейчас гляну где еще застряну
31 Fish
 
30.07.15
11:16
(30) Ну так правильно, потому что у тебя дерево - это реквизит объекта, а не формы. Должно заработать.
32 Wefast
 
30.07.15
11:25
(31) Да так все заработало.

Осталось теперь обработать получившееся дерево.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший