При работе в конфигурации 1С:Розница 2.2, особенно в условиях распределенных информационных баз (РИБ), часто возникает ситуация, когда для кассиров создается множество внешних обработок и отчетов. Со временем их становится так много, что пользователям становится неудобно искать нужный файл на диске или в справочнике. Возникает логичная задача: создать единую оболочку («Помощник»), которая объединила бы все эти инструменты в одном интерфейсе, не раздувая при этом основную конфигурацию и не заставляя программиста вручную переносить тонны кода в один объект.
В этой статье мы подробно разберем, как реализовать такой механизм «диспетчера», рассмотрим варианты хранения вложенных файлов и программные способы их вызова, сохраняя при этом удобство обновления системы.
Это один из самых гибких способов, если вам нужно передавать кассирам всего один файл .epf. Суть метода заключается в том, что вы создаете основную обработку-оболочку, в которую добавляете макеты с типом Двоичные данные. В каждый такой макет вы загружаете отдельный файл внешней обработки.
Проанализируем алгоритм работы такого «Помощника»:
Рассмотрим пример кода для вызова такой вложенной обработки. Предположим, у нас есть макет с именем ОбработкаПечатиЦенников:
&НаСервере
Функция ПолучитьВнешнююОбработкуИзМакета(ИмяМакета)
МакетДвоичныеДанные = РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf");
МакетДвоичныеДанные.Записать(ИмяВременногоФайла);
// Подключаем внешнюю обработку
ИмяОбработки = ВнешниеОбработки.Подключить(ИмяВременногоФайла, , Ложь);
Возврат ИмяОбработки;
КонецФункции
&НаКлиенте
Процедура ЗапуститьОбработку(Команда)
ИмяПодключеннойОбработки = ПолучитьВнешнююОбработкуИзМакета("ОбработкаПечатиЦенников");
ПараметрыОткрытия = Новый Структура;
// Если нужно передать данные в обработку, заполняем структуру
ОткрытьФорму("ВнешняяОбработка." + ИмяПодключеннойОбработки + ".Форма", ПараметрыОткрытия);
КонецПроцедуры
Этот способ хорош тем, что все инструменты находятся «в одном флаконе». Однако стоит помнить, что в РИБ передача очень больших двоичных данных внутри объектов может замедлять синхронизацию.
Поскольку Розница 2.2 базируется на БСП, мы можем использовать штатный функционал подсистемы ДополнительныеОтчетыИОбработки. Вместо того чтобы «вшивать» файлы в макеты, мы регистрируем их в справочнике дополнительных обработок конфигурации.
Разберем, как реализовать «Панель управления» в этом случае. Нам не нужно хранить файлы внутри нашей обработки-диспетчера. Мы просто создаем форму со списком или плитками, где каждая кнопка обращается к конкретному элементу справочника по его наименованию или уникальному идентификатору (GUID).
Преимущества этого подхода очевидны: обновление происходит централизованно. Вам достаточно обновить обработку в справочнике в центральном узле РИБ, и после синхронизации у всех кассиров в их «Помощнике» автоматически будет запускаться актуальная версия кода.
Для вызова внешней обработки из справочника программно, можно использовать стандартные процедуры БСП:
// Пример вызова формы внешней обработки по ссылке из справочника
ПараметрыВыполнения = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКоманды(Объект.СсылкаНаОбработку);
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду(ПараметрыВыполнения);
Если ваша цель — сделать работу кассира последовательной, можно использовать структуру формы типа «Мастер» (постраничный ввод). Для этого в управляемой форме основной обработки мы создаем элемент Группа с видом Страницы. Каждая страница будет представлять собой отдельный этап работы или отдельный инструмент.
Рассмотрим ситуацию, когда кассир должен выполнить несколько действий подряд. Вместо открытия множества окон мы переключаем страницы внутри одной формы:
Чтобы пользователь не терял контекст, при запуске вложенных окон (если вы все же используете внешние файлы) крайне рекомендуется использовать параметр БлокироватьОкноВладельца. Посмотрим на пример вызова:
&НаКлиенте
Процедура ОткрытьПодчиненнуюФорму()
ПараметрыФормы = Новый Структура("Ключ", "Значение");
// Используем РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
ОткрытьФорму("ВнешняяОбработка.Имя.Форма", ПараметрыФормы, ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
Это гарантирует, что кассир не сможет вернуться в главное меню «Помощника», не завершив или не закрыв текущую операцию в дочерней обработке.
Для современных версий платформы 8.3 наиболее профессиональным решением будет отказ от россыпи внешних файлов в пользу одного Расширения. Мы можем создать расширение, в которое перенесем все необходимые отчеты и обработки как полноценные объекты конфигурации.
Проанализируем плюсы такого подхода:
.epf файлов в папках на кассовых компьютерах.При создании «Помощника» важно не просто объединить файлы, но и обеспечить удобство их использования. Выясним, какие элементы интерфейса помогут кассирам:
1. Плиточный интерфейс. Вместо скучного списка используйте большие кнопки с иконками. В управляемых формах это легко реализовать через декорации-картинки и группы кнопок с увеличенным шрифтом.
2. Ролевая модель. Если «Помощник» общий для всех, добавьте программную проверку прав. Например, кнопка «Удаление чека» должна быть активна только для старшего кассира. Проверить это можно через функцию РольДоступна().
3. Логирование действий. Поскольку оболочка является «точкой входа», в ней удобно реализовать запись в ЖурналРегистрации о том, кто и когда запускал конкретную подсистему «Помощника».
Подводя итог, можно сказать: если вам нужно быстрое решение «здесь и сейчас» для пары файлов — используйте метод с макетами. Если же вы планируете долгосрочное развитие системы и работаете в распределенной базе — лучшим выбором станет создание Расширения или использование справочника дополнительных обработок БСП с кастомной формой управления.