Что дорабатывать в 1С 8.3: саму конфигурацию или расширение
Содержание
Конфигурация в 1С — это сама прикладная программа: справочники, документы, регистры, формы, модули и права. Бухгалтерия, ЗУП, УТ — всё это конфигурации, которые работают на одной платформе 1С:Предприятие 8.3. Расширение — отдельный «слой» поверх конфигурации: оно добавляет или меняет поведение, не трогая основную конфигурацию. Поэтому типовая база с доработками в расширении остаётся на полной поддержке и обновляется так же быстро, как без доработок.
Практический итог простой. Новая печатная форма, лишний реквизит, исправление ошибки в типовом модуле, своя проверка при проведении — делайте расширением. Глубокую переработку учёта, которая ломает логику типовой, — в основной конфигурации, но с пониманием, что каждое обновление превратится в ручное сравнение и объединение. Расширения появились в платформе 8.3.6, а в версиях 8.3.11 и выше умеют почти всё, что нужно в повседневных доработках.
Из чего состоит конфигурация 1С и где она хранится
Внутри любой информационной базы живут сразу три конфигурации. Их путают даже опытные пользователи, а от этого зависят все ответы про обновление.
| Конфигурация | Что это | Где увидеть |
|---|---|---|
| Конфигурация поставщика | Эталон от разработчика (фирмы 1С или партнёра), с которым сравнивается ваша | В Конфигураторе: Конфигурация → Поддержка → Конфигурация поставщика |
| Основная конфигурация | То, что вы открываете и правите в Конфигураторе | Конфигурация → Открыть конфигурацию |
| Конфигурация базы данных | То, с чем реально работают пользователи | Конфигурация → Конфигурация базы данных |
Правки в основной конфигурации не видны пользователям, пока вы не выполните Обновить конфигурацию базы данных (F7). Именно на этом шаге платформа перестраивает таблицы, если изменилась структура данных.
Файлы, с которыми вы столкнётесь:
- 📦
.cf— файл конфигурации целиком, без данных; - 🔄
.cfu— файл обновления конфигурации от поставщика; - 🧩
.cfe— файл расширения; - 💾
.dt— выгрузка всей информационной базы, конфигурация плюс данные.
Поддержка поставщика: три режима
Типовая конфигурация приходит «на замке»: объекты поставщика нельзя редактировать. Это настраивается в Конфигурация → Поддержка → Настройка поддержки. Возможны три состояния для каждого объекта:
- Объект поставщика не редактируется — полная поддержка, обновление ставится автоматически.
- Объект поставщика редактируется с сохранением поддержки — менять можно, но при обновлении придётся сравнивать и объединять ваши изменения с новыми от поставщика.
- Объект поставщика снят с поддержки — обновления на этот объект больше не приходят, все изменения в нём на вас.
Чтобы вообще получить право на правки, в настройке поддержки нажимают Включить возможность изменения. Штатно выключить эту возможность обратно нельзя: вернуть базу к чистой типовой можно только загрузкой конфигурации поставщика. Здесь и начинается «нетиповая» база, которую потом дорого обновлять.
Как устроено расширение конфигурации
Расширение — это небольшая конфигурация, которая подключается к основной и применяется к ней в момент запуска сеанса. Основная конфигурация при этом не меняется ни на байт: поддержка остаётся полной, замок не снимается.
Ключевой механизм — заимствование. Чтобы изменить типовой объект, вы забираете его в расширение: в дереве основной конфигурации щёлкаете правой кнопкой по нужному документу или модулю и выбираете Добавить в расширение. В расширении появляется «копия-ссылка» на объект. В ней вы меняете только то, что нужно, остальное берётся из типовой.
Что умеет современное расширение (платформа 8.3.11 и выше):
- 🖨️ добавлять свои печатные формы, отчёты и обработки;
- 📝 добавлять реквизиты и табличные части к заимствованным справочникам и документам;
- 🗂️ создавать собственные справочники, документы, регистры;
- 🧷 менять формы: добавлять поля, кнопки, команды;
- ⚙️ перехватывать процедуры типовых модулей;
- 🔐 добавлять роли и права на свои объекты.
Перехват кода: аннотации
Изменения в модулях делают не правкой текста типовой процедуры, а перехватом через аннотации над методом расширения:
| Аннотация | Что делает | Когда брать |
|---|---|---|
&Перед | Выполняет ваш код до типового | Дополнительная проверка, заполнение реквизитов |
&После | Выполняет ваш код после типового | Дописать движения, изменить результат |
&Вместо | Полностью подменяет типовой метод | Исправление ошибки, когда нужно иначе |
&ИзменениеИКонтроль | Копирует типовой текст и показывает ваши вставки и удаления | Правка пары строк в середине длинной процедуры |
Пример: при записи заимствованного документа запретить пустой комментарий.
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ПустаяСтрока(Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю("Заполните комментарий", ЭтотОбъект, "Комментарий", , Отказ);
КонецЕсли;
КонецПроцедуры
Пример рассчитан на конфигурации на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11), где есть общий модуль ОбщегоНазначения. В конфигурации без БСП используйте объект Сообщение и установите Отказ = Истина напрямую.
&ИзменениеИКонтроль — самый безопасный способ поправить кусок типового кода. Если поставщик в новом релизе изменит эту процедуру, расширение не применится и сообщит об ошибке. Вы узнаете о конфликте сразу, а не по неверным суммам через месяц.
Метод с &Вместо вызывает исходный код через ПродолжитьВызов(). Если его не вызвать, типовой код не выполнится совсем. Это мощно и опасно: после обновления поставщик мог добавить в метод важное, а ваша подмена это выключит.
Конфигурация или расширение: отличия и выбор
Главная разница — в цене каждого следующего обновления.
| Критерий | Правка основной конфигурации | Расширение |
|---|---|---|
| Поддержка поставщика | Снята или частичная | Полная, замок на месте |
| Обновление типовой | Сравнение и объединение вручную | Как у чистой типовой, затем проверка расширения |
| Где работает | Только Конфигуратор | Конфигуратор; готовое расширение подключается и в пользовательском режиме |
| Можно удалить объект типовой | Да | Нет |
| Можно изменить тип существующего реквизита | Да | Нет |
| Откат доработки | Сложно, через сравнение | Отключить или удалить расширение |
| Работа в облаке 1С:Фреш и аналогах | Как правило, нельзя | Можно, с ограничениями безопасного режима |
Ограничения расширений: что в них нельзя и что важно знать
Расширение не всесильно. Перед тем как обещать заказчику доработку, проверьте, укладывается ли она в рамки.
Что расширение не может:
- ❌ удалить объект, реквизит или форму основной конфигурации;
- ❌ изменить тип существующего реквизита типового объекта;
- ❌ работать с правами выше, чем разрешил администратор: в безопасном режиме расширение не пишет на диск, не запускает внешние программы и не обращается к COM.
Свойства расширения, которые влияют на поведение
У каждого расширения в списке есть набор флажков. Их смысл важнее, чем кажется:
| Свойство | Что значит |
|---|---|
| Активно | Расширение применяется при следующем запуске сеанса |
| Безопасный режим | Код выполняется с ограничениями: без файловых операций, COM и внешних компонент |
| Защита от опасных действий | Пользователь получает предупреждение перед потенциально опасной операцией |
| Назначение | Исправление, Адаптация или Дополнение — определяет порядок применения нескольких расширений |
| Префикс | Строка, которой платформа предлагает начинать имена ваших объектов, например Расш1_ |
Назначение — не формальность. Платформа применяет расширения по порядку: сначала «Исправление», потом «Адаптация», затем «Дополнение». Если два расширения перехватывают один и тот же метод, результат зависит от этого порядка.
Расширение с данными
Когда расширение добавляет реквизит или свой справочник, оно меняет структуру базы. Отсюда два следствия:
- ⏳ при подключении и изменении такого расширения нужно обновление структуры, для него требуется монопольный доступ к базе;
- 🗑️ удаление расширения удаляет и его данные. Реквизит, который бухгалтер заполнял полгода, исчезнет вместе с расширением.
Перед удалением или пересозданием расширения с собственными реквизитами и справочниками сделайте выгрузку базы в .dt.
Работа с расширениями: создание, подключение, перенос
Создать расширение в Конфигураторе
- Откройте базу в Конфигураторе,
Конфигурация → Открыть конфигурацию. - Выберите
Конфигурация → Расширения конфигурации, нажмитеДобавить. - Задайте имя, синоним, префикс и назначение.
- Откройте расширение, в дереве основной конфигурации найдите нужный объект и через контекстное меню выберите
Добавить в расширение. - Внесите правки в заимствованный объект или создайте свои объекты.
- Обновите конфигурацию базы данных расширения (F7 в окне расширения).
- Запустите базу в режиме 1С:Предприятие и проверьте доработку.
Перенести расширение в другую базу
В Конфигураторе в списке расширений выберите нужное и сохраните его в файл .cfe командой сохранения в файл из меню списка. В другой базе есть два пути:
- 🛠️ в Конфигураторе:
Конфигурация → Расширения конфигурации, добавить расширение и загрузить в него файл; - 👤 в пользовательском режиме: в конфигурациях на БСП —
Администрирование → Печатные формы, отчеты и обработки → Расширения, кнопка добавления из файла. Без БСП — черезВсе функции → Стандартные → Управление расширениями конфигурации.
Загрузка .cfe и применение расширения к базе — разные действия. После загрузки пользователям нужно перезапустить сеанс, чтобы изменения подхватились, а расширению с данными — ещё и обновить структуру.
Обновление типовой конфигурации, когда в базе есть расширения
Здесь расширения и окупаются. Порядок обычно такой:
- Сделайте резервную копию базы.
- Обновите типовую конфигурацию штатно: через Конфигуратор файлом
.cfuили через встроенный механизм обновления программы. Поскольку основная конфигурация на полной поддержке, сравнивать и объединять ничего не придётся. - Запустите базу. Платформа проверит каждое расширение на совместимость с новой версией.
- Если расширение не применилось, платформа покажет сообщение с именем объекта или метода, который изменился у поставщика.
- Откройте расширение в Конфигураторе и поправьте конфликт: обновите заимствованный объект, пересмотрите перехват в
&ИзменениеИКонтроль.
Что обычно ломается при обновлении:
- 🔁 перехваченная процедура переименована или у неё изменились параметры;
- 🧱 типовой элемент формы, к которому вы привязали своё поле, переместили или удалили;
- 📐 заимствованный объект у поставщика поменял контролируемые свойства — например, тип реквизита, на который опирается ваш код.
Сколько стоит поддержка доработок
Ориентировочно, по рынку фрилансеров и франчайзи: обновление чистой типовой с парой расширений — это та же работа, что и без них, плюс проверка доработок, обычно до часа. Обновление базы со снятой поддержкой и доработками в основной конфигурации — от нескольких часов до нескольких дней на каждый релиз, по часовой ставке программиста. Разница за год набегает в десятки тысяч рублей.
Ошибки при доработке, которые потом дорого исправлять
- 🔓 Включили возможность изменения ради одной печатной формы. Форма заняла час, а база навсегда стала нетиповой. То же самое делается расширением или внешней печатной формой без снятия замка.
- 🧨 Перехватили метод через
&Вместои забылиПродолжитьВызов(). Типовой код перестаёт выполняться, а заметно это становится только на закрытии месяца. - 🏷️ Объекты без префикса. Через год в списке расширений три доработки разных подрядчиков, и непонятно, кому принадлежит реквизит
ДопИнфо. - 🧪 Подключили расширение сразу в рабочую базу. Расширение под другой релиз не применится, а с данными может потребовать монопольный доступ посреди рабочего дня.
- 📚 Одно огромное расширение на всё. Исправления, отчёты и интеграции лучше разносить по разным расширениям: ненужное потом отключается без последствий для остального.