Как сохранить и восстановить открытые окна в 1С после перезапуска?

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

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

Ограничения платформы: почему 1С не восстанавливает вкладки автоматически

Проанализируем архитектуру платформы «1С:Предприятие 8». В отличие от современных веб-браузеров, в 1С штатного механизма автоматического сохранения и восстановления открытых вкладок не предусмотрено. Платформа устроена иначе:

  1. Платформа сохраняет геометрию и пользовательские настройки форм (ширину колонок, расположение элементов, видимость полей), но только в том случае, если форма была штатно закрыта пользователем. Список открытых вкладок сеанса при этом нигде не фиксируется.
  2. Динамическое состояние объектов не восстанавливается. Если в открытом документе были введены, но не записаны данные, либо в отчете были заполнены временные параметры без нажатия кнопки сформировать, после закрытия программы эти данные будут безвозвратно утеряны.

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

Штатные инструменты для быстрого доступа к рабочим окнам

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

  1. Панель «История» (комбинация клавиш Ctrl + Shift + H): Платформа автоматически регистрирует действия пользователя и сохраняет перечень недавно открытых и измененных объектов. После запуска 1С достаточно нажать указанное сочетание клавиш и открыть нужные документы и справочники буквально в пару кликов.
  2. Панель «Избранное» (клавиша F11): Отчеты с установленными настройками, постоянные журналы и рабочие документы можно добавить в избранное (нажатием на пиктограмму звездочки в заголовке формы). В списке избранного наиболее важные элементы можно закрепить сверху, обеспечив к ним постоянный мгновенный доступ.
  3. Настройка начальной страницы: Если специфика работы требует постоянного присутствия перед глазами определенных списков или отчетов, настроим их отображение на рабочем столе. Для этого перейдем в меню Настройки — Настройка начальной страницы и добавим необходимые формы в левую или правую колонку. Они будут автоматически открываться при каждом входе в систему.

Программное открытие окон через расширение конфигурации

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

Разберем по шагам логику работы такого решения:

  1. Перехват события закрытия: В модуле управляемого приложения перехватываем процедуру ПередЗавершениемРаботыСистемы. С помощью метода ПолучитьОкна() обходим массив открытых окон программы и для каждого окна получаем его навигационную ссылку через функцию ПолучитьНавигационнуюСсылку().
  2. Сохранение ссылок: Поскольку при закрытии сеанса вызовы сервера ограничены платформой, сохраняем полученный список навигационных ссылок в локальный текстовый файл в пользовательском каталоге на клиенте.
  3. Восстановление при запуске: В процедуре ПриНачалеРаботыСистемы проверяем наличие файла, считываем сохраненные навигационные ссылки и последовательно открываем формы с помощью метода ПерейтиПоНавигационнойСсылке().

Посмотрим на пример реализации клиентского кода сохранения ссылок перед выходом из программы:


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

При повторном входе в процедуре ПриНачалеРаботыСистемы прочитаем сохраненный массив и выполним переход:


&Вместо("ПриНачалеРаботыСистемы")
Процедура Расш1_ПриНачалеРаботыСистемы()
    // Считываем МассивСсылок из файла
    Для Каждого НавСсылка Из МассивСсылок Цикл
        ПерейтиПоНавигационнойСсылке(НавСсылка);
    КонецЦикла;
КонецПроцедуры

Инфраструктурный вариант: сохранение сессии терминала

Проанализируем ситуацию, когда база данных опубликована на терминальном сервере (RDP или RemoteApp). В этом случае перезапуск клиентской машины не требует обязательного закрытия самой программы 1С.

  1. Вместо выхода из 1С и завершения сеанса Windows используем простое отключение от удаленного рабочего стола (действие Disconnect).
  2. При этом сеанс 1С со всеми открытыми вкладками, отчетами и журналами остается активным в оперативной памяти сервера.
  3. При следующем подключении к серверу рабочее место откроется мгновенно в том же состоянии, в котором работа была приостановлена. Важно лишь убедиться, что администратор сервера не установил агрессивную политику автоматического завершения отключенных сеансов по таймауту.
← На главную