Чем отличаются расширения 1С по назначению и когда какое выбрать

· 9 мин

Содержание

В 1С под словом «расширение» прячутся три разные вещи. Расширение конфигурации (файл .cfe) меняет поведение типовой программы изнутри. Внешняя обработка или отчёт (.epf, .erf) живёт отдельным файлом и ничего не переписывает. Внешняя компонента подключает код на C++ для работы с оборудованием и системой. Внутри первой группы у расширения есть ещё и назначение: исправление, адаптация или дополнение.

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

Три назначения расширения конфигурации: что означает каждое

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

НазначениеДля чегоКто обычно делает
ИсправлениеЗакрыть ошибку типовой конфигурации до выхода нового релизаРазработчик конфигурации или сопровождающая фирма
АдаптацияПодогнать типовое решение под отрасль или группу клиентовФранчайзи, отраслевой разработчик
ДополнениеДобавить новые возможности и объекты под конкретную организациюШтатный программист, подрядчик

Исправление

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

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

Адаптация

Адаптация — это уже не одна строка кода, а набор изменений под определённый круг пользователей. Например, свои виды номенклатуры, дополнительные поля в документах, отраслевые отчёты. Типичный пример — отраслевое решение, которое ставится поверх БП или УТ как расширение, а не как новая конфигурация.

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

Дополнение

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

Если сомневаетесь, какое назначение поставить, выбирайте «Дополнение». Оно самое нейтральное: его не потеряют при замене исправлений и не перепутают с распространяемой адаптацией.

Порядок применения и конфликты между расширениями

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

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

Как снизить риск:

  • 🔹 не перехватывайте один и тот же метод в нескольких расширениях без нужды;
  • 🔹 ставьте исправления с назначением «Исправление», а не «Дополнение», чтобы они шли первыми;
  • 🔹 после каждой установки проверяйте ключевые сценарии: проведение, печать, обмен.

Расширения конфигурации: безопасная доработка вместо правки типовой

Главное преимущество расширения — конфигурация остаётся на поддержке. Вы не меняете типовые объекты, а «заимствуете» их в расширение и переопределяете нужное. При обновлении релиза платформа сама применяет расширение к новой версии.

Что можно:

  • ➕ добавлять реквизиты, табличные части, формы, команды, подсистемы, роли;
  • ➕ создавать собственные справочники, документы, регистры, обработки, отчёты;
  • ➕ перехватывать процедуры и функции аннотациями &Перед, &После, &Вместо, &ИзменениеИКонтроль;
  • ➕ менять формы: перемещать элементы, добавлять обработчики.

Чего нельзя или сильно ограничено: менять состав и структуру типовых данных по своему усмотрению, переименовывать типовые объекты, переписывать любой чужой модуль целиком без последствий. Часть изменений возможна только в виде перехвата.

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

Свойства, которые стоит проверить сразу

  • Безопасный режим. Если расширение приходит от стороннего разработчика, включите его. Код расширения будет выполняться с ограничениями, а не с полными правами.
  • Защита от опасных действий. Платформа спросит подтверждение, когда расширение пытается выполнить потенциально опасное действие.
  • Использование основных ролей для всех пользователей. Включайте только если понимаете, зачем: влияет на то, чьи права видит код расширения.

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

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

&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Не ЗначениеЗаполнено(ЭтотОбъект.ДопРеквизит) Тогда
        Сообщить("Заполните дополнительный реквизит");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

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

Три режима перехвата ведут себя по-разному:

  • &Перед выполняется до исходной процедуры и не может её отменить;
  • &После получает управление уже после неё;
  • &Вместо заменяет исходную логику, а оригинал вызывается через ПродолжитьВызов(). Забудете вызов, и типовое поведение пропадёт.

Перехват &Вместо без ПродолжитьВызов() отключает типовую логику. Это самая частая причина, когда после установки расширения «перестало проводиться».

Внешние обработки и отчёты: когда расширение конфигурации не нужно

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

В типовых конфигурациях с БСП внешние файлы регистрируются в справочнике дополнительных отчётов и обработок (раздел Администрирование, подраздел печатных форм, отчётов и обработок). Там задают, кому они доступны и в каких списках появляются кнопки, например команда печати в документе.

Подходит для:

  • 🖨 дополнительной печатной формы к документу;
  • 📥 разовой загрузки или выгрузки данных;
  • 🔧 служебной обработки для администратора;
  • 📊 отчёта «для себя», который не нужен всем.

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

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

Внешние компоненты: расширение возможностей платформы

