Что делать, если слетает и не восстанавливается ширина колонок в 1С?

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

Каждый администратор и разработчик 1С рано или поздно сталкивается с ситуацией, когда пользователи начинают жаловаться на «сломавшийся» интерфейс. Один из самых раздражающих визуальных глюков в управляемых формах 1С:Предприятие 8.3 — это самопроизвольное сужение колонок табличной части (например, колонки Номенклатура, Количество или Действие в документе ЗаказКлиента). Колонки сжимаются буквально до нескольких пикселей, превращаясь в узкие полоски, а ручное растягивание границ мышью не дает абсолютно никакого эффекта: как только пользователь отпускает левую кнопку мыши, граница мгновенно возвращается в исходное «схлопнутое» состояние.

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

Выясняем причину: почему ломается интерфейс?

Для начала давайте разберемся в механике работы платформы. Многие ошибочно полагают, что любые проблемы с отображением элементов интерфейса решаются банальной очисткой локального кэша на клиентском компьютере (путем удаления папок из каталогов %localappdata%\1C и %appdata%\1C). Однако в случае с шириной колонок это не помогает. Почему?

Дело в том, что управляемая платформа 1С сохраняет индивидуальные настройки внешнего вида форм (положение окон, видимость кнопок, порядок и ширину колонок таблиц) непосредственно в базе данных. Для этого используются системные таблицы хранения настроек (ХранилищеСистемныхНастроек и ХранилищеНастроекДанныхФорм). Это сделано для того, чтобы пользователь, зайдя в систему под своей учетной записью с любого другого компьютера, увидел привычный и настроенный под себя интерфейс.

Описанный дефект связан с зарегистрированной ошибкой самой платформы 1С:Предприятие 8.3 (в частности, проблема массово проявлялась в релизах ветки 8.3.15 и 8.3.16, например, в 8.3.16.1148). Баг активируется при определенном стечении обстоятельств: наличии зафиксированных колонок, использовании горизонтальной прокрутки до упора вправо, изменении масштаба экрана Windows или несовместимости свойств авторасчета ширины. В результате в базу данных записываются некорректные («битые») геометрические параметры элементов формы. Платформа считывает эти искаженные данные при каждом открытии формы и блокирует любые стандартные попытки пользователя изменить размеры элементов вручную.

Рассмотрим детально четыре практических способа борьбы с этой проблемой.

Способ 1. Обновление технологической платформы 1С (радикальное решение)

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

Данный баг расчетов размеров элементов в управляемых формах был официально зафиксирован вендором и исправлен, начиная с релиза платформы 8.3.16.1296. Если ваша информационная база работает на более ранней версии (например, на 8.3.15.ХХХХ или младших сборках 8.3.16), спланируйте обновление технологической платформы сервера и клиентов до актуальных версий (например, последних релизов веток 8.3.21, 8.3.22 или выше).

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

Способ 2. Полный сброс настроек формы через интерфейс администрирования БСП

Обычный сброс настроек из самой формы («Еще» -> «Изменить форму» -> «Еще» -> «Установить стандартные настройки») часто не срабатывает, так как платформа из-за внутренней ошибки не может перезаписать некорректно сохраненный в БД файл параметров. Нам необходимо принудительно удалить эти записи из хранилища настроек средствами Библиотеки Стандартных Подсистем (БСП).

Давайте выполним очистку настроек по шагам:

  1. Авторизуйтесь в информационной базе под пользователем, имеющим полные административные права.
  2. Перейдите в раздел меню НСИ и администрирование (в некоторых конфигурациях — просто Администрирование) и выберите пункт Настройки пользователей и прав.
  3. В открывшемся окне найдите подраздел «Персональные настройки пользователей» и перейдите по гиперссылке Очистка настроек.
  4. Перед вами откроется специализированная обработка. В поле выбора пользователя установите переключатель в положение «У выбранных пользователей» и укажите того сотрудника, у которого возникли проблемы с шириной колонок.
  5. В поле «Что очистить» выберите вариант «Отдельные настройки».
  6. В появившемся дереве метаданных найдите нужную форму. Для нашего случая необходимо развернуть ветку документов, найти Заказ клиента и отметить галочкой его основную форму (ФормаДокумента).
  7. Нажмите кнопку Очистить в верхней части панели.

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

Способ 3. Копирование настроек от «здорового» пользователя

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

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

Проанализируем порядок действий при копировании:

  1. Убедитесь, что проблемный пользователь вышел из программы.
  2. Зайдите под учетной записью администратора в раздел НСИ и администрирование -> Настройки пользователей и прав.
  3. Кликните по ссылке Копирование настроек.
  4. В поле «Скопировать настройки от пользователя» выберите учетную запись «донора» (сотрудника, у которого ширина колонок отображается корректно).
  5. В поле «Кому скопировать» выберите учетную запись пострадавшего пользователя.
  6. Выберите вариант копирования «Отдельные настройки», в дереве настроек найдите соответствующую форму документа ЗаказКлиента и нажмите кнопку Скопировать и закрыть.

После этого пострадавший пользователь может запустить 1С — его форма примет точно такой же вид, как и у коллеги-донора, а баг с шириной колонок исчезнет.

Способ 4. Решение проблемы на уровне кода в Конфигураторе

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

Проанализируем технические приемы, которые помогают обойти ограничение платформы:

Прием 1. Жесткое программное ограничение ширины

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Задаем фиксированную и минимальную ширину для колонки Номенклатура
    Элементы.ТоварыНоменклатура.Ширина = 35;
    Элементы.ТоварыНоменклатура.МинимальнаяШирина = 20;
    
    // Задаем параметры для колонки Действие
    Элементы.ТоварыВариантОбеспечения.Ширина = 15;
    Элементы.ТоварыВариантОбеспечения.МинимальнаяШирина = 10;
    
КонецПроцедуры

Установка свойства МинимальнаяШирина гарантирует, что даже при попытке сжатия формы платформа не сможет уменьшить колонку ниже заданного лимита символов.

Прием 2. Использование колонки-заглушки (Layout Hack)

Известный лайфхак среди разработчиков 1С для борьбы с «залипанием» колонок в управляемых формах заключается в добавлении пустой буферной колонки в самый конец табличной части.

Для этого выполните следующие шаги в Конфигураторе:

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

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

Мы подробно разобрали природу бага со слетающей шириной колонок и изучили комплекс методов его устранения. Рекомендуется начать с очистки настроек конкретного пользователя (Способ 2) как самого быстрого локального решения, а в долгосрочной перспективе — обновить платформу 1С:Предприятие до актуального стабильного релиза.

← На главную