Чем отличаются расширения 1С по назначению и когда какое выбрать
Содержание
В 1С под словом «расширение» прячутся три разные вещи. Расширение конфигурации
(файл .cfe) меняет поведение типовой программы изнутри. Внешняя обработка или отчёт (.epf, .erf) живёт отдельным файлом и ничего не переписывает. Внешняя компонента подключает код на C++ для работы с оборудованием и системой. Внутри первой группы у расширения есть ещё и назначение: исправление, адаптация или дополнение.
Выбор простой. Нужно поправить ошибку типового модуля или добавить реквизит в документ — расширение конфигурации. Нужна одна печатная форма или разовая загрузка — внешняя обработка. Нужен доступ к весам, сканеру, криптографии — внешняя компонента.
Три назначения расширения конфигурации: что означает каждое
Назначение выбирается при создании расширения и задаёт его роль в жизни базы. Платформа использует его, чтобы определить порядок применения расширений и что с ними делать при обновлении.
| Назначение | Для чего | Кто обычно делает |
|---|---|---|
| Исправление | Закрыть ошибку типовой конфигурации до выхода нового релиза | Разработчик конфигурации или сопровождающая фирма |
| Адаптация | Подогнать типовое решение под отрасль или группу клиентов | Франчайзи, отраслевой разработчик |
| Дополнение | Добавить новые возможности и объекты под конкретную организацию | Штатный программист, подрядчик |
Исправление
Это «заплатка». Ей положено содержать минимум изменений: поправленный метод, доработанный запрос. Когда в новом релизе та же ошибка исправлена в самой конфигурации, заплатку отключают и удаляют.
Исправления применяются раньше остальных расширений. Поэтому их удобно распространять пачкой для всех клиентов фирмы без оглядки на то, что у каждого свои доработки.
Адаптация
Адаптация — это уже не одна строка кода, а набор изменений под определённый круг пользователей. Например, свои виды номенклатуры, дополнительные поля в документах, отраслевые отчёты. Типичный пример — отраслевое решение, которое ставится поверх БП или УТ как расширение, а не как новая конфигурация.
Один раз сделанную адаптацию ставят многим клиентам. Поэтому в ней не должно быть ничего «личного»: названий конкретных контрагентов, захардкоженных идентификаторов.
Дополнение
Дополнение отвечает на вопрос «что нужно именно нам». Свои справочники, документы, регистры, обработки, доработка форм под рабочие места. Применяется последним, поэтому видит результат исправлений и адаптаций и может опираться на них.
Если сомневаетесь, какое назначение поставить, выбирайте «Дополнение». Оно самое нейтральное: его не потеряют при замене исправлений и не перепутают с распространяемой адаптацией.
Порядок применения и конфликты между расширениями
Платформа накладывает расширения слоями: сначала исправления, затем адаптации, затем дополнения. Внутри одного назначения порядок можно менять в списке расширений.
Если два расширения перехватывают один и тот же метод, выполняются обе цепочки. Порядок зависит от очередности расширений. Это частая причина странностей: «после установки второго расширения первое перестало работать».
Как снизить риск:
- 🔹 не перехватывайте один и тот же метод в нескольких расширениях без нужды;
- 🔹 ставьте исправления с назначением «Исправление», а не «Дополнение», чтобы они шли первыми;
- 🔹 после каждой установки проверяйте ключевые сценарии: проведение, печать, обмен.
Расширения конфигурации: безопасная доработка вместо правки типовой
Главное преимущество расширения — конфигурация остаётся на поддержке. Вы не меняете типовые объекты, а «заимствуете» их в расширение и переопределяете нужное. При обновлении релиза платформа сама применяет расширение к новой версии.
Что можно:
- ➕ добавлять реквизиты, табличные части, формы, команды, подсистемы, роли;
- ➕ создавать собственные справочники, документы, регистры, обработки, отчёты;
- ➕ перехватывать процедуры и функции аннотациями
&Перед,&После,&Вместо,&ИзменениеИКонтроль; - ➕ менять формы: перемещать элементы, добавлять обработчики.
Чего нельзя или сильно ограничено: менять состав и структуру типовых данных по своему усмотрению, переименовывать типовые объекты, переписывать любой чужой модуль целиком без последствий. Часть изменений возможна только в виде перехвата.
Расширение подключается в Конфигураторе через меню Конфигурация → Расширения конфигурации. В пользовательском режиме типовых конфигураций со встроенной библиотекой стандартных подсистем список расширений доступен в разделе Администрирование, в подразделе печатных форм, отчётов и обработок.
Свойства, которые стоит проверить сразу
- Безопасный режим. Если расширение приходит от стороннего разработчика, включите его. Код расширения будет выполняться с ограничениями, а не с полными правами.
- Защита от опасных действий. Платформа спросит подтверждение, когда расширение пытается выполнить потенциально опасное действие.
- Использование основных ролей для всех пользователей. Включайте только если понимаете, зачем: влияет на то, чьи права видит код расширения.
Пример перехвата: как выглядит доработка изнутри
Допустим, нужно при записи документа поступления проверять заполнение собственного реквизита. Типовой модуль не трогаем: заимствуем объект в расширение и добавляем обработчик с аннотацией.
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(ЭтотОбъект.ДопРеквизит) Тогда
Сообщить("Заполните дополнительный реквизит");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Имя процедуры любое, но префикс расширения принято добавлять: так проще искать свой код в технологическом журнале и отладчике. Реквизит ДопРеквизит создан в самом расширении и в типовой конфигурации его нет.
Три режима перехвата ведут себя по-разному:
&Передвыполняется до исходной процедуры и не может её отменить;&Послеполучает управление уже после неё;&Вместозаменяет исходную логику, а оригинал вызывается черезПродолжитьВызов(). Забудете вызов, и типовое поведение пропадёт.
Перехват &Вместо без ПродолжитьВызов() отключает типовую логику. Это самая частая причина, когда после установки расширения «перестало проводиться».
Внешние обработки и отчёты: когда расширение конфигурации не нужно
Внешняя обработка не меняет конфигурацию вообще. Файл подключается к базе на лету и работает как обычная обработка: открывается форма, запускается процедура.
В типовых конфигурациях с БСП внешние файлы регистрируются в справочнике дополнительных отчётов и обработок (раздел Администрирование, подраздел печатных форм, отчётов и обработок). Там задают, кому они доступны и в каких списках появляются кнопки, например команда печати в документе.
Подходит для:
- 🖨 дополнительной печатной формы к документу;
- 📥 разовой загрузки или выгрузки данных;
- 🔧 служебной обработки для администратора;
- 📊 отчёта «для себя», который не нужен всем.
Не подходит, когда нужно изменить поведение проведения, добавить поле в справочник или перехватить событие записи. Внешняя обработка до таких мест не дотянется.
Внешний файл исполняет код с правами пользователя. Не подключайте обработки неизвестного происхождения. Для сторонних файлов используйте безопасный режим при регистрации.
Внешние компоненты: расширение возможностей платформы
Компонента — это не 1С-код, а подключаемая библиотека, чаще всего на C++. 1С сама не умеет разговаривать с эквайрингом, сканером штрихкодов или криптопровайдером на нужном уровне, поэтому компонента берёт это на себя.
Два основных технологических варианта: Native API и COM-компоненты. Первый современнее, работает не только в Windows, поддерживается веб-клиентом. Второй привязан к Windows.
Типичный сценарий подключения такой:
- Компонента лежит в макете (тип «двоичные данные») в виде архива.
- Код вызывает подключение через
ПодключитьВнешнююКомпонентуили установку черезНачатьУстановкуВнешнейКомпоненты. - После подключения создаётся объект через
Новый("AddIn.Идентификатор.Класс"). - Дальше работаете с методами и свойствами как с обычным объектом.
На сервере и в клиенте компонента подключается отдельно. Если нужна и там, и там, код ставится для каждого контекста.
Сравнение: какой инструмент взять под задачу
| Задача | Расширение конфигурации | Внешняя обработка | Внешняя компонента |
|---|---|---|---|
| Исправить ошибку в типовом методе | Да | Нет | Нет |
| Добавить реквизит в документ | Да | Нет | Нет |
| Новая печатная форма | Можно | Проще всего | Нет |
| Разовая загрузка из Excel | Избыточно | Да | Нет |
| Работа с весами, сканером | Нет | Нет | Да |
| Изменить логику проведения | Да | Нет | Нет |
| Тестовая проверка идеи | Дольше | Быстро | Нет |
Типичные ошибки при выборе и установке
- ❌ Расширение поставлено «Дополнением», хотя это заплатка: через год никто не помнит, что его надо убрать.
- ❌ Логика зашита в внешнюю обработку , а она должна срабатывать при записи документа. Внешний файл событий записи не слушает.
- ❌ Расширение установлено в рабочую базу без проверки на копии. Ошибка в модуле расширения может блокировать запуск сеанса.
- ❌ Для весов и сканера написан «самодельный» обмен через файлы, когда у производителя есть компонента.
- ❌ После обновления релиза никто не открыл список расширений, и отключённое по ошибке расширение осталось незамеченным.
Если сеанс не стартует из-за расширения, запустите базу с параметром командной строки, отключающим расширения, и устраните проблему. Точное имя параметра сверьте со справкой по запуску 1cv8 для вашей версии платформы.
Как расширения влияют на производительность
Расширение не бесплатно. Платформа при старте собирает итоговую конфигурацию из основной и всех расширений, поэтому запуск сеанса и первый вход на форму идут медленнее. Заметно это в основном на большом числе расширений и тяжёлых базах.
Что даёт реальный эффект:
- 🐢 перехват часто вызываемых методов, например в цикле проведения или в формировании списков, добавляет накладные расходы на каждый вызов;
- 🐢 запросы в обработчиках
&Переди&Послевыполняются каждый раз, когда срабатывает исходный метод; - 🐢 десяток мелких расширений обычно хуже одного-двух целевых.
Практика: держите расширений ровно столько, сколько нужно, объединяйте родственные доработки и убирайте отработавшие исправления. Сомневаетесь — замерьте время проведения и открытия формы до и после, например через замер производительности в Конфигураторе или технологический журнал.
Безопасность и права доступа
Расширение добавляет собственные роли и права на свои объекты. Пользователь, у которого нет прав на объект расширения, его не увидит. Поэтому после установки новое расширение «не видно» — проверьте, включена ли нужная роль в профиле.
Правила, которые стоит соблюдать:
- 🔒 сторонний код ставьте в безопасном режиме и читайте исходники перед установкой;
- 🔒 не давайте прав «Полные» ради того, чтобы «заработало»;
- 🔒 разделяйте роли расширения по функциям, а не одну на всё;
- 🔒 фиксируйте, кто и когда ставил расширение: администратор базы должен знать все подключённые.
Внешние обработки и компоненты работают под правами пользователя, который их запускает. Компоненту ставят администратор или пользователь с соответствующим правом на установку.
Обновления: как не потерять доработки при смене релиза
Расширения, в отличие от правки типовой конфигурации, переживают обновление без ручного слияния. Но «переживают» не значит «работают всегда».
После обновления релиза:
- Откройте список расширений и посмотрите, нет ли пометок о несовместимости.
- Проверьте, не изменились ли перехваченные методы: переименование, смена параметров.
- Загляните в раздел проверки расширений в Конфигураторе: там видны потерянные ссылки на заимствованные объекты.
- Прогоните основные сценарии: ввод документа, проведение, печать, обмен.
Жизненный цикл расширения-исправления короткий. Когда фирма-разработчик выпустила релиз с исправлением, заплатку отключают, проверяют работу и удаляют. Адаптации обновляют по графику их разработчика. Дополнения поддерживает тот, кто их писал.