Многие системные администраторы и пользователи сталкиваются с неприятной ситуацией при работе с платформой 1С:Предприятие на операционных системах семейства Linux. Рассмотрим классическую проблему: после обновления платформы (например, на релиз 8.3.17 и выше) при запуске толстого клиента в режиме обычного приложения (как в конфигурации "Управление торговлей 10.3") на экране отображается только чистый белый экран.
Проанализируем ситуацию подробнее. Выясним причину такого поведения. Данный глюк проявляется в случае, если при предыдущем завершении работы главное окно программы было развернуто на весь экран (максимизировано). При следующем запуске платформа пытается восстановить состояние окна, но из-за конфликта графической подсистемы 1С с оконным менеджером GTK (особенно в старых дистрибутивах вроде Ubuntu 16.04 с оболочкой Unity/Compiz) происходит сбой отрисовки. Если же программу закрыть в оконном режиме (не на полный экран), следующий запуск проходит без проблем.
Разберем по шагам несколько эффективных способов решения и обхода этой проблемы, начиная от программного вмешательства и заканчивая административными мерами.
Поскольку в обычных формах встроенный язык 1С не предоставляет прямых методов управления максимизацией главного окна, мы можем использовать внешние утилиты Linux, такие как wmctrl. Данная утилита позволяет управлять окнами через терминал.
Многие разработчики пытаются использовать функцию КомандаСистемы в обработчике ПриНачалеРаботыСистемы. Однако, этот подход не работает. Проанализируем причину: КомандаСистемы выполняется синхронно. Она блокирует загрузку 1С до тех пор, пока системная команда не завершится. В этот момент главное окно программы еще не инициализировано, и wmctrl просто не находит его.
Правильное решение: использовать асинхронный запуск через метод ЗапуститьПриложение с небольшой задержкой (например, через команду sleep).
Посмотрим на пример кода, который нужно разместить в модуле обычного приложения:
Процедура ПриНачалеРаботыСистемы()
// Запускаем скрипт асинхронно, не дожидаясь его завершения (параметр Ложь)
// Скрипт ждет 2 секунды, пока окно 1С появится, а затем снимает максимизацию
СтрокаКоманды = "sh -c 'sleep 2 && wmctrl -r """"1С"""" -b toggle,maximized_vert'";
ЗапуститьПриложение(СтрокаКоманды, "", Ложь);
КонецПроцедуры
Такой подход заставит операционную систему "передернуть" размер окна через пару секунд после старта программы, что немедленно устраняет белый экран.
Если в вашем дистрибутиве wmctrl отрабатывает нестабильно, рассмотрим использование утилиты xdotool. Это мощный инструмент имитации действий пользователя (нажатий клавиш и кликов мыши), который также умеет управлять размерами окон.
Вы можете использовать аналогичный асинхронный вызов через ЗапуститьПриложение, чтобы найти окно по заголовку и принудительно задать ему размер по умолчанию, тем самым сбросив багованное состояние максимизации.
Причиной, по которой 1С постоянно запускается с белым экраном, являются закэшированные координаты и статус окна. Платформа 1С сохраняет эти данные в профиле пользователя. Если программный метод вам не подходит, можно сбросить кэш окна на уровне файловой системы Linux.
Для этого необходимо удалить пользовательские настройки в домашней директории пользователя. Выполните в терминале:
cd ~/.1cv8/Если проблема носит массовый характер в рамках организации, стоит обратить внимание на окружение рабочего стола. Установлено, что баги отрисовки GTK-окон 1С часто связаны со спецификой работы оболочек вроде Unity или Compiz.
Рассмотрим административное решение: установка более легковесной и консервативной графической среды. Оконные менеджеры в оболочках XFCE или Mate иначе обрабатывают GTK-вызовы. Перевод проблемных рабочих мест на эти оболочки часто полностью устраняет проблему белого экрана при разворачивании обычных форм.
Если вам нужно быстрое решение без вмешательства в код конфигурации или ОС, можно обучить пользователей простому приему. Единственный ручной способ оживить зависшую программу — это трижды нажать системную кнопку "Свернуть/Развернуть окно".
Чтобы упростить эту задачу, системный администратор может назначить глобальные горячие клавиши в Linux (например, Ctrl+Z) на событие "Восстановить положение окна". Пользователю достаточно будет нажать эту комбинацию при появлении белого экрана, чтобы интерфейс перерисовался.
Наконец, проанализируем радикальный, но проверенный временем метод. Так как описанная проблема является эксклюзивным багом нативного Linux-клиента 1С под GTK, одним из надежных способов стабилизации работы обычных форм является запуск Windows-версии клиента платформы 1С через Wine.
Установив 1С через Wine (или используя коммерческие сборки вроде WINE@Etersoft), вы изолируете приложение от прямого взаимодействия с оконным менеджером Linux. В таком режиме обычные формы, развернутые на полный экран, корректно восстанавливаются при последующих запусках.
Подведем итоги: баг с белым экраном в толстом клиенте 1С под Linux возникает из-за некорректного сохранения и восстановления статуса максимизированного окна. Лучшим решением без смены операционной системы является написание короткого асинхронного bash-скрипта с использованием wmctrl в модуле обычного приложения, либо переход на более подходящую графическую оболочку для рабочих станций.