К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как перевернуть таблицу в 1С: способы транспонирования данных

Как перевернуть таблицу в 1С: поменять строки и столбцы местами в табличном документе, запросе и таблице значений. Пошаговые инструкции и примеры кода.

Под «перевернуть таблицу» в 1С обычно понимают две разные задачи. Первая — транспонирование: поменять местами строки и столбцы, чтобы названия колонок стали первой колонкой, а значения строк развернулись горизонтально. Вторая — изменить порядок строк на обратный (отсортировать в реверсивном порядке). Прежде чем выбирать инструмент, определите, какая из задач стоит перед вами: способы их решения принципиально различаются.

Единой кнопки «перевернуть таблицу» в платформе 1С нет. В типовых конфигурациях транспонирование выполняется либо встроенными средствами конкретного отчёта (например, настройкой СКД), либо программно — через запрос или обход таблицы значений в цикле. Для разовой задачи проще выгрузить данные в Excel и воспользоваться специальной вставкой, а для регулярной — написать обработку.

Ниже разобраны все рабочие способы: от простого копирования через буфер обмена до программного транспонирования таблицы значений и настройки отчёта на СКД. Для каждого способа указаны условия применения, ограничения и типичные ошибки.

Определяем задачу: транспонирование или обратный порядок строк

Транспонирование — это поворот таблицы на 90 градусов: первая строка становится первым столбцом, вторая строка — вторым столбцом и так далее. Такая операция нужна, когда, например, периоды (месяцы) расположены в строках, а для анализа или печатной формы их требуется развернуть в колонки.

Обратный порядок строк — это просто сортировка по убыванию. Если вам нужно, чтобы последние записи показывались первыми, транспонировать ничего не требуется: достаточно изменить сортировку динамического списка, запроса (конструкция УПОРЯДОЧИТЬ ПО ... УБЫВ) или таблицы значений методом Сортировать().

Маршрут решения

Как выбрать действие

Нужно, чтобы строки стали колонками, а колонки — строкамиЭто транспонирование: используйте Excel, программный обход таблицы значений или СКД
Нужно показать строки в обратном порядке (новые сверху)Это сортировка: измените порядок в запросе, динамическом списке или методом Сортировать()
Нужно развернуть данные в печатной форме или отчётеНастройте отчёт на СКД: вынесите измерение в группировку колонок

Способ 1. Переворот через Excel — самый быстрый для разовой задачи

Для единичной операции проще всего выгрузить таблицу из 1С и перевернуть её средствами Excel. Подходит для табличных документов, результатов отчётов и любых данных, которые можно сохранить или скопировать.

Порядок действий: сохраните табличный документ через Файл → Сохранить копию в формате Excel (лист Excel) или скопируйте таблицу в буфер обмена. Откройте файл в Excel, выделите диапазон с данными и скопируйте его (Ctrl+C). Установите курсор в пустую ячейку, вызовите контекстное меню, выберите «Специальная вставка» и установите флажок «Транспонировать». Строки и столбцы поменяются местами.

Ограничение способа — форматирование и формулы. При транспонировании через специальную вставку переносятся значения, но объединённые ячейки, ширина колонок и оформление теряются. Если результат нужен обратно в 1С (например, для загрузки), сохраните лист в формате MXL или загрузите через типовую обработку загрузки из табличного документа, если она есть в вашей конфигурации.

Переворот таблицы через Excel
  1. 1
    Сохраните табличный документ из 1С в формате Excel или скопируйте данные
  2. 2
    Выделите диапазон в Excel и скопируйте его (Ctrl+C)
  3. 3
    Установите курсор в пустую ячейку ниже или на новом листе
  4. 4
    Откройте «Специальную вставку» и отметьте «Транспонировать»
  5. 5
    Проверьте, что шапка стала первой колонкой, а строки развернулись в столбцы

Способ 2. Программное транспонирование таблицы значений

Если переворот нужен регулярно — в обработке, отчёте или обмене данными, — его выполняют кодом на встроенном языке. Идея проста: создаётся новая таблица значений, в которую добавляются колонки по числу строк исходной таблицы, а затем в цикле переносятся значения.

