Многие пользователи 1С сталкиваются с ситуацией, когда созданный документ не отображается в общем журнале или списке документов мгновенно. Это вызывает неудобство и заставляет пользователей постоянно нажимать клавишу F5 для принудительного обновления. Давайте разберемся, почему так происходит и как можно автоматизировать этот процесс, не создавая критической нагрузки на систему.
Важно понимать, что платформы 1С изначально настроены на оптимальное использование ресурсов сервера. Если бы каждый клиентский сеанс запрашивал обновления с базы данных в режиме реального времени (например, каждую секунду), возник бы так называемый «шторм запросов». Это привело бы к резкому падению производительности всей системы: замедлилась бы работа у всех пользователей, а сама база данных постоянно находилась бы в состоянии высокой нагрузки.
Платформа использует «ленивый» механизм обновления. Список документов обновляется только тогда, когда пользователь явно дает на это команду (например, обновляет список вручную) или когда система выполняет стандартную перерисовку формы. Это архитектурное решение позволяет обеспечивать стабильную работу в многопользовательском режиме.
Прежде чем прибегать к программированию, рассмотрим возможности, которые дает нам сама платформа в управляемых формах. Если вы используете современную конфигурацию, в настройках элемента формы, который выводит список документов (ДинамическийСписок), существует параметр Интервал обновления.
Рассмотрим, как это работает:
ДинамическогоСписка, который является источником данных.Интервал обновления. По умолчанию оно может быть равно 0 (автообновление выключено).Это самый безопасный способ, так как он штатно поддерживается платформой. Однако учтите, что установка слишком маленького интервала (менее 10-15 секунд) может негативно сказаться на быстродействии сервера.
Если бизнес-задача требует более частого обновления данных, разработчики применяют метод ПодключитьОбработчикОжидания. Этот метод позволяет выполнять определенную процедуру с заданной периодичностью в контексте текущего сеанса пользователя.
Давайте разберем, как это реализовать на практике:
ПриСозданииНаСервере или ПриОткрытии) вы подключаете процедуру, которая будет вызывать обновление списка.
&НаКлиенте
Процедура ПриОткрытии()
// Подключаем обработчик, который будет срабатывать каждые 30 секунд
ПодключитьОбработчикОжидания("ОбновитьСписокДокументов", 30);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСписокДокументов()
// Метод для принудительного обновления динамического списка
Элементы.Список.Обновить();
КонецПроцедуры
Важное предостережение: Будьте очень осторожны с временем интервала. Использование обработчика ожидания с малым интервалом (например, 1-2 секунды) — это «плохая практика». Она не только перегружает сервер, но и может вызывать неприятные эффекты у пользователя: список будет постоянно «дергаться», сбрасывать позицию курсора или выделение, что сделает работу крайне некомфортной.
Вместо того чтобы бороться с задержкой отображения, проанализируем, как можно улучшить взаимодействие пользователей с системой:
Поиск или Отбор. Обучите сотрудников использовать быстрый поиск по контрагенту или номеру документа — это работает быстрее, чем пролистывание или обновление огромных списков.1С:Документооборот) вместо обновления журналов используются системы уведомлений. Если пользователю важно знать о создании документа, настройте отправку оповещения, которое придет ему в интерфейс программы.Подводя итог, можно сказать, что «мгновенное» обновление — это всегда поиск компромисса между актуальностью данных и производительностью инфраструктуры. Мы рекомендуем начинать со стандартных настроек Интервала обновления и лишь в исключительных случаях использовать ПодключитьОбработчикОжидания с разумным интервалом.