Довольно часто системные администраторы и разработчики 1С сталкиваются с ситуацией, когда после планового обновления платформы 1С:Предприятие в старых базах (например, работающих на базе конфигурации «Бухгалтерия предприятия» редакции 1.6 или «Управление торговлей» редакции 10.3) внезапно исчезают шапки и подвалы табличных частей документов. Бухгалтеры жалуются, что в документах пропала строка «Итого», а визуально таблицы выглядят «сжатыми». При этом в конфигураторе всё отображается корректно, настройки видимости и высоты шапки/подвала равны единице, но в режиме «1С:Предприятие» они полностью пропадают.
В этой статье мы подробно проанализируем, почему возникает данный графический сбой, и рассмотрим практические способы решения этой проблемы как на уровне настройки платформы, так и программными методами.
Выясним причину такого странного поведения интерфейса. Начиная с релизов платформы 8.3.10 и 8.3.11, разработчики компании 1С провели глобальное обновление технологической платформы. В частности, был осуществлен переход на новый компилятор стандарта C++14 и существенно переработан внутренний движок отрисовки интерфейса (так называемый рендеринг форм). Это обновление было нацелено на оптимизацию управляемых форм и веб-клиента.
Однако эти изменения негативно повлияли на совместимость со старыми «обычными» (неуправляемыми) формами, которые были стандартом для платформ 8.0 и 8.1. В условиях, когда у конфигурации установлен режим совместимости с версией 8.1 или 8.2, новые алгоритмы отрисовки графического ядра некорректно рассчитывают геометрические координаты и высоту элементов интерфейса табличных полей. В результате высота шапок и подвалов в режиме «Предприятие» принудительно сжимается до нуля пикселей, делая их визуально невидимыми для пользователя.
Посмотрим на самое очевидное и быстрое решение, которое не требует внесения изменений в метаданные конфигурации. Если на сервере или локальном компьютере установлены несколько версий платформы 1С, мы можем жестко указать, под какой именно версией должна запускаться наша старая информационная база.
Разберем этот процесс по шагам:
1cestart).8.3.8.2442 или просто маску версии 8.3.8).Если база расположена на SQL-сервере, а другие конфигурации (например, современные версии на управляемых формах) требуют актуального релиза платформы (например, 8.3.13 или выше), системный администратор может развернуть параллельную службу сервера 1С на альтернативных сетевых портах (например, с портами 2540 и 2541 вместо стандартных 1540 и 1541). Перенос старой базы на этот соседний кластер под управлением старой платформы полностью решит проблему без вреда для других современных баз.
Рассмотрим метод, позволяющий заставить новый движок рендеринга платформы корректно обрабатывать старые элементы форм. Для этого нам понадобится изменить свойства совместимости самой конфигурации.
Выполним следующие действия:
Версия 8.1.Версия 8.2.13, Версия 8.2.16 или установите значение Не использовать.Важное предупреждение: отключение режима совместимости или его повышение может повлечь за собой изменение логики работы некоторых механизмов платформы. Могут «вылезти» синтаксические ошибки в старых запросах (например, при использовании конструкции РАЗЛИЧНЫЕ вместе с упорядочиванием по полям, отсутствующим в выборке), а также измениться поведение транзакционных блокировок. Обязательно проводите эту операцию на копии базы и тщательно протестируйте ключевой функционал!
Проанализируем ситуацию, когда менять режим совместимости всей базы слишком рискованно, а проблему нужно решить локально для конкретных документов. В некоторых случаях мы можем принудительно заставить графический движок пересчитать высоту элементов, обратившись к свойствам табличной части напрямую из программного кода в момент инициализации формы.
Для реализации этого метода откроем модуль формы проблемного документа и перейдем к обработчику события ПриОткрытии. Добавим туда следующий код:
Процедура ПриОткрытии()
// Принудительно устанавливаем видимость подвала табличной части
ЭлементыФормы.Товары.Подвал = Истина;
// Переопределяем отображение итогов для числовых колонок
ЭлементыФормы.Товары.Колонки.Сумма.ОтображатьИтогиВПодвале = Истина;
ЭлементыФормы.Товары.Колонки.Количество.ОтображатьИтогиВПодвале = Истина;
КонецПроцедуры
В данном примере мы явно указываем платформе перерисовать свойства объекта ЭлементыФормы для табличной части с именем Товары и колонок Сумма и Количество. Такая принудительная инициализация свойств во время события ПриОткрытии часто заставляет новое графическое ядро корректно рассчитать размеры элементов формы, возвращая шапки и подвалы на свои места.
Выясним еще одну неочевидную причину сбоя. Новые версии платформы 1С:Предприятие 8.3 стали крайне чувствительны к системным настройкам масштабирования дисплея в операционной системе Windows (особенно на мониторах с высоким разрешением, где пользователи выставляют масштаб 125% или 150%). Обычные формы отрисовываются с использованием устаревших системных библиотек GDI, которые плохо адаптируются к современным алгоритмам масштабирования High DPI.
Для исправления этого искажения проделаем следующие шаги на рабочем месте пользователя:
1cv8.exe в папке установки платформы).Это принудительно отключит размытие элементов и поможет вернуть корректный рендеринг табличных полей обычных форм.
Иногда обычная очистка кэша конфигурации не помогает, поскольку платформа сохраняет персональные настройки расположения окон, ширины колонок и видимости панелей в отдельных конфигурационных файлах пользователя с расширением .pfl. Если эти файлы были повреждены или записаны некорректно старой версией платформы, новая платформа может считывать из них неверные нулевые размеры элементов интерфейса.
Чтобы сбросить эти настройки к стандартным (заданным разработчиком в конфигураторе), выполним очистку:
%userprofile%\AppData\Roaming\1C\1cv8\ (или аналогичный каталог локального кэша Local).1cv8cmn.pfl.1cv8cmn.pfl.bak).При следующем запуске 1С автоматически сгенерирует новый чистый файл настроек, сбросив интерфейс к исходному состоянию. Очень часто после этой процедуры скрытые подвалы и итоги таблиц снова начинают отображаться корректно.
Применяя данные методы поочередно, вы гарантированно сможете восстановить работоспособность интерфейса обычных форм в условиях работы на современных версиях платформы 1С без необходимости экстренного переписывания кода конфигурации.