Собственная обработка внутри расширения конфигурации: от создания до команды в разделе

· 9 мин

Содержание

Чтобы добавить обработку в расширение 1С, откройте Конфигуратор, выберите Конфигурация → Расширения конфигурации, откройте нужное расширение и в его дереве на ветке «Обработки» выполните «Добавить». Дальше — форма, права в роли расширения и команда в разделе. Основная конфигурация при этом не трогается и остаётся на поддержке.

Ниже — порядок для платформы 8.3 и типовых конфигураций на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11). Сам механизм общий для платформы, поэтому шаги в Конфигураторе одинаковы в любой конфигурации. Различается только путь, по которому пользователь подключает готовое расширение в режиме Предприятия.

Что подготовить перед созданием расширения

Расширения появились в платформе 8.3.6. С тех пор их возможности сильно выросли, поэтому работайте на актуальной версии платформы: на старых сборках часть свойств и объектов в расширении недоступна.

Перед началом проверьте:

  • 🔑 Права. Нужен пользователь с полными правами или правом администрирования. Без него в Конфигураторе ветка расширений будет только для чтения.
  • 💾 Копия базы. Сама обработка в расширении структуру данных не меняет. Но выгрузка .dt перед первой установкой — разумная страховка.
  • 🧪 Тестовая база. Отлаживайте расширение на копии рабочей базы, а в рабочую ставьте уже готовый файл .cfe.
  • 🏷️ Префикс. Придумайте короткий префикс своей организации, например мр_. Он отделит ваши объекты от типовых и снимет конфликты имён при обновлении конфигурации.

Создание самого расширения

  1. Откройте Конфигурация → Расширения конфигурации.
  2. Нажмите «Добавить» и задайте имя (латиница или кириллица без пробелов), синоним и префикс.
  3. В поле «Назначение» выберите вариант. Для набора своих обработок подходит «Дополнение». «Исправление» — для быстрых правок ошибок типовой, «Адаптация» — для доработок под конкретное предприятие.
  4. Нажмите «ОК». В списке появится строка расширения, а в контекстном меню — команда «Открыть конфигурацию».

После открытия вы увидите отдельное дерево метаданных. Это и есть ваше расширение: в нём лежат только ваши объекты и то, что вы явно заимствовали из основной конфигурации.

Порядок добавления обработки в расширение 1С

В расширении обработка создаётся точно так же, как в обычной конфигурации. Разница в префиксе, в заимствовании чужих типов и в правах.

  1. В дереве расширения найдите ветку «Обработки», правой кнопкой — «Добавить».
  2. Задайте имя с префиксом, например мр_ЗагрузкаЦенПоставщика, и понятный синоним: его увидит пользователь.
  3. На вкладке «Данные» добавьте реквизиты и табличные части.
  4. На вкладке «Формы» создайте форму обработки. Конструктор сам назначит её основной.
  5. Откройте модуль формы и модуль объекта, перенесите или напишите код.
  6. Сохраните расширение (F7 в окне расширения — обновить конфигурацию базы данных).

Если нужен тип из основной конфигурации

Допустим, реквизит обработки должен иметь тип СправочникСсылка.Номенклатура. В списке типов вы его сразу не найдёте. Сначала заимствуйте справочник:

  1. В дереве основной конфигурации найдите Справочники → Номенклатура.
  2. Правой кнопкой — «Добавить в расширение».
  3. Справочник появится в дереве расширения со значком заимствования. Теперь его тип доступен для реквизитов.

Заимствованный объект ничего не меняет в типовом справочнике, пока вы сами не добавите в него свои элементы. Для обращения из кода (Справочники.Номенклатура.НайтиПоКоду(...)) заимствование не нужно: менеджеры основной конфигурации доступны расширению и так.

Перенос готовой внешней обработки

