Как автоматически запускать внешнюю обработку при старте 1С:Розница (базовая) и запретить её закрытие?

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

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

Разберем задачу: почему не регламентное задание?

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

Способ 1. Запуск через параметры ярлыка системы

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

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

  1. Нажмите правой кнопкой мыши на ярлык 1С на рабочем столе и выберите «Свойства».
  2. В поле «Объект» после пути к исполняемому файлу программы добавьте следующие параметры:

Пример строки запуска для файловой базы:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "D:\Bases\Retail" /Execute "C:\ExternalForms\Monitor.epf"

Разберем, что значат эти ключи:

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

Способ 2. Программный запрет закрытия формы обработки

Теперь выясним причину, по которой пользователь может закрыть форму, и как этому помешать. Нам нужно, чтобы «крестик» на форме или сочетание клавиш Alt+F4 не закрывали наше окно, пока открыта сама программа 1С. Для этого мы воспользуемся обработчиком события формы ПередЗакрытием.

Посмотрим на пример кода, который необходимо разместить в модуле формы внешней обработки:


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

Критически важный момент: мы обязательно проверяем параметр ЗавершениеРаботы. Если этого не сделать и просто установить Отказ = Истина, то пользователь вообще не сможет закрыть 1С (программа будет бесконечно пытаться закрыть все окна, получать отказ от вашей формы и оставаться запущенной). В таком случае закрыть приложение можно будет только через диспетчер задач Windows, что может привести к повреждению базы данных.

Способ 3. Автоматическое обновление данных (эмуляция регзадания)

Чтобы обработка выполняла роль «живого» монитора и обновляла данные каждую минуту (как хотел автор вопроса), мы будем использовать ПодключитьОбработчикОжидания. Это идеальная замена регламентному заданию для визуальной формы.

Рассмотрим, как правильно инициализировать обновление в модуле формы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Подключаем процедуру обновления с интервалом 60 секунд
    ПодключитьОбработчикОжидания("ОбновитьДанныеПродаж", 60);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанныеПродаж() Экспорт
    // Здесь вызывается серверный метод для получения свежих цифр
    ДанныеДляВывода = ПолучитьТекущуюВыручкуНаСервере();
    // Обновляем реквизиты формы
    Объект.ПоказательПродаж = ДанныеДляВывода;
КонецПроцедуры

Такой подход позволяет форме оставаться интерактивной и актуальной без создания лишней нагрузки на систему и без необходимости изменения конфигурации.

Способ 4. Использование расширений для автозапуска (современный метод)

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

Мы можем создать расширение и перехватить событие начала работы системы. Проанализируем последовательность действий:

  1. Создаем новое расширение в режиме «Конфигуратор» (если лицензия базовой версии позволяет работу с расширениями, что доступно во многих актуальных релизах).
  2. В расширении находим модуль управляемого приложения.
  3. Добавляем процедуру-обработчик ПриНачалеРаботыСистемы с аннотацией &После.

Пример кода в расширении:


&После("ПриНачалеРаботыСистемы")
Процедура Расш_ПриНачалеРаботыСистемы()
    // Программное открытие внешней обработки из справочника или с диска
    ПутьКФайлу = "C:\ExternalForms\Monitor.epf";
    ВнешниеОбработки.ВыбратьФайл(ПутьКФайлу); // Пример логики
    // Или используем штатные механизмы БСП для запуска из справочника
КонецПроцедуры

Дополнительные настройки интерфейса

Чтобы форма выглядела профессионально и действительно напоминала «неснимаемую» панель, проанализируем настройки свойств формы в конфигураторе (при создании внешней обработки):

Выясним еще один нюанс: если вы используете интерфейс «Такси», вы можете закрепить форму обработки в одной из областей рабочего стола (например, справа или внизу), используя настройки панелей. Это позволит продавцу видеть продажи одновременно с процессом пробития чеков в РМК (Рабочем месте кассира).

Таким образом, комбинируя запуск через параметр /Execute, обработку события ПередЗакрытием с проверкой ЗавершениеРаботы и механизм ПодключитьОбработчикОжидания, мы получаем надежное и отказоустойчивое решение для базовой версии 1С:Розница, которое полностью соответствует требованиям безопасности и удобства работы персонала.

← На главную