После перехода на новые релизы платформы 1С:Предприятие 8.3 (начиная с веток 8.3.25, 8.3.26 и выше) многие пользователи конфигураций на «обычных формах», таких как Управление торговлей 10.3, столкнулись с неприятными изменениями в поведении интерфейса. Наиболее критичными стали две проблемы: потеря фокуса ввода в окне подбора при использовании прикрепленных окон и исчезновение имени пользователя в системных сообщениях о блокировке объектов.
В этой статье мы подробно разберем, почему это происходит, проанализируем внутренние изменения платформы и выработаем алгоритм действий для восстановления привычной и эффективной работы пользователей.
Разберем ситуацию, которая стала классической для последних обновлений. Пользователь открывает форму подбора, которая работает в режиме «прикрепленного окна». Это удобный режим, позволяющий видеть одновременно и документ, и список товаров. При двойном клике по номенклатуре открывается вспомогательное модальное окно (или форма ввода количества). После ввода данных и закрытия этого окна фокус должен автоматически вернуться на ту строку списка номенклатуры, с которой велась работа. Однако в новых версиях платформы фокус «улетает» в пустоту: нажатие клавиш «Enter» или стрелок на клавиатуре не приводит к каким-либо действиям, пока пользователь снова не кликнет мышкой в список.
Проанализируем техническую сторону вопроса. Компания 1С в последних релизах активно переводит платформу на новую подсистему управления окнами. Этот механизм оптимизирован для «управляемых форм», но в режиме «обычного приложения» он вызывает деградацию интерфейса. Проблема кроется в обработке событий закрытия вспомогательных окон: стек окон в операционной системе отрабатывает корректно, но внутренний фокус 1С не успевает перехватить активный элемент формы-родителя.
Ситуация осложняется тем, что обновление на самый свежий релиз (например, 8.3.27) не всегда решает проблему, так как работа над ядром интерфейса продолжается, и «плавающие» баги кочуют из сборки в сборку.
Если откат на старую версию платформы невозможен, нам придется прибегнуть к «костылизации» — ручному управлению фокусом через встроенный язык 1С. Рассмотрим, как это сделать в конфигурации УТ 10.3 или аналогичных.
Нам необходимо найти в форме подбора процедуру ОбработкаВыбора или то место, где закрывается окно ввода количества. После того как вспомогательная форма закрыта и данные переданы, мы должны принудительно сказать платформе, какой элемент сделать активным.
Посмотрим на пример кода, который нужно добавить в обработчик события подбора:
// В обработчике, который вызывается после ввода количества
Процедура ПриЗавершенииВводаКоличества(ДанныеВыбора, Параметры) Экспорт
// ... ваш существующий код обработки данных ...
// Принудительно возвращаем фокус на форму и список
ЭтаФорма.Активизировать();
ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.СправочникСписок;
КонецПроцедуры
Иногда простого указания ТекущийЭлемент недостаточно из-за особенностей прикрепленных окон. В таких случаях можно попробовать использовать метод Активизировать() для всей формы, чтобы операционная система вернула фокус окну 1С, а затем уже позиционироваться на конкретном табличном поле.
Проанализируем альтернативный вариант, который не требует изменения кода, но влияет на пользовательский опыт (UX). Как показывает практика, проблема с потерей фокуса проявляется преимущественно в режиме прикрепленных окон.
Также стоит обратить внимание на настройки масштабирования Windows. Замечено, что при масштабе 100% и использовании одного монитора платформа ведет себя стабильнее, чем при сложных конфигурациях с несколькими экранами и разными DPI.
Параллельно с фокусом разработчики столкнулись с тем, что сообщение «Объект редактируется...» перестало содержать ФИО заблокировавшего его сотрудника. Это признанная техническая ошибка платформы 8.3.25 и выше. Платформа перестала корректно передавать имя сеанса в стандартный системный диалог блокировки в клиент-серверном варианте.
Что мы можем сделать в этой ситуации:
Если вышеописанные методы не помогают, а работа пользователей парализована, самым надежным решением остается использование «стабильной гавани». На текущий момент для конфигураций на обычных формах (УТ 10.3, УПП 1.3, КА 1.1) наиболее стабильными считаются:
Перед откатом платформы обязательно убедитесь, что ваша текущая конфигурация не требует обязательного наличия более высокого релиза (например, для работы с новыми механизмами маркировки или СФР, если они были внедрены в последнее время).
Выясним еще одну возможную причину. В свойствах корня конфигурации есть параметр «Режим использования модальных окон». В новых версиях платформы 1С настойчиво рекомендует уходить от модальности. Если ваша конфигурация все еще использует старый режим, это может входить в конфликт с новыми методами отрисовки интерфейса Windows в платформе 8.3.26/27.
Попробуйте проанализировать, как ведут себя формы, если заменить модальный вызов окна количества на немодальный (через ОткрытьФорму с описанием оповещения о закрытии). Это потребует серьезной переработки кода подбора, но в долгосрочной перспективе сделает конфигурацию более устойчивой к обновлениям платформы.
Подводя итог нашему разбору, можно составить следующий план действий для системного администратора или программиста 1С:
ЭтаФорма.Активизировать() в формы подбора после закрытия диалогов.Alt + Tab или один раз кликать мышкой в список — это временная мера, пока разработчики 1С не выпустят исправление ядра.Совместными усилиями и через внимательный анализ поведения системы мы сможем минимизировать негативные последствия обновлений и вернуть пользователям комфортный темп работы.