Как запретить пользователям менять ширину колонок в управляемой форме 1С?

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

Многие разработчики на платформе «1С:Предприятие 8.3» сталкиваются с ситуацией, когда пользователи, стремясь «подстроить под себя» интерфейс, начинают менять ширину колонок в табличных частях (например, в заказах или реализациях). В результате форма «разъезжается», появляются лишние полосы прокрутки, а важные поля сжимаются до нечитаемого состояния. Ситуация осложняется тем, что в типовых конфигурациях, таких как Управление торговлей 11, формы динамически перестраиваются, и ручное вмешательство часто приводит к непредсказуемым визуальным дефектам.

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

Различие между Таблицей и Табличным документом

Для начала выясним важную причину путаницы. В 1С есть два похожих, но принципиально разных объекта:

  1. Табличный документ (используется в отчетах и печатных формах). Здесь всё просто: мы можем установить свойство Защита в значение Истина и запретить редактирование строк и колонок.
  2. Таблица (элемент формы, связанный с данными). Это именно тот случай, когда пользователи «тягают» колонки в динамических списках или табличных частях документов. Здесь свойства «Защита» в контексте запрета изменения геометрии нет.

Способ №1. Ограничение прав на сохранение настроек

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

Выполним следующие шаги в конфигураторе:

  1. Найдем нужную роль пользователя.
  2. В списке прав снимем галочку с права Сохранение настроек пользователя.

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

Способ №2. Программный сброс настроек (Workaround)

Проанализируем ситуацию, когда нам нужно позволить пользователю менять настройки «в сеансе», но гарантировать «чистый» вид при каждом новом открытии документа. Поскольку события «ПриИзмененииШириныКолонки» не существует, мы можем использовать метод УстановитьСтандартныеНастройки().

Посмотрим на пример кода, который можно разместить в обработчике ПриОткрытии на клиенте:


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

Это действие сбросит все ручные манипуляции пользователя с колонками, включая их видимость и порядок. Это гарантирует, что ваша верстка в УТ 11 или ERP останется стабильной.

Способ №3. Отключение возможности «Изменить форму»

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

В свойствах формы (в самом корне дерева элементов) найдем свойство СоставКомандногоИнтерфейса. Там можно снять флажок с команды ИзменитьФорму. Также это можно сделать программно:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭтаФорма.ТолькоПросмотр = Ложь; // Если нужно оставить редактирование данных
    // Но при этом можно управлять доступностью отдельных элементов
    Элементы.ГруппаКоманднаяПанель.Доступность = Ложь; 
КонецПроцедуры

Внимание: это не запретит менять ширину колонок мышкой, но отрежет путь к более глубоким и разрушительным изменениям структуры таблицы.

Способ №4. Фиксация ширины через свойства элементов

Выясним, как настройки «Растягиваемости» влияют на поведение колонок. Чтобы форма меньше «ломалась», рекомендуется устанавливать конкретные значения для свойств:

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

Способ №5. Программное создание колонок

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


&НаСервере
Процедура СоздатьКолонкиТаблицы()
    НоваяКолонка = Элементы.Добавить("ЦенаПродажи", Тип("ДекорацияФормыКолонка"), Элементы.СписокЦен);
    НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
    НоваяКолонка.ПутьКДанным = "Объект.Товары.Цена";
    НоваяКолонка.Ширина = 15;
    НоваяКолонка.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры

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

Резюме и рекомендации

Мы проанализировали все доступные инструменты и пришли к выводу, что «волшебной кнопки» для запрета изменения ширины колонок в 1С нет. Однако, комбинируя методы, мы можем добиться желаемого результата:

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

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

← На главную