Имя: Пароль:
1C
 
Как транспонировать ТаблицуЗначений?
Ø
0 Young
 
08.09.05
14:28
Не подскажут ли уважаемые участники форума быстрый алгоритм транспонирования таблицы значений? Под транспонированием я имею в виду смену ориентации строк-столбцов (столбцы превращаются в строки и наоборот).
Как сделать перебором понятно, но может есть красивые способы?
1 Макс 1С
 
08.09.05
14:30
зачем сие магическое действие?
зы. может её в степень -1 возвести? ;-)
2 lanselot
 
08.09.05
14:33
Видимо (0) нужно написать програмку умножения матриц?
3 Денис2
 
08.09.05
14:34
(1,2) Могу предположить, что нужно отчёт развернуть в строки...
(0) руками делай.
4 Young
 
08.09.05
14:36
(1) Для красоты отображения на форме. Пытаюсь сделать "мастер" вставки из буфера обмена в табличную часть документа. В Excel в буфер копируется диапазон, а затем пользователь должен задать, какую колонку диапазона в какую колонку табличной части пихать. Для удобства процесса этого "задания" и хотелось бы транспонировать табличку...
5 Макс 1С
 
08.09.05
14:38
(4) честно? ниасилил..... какую колонку в какую колонку... транспонировать зачем? значения колонок строчек в колонке показывать в колонках.... о туфталогия.....
6 lalex23
 
08.09.05
14:44
(5) ну зачем сразу туфталогия, мне пару раз приходилось разворачивать, цель конечно была идиотская, но за деньги я и цветочки пририсую
(0) проще перебором - за прошедшие 2- минут уже и написал бы...
7 Young
 
08.09.05
14:45
(5) Дело в том, что строк будет скорее всего от нескольких десятков до пары сотен, а колонок - штук 5-15. Такую вещь красивее отобразить "наоборот", чтобы была в крайнем случае небольшая вертикальная прокрутка колонок (а скорее всего, все колонки уместятся на экран). Если таблицу не транспонировать, то колонки придётся прокручивать горизонтально, а это не очень красиво.
8 zzz
 
08.09.05
14:48
"небольшая вертикальная прокрутка колонок"
о как!
9 topasha
 
08.09.05
14:58
- На самом деле самого дела нет. В самой деятельности заключена самость дела - и наоборот. Наоборот получим оборот на, и таким образом перевернем образ. Я уже не говорю о природе говора в роде при уже. Ужи и узы - вы меня понимаете, мистер Андерсон?
- Конечно, я так и думал, Смит. Дайте еще затянуться.
10 Макс 1С
 
08.09.05
14:59
(9) классная трава... где брал? ;-)
11 Natalia
 
08.09.05
15:00
А таблица значений - нетипизированная? или все значения во всех колонках имеют один и тот же тип? иначе ничего хорошего не получится...
12 Young
 
08.09.05
15:01
(9) Впервые услышал слово "транспонировать"? Впечатлило? Всё когда-нибудь бывает в первый раз... :)
13 Natalia
 
08.09.05
15:02
(12) с двумя вложенными циклами - алгоритм должен получиться элементарным...еще первокурсники что-то такое на Паскале пишут...
14 Young
 
08.09.05
15:04
(11) Только строки везде.
15 Макс 1С
 
08.09.05
15:04
(12) высшая математика прошла мимо?
16 Young
 
08.09.05
15:09
(15) Имхо, высшая математика не причём. Попробуй в Excel скопировать диапазон в буфер, а затем сделать "Специальную вставку" из контекстного меню в какую-нибудь ячейку.
17 Natalia
 
08.09.05
15:18
(16) ну и что что Excel умеет это делать? по-моему успешно всегда получается... В 1С стандартного метода нет, но двумя циклами легко получается... кстати, ТЗ "квадратная" или нет? Если строки больше чем столбцов, какие предусматриваются действия?
18 Young
 
08.09.05
15:46
Вот так примерно:
========================================================================
Функция глТранспонироватьТЗ(Знач тзИсходн) Экспорт
        тзРезультат=СоздатьОбъект("ТаблицаЗначений");
        тзРезультат.КоличествоКолонок(тзИсходн.КоличествоСтрок());
        сзКолонка=СоздатьОбъект("СписокЗначений");
        Для ы=1 По тзИсходн.КоличествоКолонок() Цикл
                НомСтр=тзРезультат.НоваяСтрока();
                тзИсходн.Выгрузить(сзКолонка,,,ы);
                Для ё=1 По сзКолонка.РазмерСписка() Цикл

                КонецЦикла;
        КонецЦикла;
        Возврат тзРезультат;
КонецФункции //глТранспонироватьТЗ
19 Young
 
08.09.05
15:48
Форум строку съел внутри второго цикла :)
тзРезультат.УстановитьЗначение(НомСтр,ё,сзКолонка.ПолучитьЗначение(ё));
20 zzz
 
08.09.05
15:50
гЫ Ёоу !
21 baer
 
08.09.05
15:53
Может я чего недопонял, но, исходя из написанного в (4) можно предположить, что автору необходимо сопоставить колонки Таблицы из буфера обмена колонкам ТЧ документа... Для этого автор делает на форме ТЗ в которой этот процесс и происходит... Если это так, то зачем вообще транспонировать таблицу, если в конце концов данные из строк таблицы попадут в строки документа. Проще выдернуть из таблицы список заголовков столбцов и впихнуть его в ТЗ на форме, хоть вдоль, хоть поперек...
22 Young
 
08.09.05
15:58
(21) Данные тоже нужно показать, хотя бы частично. Как в том же Excel "Мастер текстов (импорт)"...
23 ПавелСоломин
 
08.09.05
17:10
Есть математический форум, там решали матрицы Метод Гаусса, на 1С. Хороший пример. Еще метод "рюкзака". Поищи по форуму.
24 Gloom
 
08.09.05
17:52
Процедура Транспонировать(ТЗ)
  буфер=СоздатьОбъект("ТаблицаЗначений");
  СЗ=СоздатьОбъект("СписокЗначений");
  Для счКолонок=1 По ТЗ.КоличествоСтрок() Цикл
    ТЗ.Выгрузить(СЗ,счКолонок,счКолонок);
    СЗ.Выгрузить(буфер);
    ТЗ.Заполнить(СЗ,счКолонок,счКолонок);
  КонецЦикла;
  ТЗ.Загрузить(буфер);
КонецПроцедуры
25 Gloom
 
08.09.05
17:55
+24
Строчка "ТЗ.Заполнить(СЗ,счКолонок,счКолонок);" - лишняя...
26 Young
 
08.09.05
18:13
(Gloom) Спасибо, это лучше, чем (18)!
27 andrewalexk
 
12.09.05
13:20
:))
мда
прикольно
скоро будем умножать табличные части документов, рассчитывать градиент и визуализировать N-мерные массивы в 1С...
28 КонецЦикла
 
12.09.05
13:25
А траклютировать нахрен? Мона?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс