![]() |
![]() |
![]() |
|
Как транспонировать ТаблицуЗначений? Ø |
☑ | ||
---|---|---|---|---|
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
|
А траклютировать нахрен? Мона?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |