Можно ли реализовать ротацию заставок при загрузке информационной базы 1С?

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

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

Анализ технических ограничений платформы

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

Поэтому мы будем использовать альтернативные методы: имитацию заставки программными средствами самой 1С и внешние манипуляции процессом запуска.

Метод 1: Имитация заставки через общую форму (Splash Screen своими руками)

Это самый «чистый» способ с точки зрения разработки внутри системы. Суть заключается в том, чтобы при начале работы системы открывать специальную форму, которая будет перекрывать основной интерфейс и отображать случайную картинку.

Шаг 1. Подготовка хранилища изображений.

Для начала нам нужно место, где будут храниться наши картинки. Мы можем использовать:

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

Шаг 2. Создание общей формы.

Создадим общую форму, назовем ее ФормаЗаставки. В свойствах формы необходимо установить следующие настройки, чтобы она выглядела как настоящая заставка:

Шаг 3. Программный код вывода случайной картинки.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем список всех доступных картинок из справочника
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.ФайлыЗаставок";
    Результат = Запрос.Выполнить().Выгрузить();
    
    Если Результат.Количество() > 0 Тогда
        Генератор = Новый ГенераторСлучайныхЧисел;
        СлучайныйИндекс = Генератор.СлучайноеЧисло(0, Результат.Количество() - 1);
        ВыбраннаяКартинка = Результат[СлучайныйИндекс].Ссылка;
        
        // Помещаем картинку в реквизит формы (тип: Строка, путь к данным картинки)
        АдресКартинки = ПолучитьНавигационнуюСсылку(ВыбраннаяКартинка, "ДанныеФайла");
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Устанавливаем таймер закрытия формы через 5 секунд
    ПодключитьОбработчикОжидания("ЗакрытьФормуЗаставки", 5, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьФормуЗаставки()
    ЭтаФорма.Закрыть();
КонецПроцедуры

Шаг 4. Вызов формы при запуске.

Проанализируем, где лучше всего вызывать эту форму. Оптимальное место — модуль управляемого приложения, процедура ПриНачалеРаботыСистемы.


Процедура ПриНачалеРаботыСистемы()
    ОткрытьФорму("ОбщаяФорма.ФормаЗаставки");
КонецПроцедуры

Метод 2: Использование внешнего скрипта-загрузчика

Если мы хотим полностью заменить штатную заставку 1С (ту, что появляется еще до ввода логина и пароля), нам потребуется внешний скрипт, например, на языке PowerShell или VBScript. Разберем логику работы такого скрипта.

Сценарий запуска будет выглядеть следующим образом:

  1. Скрипт выбирает случайный файл .png или .jpg из папки C:\Screenshots\.
  2. Скрипт запускает легковесное окно с этой картинкой поверх всех окон.
  3. Параллельно запускается процесс 1С с параметром командной строки /DisableStartupDialogs. Этот ключ подавляет некоторые стартовые окна.
  4. Скрипт мониторит появление основного окна программы 1С (по его заголовку или классу окна) и, как только оно появилось, закрывает свое окно с картинкой.

Этот метод сложнее в поддержке, но он позволяет реализовать ротацию заставки еще до того, как платформа начнет подгружать метаданные конфигурации.

Метод 3: Специфика для веб-клиента

Выясним причину, по которой в веб-клиенте задача решается гораздо проще. Когда база опубликована на веб-сервере (IIS или Apache), за отрисовку страницы загрузки отвечает набор html и css файлов. Мы можем написать небольшой скрипт на стороне сервера (например, на PHP или Python), который при обращении к ресурсу будет подменять файл logo.png в каталоге публикации или динамически менять стили страницы.

В этом случае пользователю даже не нужно ничего скачивать — браузер сам подтянет актуальную «сегодняшнюю» картинку из веб-каталога.

Использование расширений для ротации

Рассмотрим вариант с использованием расширений конфигурации. Хотя картинка в расширении тоже статична, мы можем создать несколько расширений, каждое из которых содержит свою заставку. Администратор системы может с помощью скрипта автоматизации (используя /ManageExtension) перед началом рабочего дня включать одно из расширений и выключать остальные. Это позволит менять заставку, например, раз в день для всех пользователей сразу, не меняя основную конфигурацию.

Важные рекомендации и нюансы

При реализации любого из перечисленных методов следует учитывать несколько важных моментов:

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

← На главную