Как разрешить пользователю изменять порядок и состав колонок в управляемых формах 1С?

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

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

Проанализируем стандартные механизмы настройки формы

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

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

Разберем влияние режима совместимости на интерфейс

Если вы работаете в конфигурации, где установлен режим совместимости с версией 8.2.16 или ниже, интерфейс формы будет выглядеть не как привычное «Такси», а в стиле старых управляемых форм. В этом случае кнопка «Еще» может называться «Действия» или вовсе отсутствовать на панели. Платформа намеренно скрывает современные элементы управления, чтобы сохранить поведение, характерное для старых версий движка.

Проанализируем случай, когда форма открывается в режиме «Обычное приложение». Здесь управляемая форма работает через слой эмуляции. В таких условиях стандартные команды управления интерфейсом могут не пробрасываться автоматически. Если изменение режима совместимости на 8.3.x невозможно (например, из-за риска поломать существующий код), нам придется использовать программные методы вызова настроек.

Настроим свойства таблицы в конфигураторе

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

  1. Изменять состав колонок: этот флаг определяет, сможет ли пользователь вообще открывать окно настройки для данной таблицы и менять видимость полей.
  2. Изменять порядок колонок: именно этот параметр отвечает за возможность перемещения колонок как перетаскиванием (Drag-and-drop), так и через диалог настроек.

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

Рассмотрим программный вызов окна настройки формы

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

Посмотрим на пример кода, который открывает системное окно «Изменить форму»:


&НаКлиенте
Процедура НастроитьСписок(Команда)
    // Вызываем стандартное окно настройки текущей формы
    ЭтаФорма.ОткрытьОкноНастройкиФормы();
КонецПроцедуры

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

Использование контекстного меню для настройки

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

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

Программное управление порядком колонок

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


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

Используя объект Элементы, мы можем динамически управлять структурой формы. Однако помните, что такие изменения, сделанные программно в коде, могут конфликтовать с пользовательскими настройками, сохраненными ранее. Платформа 1С обычно отдает приоритет настройкам, которые пользователь сохранил через «Изменить форму».

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

Для того чтобы разрешить пользователю изменять порядок колонок в управляемой форме, мы должны выполнить следующие шаги:

  1. Убедиться, что в свойствах таблицы установлены флаги «Изменять состав колонок» и «Изменять порядок колонок».
  2. Проверить наличие свойства «Автозаполнение» у командной панели таблицы для отображения кнопки «Еще».
  3. Проанализировать режим совместимости конфигурации — в старых режимах (8.2) интерфейс настройки выглядит иначе.
  4. При необходимости использовать метод ЭтаФорма.ОткрытьОкноНастройкиФормы() для принудительного вызова диалога настроек.

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

← На главную