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

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

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

Основная причина, по которой мы не можем просто перетащить или использовать стрелки 'вверх/вниз' для колонок табличного реквизита, заключается в фундаментальном различии между элементом формы и реквизитом формы. Элементы формы — это визуальные компоненты, которые мы видим и располагаем на форме (например, табличное поле, поле ввода, кнопка). Реквизиты формы — это данные, которые хранятся на форме, и они могут быть связаны с элементами формы. Табличный реквизит — это, по сути, структура данных (ТаблицаЗначений), а его колонки — это поля этой структуры. Конструктор формы, как правило, управляет порядком элементов на форме, а не порядком объявления внутренних реквизитов или колонок таблиц, которые часто сортируются по алфавиту или по порядку добавления без возможности последующего прямого перемещения.

Итак, мы выяснили, что прямой и интуитивно понятный способ 'сдвинуть' колонку табличного реквизита в конструкторе, как мы это делаем с обычными элементами, отсутствует. Но это не означает, что задача нерешаема. Мы рассмотрим несколько подходов, каждый из которых имеет свои особенности, преимущества и недостатки.

Метод 1: Корректировка порядка колонок через пересоздание реквизитов в конструкторе формы

Это самый "прямолинейный" способ, если мы хотим изменить порядок именно в списке реквизитов формы. Однако он является достаточно неудобным, особенно если таблица имеет много колонок.

  1. Определяем желаемый порядок: Прежде чем приступать, четко определим, в каком порядке должны располагаться наши колонки.
  2. Удаление существующих колонок: Мы вынуждены будем удалить все колонки табличного реквизита, порядок которых хотим изменить, или только те, которые мешают.
  3. Добавление колонок в нужном порядке: После удаления мы добавляем колонки заново, одну за другой, уже в той последовательности, которая нам требуется. Поскольку новые реквизиты обычно добавляются в конец списка или вставляются в определенное место (зависит от версии платформы и типа реквизита), последовательное добавление гарантирует желаемый порядок.

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

Метод 2: Редактирование XML-файлов конфигурации

Этот метод является наиболее "глубоким" и позволяет нам напрямую влиять на структуру конфигурации. Он требует аккуратности и понимания того, что мы делаем, так как любое неверное изменение XML может привести к ошибкам в конфигурации.

  1. Выгрузка конфигурации в файлы: Первым шагом мы выгружаем всю конфигурацию или только необходимую форму в набор XML-файлов. Для этого мы открываем конфигуратор, переходим в меню Конфигурация -> Сохранить конфигурацию в файлы... (или Файл -> Выгрузить конфигурацию в файлы...). Если мы работаем только с одной формой, то можем выгрузить только ее: в дереве конфигурации находим нужную форму, вызываем контекстное меню и выбираем Сохранить в файл....
  2. Поиск и редактирование файла формы: После выгрузки мы находим соответствующий XML-файл нашей формы. Обычно он находится в подкаталоге с именем объекта (например, документа, справочника) и имеет название формы (например, `Form.xml` или `<ИмяФормы>.xml`). Открываем этот файл в любом текстовом или XML-редакторе (например, Notepad++, VS Code).
  3. Изменение порядка колонок в XML: Внутри XML-файла мы ищем секцию, описывающую реквизиты формы. Для табличного реквизита мы найдем секцию, описывающую его колонки. Эти колонки будут представлены в виде отдельных тегов (например, <Column> или схожих). Мы физически перемещаем блоки этих тегов в файле так, чтобы они соответствовали желаемому порядку. Важно сохранять корректную структуру XML.
  4. Загрузка конфигурации обратно: После внесения изменений мы сохраняем XML-файл и загружаем конфигурацию или форму обратно. Если выгружали всю конфигурацию: Конфигурация -> Загрузить конфигурацию из файлов.... Если только форму: в дереве конфигурации находим наш объект, вызываем контекстное меню для формы и выбираем Загрузить из файла....
  5. Обновление конфигурации базы данных: После загрузки, если конфигурация изменилась, не забываем обновить конфигурацию базы данных (F7).

Анализ метода: Этот метод дает полный контроль над порядком реквизитов и колонок на уровне конфигурации. Однако он крайне трудоемок и рискован, особенно для больших конфигураций, таких как 1С:ERP Управление предприятием. Малейшая ошибка в XML-структуре может привести к невозможности загрузки конфигурации или к ее некорректной работе. Мы рекомендуем использовать этот метод только в крайнем случае и всегда делать резервные копии перед началом работы.

Метод 3: Пользовательская настройка формы

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

  1. Открытие режима настройки формы: Пользователь в режиме 1С:Предприятие открывает нужную форму. Затем он находит кнопку "Все действия" (или аналогичную, часто это три точки или стрелка вниз рядом с заголовком формы) и выбирает пункт "Изменить форму...".
  2. Изменение порядка колонок: В открывшемся окне настроек формы пользователь может найти нужное табличное поле, развернуть его структуру и увидеть список колонок. Он может перетаскивать эти колонки мышью или использовать кнопки со стрелками для изменения их положения.
  3. Сохранение настроек: После изменения порядка пользователь нажимает кнопку "Готово". Эти изменения сохраняются для данного пользователя и будут действовать при каждом открытии этой формы. Настройки не затрагивают конфигурацию и вид формы для других пользователей.