Алгоритм: первым столбцом новой таблицы будет колонка с именами исходных колонок. Затем для каждой строки исходной таблицы добавляется новая колонка, а каждая строка исходной таблицы превращается в набор значений по этим колонкам. Тип колонок заранее неизвестен, поэтому колонки обычно создают без ограничения типа или с составным типом.

bsl
Функция ТранспонироватьТЗ(ИсходнаяТЗ)
	НоваяТЗ = Новый ТаблицаЗначений;
	НоваяТЗ.Колонки.Добавить("ИмяКолонки");
	Для Каждого СтрокаТЗ Из ИсходнаяТЗ Цикл
		НоваяТЗ.Колонки.Добавить("Колонка" + Формат(ИсходнаяТЗ.Индекс(СтрокаТЗ) + 1, "ЧГ="));
	КонецЦикла;
	Для Каждого Колонка Из ИсходнаяТЗ.Колонки Цикл
		НоваяСтрока = НоваяТЗ.Добавить();
		НоваяСтрока.ИмяКолонки = Колонка.Имя;
		Для Каждого СтрокаТЗ Из ИсходнаяТЗ Цикл
			НоваяСтрока[ИсходнаяТЗ.Индекс(СтрокаТЗ) + 1] = СтрокаТЗ[Колонка.Имя];
		КонецЦикла;
	КонецЦикла;
	Возврат НоваяТЗ;
КонецФункции

Учитывайте производительность: обращение к ячейкам по индексу внутри двойного цикла на больших таблицах (десятки тысяч строк и более) работает медленно. Для таких объёмов эффективнее транспонировать данные на уровне запроса — через пакетное соединение таблиц или свёртку по измерениям, либо перенести логику в СКД.

Способ 3. Переворот данных в отчёте на СКД

Если цель — аналитический отчёт, где, например, месяцы должны идти по колонкам, а контрагенты — по строкам, транспонирование выполняется настройкой схемы компоновки данных без единой строки кода. В СКД «разворот» таблицы достигается распределением измерений между группировками строк и колонок.

Откройте настройки отчёта (Ещё → Изменить вариант в типовых конфигурациях или конструктор настроек). Перенесите нужное поле (например, «Период» или «Месяц») в группировку колонок, а аналитику (контрагента, номенклатуру) — в группировку строк. В результате значения ресурса (сумма, количество) будут показаны на пересечении строк и колонок — это и есть перевернутое представление данных.

При разработке собственного отчёта то же самое задаётся на закладке «Настройки» схемы компоновки: в дереве группировок добавьте группировку в ветку «Колонки» таблицы. Если данные в запросе хранятся «вертикально» (период в строках), СКД сама развернёт их по колонкам при формировании.

Способ 4. Транспонирование запросом

В языке запросов 1С нет оператора PIVOT, поэтому прямое транспонирование произвольной таблицы запросом невозможно. Однако частный и самый частый случай — разворот фиксированного списка значений в колонки — решается через условную агрегацию с функцией ВЫБОР.

Пример: есть таблица продаж по месяцам, нужно получить по каждому контрагенту колонки «Январь», «Февраль» и так далее. В запросе для каждого месяца создаётся вычисляемое поле вида СУММА(ВЫБОР КОГДА Месяц = &Январь ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ) с группировкой по контрагенту. Это стандартный приём «кросс-таблицы» в запросах.

Ограничение очевидно: список колонок должен быть известен заранее и зашит в текст запроса. Если набор значений динамический (например, произвольный список складов), запрос придётся формировать программно, подставляя поля в текст, либо использовать СКД, где разворот выполняется автоматически.

Сравнение способов переворота таблицы

Excel (специальная вставка)

Быстро для разовой задачи; не подходит для регулярной работы и теряет оформление

Программный обход таблицы значений

Универсально и автоматизируется; медленно на больших объёмах, требует прав на изменение конфигурации или внешнюю обработку

Настройка СКД

Без кода, работает в типовых отчётах; применимо только к отчётам, а не к произвольным таблицам

Запрос с ВЫБОР КОГДА

Быстро на сервере; список колонок фиксирован в тексте запроса

Как проверить результат и типичные ошибки

