Имя: Пароль:
1C
1С v8
Получаю на сервере таблицу значений. Как сформировать из ТЗ ДеревоЗначений?
,
0 altaykniga
 
13.10.16
08:59
Доброго дня, умные люди. Прошу вашей помощи. Ни разу не приходилось с деревом значений работать. Задача такая:
Программно получаю на сервере ТаблицуЗначений. Потом эту ТЗ нужно отобразить на форме как дерево значений (с возможностью ввода/изменения колонки "количество")

Что сделал:
1. создал внешнюю обработку. На форму добавил реквизит ДеревоЗначений с колонками Номенклатура,ЕдиницаИзмерения, Количество, Родитель.
2. получил на сервере нужную ТЗ. вот скрин: https://yadi.sk/i/xKd-_p_Ewk6oU

вопрос: как заполнить реквизит формы ДеревоЗначений данными из этой ТЗ?
1 aleks_default
 
13.10.16
09:00
запросом, например
2 altaykniga
 
13.10.16
09:05
(1) можете подсказать текст запроса? И как потом результат запроса передать в дерево значений на форму?
3 Ifkerri
 
13.10.16
09:10
Дерево = РеквизитФормыВЗначение("ТвоеДерево");
    Дерево.Строки.Очистить();
    Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
    ЗначениеВРеквизитФормы(Дерево, "ТвоеДерево");
4 Ifkerri
 
13.10.16
09:10
(3) имена колонок и полей в запросе должны совпадать
5 Ifkerri
 
13.10.16
09:11
в самом запросе итоги херачишь и все)
6 altaykniga
 
13.10.16
09:15
(5) как будет выглядеть текст запроса применительно к моей ТЗ (скрин в (0))?
7 aleks_default
 
13.10.16
09:24
может нам и зарплату за тебя получить?
8 Ifkerri
 
13.10.16
09:25
(6) а я хз:) как я те по таблице текст запроса скажу)))
9 Ifkerri
 
13.10.16
09:25
(8) если есть готовая тз то можно просто конвертнуть ее в дерево, для любителей винтажа так сказать
10 Ifkerri
 
13.10.16
09:28
ПЗ = Новый ПостроительЗапроса;
    ПЗ.ИсточникДанных          = Новый ОписаниеИсточникаДанных(ТаблицаДляОтправки.Выгрузить());
    ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
    ПЗ.ИсточникДанных.Колонки["ЗаказКлиента"].Измерение = Истина;
    ПЗ.ЗаполнитьНастройки();
    ПЗ.Выполнить();
    Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
11 Ifkerri
 
13.10.16
09:28
усе просто
12 Тындр
 
13.10.16
09:39
Во времена 77 и 8.0 нельзя было запросом выбрать ТЗ. Приходилось извращаться. А в 77 вообще чтобы сделать дерево приходилось делать таблицы значений, в строках которых были таблицы значений. Вот это было круто. Вот были времена
13 novichok79
 
13.10.16
09:43
(10) +100500 - самый правильный ответ
14 newbling
 
13.10.16
09:44
(6) Можешь подгрузить её как временную таблицу и по ней уже что хочешь делать. Хоть в дерево, хоть в лес.
15 altaykniga
 
13.10.16
10:11
товарищи, дерево значений на форму передаваться стало! Ура! НО передается не то, что надо ))
неправильный текст запроса?

вот код:

Дерево = РеквизитФормыВЗначение("ДеревоЗначений1");
    
    Менеджер=Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    //|    ТЗ.Номенклатура
    |    *
    |    поместить ВремТЗ
    |ИЗ
    |    &ТЗ КАК ТЗ";
    Запрос.УстановитьПараметр("ТЗ", тТаблица);
    Запрос.МенеджерВременныхТаблиц=Менеджер;
    
    Запрос.Выполнить();
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    *
    |ИЗ
    |    ВремТЗ КАК ТЗ
    |ИТОГИ ПО
    |    ТЗ.Номенклатура";
    
    Дерево.Строки.Очистить();
    Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ЗначениеВРеквизитФормы(Дерево, "ДеревоЗначений1");
16 altaykniga
 
13.10.16
10:22
(15) ну гляньте скрин ТаблицыЗначений... может там данных не хватает для вывода в ДеревоЗначений?
17 Жан Пердежон
 
13.10.16
10:37
(16) может за тебя еще сделать? из запроса не всякое дерево получить можно.
18 altaykniga
 
13.10.16
13:07
(16) не надо за меня делать. Я не могу понять сам принцип формирования дерева... Какие поля должны быть в запросе, чтобы корректно выгрузить данные в дерево значений
19 SergTheGreat
 
13.10.16
14:38
(0) Может с др. конца к задаче подойти: в том месте, где первоначально ТЗ создается, сразу Дерево создавать?
20 altaykniga
 
13.10.16
15:22
(19) ТЗ создается в общем типовом модуле с помощью процедуры "УправлениеНебольшойФирмойСервер.Разузлование(СтруктураСостава, ТаблицаСостава, ТаблицаОпераций);"

ТЗ получается в том виде, скриншот которого приведен в (0). Помогите разобраться, какие данные нужно довнести в ТЗ, чтобы можно было сформировать деревоЗначений?
21 Ёпрст
 
13.10.16
15:26
(20) да ё.. сделай итоги по узлу и номенклатуре, наслаждайся
22 Жан Пердежон
 
13.10.16
15:27
(20) ппц, сколько можно уже.
разберись сначала, чем дерево от ТЗ отличается.
23 shpioleg
 
13.10.16
15:29
Пробуй запрос по справочнику Номенклатура  и соединяй со своей ТЗ. И ОбходРезультата по Группировкам с иерархией.
24 altaykniga
 
13.10.16
15:35
(23) это вариант не подходит, т.к. мне нужно вывести дерево спецификаций, т.е. состава изделия.
25 shpioleg
 
13.10.16
15:58
(24) Можешь на основе своей ТЗ сформировать Дерево как тебе нужно и засунуть в реквизит формы.
Т.е.
1. Создаешь Новый ДеревоЗначений и нужные колонки.
2. Пробегаешь по своей ТЗ и заполняешь дерево значений как тебе нужно. Дерево(или Родитель).Строки.Добавить();
3. Конвертишь ДеревоЗначений в реквизит формы ДанныеФормы Дерево
4. И наконец!, мучаешь дерево на клиенте :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший