При администрировании и разработке систем на платформе 1С:Предприятие часто возникает необходимость автоматизировать рутинные процессы. Одной из популярных задач является запуск определенной обработки сразу после того, как пользователь вошел в систему. Это может быть запуск приветственного монитора, открытие формы праздничного поздравления, старт обмена данными, проверка актуальности классификаторов или выполнение регламентных процедур.
В этой статье мы подробно разберем, как реализовать автозапуск обработки для всех пользователей информационной базы. Мы проанализируем как классические варианты, предложенные участниками сообщества, так и современные безопасные методы разработки на платформе 1С:Предприятие 8.3.
Самый простой способ запустить внешнюю обработку без изменения метаданных конфигурации — это использование стандартного ключа командной строки 1С. Рассмотрим, как устроен этот механизм.
Платформа поддерживает специальный ключ /Execute, после которого в кавычках указывается абсолютный путь к файлу внешней обработки с расширением .epf. При запуске ярлыка системы с таким параметром программа автоматически откроет указанный файл.
Пример строки запуска для файловой информационной базы:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\1C_Bases\Trade" /Execute "C:\1C_Shared\AutoRunProcessor.epf"
Этот способ незаменим, когда запуск требуется выполнить точечно или для регламентных задач на сервере. Однако у него есть существенный недостаток: если пользователей много, администратору придется обойти каждое рабочее место и вручную настроить ярлыки запуска. Выясним, как автоматизировать этот процесс.
Чтобы избежать ручного обхода компьютеров пользователей, мы можем применить централизованное редактирование файла настроек списка информационных баз — ibases.v8i. Этот файл хранит параметры подключения и запуска для каждой базы, зарегистрированной у пользователя.
Разберем по шагам, как прописать автозапуск обработки в этом файле:
ibases.v8i, который по умолчанию располагается в каталоге пользователя %APPDATA%\1C\1CEStart\.[Управление торговлей]).AdditionalParameters и укажем в нем ключ /Execute с путем к файлу обработки.Пример структуры секции в файле ibases.v8i после внесения изменений:
[Управление торговлей]
Connect=File="C:\1C_Bases\Trade";
ID=863d0be5-df85-48b2-bdae-49b809a7fc04
Order=1
Folder=/
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
AdditionalParameters=/Execute "C:\1C_Shared\AutoRunProcessor.epf"
Важное преимущество для системных администраторов: Чтобы применить эту настройку одновременно для всех сотрудников, мы можем использовать механизм списков общих информационных баз. Для этого достаточно опубликовать настроенный файл ibases.v8i на сетевом ресурсе организации, а в настройках стартера 1С у каждого пользователя прописать путь к этому файлу в разделе "Списки общих информационных баз". При изменении файла на сервере параметры запуска автоматически обновятся у всех сотрудников.
Дополнительно в крупных корпоративных сетях системные администраторы могут использовать групповые политики Windows (GPO) и написать скрипт на PowerShell, который будет автоматически сканировать локальные файлы ibases.v8i в профилях пользователей и добавлять строку AdditionalParameters.
Если нам требуется гарантированно запустить обработку у всех пользователей без изменения параметров ярлыков и конфигурационных файлов, оптимальным решением станет написание небольшого фрагмента кода в конфигураторе.
В зависимости от используемого интерфейса (обычные или управляемые формы), код необходимо разместить в соответствующем общем модуле или модуле приложения.
В случае обычного приложения откроем модуль обычного приложения и найдем предопределенную процедуру ПриНачалеРаботыСистемы. Добавим в нее код открытия встроенной обработки:
Процедура ПриНачалеРаботыСистемы()
// Проверяем условия, например, роль пользователя или текущую дату
ФормаПриветствия = Обработки.ПоздравленияС8Марта.ПолучитьФорму("Форма");
ФормаПриветствия.Открыть();
КонецПроцедуры
Если мы работаем в управляемом приложении (1С 8.3), код открытия формы следует разместить в модуле управляемого приложения. При этом помним, что интерактивные действия (открытие окон) возможны только на клиенте:
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
// Открытие управляемой формы встроенной обработки
ОткрытьФорму("Обработка.ПоздравленияС8Марта.Форма.Форма");
КонецПроцедуры
Основной минус данного подхода — необходимость монопольного обновления конфигурации базы данных. Чтобы изменения вступили в силу, нам придется дождаться выхода всех пользователей из системы.
Чтобы обойти ограничение с монопольным выгоном пользователей для обновления базы, мы можем применить современный механизм — расширения конфигурации. Этот инструмент позволяет внедрять кастомный код без снятия типовой конфигурации с поддержки и часто применяется "на лету".
Разберем алгоритм создания автозапуска через расширение:
ПриНачалеРаботыСистемы с аннотацией &После.Код в модуле управляемого приложения расширения будет выглядеть следующим образом:
&После("ПриНачалеРаботыСистемы")
Процедура Расш1_ПриНачалеРаботыСистемы()
// Вызов кода запуска нашей обработки
ОткрытьФорму("Обработка.МояАвтостартующаяОбработка.Форма.Форма");
КонецПроцедуры
Этот метод полностью безопасен для поддержки основной конфигурации и позволяет быстро включать или отключать автозапуск простой деактивацией расширения. Для реализации подобного сценария можно использовать комплект расширения и обработки для автозапуска при старте системы.
В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), крайне не рекомендуется использовать прямое чтение файлов с диска компьютера пользователя из-за строгих требований безопасности платформы 1С:Предприятие 8.3. Безопасным решением является запуск обработки, сохраненной непосредственно в справочнике дополнительных отчетов и обработок.
Рассмотрим пример кода, который извлекает двоичные данные внешней обработки из справочника, подключает её и открывает форму программно на управляемых формах:
&НаКлиенте
Процедура ПодключитьИОткрытьВнешнююОбработку(СсылкаНаСправочник)
// Получаем имя внешней обработки, зарегистрированной в системе
ИмяОбработки = ПолучитьИмяВнешнейОбработкиНаСервере(СсылкаНаСправочник);
Если ЗначениеЗаполнено(ИмяОбработки) Тогда
// Формируем имя формы для открытия
ИмяФормы = "ВнешняяОбработка." + ИмяОбработки + ".Форма";
ОткрытьФорму(ИмяФормы);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьИмяВнешнейОбработкиНаСервере(СсылкаНаСправочник)
// Получаем двоичные данные файла обработки из хранилища значения справочника
ДвоичныеДанныеФайла = СсылкаНаСправочник.ХранилищеВнешнейОбработки.Получить();
Если ДвоичныеДанныеФайла <> Неопределено Тогда
// Помещаем файл во временное хранилище платформы
АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла);
// Подключаем внешнюю обработку безопасным способом
ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища, , Ложь);
Возврат ИмяОбработки;
КонецЕсли;
Возврат "";
КонецФункции
Если в вашей конфигурации используется БСП, то вместо написания собственного кода подключения внешних файлов мы можем использовать штатное API библиотеки. Это избавит систему от проблем при работе в веб-клиенте и тонком клиенте:
// Использование стандартных функций БСП для запуска команды обработки
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду(ПараметрыВыполненияКоманды);
Параметр /Execute в современных версиях платформы 1С может блокироваться механизмами безопасности (например, защитой от опасных действий), заставляя пользователя совершать лишние клики для подтверждения доверия файлу. В качестве надежного обходного пути мы можем использовать параметр запуска /C. При необходимости устранить блокировку со стороны платформы подойдёт обработка для снятия защиты от опасных действий.
Ключ командной строки /C <СтрокаПараметров> передает произвольную текстовую строку в систему. Мы можем обработать эту строку внутри кода конфигурации при запуске.
В строке запуска ярлыка укажем:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\1C_Bases\Trade" /C"ЗапуститьПраздничноеПоздравление"
А в модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы проанализируем переданное значение:
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
// Проверяем параметр запуска, переданный через ключ /C
Если ПараметрЗапуска = "ЗапуститьПраздничноеПоздравление" Тогда
ОткрытьФорму("Обработка.ПоздравленияС8Марта.Форма.Форма");
КонецЕсли;
КонецПроцедуры
Этот подход позволяет гибко управлять поведением программы на старте. Через параметр запуска мы можем передавать не просто команду, а сложные структуры данных, разделенные спецсимволами (например, режим работы, код склада, ID пользователя во внешней системе), повышая гибкость и безопасность интеграционных сценариев.