В процессе перехода с «обычных форм» (платформа 8.1 и 8.2) на «управляемые формы» (интерфейс «Такси», платформа 8.3) многие разработчики и пользователи сталкиваются с неожиданным поведением интерфейса. Одним из таких моментов является невозможность привычного перетаскивания колонок таблицы мышкой непосредственно в окне приложения. Рассмотрим, почему это происходит, как работают современные механизмы платформы и какие инструменты есть у программиста для решения этой задачи.
Разберем ситуацию с точки зрения архитектуры. В интерфейсе «Такси» управляемого приложения 1С физическое перемещение колонок мышкой непосредственно внутри таблицы в режиме реального времени не поддерживается «из коробки». Это сознательное ограничение платформы, связанное с тем, что отрисовка управляемого интерфейса происходит на основе декларативной модели. Платформа сама решает, как оптимально расположить элементы в зависимости от устройства (веб-клиент, тонкий клиент) и разрешения экрана.
Проанализируем свойства таблицы в конфигураторе. Если мы откроем палитру свойств элемента формы Таблица, мы не найдем там галочки «Разрешить перетаскивание колонок», как это было в версии 8.1. Вместо этого механизм кастомизации вынесен в отдельный системный диалог настройки.
Основным инструментом для конечного пользователя остается окно Изменить форму. Рассмотрим подробнее, как обеспечить пользователю доступ к этому функционалу и как сделать его использование более интуитивным:
Совет: Обучите пользователей использовать контекстное меню. Нажатие правой кнопкой мыши на заголовке любой колонки открывает меню, где пункт настроек часто находится ближе, чем в кнопке «Еще».
Иногда кнопка изменения порядка бывает недоступна (заблокирована). В этом случае нам необходимо проверить свойства элемента формы в Конфигураторе. Разберем ключевые свойства объекта ТаблицаФормы:
Истина.Если заказчик категорически отказывается от использования стандартного окна настроек, считая его слишком сложным, мы можем реализовать собственный механизм управления порядком. Для этого используется метод программного интерфейса Элементы.Переместить().
Посмотрим на пример кода, который перемещает выбранную колонку на одну позицию влево (вперед по списку):
// Пример программного перемещения колонки
// ТекЭлемент - это колонка, которую нужно передвинуть
// Родитель - это сама таблица или группа колонок
ИмяКолонки = Элементы.СписокНоменклатуры.ТекущийЭлемент.Имя;
КолонкаОбъект = Элементы[ИмяКолонки];
РодительТаблица = Элементы.СписокНоменклатуры;
// Определим индекс текущей колонки и переместим её перед предыдущей
ПорядковыйНомер = 0;
Для Каждого ТекПодчиненный Из РодительТаблица.ПодчиненныеЭлементы Цикл
Если ТекПодчиненный = КолонкаОбъект Тогда
Прервать;
КонецЕсли;
ПорядковыйНомер = ПорядковыйНомер + 1;
КонецЦикла;
Если ПорядковыйНомер > 0 Тогда
ЭлементПередКоторымСтавим = РодительТаблица.ПодчиненныеЭлементы[ПорядковыйНомер - 1];
Элементы.Переместить(КолонкаОбъект, РодительТаблица, ЭлементПередКоторымСтавим);
КонецЕсли;
Используя этот метод, можно создать упрощенную панель управления с двумя кнопками «Левее» и «Правее», которая будет физически менять структуру элементов формы. Однако помните, что такие «костыли» могут усложнить поддержку формы в будущем.
Проанализируем ситуацию, когда колонки объединены в группы. Если на форме создана ГруппаКолонок с видом Группа колонок (например, для создания многострочной «шапки»), возможности перемещения будут ограничены рамками этой группы. Пользователь не сможет простым перетаскиванием (даже в окне настроек) вынести колонку из группы «Цены» в группу «Остатки», если иерархия жестко задана в конфигураторе. В этом случае программисту нужно проверить свойство группы Отображение и разрешить или запретить управление составом внутри группы.
Одной из частых проблем является «сброс» настроек порядка колонок после обновления конфигурации или очистки кэша. Важно понимать, что все изменения, сделанные через «Изменить форму», сохраняются в Системном хранилище настроек.
Если вы как разработчик настроили идеальный порядок колонок под требования заказчика, вы можете тиражировать эти настройки остальным пользователям. В современных версиях платформы (8.3.17+) это делается административно:
Таким образом, мы решаем проблему «сложности» интерфейса для конечного клиента: администратор настраивает форму один раз, а пользователи получают готовый удобный инструмент без необходимости самостоятельно заходить в настройки.
Резюмируем: Хотя прямое перетаскивание колонок мышкой в 1С 8.3 не реализовано, платформа предоставляет мощные инструменты настройки через стандартный диалог, программные методы Переместить() и механизмы копирования настроек между пользователями. Выбор конкретного пути зависит от готовности заказчика к обучению или бюджета на разработку кастомного интерфейса управления.