Анализ метода: Это наиболее безопасный и удобный способ для изменения порядка отображения колонок с точки зрения пользователя. Нам, как разработчикам, важно знать о его существовании и рекомендовать его конечным пользователям, когда это возможно. Этот метод не меняет порядок реквизитов в конфигураторе, а лишь их визуальное представление.

Метод 4: Программное управление порядком колонок для динамических таблиц

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

  1. Создание табличной части программно: Предположим, у нас есть таблица значений МояТаблица. Мы добавляем в нее колонки, используя метод Колонки.Добавить().
  2. Использование метода Колонки.Вставить(): Для вставки колонки в определенное место мы используем метод Колонки.Вставить(<Индекс>, <Имя>, <Тип>, <Заголовок>, <Ширина>). Параметр Индекс позволяет нам точно указать позицию, куда будет вставлена новая колонка. Отсчет индексов начинается с 0.

Пример кода:


// Создаем новую таблицу значений
ПеременнаяНаФорме.МояТаблица = Новый ТаблицаЗначений;

// Добавляем колонки в нужном порядке
// Добавляем первую колонку
ПеременнаяНаФорме.МояТаблица.Колонки.Добавить("КодТовара", Новый ОписаниеТипов("Строка"), "Код", 10);

// Добавляем вторую колонку в конец
ПеременнаяНаФорме.МояТаблица.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"), "Наименование", 30);

// Вставляем новую колонку "ЕдиницаИзмерения" на вторую позицию (индекс 1),
// сдвигая "Наименование" на третью позицию
ПеременнаяНаФорме.МояТаблица.Колонки.Вставить(1, "ЕдиницаИзмерения", Новый ОписаниеТипов("Строка"), "Ед. изм.", 8);

// Теперь порядок колонок будет: КодТовара, ЕдиницаИзмерения, Наименование

Анализ метода: Этот подход идеален для таблиц, данные которых полностью формируются в коде. Он дает нам полную гибкость и контроль над структурой и порядком колонок без необходимости вмешательства в конструктор или XML-файлы. Если табличное поле на форме связано с программно создаваемой таблицей значений, этот метод является очень эффективным.

Метод 5: Управление возможностью изменения порядка пользователем

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

  1. Свойство ИзменятьПозициюКолонок для табличного поля: У элемента формы "Табличное поле" есть свойство ИзменятьПозициюКолонок.
    • Если мы установим его в Истина (значение по умолчанию), пользователь сможет перетаскивать колонки и менять их порядок через меню "Изменить форму".
    • Если мы установим его в Ложь, пользователь не сможет изменить порядок колонок этого табличного поля через стандартные механизмы настройки.
  2. Свойство ИзменятьПозицию для отдельной колонки табличного поля: Более тонкая настройка доступна для каждой отдельной колонки табличного поля. Свойство ИзменятьПозицию позволяет нам указать, может ли конкретная колонка быть перемещена пользователем.
    • Если Истина, колонка может быть перетащена.
    • Если Ложь, колонка будет зафиксирована на своей позиции относительно других колонок, для которых это свойство установлено в Истина.

Анализ метода: Эти свойства не меняют порядок колонок в конфигураторе, но предоставляют нам контроль над пользовательским опытом. Мы можем использовать их, чтобы обеспечить стабильность интерфейса или, наоборот, дать пользователям больше возможностей для персонализации.

Метод 6: Влияние на порядок реквизитов через имена

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

  1. Использование числовых префиксов: Если мы знаем, что список реквизитов или колонок сортируется по алфавиту (например, при первичном отображении в некоторых списках свойств), мы можем давать им имена с числовыми префиксами: 01_КолонкаВажная, 02_КолонкаВторостепенная, 03_КолонкаПоследняя.
  2. Использование других префиксов: Аналогично можно использовать любые другие префиксы, которые обеспечат желаемый алфавитный порядок.

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

Заключение

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

  1. Пересоздание реквизитов — прямое, но очень неудобное решение в конструкторе.
  2. Редактирование XML — мощный, но трудоемкий и рискованный способ для глубоких изменений на уровне конфигурации.
  3. Пользовательская настройка формы — идеальное решение для изменения отображения колонок без изменения конфигурации.
  4. Программное управление — лучший способ для динамически формируемых таблиц.
  5. Управление свойствами табличного поля — позволяет контролировать возможности пользователя по настройке.
  6. Влияние на порядок через имена — "хак" для ситуаций с алфавитной сортировкой.

Мы рекомендуем всегда начинать с анализа того, для чего именно нам нужно изменить порядок колонок. Если речь идет об удобстве конечного пользователя, то лучше всего использовать пользовательскую настройку формы. Если мы разрабатываем функционал и таблица формируется программно, то программное управление даст нам полный контроль. И только в крайнем случае, когда другие методы не подходят и нам необходимо изменить порядок на уровне конфигурации, мы можем прибегать к редактированию XML-файлов, соблюдая при этом максимальную осторожность.

← На главную