Как изменить порядок реквизитов управляемой формы и колонок таблицы значений в 1С

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

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

Анализ проблемы: почему порядок реквизитов важен?

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

Решение 1: Использование 1C:Enterprise Development Tools (EDT)

Проанализируем самый современный и удобный способ. 1C:EDT — это среда разработки на базе Eclipse, которая постепенно заменяет классический Конфигуратор. В отличие от своего предшественника, EDT обладает гораздо более гибким интерфейсом для работы со структурой метаданных. Для тех, кто только планирует переход на новые инструменты, будет полезно изучить начало работы в 1С:EDT, чтобы освоить все преимущества современной среды.

Разберем по шагам, как это сделать в EDT:

  1. Откроем проект в EDT и найдем нужную управляемую форму.
  2. Перейдем в панель «Структура» (Outline).
  3. В этой панели отображаются все реквизиты формы, включая колонки таблиц значений.
  4. Используем стандартный механизм Drag-and-Drop: просто перетаскиваем реквизит или колонку мышью на нужное место.
  5. При сохранении формы EDT автоматически обновит XML-описание, изменив индексы элементов.

Этот метод является наиболее безопасным и «цивилизованным», так как среда сама следит за целостностью структуры данных.

Решение 2: Редактирование XML-файлов формы

Если вы не используете EDT, можно прибегнуть к «низкоуровневому» методу, который часто называют «хаком». Метод заключается в прямой правке исходного кода формы. Посмотрим на этот процесс подробнее:

  1. В Конфигураторе выгрузим конфигурацию в файлы (пункт меню «Конфигурация — Выгрузить конфигурацию в файлы...»).
  2. Найдем файл нужной формы. Обычно он называется Form.form или располагается в папке с именем формы.
  3. Откроем файл любым текстовым редактором (рекомендуется Notepad++ или VS Code).
  4. Найдем секцию <attributes>. Внутри нее каждый реквизит описан тегом <attribute>.
  5. Для реквизитов типа ТаблицаЗначений внутри тега атрибута будет вложенная секция <columns> с тегами <column>.
  6. Проанализируем ситуацию и переместим блоки <attribute> или <column> целиком в нужном нам порядке.
  7. Сохраним файл и загрузим конфигурацию обратно («Загрузить конфигурацию из файлов...»).

Важно: этот метод требует осторожности. Ошибка в структуре XML может привести к тому, что форма перестанет открываться в Конфигураторе.

Решение 3: Организация через префиксы (Алфавитный порядок)

Рассмотрим более простой, хотя и компромиссный вариант. Платформа часто сортирует плоские списки реквизитов по алфавиту. Чтобы логически сгруппировать данные, мы можем использовать систему префиксов в именах.

Например, вместо имен ДатаНачала, Статус, СуммаИтого, используем:


// Пример именования для группировки:
Параметры_ДатаНачала
Параметры_ДатаОкончания
Служебные_АдресСервера
Служебные_Токен

Такой подход позволяет Конфигуратору автоматически «прижать» связанные реквизиты друг к другу. Это не меняет физический порядок в данных, но значительно упрощает навигацию для программиста.

Решение 4: Программное управление элементами (Items)

Важно различать реквизиты формы (данные) и элементы формы (визуальное представление). Если ваша задача — изменить порядок колонок в таблице на экране пользователя, это можно сделать программно в процедуре ПриСозданииНаСервере. Комплексное программное изменение форм позволяет автоматизировать настройку интерфейса под конкретные задачи.

Рассмотрим пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Переместим колонку "Цена" в самое начало таблицы "Товары"
    ЭлементКолонка = Элементы.ТоварыЦена;
    РодительТаблица = Элементы.Товары;
    ЭлементПередКоторымВставить = Элементы.ТоварыНоменклатура;
    
    Элементы.Переместить(ЭлементКолонка, РодительТаблица, ЭлементПередКоторымВставить);
    
КонецПроцедуры

Метод Элементы.Переместить() позволяет динамически управлять порядком интерфейсных полей, независимо от того, в каком порядке созданы сами реквизиты в конфигураторе. Кстати, аналогичный подход используется, когда требуется программное перемещение колонки динамического списка в зависимости от настроек пользователя.

Программное создание реквизитов

Иногда требуется полностью динамическое формирование структуры данных. Выясним, как управлять порядком в этом случае. При использовании метода ИзменитьРеквизиты() новые поля всегда добавляются в конец списка. Если порядок критически важен, единственным выходом будет удаление всех реквизитов и их повторное создание в строгом порядке. В некоторых случаях для отладки структуры может пригодиться редактор форм в режиме предприятия, позволяющий видеть изменения свойств объектов без перезапуска.

Посмотрим на пример удаления и добавления:


&НаСервере
Процедура ПересоздатьРеквизиты()
    
    МассивДобавляемых = Новый Массив;
    МассивУдаляемых = Новый Массив;
    
    // Сначала определяем, что нужно удалить
    МассивУдаляемых.Добавить("СтарыйРеквизит");
    
    // Определяем новые реквизиты в нужном порядке
    НовыйТип = Новый ОписаниеТипов("Число");
    МассивДобавляемых.Добавить(Новый РеквизитФормы("ПервыйРеквизит", НовыйТип));
    МассивДобавляемых.Добавить(Новый РеквизитФормы("ВторойРеквизит", НовыйТип));
    
    ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемых, МассивУдаляемых);
    
КонецПроцедуры

Подведение итогов

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

← На главную