Имя: Пароль:
1C
1С v8
Дерево значений в таблицу значений
0 SKY_LLS
 
28.10.16
13:08
Добрый день.
Если дерево значений:
-Строка1
--подстрока1_1
--подстрока1_2
--...
--подстрока1_n
-Строка2
--подстрока2_1
--подстрока2_2
--...
--подстрока2_n
...
-Строкаm
--подстрокаm_1
--подстрокаm_2
--...
--подстрокаm_n

Необходимо получить ТЗ
строка 1 - подстрока1_1,подстрока2_1,подстрока2_2,...подстрокаm_n
строка 1 - подстрока2_1,подстрока2_1,подстрока2_2,...подстрокаm_n

и так далее... То есть склеить все подстроки со всеми подстроками

Ума не приложу как это сделать. Может кто-то подскажет. Заранее благодарен
1 СамыйУмный
 
28.10.16
13:09
Клей не предлагать?
2 SKY_LLS
 
28.10.16
13:10
Если поможет, готов нюхать:)
3 Живой Ископаемый
 
28.10.16
13:13
один уровень иерархии?
4 Лефмихалыч
 
28.10.16
13:14
Я из "Необходимо получить ТЗ" ни ч0рта не понял
5 СамыйУмный
 
28.10.16
13:16
Обходишь циклом своё дерево и пихаешь это всё в ТЗ.
Что тут сложного?)
6 SKY_LLS
 
28.10.16
13:26
в итоге я просто выгружу строки
мне нужно из ДЗ с тремя строками, в которых по 3 подстроки получитьТЗ
п11,п21,п31
п11,п21,п32
п11,п21,п33
п11,п22,п31
п11,п22,п32
п11,п22,п33
п11,п23,п31
п11,п23,п32
п11,п23,п33
п12,п21,п31
п12,п21,п32
п12,п21,п33
п12,п22,п31
п12,п22,п32
п12,п22,п33
п12,п23,п31
п12,п23,п32
п12,п23,п33
п13,п21,п31
п13,п21,п32
п13,п21,п33
п13,п22,п31
п13,п22,п32
п13,п22,п33
п13,п23,п31
п13,п23,п32
п13,п23,п33
7 Лефмихалыч
 
28.10.16
13:28
Строки = ДЗ.Строки.НайтиСтроки(УсловеКотороеВсегдаИстина, Истина);
для каждого строка из строки
   ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Строка);
КонецЦикла
8 Михаил Козлов
 
28.10.16
13:32
(7) Ему нужно еще колонки получить: как в отчете при группировке в колонках. Похоже, строки ТЗ - 1-ый уровень, колонки - объединение подстрок.
9 Лефмихалыч
 
28.10.16
13:35
(8) да я вообще не понимаю - суда по примерам, там какое-то декартово произведение чего-то на что-то.
10 Михаил Козлов
 
28.10.16
13:37
(9) Например, нужно вывести объемы продаж: в строках - номенклатура, в столбцах - месяцы. Дерево: результат запроса с итогами по номенклатуре.
11 Fedor-1971
 
28.10.16
13:39
(7) по ходу, у ТС проблема как определить сколько колонок в ТЗ завести.
Пробуй примерно так:

  тз=Новый ТаблицаЗначений;
  ур1=ДеревоЗначений.ПолучитьЭлементы();
  Для каждого позУр1 из ур1 цикл
    ур2=позУр1.ПолучитьЭлементы();
    Если НЕ ур2.Количество()=0 тогда
      Вот тут проверь сколько колонок у твоей ТЗ и если надо добавь недостающее количество
    КонецЕсли;
  КонецЦикла;
[\1С]

Дальше перебором опять же заполняй свою таблицу, т.е. по дереву нужно пройти дважды: 1-й раз определяем количество колонок в ТЗ, 2-й раз заполняем
12 Лефмихалыч
 
28.10.16
13:39
(10) ну и вывести компоновкой сразу в ТЗ, зачем вот эти заморочки?
13 Михаил Козлов
 
28.10.16
13:50
(11) Можно и одним циклом, добавляя колонки, если их не хватает.
14 SKY_LLS
 
28.10.16
14:10
Спасибо, попробую
15 SKY_LLS
 
08.11.16
12:37
Если кому-то интересно. Вот что требовалось :)
Процедура КнопкаВыполнитьНажатие(Кнопка)
    ДЗ = Новый ДеревоЗначений;
    ДЗ.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка"));
    
    Для Ид = 1 По 3 Цикл
        СтрокаДЗ = ДЗ.Строки.Добавить();
        СтрокаДЗ.Значение = "Значение_"+Ид;
        Для Ид1 = 1 По 3 Цикл
            СтрокаДЗ1 = СтрокаДЗ.Строки.Добавить();
            СтрокаДЗ1.Значение = "Значение_"+Ид+"_"+Ид1;
        КонецЦикла;
    КонецЦикла;    
    
    МассивДанных = Новый Массив;
    Для Каждого СтрокаДЗ Из ДЗ.Строки Цикл
        СформироватьМассив(МассивДанных, СтрокаДЗ.Строки);
    КонецЦикла;    
    
    Сообщить(МассивДанных.Количество());
КонецПроцедуры

Процедура СформироватьМассив(МассивДанных, СтрокиДЗ)
    НовыйМассив = Новый Массив;
    Если МассивДанных.Количество() = 0 Тогда
        Для Каждого СтрокаДЗ Из СтрокиДЗ Цикл
            МассивДанных.Добавить(СтрокаДЗ.Значение);
        КонецЦикла;
        Возврат;
    КонецЕсли;
    Для Каждого СтрокаМассива Из МассивДанных Цикл
        Для Каждого СтрокаДЗ Из СтрокиДЗ Цикл
            НовыйМассив.Добавить(СтрокаМассива + ", " + СтрокаДЗ.Значение);
        КонецЦикла;
    КонецЦикла;    
    МассивДанных = НовыйМассив;    
КонецПроцедуры
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший