Почему исчезает введенный текст в 1С:Бухгалтерия 3.0 после ввода и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

Многие пользователи и администраторы систем 1С столкнулись с крайне неприятной ситуацией в последних релизах 1С:Бухгалтерия предприятия 3.0 (начиная с 171-173 релизов) при работе на платформе версии 8.3.25. Суть проблемы заключается в следующем: вы открываете карточку контрагента, начинаете заполнять данные (например, паспортные данные физического лица или назначение платежа в платежном поручении), и через 20–30 секунд текст просто исчезает, оставляя поле пустым. В данной статье мы подробно проанализируем ситуацию, выясним технические причины и разберем по шагам все доступные способы решения.

Анализируем симптомы и выявляем триггеры проблемы

Давайте сначала проанализируем ситуацию, чтобы понять, что именно вызывает сбой. В ходе коллективного исследования было замечено, что исчезновение текста происходит не мгновенно, а через определенные промежутки времени. Рассмотрим основные триггеры:

  1. Регламентные и фоновые задания: Как только в системе срабатывает любое регламентное задание (например, проверка контрагентов или обновление статусов ЭДО), форма «перерисовывается».
  2. ---
  3. Обновление данных формы: Платформа 8.3.25 по-новому обрабатывает состояние модифицированности формы. Если в момент записи изменений в базу или срабатывания оповещения другой формы пользователь продолжает ввод текста, платформа может сбросить «буфер» редактора текста.
  4. Свойство ОбновлениеТекстаРедактирования: В новых версиях платформы поведение этого свойства по умолчанию (Авто) стало более агрессивным.

Проверим это простым экспериментом. Попробуем открыть форму любого регламентного задания, начнем вводить текст в карточке контрагента, а затем в окне заданий нажмем Записать. Мы увидим, что активное поле ввода в карточке контрагента мгновенно очистится. Это подтверждает, что любое внешнее событие или оповещение системы заставляет форму обновлять свои данные из объекта базы, затирая то, что пользователь еще не успел зафиксировать (не нажал Enter или не перешел в другое поле).

Решение №1: Изменение свойств поля в конфигураторе

Самый быстрый способ исправить поведение конкретного поля — изменить его свойства. Это поможет, если проблема локализована в конкретных реквизитах, таких как ДокументУдостоверяющийЛичность или НазначениеПлатежа. Разберем этот процесс по шагам:

  1. Найдем нужную форму в конфигураторе (например, Справочник.Контрагенты.Форма.ФормаЭлемента).
  2. ---
  3. Выберем элемент формы, который ведет себя некорректно.
  4. В палитре свойств найдем параметр ОбновлениеТекстаРедактирования.
  5. Изменим значение с Авто на Не использовать.

Важный момент: Если установить значение Всегда, ситуация может усугубиться, так как платформа будет пытаться синхронизировать текст при каждом изменении связанного реквизита. Значение Не использовать отключает принудительное обновление текста из данных объекта, пока пользователь находится в режиме редактирования этого поля.

Решение №2: Программная корректировка логики формы

Исследование кода показало, что в БП 3.0 проблема часто связана с динамическим изменением заголовков и подсказок (placeholders), таких как текст <не заполнен> в полях адреса. Рассмотрим ситуацию подробнее: когда система пытается программно установить текст-заполнитель, это инициирует обновление всей формы. Выясним причину в модуле формы элемента.

Проанализируем процедуру УправлениеФормой. Там можно встретить строки, которые принудительно устанавливают значения для полей адреса. Попробуем закомментировать их, чтобы проверить гипотезу:


// В модуле формы элемента справочника Контрагенты
// Процедура УправлениеФормой(Форма)

// Форма.ФактАдресКонтрагентаСовпадает = НСтр("ru = '<не заполнен>'");
// Форма.ПочтовыйАдресКонтрагентаСовпадает = НСтр("ru = '<не заполнен>'");

После удаления (комментирования) этих строк механизм постоянного обновления визуального состояния формы успокаивается, и текст перестает исчезать при срабатывании фоновых заданий. Это происходит потому, что система перестает «дергать» реквизиты формы, отвечающие за строковое представление адреса.

Решение №3: Официальные патчи и исправление ошибки 000173590

Разработчики фирмы «1С» признали существование этой ошибки (номер 000173590). Она классифицируется как «Очистка активного поля ввода при обновлении формы в платформе 8.3.25». Рассмотрим, как правильно применить официальные исправления:

  1. Перейдем в раздел Администрирование — Обслуживание — Обновление программы.
  2. Откроем ссылку Установленные исправления (патчи).
  3. Проверим наличие патча с кодом EF_000173590 или аналогичных для текущего релиза БП.
  4. Если патч отсутствует, его необходимо загрузить через сервис интернет-поддержки.

Посмотрим на рекомендации вендора по обходу проблемы. Официальный совет — «завершать редактирование данных в поле ввода как можно скорее» — звучит иронично, поэтому для реальной работы лучше использовать метод с изменением свойства ОбновлениеТекстаРедактирования или установку свежего релиза платформы (например, 8.3.25.1394 и выше), где часть проблем с отрисовкой была устранена, хотя и не полностью.

Почему это происходит? Технический ликбез

Разберем внутреннюю механику. В управляемом приложении 1С существует разделение между данными объекта (на сервере) и данными формы (на клиенте). Когда пользователь печатает в поле, данные находятся в «буфере» элемента управления и еще не попали в реквизит формы Объект.Наименование.

---

В платформе 8.3.25 был изменен алгоритм обработки события ОбновитьОтображениеДанных. Теперь, если форма получает оповещение (через Оповестить() или системное событие), она пытается синхронизировать состояние элементов. Если платформа считает, что данные в объекте «важнее» или «свежее», она заменяет содержимое буфера ввода данными из реквизита. А поскольку ввод еще не завершен, в реквизите пусто — и текст в поле исчезает.

---

Итоговые рекомендации

Подводя итог нашей совместной работе по поиску решения, выделим оптимальный алгоритм действий:

  1. Для небольших баз: Самый простой путь — зайти в конфигуратор и в проблемных формах установить ОбновлениеТекстаРедактирования = Не использовать для всех длинных строковых полей.
  2. Для типовых конфигураций на поддержке: Обязательно установите последние патчи. Фирма 1С оперативно выпускает исправления EF_..., которые меняют логику работы обработчиков ожидания.
  3. Обновление платформы: Если вы используете ранние сборки 8.3.25, рассмотрите переход на более стабильные версии или откат на 8.3.24, если функционал 25-й версии вам не критичен.
  4. Проверка обработчиков ожидания: Проанализируйте свой собственный код. Если вы используете ПодключитьОбработчикОжидания, убедитесь, что в вызываемой процедуре не происходит действий, вызывающих перерисовку формы (например, изменение видимости элементов или работа с РеквизитФормыВЗначение), если метод ВводДоступен() возвращает Ложь.

Используя эти методы, мы сможем обеспечить стабильную работу пользователей и исключить потерю данных при вводе важной информации в справочники и документы программы.

← На главную