Почему после проведения документа курсор в журнале перемещается в конец списка и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

При ежедневной работе с журналом Все документы продажи в конфигурации 1С:ERP Управление предприятием 2.5 пользователи привыкают к стандартному поведению интерфейса: после проведения или редактирования документа курсор остается на текущей строке. Однако иногда поведение меняется, и фокус списка после проведения принудительно перескакивает на последнюю запись журнала. Это замедляет работу и дезориентирует пользователей. Проанализируем ситуацию, выясним технические причины такого поведения и разберем по шагам варианты решения проблемы.

Сброс пользовательских настроек формы и фильтрации

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

Разберем действия для восстановления исходного вида формы:

  1. Откроем форму журнала Все документы продажи.
  2. Через меню Еще перейдем в пункт Установить стандартные настройки. Это действие сбрасывает все установленные пользователем фильтры, сортировки и порядок колонок к значениям, заданным разработчиками конфигурации.
  3. Если проблема сохраняется, выполним очистку сохраненных настроек через раздел администрирования. Перейдем в НСИ и администрирование — Настройки пользователей и прав — Очистка настроек, найдем проблемного пользователя и удалим настройки для формы списка продаж.
  4. В крайних случаях помогает очистка временных файлов тонкого клиента. Для этого очистим каталоги кэша платформы в папках пользователя %LocalAppData%\1C\1Cv8 и %AppData%\1C\1Cv8.

Проверка сортировки и оперативного проведения

Рассмотрим подробнее механизм работы динамического списка при изменении даты документа. Если в журнале включена сортировка по возрастанию даты, а при проведении документа срабатывает оперативное проведение, платформа автоматически устанавливает документу текущее системное время.

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

Анализ доработок формы и модулей конфигурации

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

Обратим внимание на следующие технические моменты:

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

Программное восстановление позиции курсора через расширение

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

Посмотрим на пример перехвата оповещения об изменении объекта в модуле формы списка:


&НаКлиенте
Процедура Расш_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник)
    
    // Проверяем факт изменения или проведения документа
    Если ИмяСобытия = "Запись_ДокументПродажи" Или ИмяСобытия = "ОповещениеОбИзменении" Тогда
        Если ЗначениеЗаполнено(Параметр) И ТипЗнч(Параметр) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
            // Принудительно возвращаем фокус на измененный документ
            Элементы.Список.ТекущаяСтрока = Параметр;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Такой подход гарантирует, что даже при полном сбросе внутренней выборки динамического списка свойство Элементы.Список.ТекущаяСтрока восстановит выделение именно на том документе, проведение которого было выполнено.

← На главную