Частый случай — в расширение переносят существующий файл .epf. Прямой команды импорта нет, поэтому порядок такой:

  • откройте .epf в Конфигураторе рядом с расширением;
  • воссоздайте в расширении те же реквизиты и табличные части с теми же именами;
  • скопируйте текст модуля объекта и модуля формы;
  • на новой форме разложите элементы, перетаскивая реквизиты из дерева реквизитов формы.

Сохраняйте имена реквизитов один в один. Тогда код модулей заработает без правок, кроме обращений к макетам и общим модулям, которых в расширении нет.

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

Часть настроек живёт в свойствах объекта, часть — в свойствах расширения. Путаница между ними — частая причина «обработка есть, а пользователь её не видит».

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

Безопасный режим: что он отрезает

Если расширение подключено в безопасном режиме, его код не может работать с файлами на сервере, создавать COM-объекты, подключать внешние компоненты и включать привилегированный режим. Для обработки, которая просто читает данные и пишет документы, это не мешает.

Если же обработка грузит прайс из файла на сервере или обращается к Excel через COM — безопасный режим придётся снять. Делайте это только для своих проверенных расширений.

Не снимайте безопасный режим у расширений, полученных от третьих лиц, пока не прочитали их код.

Права: без роли команды не будет

Обработка из расширения подчиняется обычной ролевой модели. Пока ни одна роль не даёт права на неё, пользователь не увидит ни команду, ни форму.

Два рабочих варианта:

  • Своя роль в расширении. Создайте в ветке «Роли» роль мр_ИспользованиеЗагрузкиЦен, отметьте у обработки права «Использование» и «Просмотр». Затем включите роль в профиль групп доступа: Администрирование → Настройки пользователей и прав → Профили групп доступа.
  • Заимствованная роль. Заимствуйте типовую роль и в ней отметьте права на свой объект. Права на типовые объекты в заимствованной роли не меняются, а на объекты расширения задаются свободно.

Первый вариант прозрачнее: видно, кому именно открыт доступ.

Как вывести обработку в раздел и на форму

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

Команда в разделе

  1. В основной конфигурации найдите подсистему, например «Склад» или «Администрирование».
  2. Правой кнопкой — «Добавить в расширение».
  3. Откройте заимствованную подсистему в дереве расширения и на вкладке состава отметьте свою обработку.
  4. У обработки должно стоять «Использовать стандартные команды». Тогда команда открытия появится в разделе, обычно в группе «Сервис».

Можно создать и собственную подсистему в расширении. Она станет новым разделом на панели разделов. Это удобно, когда у вас пять-шесть своих обработок и их хочется держать вместе.

Кнопка на форме документа

Если обработка должна запускаться из конкретного документа, создайте общую команду или команду обработки с параметром. Тип параметра — ссылка на документ (документ для этого заимствуется). Группу размещения задайте «Панель командной формы» или «Командная панель формы».

Другой путь — заимствовать саму форму документа и добавить на неё кнопку. Он гибче, но каждая заимствованная форма — точка риска при обновлении типовой. Команду с параметром выбирайте, когда её достаточно.

Где разместить вашу обработку?

Вызов обработки из кода

Объекты расширения видны в коде так же, как типовые, — по своему имени с префиксом.

Открыть основную форму с клиента:

