В последних релизах конфигурации «1С:Бухгалтерия предприятия 3.0» (начиная с версии 3.0.176.38 и выше) многие пользователи и технические специалисты столкнулись с крайне неприятной особенностью работы интерфейса. При попытке вручную изменить или задать наименование банковского счета, система «агрессивно» перезаписывает введенные данные стандартным шаблоном (обычно это сочетание номера счета и краткого названия банка). Это происходит практически мгновенно, не давая пользователю даже закончить ввод фразы.
В данной статье мы подробно разберем, почему возникает эта ситуация, как она связана с версиями платформы и какие шаги необходимо предпринять для восстановления корректной работы программы.
Давайте разберем внутренние механизмы, которые приводят к такому поведению системы. В типовых решениях на управляемых формах за формирование наименований часто отвечают специализированные обработчики. В случае с банковскими счетами в коде формы предусмотрен механизм, который стремится поддерживать актуальность данных.
Основная проблема заключается в том, что в проблемных релизах срабатывает обработка событий, которая инициирует обновление поля Наименование еще до того, как объект был записан. Процесс выглядит следующим образом:
НомерСчета или Банк).Рассмотрим подробнее программный аспект. Даже если в коде формы присутствует обработчик ПриИзменении для поля наименования, он часто не успевает отработать, так как прерывается системными алгоритмами обновления данных формы.
Первым и самым правильным действием в данной ситуации будет проверка и установка актуальных патчей от фирмы «1С». Поскольку проблема была признана массовой, разработчики выпустили оперативные исправления (так называемые EF-патчи).
Для того чтобы решить проблему этим способом, выполним следующие шаги:
EF_00_XXXXXXXX.После установки патча необходимо перезапустить сеанс работы с базой данных. Исправление вносит коррективы в логику формы ФормаЭлемента справочника БанковскиеСчета, блокируя автоматическое обновление, если фокус находится в поле ввода.
Как показывает практика и обсуждения специалистов, проблема часто проявляется на специфических сборках платформы, таких как 8.3.25.1560 или ранних версиях 8.3.26. Выясним причину: в этих версиях наблюдались сбои в механизме взаимодействия фоновых заданий с активными формами пользователя.
Для стабильного решения проблемы рекомендуем выполнить обновление платформы до следующих версий (или более актуальных):
При использовании клиент-серверного варианта работы не забудьте обновить как серверную часть, так и клиентские приложения на рабочих местах пользователей.
Если патчи по каким-то причинам недоступны, а работать нужно здесь и сейчас, можно воспользоваться методом «быстрой вставки». Рассмотрим, как обмануть фоновый алгоритм:
Ctrl+C).Ctrl+V) и сразу нажмите клавишу Enter или Tab.Почему это работает? Перевод фокуса на другое поле заставляет систему зафиксировать значение Наименование и установить внутренний флаг модифицированности данных. В большинстве случаев это позволяет «проскочить» между циклами срабатывания фонового автозаполнения.
Если вы решите исследовать проблему в конфигураторе, обратите внимание на модуль формы элемента справочника БанковскиеСчета. Проанализируем процедуру, отвечающую за обновление заголовка. В типовом коде это может выглядеть примерно так:
&НаКлиенте
Процедура ПриИзмененииРеквизитаКоторыйВлияетНаНаименование(Команда)
// Система пытается вычислить новое имя
Если ПустаяСтрока(Объект.Наименование) Или ЭтоАвтоматическоеНаименование(Объект.Наименование) Тогда
Объект.Наименование = СформироватьНаименованиеПоШаблону(Объект.НомерСчета, Объект.Валюта);
КонецЕсли;
КонецПроцедуры
Проблема «агрессивного» поведения заключается в том, что функция ЭтоАвтоматическоеНаименование() может ошибочно возвращать Истина в момент, когда пользователь только начал стирать старое название, или когда платформа инициирует обновление данных формы из-за работы других подсистем (например, при проверке БИК через классификаторы в фоновом режиме).
Резюме: Если вы столкнулись с тем, что 1С «живет своей жизнью» и не дает переименовать счет — в 90% случаев поможет установка актуальных патчей. В остальных 10% случаев потребуется обновление платформы 8.3 до стабильной сборки.