Как правильно использовать расширения в 1С: общие принципы и лучшие практики

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Сколько расширений использовать: одно или много?

Первый вопрос, который возникает: помещать все доработки в одно большое расширение или создавать несколько маленьких? У каждого подхода есть свои преимущества и недостатки. Проанализируем два основных метода организации.

Подход 1: Группировка по функциональным блокам

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

Рекомендуется следующая логическая структура деления:

  1. «Исправления». В это расширение помещаются временные исправления ошибок типовой конфигурации. Его главное преимущество в том, что после выхода официального обновления от поставщика, в котором ошибка исправлена, это расширение можно безболезненно отключить или удалить.
  2. «Адаптация». Здесь находятся доработки, которые изменяют или дополняют существующую логику типовых объектов. Это расширение можно дальше делить по функциональным подсистемам, например:
    • Расширение_Продажи
    • Расширение_Закупки
    • Расширение_Кадры
    Такое деление помогает быстро ориентироваться в доработках и понимать, за какой участок учета отвечает конкретное расширение.
  3. «Дополнения». В это расширение выносится полностью новый функционал, который слабо связан с типовой логикой (например, специфические отчеты, обработки, интеграции).

Важно: для каждого расширения обязательно заполняйте поле "Комментарий", подробно описывая его назначение. Это значительно упростит поддержку в будущем.

Подход 2: Одно расширение на один объект метаданных

Более гранулярный подход, при котором для каждого изменяемого объекта метаданных создается свое собственное расширение. Например: РасширениеСправочникНоменклатура, РасширениеРегистрШтрихКоды.

Плюсы этого метода:

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

Влияние количества расширений на производительность

Нужно учитывать, что при запуске клиентского сеанса платформа последовательно применяет ("накатывает") каждое активное расширение. Чем больше расширений, тем дольше может быть первоначальный запуск. Однако, как показывает практика, для современного оборудования замедление на одну-две секунды при утреннем запуске 1С не является критичным для пользователей по сравнению с удобством поддержки и стабильностью, которые дает грамотное разделение.

Более существенное влияние на производительность оказывают другие факторы:

Хранение данных: расширение или основная конфигурация?

Это один из самых критичных вопросов в архитектуре расширений. Общая рекомендация — избегайте добавления объектов для хранения данных (справочников, документов, регистров и даже реквизитов к существующим объектам) непосредственно в расширение.

Почему это опасно?

  1. Фатальность удаления данных. Если вы добавили реквизит в справочник через расширение, а затем случайно отключили это расширение (или сняли флаг "Активно" и обновили базу), платформа выполнит на уровне СУБД команду DROP COLUMN. Данные из этой колонки будут физически и безвозвратно удалены. Восстановить их можно будет только из резервной копии. В основной конфигурации при удалении объекта срабатывает контроль ссылочной целостности, в расширениях этот механизм защиты гораздо слабее.
  2. Проблема с идентификаторами (UUID). Связь таблицы в базе данных с расширением осуществляется по его внутреннему уникальному идентификатору (UUID). Если вы удалите расширение, а потом создадите новое с точно таким же именем и составом объектов, старые данные к нему не "подцепятся", так как у нового расширения будет новый UUID.
  3. Сложность миграции. Если вы решите перенести доработку из расширения в основную конфигурацию, вам придется писать отдельные обработки для миграции данных из таблиц расширения в таблицы основной конфигурации. Автоматического механизма для этого не существует.

Когда можно добавлять хранилища данных в расширение?

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

Лучший способ модификации форм

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

Лучшая практика — модифицировать формы программно.

Вместо перетаскивания кнопок и полей в редакторе форм, добавляйте все необходимые элементы кодом в обработчике события формы ПриСозданииНаСервере.

Преимущества программного подхода:

Посмотрим на пример добавления новой команды на форму:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Создаем новую команду
    НоваяКоманда = ЭтаФорма.Команды.Добавить("МояПользовательскаяКоманда");
    НоваяКоманда.Действие = "МояПользовательскаяКомандаНаКлиенте";
    НоваяКоманда.Заголовок = "Выполнить проверку";
    НоваяКоманда.Картинка = БиблиотекаКартинок.ВыполнитьПроверку;

    // Создаем новую кнопку на форме
    НоваяКнопка = ЭтаФорма.Элементы.Добавить("КнопкаМояКоманда", Тип("КнопкаФормы"), ЭтаФорма.Элементы.КоманднаяПанельОсновная);
    НоваяКнопка.ИмяКоманды = НоваяКоманда.Имя;
    НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

КонецПроцедуры

&НаКлиенте
Процедура МояПользовательскаяКомандаНаКлиенте(Команда)
    Сообщить("Выполняется проверка данных...");
    // ... логика команды
КонецПроцедуры

Что категорически не стоит делать в расширениях

Расширения — мощный, но не всесильный инструмент. Есть ряд действий, которые крайне рискованны или технически невозможны.

  1. Не изменяйте типы существующих реквизитов. Вы не можете превратить реквизит типа Строка в Число через расширение.
  2. Не удаляйте объекты метаданных. Расширения созданы для добавления и изменения функциональности, а не для ее удаления. Вы можете скрыть элемент на форме или ограничить к нему доступ, но не удалить сам объект.
  3. С большой осторожностью используйте аннотацию &Вместо. Эта аннотация полностью замещает исходный код типовой процедуры. Если вы примените ее к ключевому методу, например ОбработкаПроведения документа, то при обновлении конфигурации вся новая логика от поставщика в этом методе будет проигнорирована. Это почти гарантированно приведет к серьезным учетным ошибкам. Для доработки логики проведения всегда отдавайте предпочтение аннотации &После, чтобы добавить свои движения и проверки после выполнения основного кода.

Дополнительные архитектурные моменты

Рассмотрим еще несколько важных нюансов, которые стоит учитывать при работе с расширениями.

← На главную