Как объединить несколько внешних обработок в одну общую оболочку

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

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

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

Вариант 1. Метод контейнера: использование макетов с двоичными данными

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

Проанализируем алгоритм работы такого «Помощника»:

  1. В основной обработке создаем форму с кнопками для запуска нужных инструментов.
  2. При нажатии на кнопку программно извлекаем двоичные данные из макета.
  3. Сохраняем эти данные во временный файл на диске пользователя.
  4. Подключаем обработку через менеджер внешних обработок и открываем ее форму.

Рассмотрим пример кода для вызова такой вложенной обработки. Предположим, у нас есть макет с именем ОбработкаПечатиЦенников:


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

&НаКлиенте
Процедура ЗапуститьОбработку(Команда)
    
    ИмяПодключеннойОбработки = ПолучитьВнешнююОбработкуИзМакета("ОбработкаПечатиЦенников");
    ПараметрыОткрытия = Новый Структура;
    
    // Если нужно передать данные в обработку, заполняем структуру
    ОткрытьФорму("ВнешняяОбработка." + ИмяПодключеннойОбработки + ".Форма", ПараметрыОткрытия);
    
КонецПроцедуры

Этот способ хорош тем, что все инструменты находятся «в одном флаконе». Однако стоит помнить, что в РИБ передача очень больших двоичных данных внутри объектов может замедлять синхронизацию.

Вариант 2. Интеграция через Библиотеку стандартных подсистем (БСП)

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

Разберем, как реализовать «Панель управления» в этом случае. Нам не нужно хранить файлы внутри нашей обработки-диспетчера. Мы просто создаем форму со списком или плитками, где каждая кнопка обращается к конкретному элементу справочника по его наименованию или уникальному идентификатору (GUID).

Преимущества этого подхода очевидны: обновление происходит централизованно. Вам достаточно обновить обработку в справочнике в центральном узле РИБ, и после синхронизации у всех кассиров в их «Помощнике» автоматически будет запускаться актуальная версия кода.

Для вызова внешней обработки из справочника программно, можно использовать стандартные процедуры БСП:


// Пример вызова формы внешней обработки по ссылке из справочника
ПараметрыВыполнения = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКоманды(Объект.СсылкаНаОбработку);
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду(ПараметрыВыполнения);

Вариант 3. Организация интерфейса в стиле «Мастера» или «Рабочего стола»

Если ваша цель — сделать работу кассира последовательной, можно использовать структуру формы типа «Мастер» (постраничный ввод). Для этого в управляемой форме основной обработки мы создаем элемент Группа с видом Страницы. Каждая страница будет представлять собой отдельный этап работы или отдельный инструмент.

Рассмотрим ситуацию, когда кассир должен выполнить несколько действий подряд. Вместо открытия множества окон мы переключаем страницы внутри одной формы:

Чтобы пользователь не терял контекст, при запуске вложенных окон (если вы все же используете внешние файлы) крайне рекомендуется использовать параметр БлокироватьОкноВладельца. Посмотрим на пример вызова:


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

Это гарантирует, что кассир не сможет вернуться в главное меню «Помощника», не завершив или не закрыв текущую операцию в дочерней обработке.

Вариант 4. Использование расширений конфигурации

Для современных версий платформы 8.3 наиболее профессиональным решением будет отказ от россыпи внешних файлов в пользу одного Расширения. Мы можем создать расширение, в которое перенесем все необходимые отчеты и обработки как полноценные объекты конфигурации.

Проанализируем плюсы такого подхода:

  1. Единая среда разработки: Вы видите все связи между объектами в дереве метаданных расширения.
  2. Автоматическая доставка: Расширения в 1С прекрасно мигрируют через РИБ. Вам не нужно следить за наличием .epf файлов в папках на кассовых компьютерах.
  3. Командный интерфейс: Вы можете добавить свою подсистему (например, «Помощник кассира») прямо в главное меню программы или вывести кнопки запуска на стандартный рабочий стол Розницы.

Рекомендации по проектированию оболочки

При создании «Помощника» важно не просто объединить файлы, но и обеспечить удобство их использования. Выясним, какие элементы интерфейса помогут кассирам:

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

2. Ролевая модель. Если «Помощник» общий для всех, добавьте программную проверку прав. Например, кнопка «Удаление чека» должна быть активна только для старшего кассира. Проверить это можно через функцию РольДоступна().

3. Логирование действий. Поскольку оболочка является «точкой входа», в ней удобно реализовать запись в ЖурналРегистрации о том, кто и когда запускал конкретную подсистему «Помощника».

Подводя итог, можно сказать: если вам нужно быстрое решение «здесь и сейчас» для пары файлов — используйте метод с макетами. Если же вы планируете долгосрочное развитие системы и работаете в распределенной базе — лучшим выбором станет создание Расширения или использование справочника дополнительных обработок БСП с кастомной формой управления.

← На главную