В процессе автоматизации рабочих мест кассиров и продавцов часто возникает задача: при запуске программы 1С:Розница должна автоматически открываться специальная внешняя обработка (например, монитор продаж или панель показателей), которая должна работать в течение всей смены. При этом важно, чтобы пользователь не мог случайно или намеренно закрыть это окно, но при этом сама программа могла штатно завершить работу в конце дня. В базовых версиях конфигураций, где возможности изменения программного кода основной конфигурации ограничены, решение этой задачи требует особого подхода. Рассмотрим подробно, как это реализовать.
Первоначальный вопрос часто касается использования механизма РегламентныеЗадания. Однако важно понимать, что регламентные задания в 1С предназначены для выполнения фоновых алгоритмов без участия интерфейса. Они не могут «открыть форму» пользователю, так как выполняются в отдельном сеансе на сервере или в фоновом потоке. Для того чтобы форма «висела» перед глазами продавца, нам нужно использовать механизмы клиентского запуска. Проанализируем наиболее эффективные способы решения этой задачи для базовой версии.
Самый простой и надежный способ запустить внешнюю обработку в базовой версии — использовать параметры командной строки 1С. Поскольку мы не можем внести изменения в процедуру ПриНачалеРаботыСистемы в модуле управляемого приложения базовой конфигурации, мы делегируем запуск операционной системе.
Для этого нам необходимо модифицировать ярлык, через который продавец запускает 1С. Рассмотрим по шагам процесс настройки:
Пример строки запуска для файловой базы:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "D:\Bases\Retail" /Execute "C:\ExternalForms\Monitor.epf"
Разберем, что значат эти ключи:
ENTERPRISE — запуск программы в режиме «1С:Предприятие»./F — путь к папке с информационной базой./Execute — команда, указывающая системе на необходимость сразу после открытия запустить внешнюю обработку по указанному пути.Этот метод позволяет гарантировать, что при каждом входе через данный ярлык форма обработки будет открыта автоматически.
Теперь выясним причину, по которой пользователь может закрыть форму, и как этому помешать. Нам нужно, чтобы «крестик» на форме или сочетание клавиш Alt+F4 не закрывали наше окно, пока открыта сама программа 1С. Для этого мы воспользуемся обработчиком события формы ПередЗакрытием.
Посмотрим на пример кода, который необходимо разместить в модуле формы внешней обработки:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
// Если закрывается вся программа 1С, мы не должны препятствовать
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
// Если пользователь пытается закрыть только саму форму, отменяем действие
Отказ = Истина;
Сообщить("Внимание! Данную панель мониторинга нельзя закрывать до окончания смены.");
КонецПроцедуры
Критически важный момент: мы обязательно проверяем параметр ЗавершениеРаботы. Если этого не сделать и просто установить Отказ = Истина, то пользователь вообще не сможет закрыть 1С (программа будет бесконечно пытаться закрыть все окна, получать отказ от вашей формы и оставаться запущенной). В таком случае закрыть приложение можно будет только через диспетчер задач Windows, что может привести к повреждению базы данных.
Чтобы обработка выполняла роль «живого» монитора и обновляла данные каждую минуту (как хотел автор вопроса), мы будем использовать ПодключитьОбработчикОжидания. Это идеальная замена регламентному заданию для визуальной формы.
Рассмотрим, как правильно инициализировать обновление в модуле формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Подключаем процедуру обновления с интервалом 60 секунд
ПодключитьОбработчикОжидания("ОбновитьДанныеПродаж", 60);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДанныеПродаж() Экспорт
// Здесь вызывается серверный метод для получения свежих цифр
ДанныеДляВывода = ПолучитьТекущуюВыручкуНаСервере();
// Обновляем реквизиты формы
Объект.ПоказательПродаж = ДанныеДляВывода;
КонецПроцедуры
Такой подход позволяет форме оставаться интерактивной и актуальной без создания лишней нагрузки на систему и без необходимости изменения конфигурации.
Хотя в базовых версиях 1С нельзя менять основную конфигурацию, платформа 8.3 позволяет подключать расширения конфигурации. Это более «чистый» способ, так как он не зависит от ярлыков Windows.
Мы можем создать расширение и перехватить событие начала работы системы. Проанализируем последовательность действий:
ПриНачалеРаботыСистемы с аннотацией &После.Пример кода в расширении:
&После("ПриНачалеРаботыСистемы")
Процедура Расш_ПриНачалеРаботыСистемы()
// Программное открытие внешней обработки из справочника или с диска
ПутьКФайлу = "C:\ExternalForms\Monitor.epf";
ВнешниеОбработки.ВыбратьФайл(ПутьКФайлу); // Пример логики
// Или используем штатные механизмы БСП для запуска из справочника
КонецПроцедуры
Чтобы форма выглядела профессионально и действительно напоминала «неснимаемую» панель, проанализируем настройки свойств формы в конфигураторе (при создании внешней обработки):
Независимый, чтобы форма не перекрывала основные окна, или БлокироватьВесьИнтерфейс, если работа в других разделах 1С запрещена до выполнения действий в обработке.Не изменять, чтобы интерфейс не «поплыл» при действиях пользователя.Максимизированное, если монитор должен занимать весь экран.Выясним еще один нюанс: если вы используете интерфейс «Такси», вы можете закрепить форму обработки в одной из областей рабочего стола (например, справа или внизу), используя настройки панелей. Это позволит продавцу видеть продажи одновременно с процессом пробития чеков в РМК (Рабочем месте кассира).
Таким образом, комбинируя запуск через параметр /Execute, обработку события ПередЗакрытием с проверкой ЗавершениеРаботы и механизм ПодключитьОбработчикОжидания, мы получаем надежное и отказоустойчивое решение для базовой версии 1С:Розница, которое полностью соответствует требованиям безопасности и удобства работы персонала.