При ежедневной работе с журналом Все документы продажи в конфигурации 1С:ERP Управление предприятием 2.5 пользователи привыкают к стандартному поведению интерфейса: после проведения или редактирования документа курсор остается на текущей строке. Однако иногда поведение меняется, и фокус списка после проведения принудительно перескакивает на последнюю запись журнала. Это замедляет работу и дезориентирует пользователей. Проанализируем ситуацию, выясним технические причины такого поведения и разберем по шагам варианты решения проблемы.
Первое, с чего следует начать диагностику — исключить влияние искаженных пользовательских настроек динамического списка. При длительной работе в конфигурациях на базе управляемых форм персональные настройки колонок, группировок и отборов могут давать сбой.
Разберем действия для восстановления исходного вида формы:
%LocalAppData%\1C\1Cv8 и %AppData%\1C\1Cv8.Рассмотрим подробнее механизм работы динамического списка при изменении даты документа. Если в журнале включена сортировка по возрастанию даты, а при проведении документа срабатывает оперативное проведение, платформа автоматически устанавливает документу текущее системное время.
В этом случае документ физически перемещается в самый конец хронологического списка. Курсор фактически остается привязанным к ссылке документа, но для пользователя это выглядит как скачок в конец журнала. Проверим, не изменяются ли дата, время или ключевые реквизиты (например, статус проведения или состояние), по которым в данный момент настроена сортировка в списке.
Если сброс настроек не помог, проанализируем изменения в модуле формы или расширениях конфигурации. Часто некорректное поведение позиционирования вызвано вмешательством в стандартную работу динамического списка.
Обратим внимание на следующие технические моменты:
ОбработкаОповещения) метод Элементы.Список.Обновить() без предварительного сохранения и последующего восстановления текущей строки. Вызов полного перечитывания списка без указания конкретной позиции часто сбрасывает курсор к границам выборки.ПодключитьОбработчикОжидания(). Некорректно реализованные фоновые процедуры обновления данных формы могут вмешиваться в процесс перерисовки интерфейса в момент записи объекта.ОсновнаяТаблица. Если запрос списка переписан разработчиками с использованием нескольких источников и поле ведущей таблицы не указано, платформа теряет возможность сопоставлять измененные объекты по ключу Ссылка, из-за чего строка теряет фокус.НачальноеОтображениеСписка. Если там установлено значение В конец списка, то любая потеря фокуса строкой будет автоматически переносить выделение к последнему элементу.Если в типовой конфигурации наблюдается ошибка динамического считывания данных или поведение списка изменено сложным нестандартным запросом, зафиксируем позицию курсора принудительно через расширение формы журнала.
Посмотрим на пример перехвата оповещения об изменении объекта в модуле формы списка:
&НаКлиенте
Процедура Расш_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник)
// Проверяем факт изменения или проведения документа
Если ИмяСобытия = "Запись_ДокументПродажи" Или ИмяСобытия = "ОповещениеОбИзменении" Тогда
Если ЗначениеЗаполнено(Параметр) И ТипЗнч(Параметр) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// Принудительно возвращаем фокус на измененный документ
Элементы.Список.ТекущаяСтрока = Параметр;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Такой подход гарантирует, что даже при полном сбросе внутренней выборки динамического списка свойство Элементы.Список.ТекущаяСтрока восстановит выделение именно на том документе, проведение которого было выполнено.