Как создать внешнюю обработку на основе стандартной формы справочника в 1С:Розница?

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

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

Разбор ошибки при создании формы

Чаще всего при попытке запустить скопированную форму возникает ошибка, связанная с процедурой ПодключаемыеКоманды.ПриСозданииНаСервере. Система требует явно указать параметр ПараметрыРазмещения.Источники, так как она «не понимает», к какому объекту конфигурации привязана ваша новая форма. Давайте устраним это недопонимание.

Для исправления необходимо внести изменения в процедуру ПриСозданииНаСервере в модуле формы вашей внешней обработки. Вместо стандартного вызова процедуры, выполните следующие действия:


// СтандартныеПодсистемы.ПодключаемыеКоманды
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения;
// Укажите имя вашей командной панели, обычно это КоманднаяПанель или специфичное имя элемента формы
ПараметрыРазмещения.КоманднаяПанель = Элементы.ВашеИмяКоманднойПанели; 
Массив = Новый Массив;
Массив.Добавить(Метаданные.Справочники.Номенклатура);
ПараметрыРазмещения.Источники = Массив;
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

Обратите внимание: вместо ВашеИмяКоманднойПанели необходимо подставить реальное имя элемента командной панели, размещенного на вашей форме. Если вы не уверены в имени, посмотрите его в палитре свойств элемента формы.

Регистрация внешней обработки в системе

Чтобы ваша обработка появилась в списке дополнительных отчетов и обработок, необходимо реализовать экспортную функцию СведенияОВнешнейОбработке в модуле объекта. Именно она сообщает системе, как именно должен работать ваш инструмент.

Разберем пример кода для регистрации:


Функция СведенияОВнешнейОбработке Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке;
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка;
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить;
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы;
    НоваяКоманда.Идентификатор = Метаданные.Имя;
    НоваяКоманда.Представление = Метаданные.Синоним;
    
    Возврат ПараметрыРегистрации;
КонецФункции

Защита обработки от несанкционированного использования

Если возникла необходимость ограничить запуск обработки, например, привязать её работу к конкретному ИНН организации, простого кода в ПриСозданииНаСервере может быть недостаточно, так как опытный пользователь может изменить код через конфигуратор. Рассмотрим более надежный подход с использованием функции СведенияОВнешнейОбработке, чтобы команда запуска вообще не была доступна пользователю, если условия лицензирования не выполнены.

Реализуем проверку прямо в модуле объекта:


Функция СведенияОВнешнейОбработке Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке;
    // ... (заполнение параметров)
    
    // Запрос к базе для проверки ИНН
    Запрос = Новый Запрос("ВЫБРАТЬ 1 ИЗ Справочник.Организации ГДЕ ИНН = &ИНН");
    Запрос.УстановитьПараметр("ИНН", "1234567890"); // Нужный вам ИНН
    
    Если Не Запрос.Выполнить().Пустой() Тогда
        // Добавляем команду только при совпадении ИНН
        НоваяКоманда = ПараметрыРегистрации.Команды.Добавить;
        // ... (настройка команды)
    КонецЕсли;
    
    Возврат ПараметрыРегистрации;
КонецФункции

Полезные советы и рекомендации

В завершение работы над задачей, давайте подведем итоги по архитектуре вашего решения:

  1. Использование расширений: Если вы планируете серьезные изменения стандартных форм, лучше использовать Расширения конфигурации. Это позволяет избежать проблем с инициализацией БСП, которые возникают при копировании форм во внешние обработки.
  2. Вынос бизнес-логики: Постарайтесь не переносить всю критическую логику в модуль формы. Если вынести её в общие серверные модули, код станет безопаснее, а его поддержка — проще.
  3. Динамические списки: Для вывода остатков наиболее эффективно использовать ДинамическийСписок с произвольным запросом. Соединяйте основной справочник с виртуальной таблицей ОстаткиТоваровОстатки левым соединением — это обеспечит высокую скорость работы даже при больших объемах данных.

Теперь ваша внешняя обработка полностью готова к работе в составе 1С:Розница. Мы разобрали, как преодолеть ограничения БСП, как правильно зарегистрировать инструмент в системе и как обезопасить его использование. Удачи в ваших разработках!

← На главную