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

Отчеты и Аналитика · 11 мин

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

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

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

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

Определите, где находятся данные

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

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

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

Как выбрать способ

Это отчёт с кнопкой «Настройки» или вариантами отчётаПеретащите группировки между зонами «Строки» и «Колонки» в настройках СКД
Это сводная таблица в режиме предприятияИспользуйте перетаскивание полей между областями строк и столбцов
Это таблица значений в обработке или на формеНапишите процедуру транспонирования с созданием новой таблицы
Это печатная форма на макетеПерестройте макет и запрос, либо выгрузите в Excel и транспонируйте там

Транспонирование в отчётах на СКД через настройки

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

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

Порядок действий в СКД
  1. 1
    Откройте отчёт и нажмите «Настройки» или «Изменить вариант»
  2. 2
    Найдите в структуре отчёта элемент «Таблица» с зонами «Строки» и «Колонки»
  3. 3
    Перетащите нужные группировки из «Строк» в «Колонки» и обратно
  4. 4
    Проверьте, что ресурсы (суммы, количество) не потерялись
  5. 5
    Нажмите «Закрыть и сформировать» и оцените результат
  6. 6
    Сохраните вариант отчёта, если настройка нужна постоянно

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

Ограничения и нюансы СКД

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

Учитывайте и производительность: если в колонки попадает поле с сотнями значений (например, все контрагенты), отчёт станет очень широким и тяжёлым. В таких случаях разумнее ограничить значения отбором или оставить это поле в строках.

Работа со сводными таблицами

В некоторых конфигурациях и внешних отчётах используется объект «Сводная таблица» — интерактивный аналог сводных таблиц Excel. Здесь транспонирование выполняется ещё проще: поля перетаскиваются мышью между областями строк, столбцов и данных прямо в режиме просмотра.

Откройте панель полей сводной таблицы (обычно она вызывается кнопкой на форме или из контекстного меню). Найдите поле, которое сейчас формирует строки, и перетащите его в область столбцов. Поле из области столбцов перенесите в область строк. Данные перестроятся автоматически, без переформирования всего отчёта.

Обратите внимание: если сводная таблица построена программно и разработчик заблокировал изменение структуры, перетаскивание будет недоступно. В этом случае менять разметку придётся через доработку обработки.

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

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

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

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

Имена колонок в таблице значений не могут содержать пробелы и начинаться с цифры, поэтому к значениям-заголовкам добавляют префикс (в примере — «К»). Если заголовки нужны «человеческие», красивые названия задают позже при выводе в табличный документ через свойство «Заголовок» параметра макета.

Типичные ошибки при программном транспонировании
01
Использование значений с пробелами как имён колонок — платформа выдаёт ошибку, нужен префикс и замена недопустимых символов
02
Потеря данных при дублях: если одна комбинация ключа и заголовка встречается дважды, без суммирования часть значений перезапишется
03
Отсутствие типизации новых колонок — смешанные типы ломают сортировку и итоги при выводе
04
Транспонирование таблицы с тысячами уникальных заголовков — получается неуправляемо широкая структура и расход памяти

Транспонирование на уровне запроса

Часто элегантнее не переворачивать готовую таблицу, а сразу построить запрос так, чтобы данные легли в нужной ориентации. Для этого меняют группируемые поля: то, что было в измерении строк, переносят в выборку с условиями по конкретным значениям. Классический приём — «разворот» периодов по колонкам через конструкцию ВЫБОР с суммированием.

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

Если набор значений динамический, применяют СКД с набором данных-запросом: компоновка сама развернёт поле в колонки через механизм группировок, и писать десятки ВЫБОРов не потребуется. Это ещё один аргумент в пользу построения отчётов именно на СКД, а не на ручном выводе.

Сравнение способов транспонирования

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

Быстро и без кода; подходит для отчётов; ограничение — работает только внутри механизма компоновки

ВЫБОР в запросе

Полный контроль над колонками и итогами; ограничение — фиксированный набор значений, громоздкий текст

Код с новой таблицей значений

Универсально, работает в обработках; ограничение — требует разработки и тестирования

Выгрузка в Excel

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

Табличные документы, печатные формы и Excel

Если данные уже выведены в табличный документ (печатная форма, результат макета), перестроить его «вживую» нельзя — ячейки зафиксированы. Вариантов два: изменить макет и код вывода или выгрузить документ в Excel и воспользоваться транспонированием там.

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

Если печатная форма нужна в перевёрнутом виде постоянно, правильнее доработать макет: поменять местами области строк и колонок и соответственно переписать цикл вывода. Это работа для разработчика, но она окупается при регулярном использовании формы.

Проверка результата и контрольные точки

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

Контрольные точки

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

Общий итог по таблице
Норма

Совпадает с исходным отчётом

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

Итог изменился — потеряны или задублированы данные

Ширина и высота таблицы
Норма

Число колонок равно числу бывших строк и наоборот

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

Часть измерений пропала или свернулась

Контрольные ячейки
Норма

Значения на пересечениях соответствуют исходным

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

Значения съехали — перепутаны ключи при переносе

Заголовки колонок
Норма

Читаемые названия периодов или объектов

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

Служебные имена вида «К202601» без заголовков

Отдельно проверьте пустые значения: при транспонировании на пересечениях, где данных не было, должны стоять нули или пусто в зависимости от логики отчёта. Необработанные NULL в запросах иногда превращаются в пропуски, которые при суммировании дают неожиданный результат.

Итог

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

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

Частые вопросы

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

Да, если отчёт построен на СКД. Пользователю достаточно прав на запуск отчёта: откройте «Настройки», перейдите в расширенный режим и перетащите группировки между зонами «Строки» и «Колонки». Изменённый вариант можно сохранить под своим именем, не затрагивая типовой.

Почему после переноса группировки в колонки отчёт стал формироваться очень долго?

Скорее всего, в колонки попало поле с большим числом уникальных значений — контрагенты, номенклатура, документы. Каждая колонка требует отдельного вычисления ресурсов. Установите отбор, сократите период или верните это поле обратно в строки.

Как транспонировать динамический список на форме?

Напрямую — никак: динамический список отображает результат запроса в фиксированной структуре. Нужно изменить запрос динамического списка (развернуть значения по колонкам через ВЫБОР) или заменить список таблицей значений с программным заполнением.

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

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

Что делать, если кнопка «Настройки» в отчёте недоступна?

Значит, разработчик запретил изменение варианта или отчёт выводится программно. Проверьте наличие других сохранённых вариантов отчёта. Если их нет, потребуется доработка отчёта разработчиком — самостоятельно структуру такого отчёта не изменить.

Сохранятся ли итоги при транспонировании в Excel?

Сами числа сохранятся, но если итоги были формулами, после специальной вставки с транспонированием ссылки могут сместиться. Надёжнее вставлять как значения, а итоги пересчитать заново функцией СУММ по новым диапазонам.