Многие разработчики на платформе «1С:Предприятие 8.3» сталкиваются с ситуацией, когда пользователи, стремясь «подстроить под себя» интерфейс, начинают менять ширину колонок в табличных частях (например, в заказах или реализациях). В результате форма «разъезжается», появляются лишние полосы прокрутки, а важные поля сжимаются до нечитаемого состояния. Ситуация осложняется тем, что в типовых конфигурациях, таких как Управление торговлей 11, формы динамически перестраиваются, и ручное вмешательство часто приводит к непредсказуемым визуальным дефектам.
Проанализируем ситуацию: существует ли в современных релизах платформы (вплоть до 8.3.25) заветный флажок «Запретить изменение ширины»? К сожалению, прямого свойства, которое бы просто блокировало захват границы колонки мышкой в элементе Таблица управляемой формы, не существует. Это осознанное решение архитекторов платформы, направленное на гибкость интерфейса. Однако мы можем применить несколько эффективных обходных путей, чтобы защитить верстку нашей формы. Рассмотрим их подробно.
Для начала выясним важную причину путаницы. В 1С есть два похожих, но принципиально разных объекта:
Защита в значение Истина и запретить редактирование строк и колонок.Разберем самый надежный административный метод. Проблема не в том, что пользователь изменил ширину «в моменте», а в том, что 1С запоминает это действие и воспроизводит его при каждом открытии формы. Если мы запретим сохранение настроек, то после перезапуска формы она вернется в исходное состояние, задуманное разработчиком.
Выполним следующие шаги в конфигураторе:
Сохранение настроек пользователя.Важный момент: это радикальный метод, так как пользователь не сможет сохранять вообще никакие настройки (включая фильтры и отборы). Если нужно ограничить только конкретную форму, этот метод не подойдет, но для жестко регламентированных рабочих мест он идеален. При необходимости точечно удалить сбитые параметры интерфейса конкретной формы подойдёт обработка для просмотра и очистки хранилища настроек пользователей.
Проанализируем ситуацию, когда нам нужно позволить пользователю менять настройки «в сеансе», но гарантировать «чистый» вид при каждом новом открытии документа. Поскольку события «ПриИзмененииШириныКолонки» не существует, мы можем использовать метод УстановитьСтандартныеНастройки().
Посмотрим на пример кода, который можно разместить в обработчике ПриОткрытии на клиенте:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Возвращаем форму к стандартному виду, заданному в конфигураторе
ЭтотОбъект.УстановитьСтандартныеНастройки();
КонецПроцедуры
Это действие сбросит все ручные манипуляции пользователя с колонками, включая их видимость и порядок. Это гарантирует, что ваша верстка в УТ 11 или ERP останется стабильной.
Рассмотрим ситуацию: пользователь заходит в меню «Еще» -> «Изменить форму» и там начинает скрывать или группировать колонки, что ломает логику отображения. Мы можем программно или в конфигураторе запретить доступ к этому окну.
В свойствах формы (в самом корне дерева элементов) найдем свойство СоставКомандногоИнтерфейса. Там можно снять флажок с команды ИзменитьФорму. Также это можно сделать программно:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.ТолькоПросмотр = Ложь; // Если нужно оставить редактирование данных
// Но при этом можно управлять доступностью отдельных элементов
Элементы.ГруппаКоманднаяПанель.Доступность = Ложь;
КонецПроцедуры
Внимание: это не запретит менять ширину колонок мышкой, но отрежет путь к более глубоким и разрушительным изменениям структуры таблицы.
Выясним, как настройки «Растягиваемости» влияют на поведение колонок. Чтобы форма меньше «ломалась», рекомендуется устанавливать конкретные значения для свойств:
Ширина: задайте точное число символов.РастягиватьПоГоризонтали: установите в значение Нет.ГоризонтальноеПоложениеВШапке: поможет визуально закрепить текст заголовка.Хотя пользователь все еще сможет потянуть за край, отсутствие автоматического растягивания сделает таблицу более предсказуемой. Если одна колонка будет жестко фиксирована, а остальные — растягиваться, то при изменении ширины фиксированной колонки платформа будет стараться сохранить общую ширину таблицы, что минимизирует появление горизонтального скролла.
Существует продвинутый метод, который часто применяется в сложных рабочих местах (например, «Установка цен номенклатуры»). Если колонки таблицы добавляются программно при создании формы, платформа иногда ведет себя более «строго» по отношению к пользовательским настройкам. Рассмотрим фрагмент кода:
&НаСервере
Процедура СоздатьКолонкиТаблицы()
НоваяКолонка = Элементы.Добавить("ЦенаПродажи", Тип("ДекорацияФормыКолонка"), Элементы.СписокЦен);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = "Объект.Товары.Цена";
НоваяКолонка.Ширина = 15;
НоваяКолонка.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры
При таком подходе настройки ширины, заданные программно, могут перекрывать некоторые сохраненные настройки пользователя, хотя это не является 100% гарантией блокировки мыши. Для реализации подобного динамического интерфейса можно использовать пример программного создания колонок в табличной части документа.
Мы проанализировали все доступные инструменты и пришли к выводу, что «волшебной кнопки» для запрета изменения ширины колонок в 1С нет. Однако, комбинируя методы, мы можем добиться желаемого результата:
УстановитьСтандартныеНастройки), если хотите, чтобы форма всегда открывалась в «авторском» виде.Помните, что избыточный тоталитаризм в интерфейсе может мешать пользователям с нестандартными мониторами. Всегда старайтесь найти баланс между жесткостью верстки и удобством работы конечного сотрудника.