После переворота сверьте контрольные суммы: сумма по числовой колонке исходной таблицы должна совпадать с суммой соответствующей строки (или колонки) перевёрнутой. Проверьте первую и последнюю ячейки диагонали — именно там чаще всего видны смещения при программном переносе.

Типичная ошибка при программном транспонировании — потеря типов данных: если колонки новой таблицы созданы без описания типов, числа и даты могут сохраниться корректно, но при последующей выгрузке или сравнении значений возможны сюрпризы. Вторая частая ошибка — забыть про шапку: имена исходных колонок должны стать значениями первой колонки результата, иначе смысл данных теряется.

При работе через Excel следите за тем, чтобы в копируемый диапазон не попали объединённые ячейки — специальная вставка с транспонированием в этом случае может завершиться ошибкой или исказить структуру. Перед копированием снимите объединение в табличном документе 1С или в самом Excel.

Типичные ошибки
01
Транспонирование вместо сортировки: пользователь переворачивает таблицу, хотя нужно было просто отсортировать строки по убыванию
02
Потеря шапки: имена колонок не перенесены в первую колонку результата, и данные становятся нечитаемыми
03
Двойной цикл по большой таблице: на десятках тысяч строк обработка зависает — нужно переносить логику в запрос или СКД
04
Копирование диапазона с объединёнными ячейками в Excel: специальная вставка выдаёт ошибку или искажает структуру
05
Попытка написать универсальный PIVOT в запросе: язык запросов 1С не поддерживает динамический разворот колонок
Контрольные точки

Как проверить результат

Контрольные суммы числовых полей
Норма

Сумма по колонке исходной таблицы равна сумме соответствующей строки после переворота

Тревожный признак

Суммы расходятся — значит, часть строк потеряна или продублирована

Первая колонка результата
Норма

Содержит имена всех исходных колонок в правильном порядке

Тревожный признак

Имена отсутствуют или смещены — шапка потеряна

Количество строк и колонок
Норма

Число строк результата равно числу колонок источника и наоборот

Тревожный признак

Размерность не совпадает — ошибка в цикле переноса

Часто задаваемые вопросы

Можно ли перевернуть таблицу прямо в форме списка документов или справочника?

Нет. Динамический список всегда показывает записи строками, а поля — колонками, и это поведение не настраивается. Максимум, что доступно пользователю, — изменить сортировку, отбор и состав колонок через меню «Ещё». Для развёрнутого представления нужен отчёт на СКД или отдельная обработка.

Как развернуть колонки в строки в табличном документе перед печатью?

Табличный документ не поддерживает транспонирование как операцию. Разверните данные до вывода: транспонируйте таблицу значений программно, а затем выведите её в макет. Либо измените макет так, чтобы область-строка стала областью-колонкой, и выводите данные в цикле по колонкам.

Почему программный переворот большой таблицы работает очень медленно?

Обращение к ячейкам таблицы значений по имени колонки и индексу строки внутри двойного цикла — дорогая операция. На больших объёмах используйте запрос с группировкой и функцией ВЫБОР, либо СКД: они выполняются на уровне СУБД или оптимизированного движка компоновки и работают на порядки быстрее.

Можно ли транспонировать результат запроса, не зная список колонок заранее?

Напрямую в запросе — нет: язык запросов 1С требует явного перечисления полей. Варианты обхода: сформировать текст запроса программно, подставив нужные поля; выгрузить результат в таблицу значений и транспонировать её кодом; либо использовать СКД, где разворот по значениям измерения выполняется автоматически.

Как сделать, чтобы в отчёте месяцы шли по колонкам, а контрагенты — по строкам?

Откройте настройки варианта отчёта, добавьте группировку по контрагенту в строки и группировку по периоду (месяц) в колонки. Ресурс (сумма продаж) оставьте в выбранных полях. После формирования каждому месяцу будет соответствовать отдельная колонка — это и есть перевёрнутое представление данных.

Итог

Что важно запомнить

Сначала определите задачу: транспонирование (строки в колонки) или обратная сортировка. Разово переверните таблицу через Excel, регулярно — программно через таблицу значений, а в отчётах используйте группировки СКД. После переворота сверяйте контрольные суммы и проверяйте, что шапка стала первой колонкой.