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