Вопрос визуального оформления программных продуктов всегда остается актуальным, особенно когда речь идет о корпоративных системах, с которыми пользователи взаимодействуют ежедневно. Стандартная заставка 1С (логотип, появляющийся при запуске) является статичным ресурсом. В этой статье мы разберем, как обойти системные ограничения и реализовать механизм ротации изображений, чтобы при каждом входе в систему пользователь видел новое приветственное изображение.
Прежде чем приступать к реализации, проанализируем, почему штатные средства конфигуратора не позволяют сделать это одной настройкой. Стандартная заставка, которая задается в свойствах конфигурации, вкомпилирована непосредственно в файл метаданных .cf. Это означает, что для ее изменения «на лету» потребовалось бы программное изменение структуры всей конфигурации в монопольном режиме, что технически невозможно в процессе сеанса пользователя.
Поэтому мы будем использовать альтернативные методы: имитацию заставки программными средствами самой 1С и внешние манипуляции процессом запуска.
Это самый «чистый» способ с точки зрения разработки внутри системы. Суть заключается в том, чтобы при начале работы системы открывать специальную форму, которая будет перекрывать основной интерфейс и отображать случайную картинку.
Шаг 1. Подготовка хранилища изображений.
Для начала нам нужно место, где будут храниться наши картинки. Мы можем использовать:
Шаг 2. Создание общей формы.
Создадим общую форму, назовем ее ФормаЗаставки. В свойствах формы необходимо установить следующие настройки, чтобы она выглядела как настоящая заставка:
Шаг 3. Программный код вывода случайной картинки.
Рассмотрим пример кода, который выбирает случайное изображение из справочника и закрывает форму через несколько секунд. В модуле формы пропишем логику:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем список всех доступных картинок из справочника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.ФайлыЗаставок";
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() > 0 Тогда
Генератор = Новый ГенераторСлучайныхЧисел;
СлучайныйИндекс = Генератор.СлучайноеЧисло(0, Результат.Количество() - 1);
ВыбраннаяКартинка = Результат[СлучайныйИндекс].Ссылка;
// Помещаем картинку в реквизит формы (тип: Строка, путь к данным картинки)
АдресКартинки = ПолучитьНавигационнуюСсылку(ВыбраннаяКартинка, "ДанныеФайла");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Устанавливаем таймер закрытия формы через 5 секунд
ПодключитьОбработчикОжидания("ЗакрытьФормуЗаставки", 5, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФормуЗаставки()
ЭтаФорма.Закрыть();
КонецПроцедуры
Шаг 4. Вызов формы при запуске.
Проанализируем, где лучше всего вызывать эту форму. Оптимальное место — модуль управляемого приложения, процедура ПриНачалеРаботыСистемы.
Процедура ПриНачалеРаботыСистемы()
ОткрытьФорму("ОбщаяФорма.ФормаЗаставки");
КонецПроцедуры
Если мы хотим полностью заменить штатную заставку 1С (ту, что появляется еще до ввода логина и пароля), нам потребуется внешний скрипт, например, на языке PowerShell или VBScript. Разберем логику работы такого скрипта.
Сценарий запуска будет выглядеть следующим образом:
.png или .jpg из папки C:\Screenshots\./DisableStartupDialogs. Этот ключ подавляет некоторые стартовые окна.Этот метод сложнее в поддержке, но он позволяет реализовать ротацию заставки еще до того, как платформа начнет подгружать метаданные конфигурации.
Выясним причину, по которой в веб-клиенте задача решается гораздо проще. Когда база опубликована на веб-сервере (IIS или Apache), за отрисовку страницы загрузки отвечает набор html и css файлов. Мы можем написать небольшой скрипт на стороне сервера (например, на PHP или Python), который при обращении к ресурсу будет подменять файл logo.png в каталоге публикации или динамически менять стили страницы.
В этом случае пользователю даже не нужно ничего скачивать — браузер сам подтянет актуальную «сегодняшнюю» картинку из веб-каталога.
Рассмотрим вариант с использованием расширений конфигурации. Хотя картинка в расширении тоже статична, мы можем создать несколько расширений, каждое из которых содержит свою заставку. Администратор системы может с помощью скрипта автоматизации (используя /ManageExtension) перед началом рабочего дня включать одно из расширений и выключать остальные. Это позволит менять заставку, например, раз в день для всех пользователей сразу, не меняя основную конфигурацию.
При реализации любого из перечисленных методов следует учитывать несколько важных моментов:
exe или dll) запрещено лицензионным соглашением. Использование штатных методов (формы, расширения, параметры командной строки) является абсолютно легальным.Подводя итог, можно сказать, что наиболее стабильным и простым в реализации является Метод 1 с использованием общей формы. Он позволяет гибко управлять контентом прямо из интерфейса 1С, хранить картинки в базе и не зависеть от настроек операционной системы пользователя.