Рассмотрим частую и крайне неприятную проблему, с которой сталкиваются пользователи и администраторы систем на базе «1С:Предприятие 8.3» (в частности, в конфигурации «Управление торговлей», редакция 11.3 и 11.4). При попытке открыть форму подбора номенклатуры в документах продажи (например, в «Заказе клиента» или «Реализации товаров и услуг») программа намертво зависает. При этом один поток процесса 1cv8c.exe начинает нагружать процессор на 100%, оперативная память остается практически свободной, а принудительное завершение работы становится единственным выходом.
В рамках этой статьи мы подробно разберем, почему возникает данная неполадка, как она связана с особенностями отрисовки графической платформы 1С и какими способами можно ее гарантированно устранить.
Описанное поведение программы — это классический платформенный баг «1С:Предприятие 8.3», проявляющийся на управляемых формах в интерфейсе «Такси». Начиная с версии платформы 8.3.7, система использует так называемый «флюидный» (динамический) алгоритм компоновки интерфейса. Размеры элементов, их отступы и положение рассчитываются на лету в зависимости от разрешения экрана, системного масштаба операционной системы и настроек самой формы.
Форма подбора номенклатуры в «Управлении торговлей 11» является одной из самых сложных в конфигурации. Она содержит огромное количество вложенных групп, табличных частей, динамических списков, фильтров и переключателей. Когда пользователь открывает эту форму при определенном разрешении экрана или при нестандартном масштабе Windows (например, 125% или 150%), математический алгоритм округления координат платформы заходит в тупик.
Как это происходит:
В результате программа уходит в бесконечный цикл перерисовки интерфейса. Пользователь видит «песочные часы» или просто застывшее окно программы, которое не реагирует на клики мыши и нажатия клавиш.
Проанализируем ситуацию: почему из десятков пользователей базы данных проблема может регулярно воспроизводиться только у одного или двух? Причина кроется в сохранении индивидуальных настроек интерфейса. Как только пользователь изменяет размер формы подбора (например, растягивает окно мышкой), эти параметры записываются в его персональные настройки в информационной базе (в системную таблицу настроек окон).
Поскольку настройки хранятся непосредственно в базе данных, «проблемная» геометрия окна будет преследовать пользователя повсюду. Даже если этот сотрудник зайдет в программу через RDP (удаленный рабочий стол) или с другого компьютера, форма подбора все равно попытается открыться по ранее сохраненным («сломанным») координатам и зависнет.
Ниже мы подробно разберем четыре эффективных метода устранения этого бага, начиная с самых простых и заканчивая изменением свойств формы в конфигураторе.
Этот метод позволяет разорвать математический тупик округления координат за счет принудительного изменения параметров отрисовки интерфейса «Такси». Сделать это можно двумя путями: через конфигуратор или непосредственно в пользовательском режиме (если форма все-таки открывается хотя бы один раз после перезапуска).
Вариант А. Изменение варианта масштаба на «Компактный» в Конфигураторе:
ПодборТоваровВДокументПродажи.Форма).Вариант масштаба (по умолчанию там установлено значение Авто).Компактный.Перевод формы в компактный режим отключает сложные «флюидные» алгоритмы выравнивания элементов интерфейса «Такси», возвращая логику к более простой и стабильной схеме. Единственный минус — элементы управления станут визуально несколько меньше.
Вариант Б. Изменение масштаба на 99% или 101%:
Если «компактный» вид кажется пользователям слишком мелким и нечитаемым, мы можем пойти другим путем — изменить масштаб формы ровно на 1%. Этого минимального сдвига достаточно, чтобы сбить ошибочный шаг сетки округления координат.
ПодборТоваровВДокументПродажи.Форма найдем свойство Масштаб.100 установим значение 99 (или 101).Вариант масштаба оставляем в значении Авто.Визуально разница в 1% будет абсолютно незаметна для человеческого глаза, но бесконечный цикл перерисовки формы прекратится раз и навсегда.
Если мы не хотим вносить изменения в конфигурацию программы (например, если база находится на замке и полностью типовая), мы можем решить проблему локально, очистив сохраненные координаты формы для конкретного пользователя.
Выполним следующие шаги в режиме 1С:Предприятие под учетной записью администратора системы:
ПодборТоваровВДокументПродажи).После этой процедуры при следующем открытии форма подбора запустится со стандартными заводскими размерами, что временно снимет проблему зависания. Однако помните: если пользователь снова начнет вручную растягивать границы этого окна, зависание может повториться.
Очень часто триггером для проявления этого бага 1С становится системное масштабирование экрана в операционной системе Windows (актуально для современных ноутбуков и мониторов высокого разрешения Full HD и Ultra HD / 4K, где по умолчанию стоит масштаб 125% или 150%). Мы можем заставить операционную систему корректно передавать масштаб приложению 1С.
Выполним настройку на локальном компьютере проблемного пользователя:
1cestart.exe) на рабочем столе и выберем пункт Свойства.Данная настройка заставит операционную систему Windows самостоятельно обрабатывать масштабирование графических элементов интерфейса 1С на уровне растрового вывода, не позволяя платформе уходить в математический тупик расчета экранных координат.
В некоторых случаях зависание формы накладывается на аппаратную нехватку производительности СУБД, когда расчет остатков и цен по виртуальным таблицам при переходе пользователя по группам номенклатуры занимает слишком много времени. В этот момент в коде формы отрабатывают обработчики ожидания, запрашивающие данные у сервера.
Проанализируем программный код обработки события активизации строки в форме подбора:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
// Отключаем немедленный запрос к серверу
ПодключитьОбработчикОжидания("ИерархияНоменклатурыПриАктивизацииСтрокиОбработчикОжидания", 0.3, Истина);
КонецПроцедуры
Чтобы снизить нагрузку на форму и избежать зависаний интерфейса из-за тяжелых запросов, рекомендуем выполнить следующие настройки:
Использовать расширенную форму подбора количества и вариантов обеспечения, если детальное обеспечение по датам и складам не требуется менеджерам оперативно в момент подбора. Это существенно упростит компоновку формы и снизит нагрузку на графический интерфейс.Применение описанных выше методик (особенно изменение масштаба формы на 99% или переключение на компактный режим) позволяет полностью и навсегда избавиться от зависаний при подборе номенклатуры в «1С:Управление торговлей 11.3» без ущерба для удобства работы пользователей.