При работе в управляемых формах «1С:Предприятие 8.3» (особенно в крупных конфигурациях, таких как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация) пользователи часто сталкиваются с крайне неприятным поведением табличных частей. При попытке интерактивно изменить ширину колонки мышью, столбец вместо уменьшения начинает неконтролируемо растягиваться, улетая за пределы экрана. Дополнительно может проявляться сопутствующий симптом: при попытке отрегулировать ширину интерфейс мгновенно сбрасывает фокус и «отбрасывает» горизонтальную прокрутку в самое начало таблицы.
В этой статье мы подробно проанализируем причины такого поведения, разберем официальные баги технологической платформы «1С» и рассмотрим пошаговые методики решения данной проблемы как для обычных пользователей, так и для разработчиков.
Динамический расчет интерфейса управляемых форм «1С» полностью возложен на движок платформы. Когда мы пытаемся изменить размер колонки, платформа на лету пересчитывает ширину всех соседних элементов, учитывая множество параметров: автоширину, растягивание по горизонтали, наличие фиксации и даже условное оформление. В этом сложном алгоритме регулярно обнаруживаются системные ошибки.
Анализ баг-трекера фирмы «1С» (Bugboard) показывает, что хаотичное растягивание колонок чаще всего связано со следующими зарегистрированными ошибками платформы:
Помимо ошибок самой платформы, виновником проблемы может стать локальный кэш настроек пользователя, в котором сохраняются поврежденные замеры интерфейса после аварийного завершения работы программы или динамического обновления конфигурации.
Если проблема возникла у конкретного пользователя в определенном документе или справочнике, не обязательно сразу привлекать программистов. Рассмотрим простые и эффективные действия, которые можно выполнить непосредственно в режиме «1С:Предприятие».
Самый быстрый способ вернуть таблице нормальный вид — аннулировать сохраненные пользовательские настройки формы, которые могли записаться с ошибкой.
Выполним следующие шаги:
Этот метод полностью сбрасывает все ручные изменения ширины колонок, их видимости и порядка, возвращая форму к исходному виду, заложенному разработчиками конфигурации.
Если сброс формы не помог или ошибка возвращается при следующем открытии документа, велика вероятность повреждения кэша метаданных и настроек на локальном компьютере пользователя.
Для устранения этой проблемы рекомендуется очистить временные файлы:
ИмяПользователя укажите ваше имя учетной записи Windows):
C:\Users\ИмяПользователя\AppData\Local\1C\1Cv8\C:\Users\ИмяПользователя\AppData\Roaming\1C\1Cv8\8e4b7c62-1234-5678...) и удалите их. Это абсолютно безопасно: программа при следующем запуске создаст их заново.Если у одного коллеги таблица отображается корректно и позволяет менять размеры, а у другого — ломается, администратор системы может перенести рабочие настройки интерфейса.
Для этого в разделе Администрирование найдите пункт Настройки пользователей и прав, перейдите в Очистка и копирование настроек, выберите документ-источник и скопируйте корректные настройки отображения формы от «здорового» пользователя к проблемному.
Если вышеописанные способы приносят лишь временное облегчение, а проблема носит массовый характер, решать ее необходимо на уровне конфигурации или системного администрирования.
Проанализируем свойства элементов табличной части в конфигураторе. Сочетание определенных свойств часто провоцирует баг платформы. Нам нужно обратить внимание на следующие параметры:
ФиксацияВТаблице), проверьте, как ведет себя форма без нее. Часто отключение фиксации полностью устраняет эффект отбрасывания к началу списка при изменении ширины.Если баг платформы проявляется на конкретном релизе, а обновить платформу прямо сейчас нет возможности, разработчик может применить обходной путь (workaround) в коде управляемой формы. Мы можем жестко задать начальные размеры колонок в процедуре ПриСозданииНаСервере.
Рассмотрим пример программной фиксации ширины колонок:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Задаем фиксированную ширину для проблемных колонок табличной части "Товары"
Элементы.ТоварыНоменклатура.Ширина = 35;
Элементы.ТоварыКоличество.Ширина = 12;
Элементы.ТоварыЦена.Ширина = 15;
// Отключаем автоширину для предотвращения хаотичного растягивания
Элементы.ТоварыНоменклатура.АвтоШирина = Ложь;
Элементы.ТоварыКоличество.АвтоШирина = Ложь;
// Убираем перенос строк в шапке, так как он тоже может влиять на расчет высоты и ширины
Элементы.ТоварыНоменклатура.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлемента.Лево;
КонецПроцедуры
Использование свойства Ширина в коде принудительно инициализирует элементы формы с правильными размерами, игнорируя сбойные записи из пользовательского кэша настроек.
Если на форму наложено условное оформление (например, строки с нулевым остатком подсвечиваются серым цветом), проверьте его влияние на интерфейс. Попробуйте временно отключить правила условного оформления в конфигураторе или в пользовательском режиме. Если баг исчезает, попробуйте переписать логику оформления так, чтобы она применялась не к строке целиком, а только к конкретным важным ячейкам, избегая влияния на геометрические свойства колонок.
Поскольку описанное поведение колонок признано официальной ошибкой разработчиков «1С», наиболее надежным и долгосрочным решением является обновление технологической платформы «1С:Предприятие 8.3».
Ошибки расчета ширины и сброса прокрутки были исправлены и закрыты в версиях платформы начиная с 8.3.16.1148, 8.3.18.1211 и во всех последующих актуальных ветках (8.3.19, 8.3.20 и новее). Если вы работаете на устаревшем релизе платформы, запланируйте техническое обновление серверной и клиентских частей.
Мы проанализировали проблему хаотичного растягивания колонок в «1С:ERP». Для оперативного решения на рабочем месте пользователя используйте сброс настроек формы до стандартных или очистку кэша. Если вы являетесь разработчиком и хотите защитить пользователей от проявления этого бага в будущем — скорректируйте свойства автоширины и растяжения элементов в конфигураторе или зафиксируйте их программно. В качестве глобального решения рекомендуется обновить платформу «1С:Предприятие» до актуального стабильного релиза.