Компонента — это не 1С-код, а подключаемая библиотека, чаще всего на C++. 1С сама не умеет разговаривать с эквайрингом, сканером штрихкодов или криптопровайдером на нужном уровне, поэтому компонента берёт это на себя.

Два основных технологических варианта: Native API и COM-компоненты. Первый современнее, работает не только в Windows, поддерживается веб-клиентом. Второй привязан к Windows.

Типичный сценарий подключения такой:

  1. Компонента лежит в макете (тип «двоичные данные») в виде архива.
  2. Код вызывает подключение через ПодключитьВнешнююКомпоненту или установку через НачатьУстановкуВнешнейКомпоненты.
  3. После подключения создаётся объект через Новый("AddIn.Идентификатор.Класс").
  4. Дальше работаете с методами и свойствами как с обычным объектом.

На сервере и в клиенте компонента подключается отдельно. Если нужна и там, и там, код ставится для каждого контекста.

Сравнение: какой инструмент взять под задачу

ЗадачаРасширение конфигурацииВнешняя обработкаВнешняя компонента
Исправить ошибку в типовом методеДаНетНет
Добавить реквизит в документДаНетНет
Новая печатная формаМожноПроще всегоНет
Разовая загрузка из ExcelИзбыточноДаНет
Работа с весами, сканеромНетНетДа
Изменить логику проведенияДаНетНет
Тестовая проверка идеиДольшеБыстроНет

Типичные ошибки при выборе и установке

  • ❌ Расширение поставлено «Дополнением», хотя это заплатка: через год никто не помнит, что его надо убрать.
  • ❌ Логика зашита в внешнюю обработку , а она должна срабатывать при записи документа. Внешний файл событий записи не слушает.
  • ❌ Расширение установлено в рабочую базу без проверки на копии. Ошибка в модуле расширения может блокировать запуск сеанса.
  • ❌ Для весов и сканера написан «самодельный» обмен через файлы, когда у производителя есть компонента.
  • ❌ После обновления релиза никто не открыл список расширений, и отключённое по ошибке расширение осталось незамеченным.

Если сеанс не стартует из-за расширения, запустите базу с параметром командной строки, отключающим расширения, и устраните проблему. Точное имя параметра сверьте со справкой по запуску 1cv8 для вашей версии платформы.

Как расширения влияют на производительность

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

Что даёт реальный эффект:

  • 🐢 перехват часто вызываемых методов, например в цикле проведения или в формировании списков, добавляет накладные расходы на каждый вызов;
  • 🐢 запросы в обработчиках &Перед и &После выполняются каждый раз, когда срабатывает исходный метод;
  • 🐢 десяток мелких расширений обычно хуже одного-двух целевых.

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

Безопасность и права доступа

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

Правила, которые стоит соблюдать:

  • 🔒 сторонний код ставьте в безопасном режиме и читайте исходники перед установкой;
  • 🔒 не давайте прав «Полные» ради того, чтобы «заработало»;
  • 🔒 разделяйте роли расширения по функциям, а не одну на всё;
  • 🔒 фиксируйте, кто и когда ставил расширение: администратор базы должен знать все подключённые.

Внешние обработки и компоненты работают под правами пользователя, который их запускает. Компоненту ставят администратор или пользователь с соответствующим правом на установку.

Обновления: как не потерять доработки при смене релиза

Расширения, в отличие от правки типовой конфигурации, переживают обновление без ручного слияния. Но «переживают» не значит «работают всегда».

После обновления релиза:

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

Жизненный цикл расширения-исправления короткий. Когда фирма-разработчик выпустила релиз с исправлением, заплатку отключают, проверяют работу и удаляют. Адаптации обновляют по графику их разработчика. Дополнения поддерживает тот, кто их писал.

Перед установкой расширения в рабочую базу
Выполнено: 0 / 5

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

Можно ли установить сразу несколько расширений?
Да. Они накладываются слоями: исправления, адаптации, дополнения. Внутри слоя важен порядок в списке.
Расширение конфигурации заберёт конфигурацию с поддержки?
Нет. Именно для этого оно и придумано: типовые объекты не меняются, поставщик продолжает обновлять конфигурацию.
Чем расширение отличается от внешней обработки?
Расширение меняет поведение самой программы и подключается к ней. Внешняя обработка — самостоятельный файл, который только запускается.
Зачем указывать назначение, если расширение работает и так?
Назначение определяет порядок применения и логику сопровождения. Заплатку проще найти и удалить, чем разбираться в смешанном наборе.
Внешняя компонента — это тоже расширение?
Это расширение возможностей платформы, но не конфигурации. Она не меняет объекты и модули, а добавляет в 1С новые типы.