Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Дерево значений в таблицу значений

Дерево значений в таблицу значений
Я
   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
Клей не предлагать?
   SKY_LLS
 
2 - 28.10.16 - 13:10
Если поможет, готов нюхать:)
   Живой Ископаемый
3 - 28.10.16 - 13:13
один уровень иерархии?
   Лефмихалыч
 
4 - 28.10.16 - 13:14
Я из "Необходимо получить ТЗ" ни ч0рта не понял
   СамыйУмный
 
5 - 28.10.16 - 13:16
Обходишь циклом своё дерево и пихаешь это всё в ТЗ.
Что тут сложного?)
   SKY_LLS
 
6 - 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) Например, нужно вывести объемы продаж: в строках - номенклатура, в столбцах - месяцы. Дерево: результат запроса с итогами по номенклатуре.
 
 Рекламное место пустует
   Fedor-1971
 
11 - 28.10.16 - 13:39
(7) по ходу, у ТС проблема как определить сколько колонок в ТЗ завести.
Пробуй примерно так:
[1С]
  тз=Новый ТаблицаЗначений;
  ур1=ДеревоЗначений.ПолучитьЭлементы();
  Для каждого позУр1 из ур1 цикл
    ур2=позУр1.ПолучитьЭлементы();
    Если НЕ ур2.Количество()=0 тогда
      Вот тут проверь сколько колонок у твоей ТЗ и если надо добавь недостающее количество
    КонецЕсли;
  КонецЦикла;
[\1С]

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует