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