При работе с типовыми конфигурациями 1С, такими как 1С:Бухгалтерия 3.0 (БП 3.0), часто возникает необходимость расширить их функционал, добавив собственные обработки или отчеты. Один из самых гибких и рекомендуемых способов сделать это, не снимая конфигурацию с поддержки, — использование механизма Дополнительные отчеты и обработки (ДОР). Однако этот механизм имеет свои особенности, которые важно знать.
Рассмотрим подробнее, как подключить внешнюю обработку так, чтобы она появилась в списке дополнительных обработок и, например, добавила кнопку на форму конкретного документа. Мы выясним, какие шаги необходимо предпринять, какой код следует использовать, а также как провести анализ обработки на наличие ошибок, чтобы избежать распространенных проблем при запуске.
Первая и самая частая проблема, с которой сталкиваются разработчики, — это невозможность увидеть или загрузить файл обработки через меню "Дополнительные отчеты и обработки" или появление ошибки при загрузке. Это происходит потому, что обычная внешняя обработка (которую мы открываем через "Файл -> Открыть") отличается от дополнительной обработки, предназначенной для интеграции в подсистемы конфигурации.
Для корректного подключения в качестве дополнительной, ваша обработка должна соответствовать определенным требованиям и содержать специальные экспортные процедуры и функции. Рассмотрим этот процесс по шагам.
Ваша внешняя обработка должна быть сохранена в формате .epf (External Processing File). Убедитесь, что ваш файл имеет именно это расширение, а не устаревший .ert (External Report/Tool), который использовался в 1С:Предприятие 7.7.
СведенияОВнешнейОбработке():
Это ключевая функция, которая регистрирует вашу обработку в системе 1С как дополнительную. Она должна быть экспортной и возвращать структуру, описывающую обработку и её команды. Для более детального изучения структуры всех полей регистрации рекомендуем изучить справочник методов Бухгалтерии предприятия 3.0 и руководство по созданию дополнительных обработок на базе БСП. Давайте посмотрим на пример её реализации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
// Определяем, к каким объектам будет привязана наша обработка.
// Например, к документу "Реализация товаров и услуг".
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
// Важные параметры регистрации:
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); // Обязательно "ДополнительнаяОбработка"!
ПараметрыРегистрации.Вставить("Наименование", "МояОбработкаДляРеализации"); // Название, которое будет видно пользователю
ПараметрыРегистрации.Вставить("Версия", "1.0"); // Версия обработки
ПараметрыРегистрации.Вставить("Информация", "Обработка добавляет кнопку на форму документа Реализация и выполняет действие."); // Краткое описание
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); // Массив объектов, к которым привязывается обработка
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); // Режим выполнения
ПараметрыРегистрации.Вставить("Показывать", "ВФормеДокумента");
// Определяем команды, которые будут доступны через обработку.
ТаблицаКоманд = Новый ТаблицаЗначений;
ТаблицаКоманд.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); // Текст на кнопке
ТаблицаКоманд.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); // Уникальный идентификатор команды
ТаблицаКоманд.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); // Тип использования команды
ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); // Показывать ли оповещение после выполнения
// Добавляем нашу первую команду.
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = "Выполнить действие по реализации";
НоваяКоманда.Идентификатор = "МояКомандаДействие";
НоваяКоманда.Использование = "ОткрытиеФормы";
НоваяКоманда.ПоказыватьОповещение = Ложь;
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Разберем ключевые поля структуры:
Вид: Обязательно "ДополнительнаяОбработка". Именно это значение сообщает 1С, что перед ней дополнительная обработка, а не обычная.Назначение: Массив строк с полными именами метаданных, к которым будет привязана обработка.Команды: Таблица значений, описывающая каждую команду. Чтобы лучше понять разницу в реализации, изучите типы использования команд, а для более сложных интерфейсных задач рассмотрите добавление элементов формы без кодирования.Если в СведенияОВнешнейОбработке() мы определили команды, теперь нам нужно создать код, который будет выполняться при их вызове. Это могут быть экспортные процедуры или функции.
// Это процедура будет вызвана при нажатии кнопки с Идентификатором "СерверноеДействие"
Процедура СерверноеДействие(ИдентификаторКоманды) Экспорт на Сервере
// Здесь ваш код, который будет выполняться на сервере
Сообщить("Серверное действие '"+ ИдентификаторКоманды +"' выполнено!", СтатусСообщения.Важное);
КонецПроцедуры
// Для команды с Использование = "ВызовКлиентскогоМетода"
Процедура МояКлиентскаяКомандаДействие(ИдентификаторКоманды) Экспорт на Клиенте
// Здесь ваш код, который будет выполняться на клиенте
Сообщить("Клиентское действие '"+ ИдентификаторКоманды +"' выполнено!");
КонецПроцедуры
Важно: для серверных процедур указывайте Экспорт на Сервере, для клиентских — Экспорт на Клиенте. Параметры, передаваемые в эти процедуры, зависят от контекста вызова.
ПолучитьФорму() (для команды с Использование = "ОткрытиеФормы"):
Если ваша команда должна открывать отдельную форму обработки, необходимо реализовать экспортную функцию ПолучитьФорму(). Эта функция будет вызвана платформой, когда пользователь нажмет на команду с типом использования "ОткрытиеФормы".
Функция ПолучитьФорму(ИдентификаторФормы, ИдентификаторОбъекта, КлючЗаписи, ВыбранныеОбъекты) Экспорт
ПараметрыФормы = Новый Структура("ОбъектОснование", КлючЗаписи);
Возврат ПолучитьФорму("ВнешняяОбработка.МояОбработкаДляРеализации.Форма", ПараметрыФормы);
КонецФункции
Важно: в вашей внешней обработке должна быть создана форма (например, с именем "Форма"), на которую ссылается функция ПолучитьФорму().
После того как вы подготовили файл .epf с необходимыми функциями, можно переходить к подключению в режиме 1С:Предприятие через раздел "НСИ и администрирование" -> "Печатные формы, отчеты и обработки".
После регистрации обработки вам нужно настроить, кто и как сможет ей пользоваться. О нюансах того, как выполняется настройка доступности элементов формы и прав доступа в интерфейсе, следует помнить при внедрении решения для различных групп пользователей.
В функции СведенияОВнешнейОбработке() мы устанавливали параметр БезопасныйРежим. Детальный разбор механизмов безопасности 1С и настройки разрешений поможет вам понять, в каких случаях стоит использовать ограниченные права, а когда необходим полный доступ к ресурсам сервера.
БезопасныйРежим = Истина: Рекомендуемое значение. Доступ к файловой системе и COM-объектам на сервере ограничен.БезопасныйРежим = Ложь: Обработка выполняется с полными правами. Используйте только для проверенного кода.Когда вы открываете форму обработки через функцию ПолучитьФорму(), вы можете передавать в нее необходимые параметры. В этом вам поможет стандартная методика программного взаимодействия обработки с контекстом формы документа, позволяющая эффективно передавать ссылки, а также обновить форму документа программно при необходимости изменения данных.
В самой форме обработки вы сможете получить этот параметр в обработчике события ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ТекущийДокумент") Тогда
ЭтотОбъект.СсылкаНаОбъектОснование = Параметры.ТекущийДокумент;
КонецЕсли;
КонецПроцедуры
Если вы внесли изменения в код, вам не нужно удалять её и добавлять заново — достаточно нажать кнопку "Обновить из файла". При этом отладка и обновление внешних обработок в режиме 1С:Предприятие позволяют быстро исправлять ошибки в серверном или клиентском коде без потери текущих настроек прав в базе данных.
Поле Показывать в функции СведенияОВнешнейОбработке() определяет, где будут доступны команды (например, "ВФормеДокумента" или "ВФормеСписка"). Выбирайте значение, которое наиболее логично для функционала вашей обработки.
Подключение внешних дополнительных обработок в 1С:Бухгалтерия 3.0 — мощный инструмент для расширения функционала типовых конфигураций без снятия их с поддержки. Следуя этим рекомендациям, вы сможете эффективно интегрировать собственные решения в систему 1С, делая её более гибкой и соответствующей уникальным потребностям вашего бизнеса.