При работе с управляемыми формами в системе 1С:Предприятие 8.3 разработчики и пользователи иногда сталкиваются с крайне странным поведением интерфейса. Представьте ситуацию: вы открываете документ, например, «Счет на оплату» в конфигурации «Управление нашей фирмой», пытаетесь отредактировать многострочное текстовое поле, и в момент активации ячейки в ней внезапно прорисовываются посторонние знаки, такие как 0¶ или 1¶. При этом в самой базе данных этих символов нет, а при попытке отладки проблема магическим образом исчезает.
В этой статье мы подробно разберем, почему возникает этот графический артефакт, проанализируем его природу и рассмотрим несколько способов решения — от простых настроек свойств формы до административных мер обновления платформы.
Для начала проанализируем ситуацию. Символ ¶ (пилкроу) официально называется знаком абзаца и в текстовых редакторах используется для обозначения конца строки или разрыва параграфа. Число перед ним (например, 0) обычно соответствует внутреннему индексу строки в табличной части или идентификатору элемента в стеке отрисовки 1С.
Выясним причину: это не ошибка в программном коде конфигурации (УНФ, БП или ERP). Это классический баг отрисовки (рендеринга) платформы «1С:Предприятие». Ошибка проявляется преимущественно в тонком и веб-клиенте на определенных релизах ветки 8.3.22 и 8.3.23. Когда фокус ввода попадает в поле, движок платформы ошибочно выводит в видимый буфер обмена служебную информацию, которая предназначена для внутреннего использования текстовым редактором платформы.
Интересной особенностью является поведение системы при отладке. Если мы установим точку останова в событии ПриАктивизацииСтроки или ПриИзменении, то при остановке выполнения кода графический контекст перерисовывается, фокус временно теряется и восстанавливается уже корректно. Именно поэтому «под отладкой все работает», что часто вводит разработчиков в заблуждение.
Как показала практика и обсуждение на форумах, наиболее эффективным и быстрым способом избавиться от назойливого символа ¶ является изменение логики входа в режим редактирования элемента формы. Рассмотрим, как это сделать по шагам:
Строка неограниченной длины).РежимРедактирования (EditMode). По умолчанию в списках часто стоит значение Непосредственно. Именно этот режим провоцирует баг отрисовки, так как платформа пытается мгновенно инициализировать текстовый редактор в ячейке.Вход при вводе.Проанализируем результат: теперь для начала редактирования пользователю нужно будет либо начать набирать текст, либо нажать Enter/щелкнуть мышью второй раз. Это меняет цепочку событий отрисовки в оперативной памяти, и служебный символ перестает появляться.
Если по условиям юзабилити нам критически важно оставить режим Непосредственно, рассмотрим другой вариант. Иногда отрисовка артефакта связана с попыткой платформы выделить весь текст в поле при получении фокуса.
Попробуем выполнить следующие действия:
ВыделятьТекстПриВходе.Ложь).Это заставляет платформу просто устанавливать курсор в начало или в место клика без инициализации процедуры глобального выделения содержимого, что в ряде релизов платформы 8.3.23 предотвращает появление 0¶.
Поскольку мы определили, что проблема лежит на уровне движка «1С:Предприятие», стратегически верным решением будет обновление платформы до исправленного релиза. Рассмотрим технические подробности:
Данный дефект был зафиксирован в официальном баг-трекере фирмы «1С». Ошибка массово наблюдалась в релизах 8.3.23.1683, 8.3.23.1782. Если мы проанализируем списки исправленных ошибок в более свежих сборках, мы увидим исправления, касающиеся «некорректного отображения содержимого текстовых полей в тонком клиенте».
Рекомендуемые действия:
8.3.23 (например, 8.3.23.1912 и выше) или переход на ветку 8.3.24 / 8.3.25.Если вышеуказанные методы не помогают, проанализируем еще два фактора, которые могут влиять на проявление этой ошибки:
1. Очистка кэша. Иногда даже после изменения свойств формы или обновления платформы пользователь продолжает видеть артефакт. Это происходит из-за того, что структура формы закэширована. Рассмотрим стандартный метод программной очистки при запуске или ручное удаление папок из %AppData%\1C\1cv8. Помните, что частичная очистка не всегда эффективна, лучше удалять базу из списка и добавлять её заново.
2. Масштабирование Windows. Замечено, что баги отрисовки интерфейса 1С часто коррелируют с настройками масштабирования экрана (например, 125% или 150% на 4K мониторах). Посмотрим, как ведет себя поле при системном масштабе 100%. Если при 100% символ исчезает, значит, мы имеем дело с ошибкой расчета координат курсора в графической подсистеме платформы.
Столкнувшись с символом 0¶ в полях ввода, не спешите переписывать код конфигурации или искать скрытые символы в строковых переменных с помощью функции СтрЗаменить(). Проверьте свойства элемента формы и версию вашей платформы.
Рассмотрим краткий чек-лист исправления:
РежимРедактирования в значение Вход при вводе.ВыделятьТекстПриВходе.Использование этих простых шагов позволит вам сохранить нервы и обеспечить пользователям комфортную работу в программе без лишних «загадочных» знаков на экране.