Почему колонки в отчете СКД располагаются не в том порядке, который задан в настройках?

Программист 1С v8.3 (Управляемые формы) Управленческий учет
← На главную

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

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

Причина 1: Параметр «Автопозиция ресурсов»

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

Разберем, как это изменить:

  1. Откроем схему компоновки данных в конфигураторе.
  2. Перейдем на вкладку «Настройки».
  3. Выберем либо весь отчет (самый верхний элемент в дереве настроек), либо конкретную группировку, где порядок колонок нарушен.
  4. Перейдем на вкладку «Другие настройки» (внизу справа).
  5. Найдем параметр «Автопозиция ресурсов». По умолчанию там установлено значение После всех полей.
  6. Установим значение «Не использовать».

После установки этого значения СКД начнет выводить поля ровно в той последовательности, которая задана в списке «Выбранные поля».

Причина 2: Использование «Авто» в выбранных полях группировок

Проанализируем ситуацию, когда в настройках отчета (общие настройки) порядок задан верно, но в конкретной группировке (например, «Номенклатура») стоит флажок Авто.

Если в группировке стоит Авто, она наследует поля родительской настройки. Однако, если вы начали вручную добавлять или менять порядок полей внутри группировки, развернув элемент Авто, это может привести к конфликтам визуального отображения.

Рекомендуемый подход:

Для жесткого контроля порядка колонок лучше полностью очистить список выбранных полей в конкретной группировке и добавить их вручную в нужном порядке, не полагаясь на автоматическое наследование. Убедитесь, что синие стрелочки «Вверх» и «Вниз» в списке выбранных полей соответствуют вашему желаемому результату.

Причина 3: Кэширование пользовательских настроек

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

Рассмотрим способы решения:

  1. В режиме «1С:Предприятие» в форме отчета нажмите кнопку «Еще» — «Установить стандартные настройки». Это принудительно сбросит текущие настройки пользователя к тем, что вы только что прописали в конфигураторе.
  2. Если это не помогло (актуально для сложных отчетов), попробуйте изменить Имя или Вариант отчета, чтобы система восприняла его как новый объект без истории настроек.
  3. В крайних случаях помогает очистка настроек через справочник «Сохраненные настройки» или через консоль администратора (Настройки пользователей и прав).

Причина 4: Отсутствие данных в полях остатков на уровне Регистратора

Автор темы столкнулся с тем, что в группировке «Регистратор» не выводятся начальные и конечные остатки, хотя обороты (Приход/Расход) присутствуют. Это не ошибка расположения колонок, а особенность работы виртуальных таблиц остатков и оборотов.

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

Чтобы исправить это, проанализируем настройки на вкладке «Набор данных»:

  1. Найдем поля остатков (например, СуммаНачальныйОстаток).
  2. В колонке «Роль» нажмем на кнопку выбора.
  3. Проверим, что указан тип Начальный остаток, а в поле Связь по периоду указано поле, отвечающее за время (обычно Период).
  4. Для группировки по регистратору в запросе обязательно должны присутствовать поля ПериодСекунда и Регистратор, и они также должны иметь соответствующие роли в компоновке (роль Период с указанием порядкового номера).

Причина 5: Группировка выбранных полей

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

  1. В списке «Выбранные поля» выделите несколько полей (удерживая Shift или Ctrl).
  2. Нажмите правую кнопку мыши и выберите «Сгруппировать поля».
  3. Задайте заголовок группе (например, «Показатели»).
  4. В свойстве «Расположение» выберите Горизонтально.

Этот метод гарантирует, что внутри этой группы порядок будет соблюдаться неукоснительно, а сама группа будет перемещаться как единое целое.

Пример настройки программного вывода (если используется свой код)

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


// Получаем настройки отчета
Настройки = Отчет.КомпоновщикНастроек.Настройки;

// Устанавливаем автопозицию ресурсов в "Не использовать"
ПараметрАвтопозиция = Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("AutoPositionResources"));
Если ПараметрАвтопозиция <> Неопределено Тогда
    ПараметрАвтопозиция.Значение = ТипАвтопозицииРесурсовКомпоновкиДанных.НеИспользовать;
    ПараметрАвтопозиция.Использование = Истина;
КонецЕсли;

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

← На главную