&НаКлиенте
Процедура ЗагрузитьЦены(Команда)
	ПараметрыФормы = Новый Структура("Поставщик", Объект.Контрагент);
	ОткрытьФорму("Обработка.мр_ЗагрузкаЦенПоставщика.Форма", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры

Если имя формы не указывать полностью, а написать .Форма, откроется основная. В форме обработки параметр читается в ПриСозданииНаСервере через Параметры.Поставщик.

Выполнить логику на сервере без формы:

&НаСервереБезКонтекста
Функция КоличествоОбновленныхЦен(Поставщик)
	ОбработкаОбъект = Обработки.мр_ЗагрузкаЦенПоставщика.Создать();
	ОбработкаОбъект.Поставщик = Поставщик;
	Возврат ОбработкаОбъект.ЗагрузитьЦены();
КонецФункции

Чтобы это работало, в модуле объекта обработки функция должна быть экспортной:

Функция ЗагрузитьЦены() Экспорт
	Обновлено = 0;
	// чтение источника и запись документа «Установка цен номенклатуры»
	Возврат Обновлено;
КонецФункции

Если обработку вызывают из нескольких мест, вынесите логику в модуль менеджера с экспортной процедурой. Тогда Обработки.мр_ЗагрузкаЦенПоставщика.ЗагрузитьЦены(Поставщик) не требует создавать объект.

Регламентное задание

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

Выгрузка .cfe, установка и обновление

Готовое расширение переносят файлом .cfe.

Выгрузка

В окне списка расширений выделите своё и выберите в его меню Конфигурация → Сохранить в файл. Перед этим поднимите номер в свойстве «Версия», например с 1.0.3 на 1.0.4. По нему потом ясно, какая сборка стоит у клиента.

Установка в рабочую базу

СпособГдеКому подходит
Через КонфигураторКонфигурация → Расширения конфигурации → Конфигурация → Загрузить из файла, затем обновить конфигурацию БДАдминистратору с доступом к Конфигуратору
Через режим ПредприятияАдминистрирование → Печатные формы, отчеты и обработки → РасширенияПользователю с правами администратора в типовых на БСП

Загрузка файла и обновление конфигурации базы данных — два разных шага. Пока второй не выполнен, расширение не применено.

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

Монопольный режим и сеансы

Расширение с одной обработкой структуру данных не меняет, поэтому монопольный доступ для его установки обычно не нужен. Пользователи увидят новую команду после перезапуска своего сеанса.

Если в расширении есть собственные справочники, документы или реквизиты у заимствованных объектов — это уже изменение структуры. Тогда обновление делают вне рабочего времени.

После обновления типовой конфигурации

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

После каждого обновления:

  1. Откройте список расширений и проверьте, что ваше расширение активно и не помечено ошибкой.
  2. Запустите в Конфигураторе проверку применимости расширений.
  3. Откройте обработку под пользователем с обычными правами и прогоните основной сценарий.
После обновления типовой
Выполнено: 0 / 5

Где обычно спотыкаются

Ошибки, на которые уходит больше всего времени:

  • 🚫 Команды нет в разделе. Обработка не включена в заимствованную подсистему, снят флаг «Использовать стандартные команды» или у пользователя нет роли с правом «Просмотр».
  • 🚫 Тип справочника не выбирается для реквизита. Объект не заимствован в расширение.
  • 🚫 «Безопасный режим» блокирует код. Ошибка появляется на строке с Новый COMОбъект или работой с файлами. Решение — снять безопасный режим у этого расширения, а не переписывать логику.
  • 🚫 Расширение загружено, а изменений нет. Не выполнено обновление конфигурации базы данных или пользователь не перезапустил сеанс.
  • 🚫 Конфликт имён после обновления типовой. В новом релизе появился объект с тем же именем. Префикс в именах снимает эту проблему заранее.

Частые вопросы

Чем обработка в расширении лучше внешней обработки .epf?
Она живёт внутри базы: не нужно раздавать файл, права задаются ролями, команда встраивается в разделы и формы без регистрации в справочнике дополнительных обработок.
Можно ли держать несколько обработок в одном расширении?
Да. Обычно так и делают: одно расширение на набор доработок одной организации или подрядчика. Разные расширения имеет смысл заводить для независимых задач с разным графиком обновления.
Пропадёт ли обработка при обновлении типовой конфигурации?
Нет. Расширение хранится отдельно и после обновления применяется заново. Пропасть может только применимость, если изменились заимствованные объекты.
Как временно отключить обработку, не удаляя расширение?
В списке расширений снимите флаг «Активно». Расширение останется в базе, но перестанет применяться после перезапуска сеансов.
Работает ли обработка из расширения в веб-клиенте и в облаке?
Да, если код не использует возможностей только толстого клиента или Windows. В облачных сервисах расширения ставятся через режим Предприятия и обычно только в безопасном режиме.