Механизм расширений в платформе 1С:Предприятие 8.3 стал стандартом доработки типовых конфигураций, позволяя оставлять основную базу на поддержке. Однако перед разработчиком всегда встает архитектурный вопрос: сваливать все изменения в одно «монолитное» расширение или создавать под каждую задачу или блок учета отдельный объект? Однозначного ответа «из коробки» не существует, так как каждый подход имеет свои критические плюсы и минусы. В этой статье мы рассмотрим основные стратегии организации расширений, проанализируем технические риски и выработаем оптимальный алгоритм работы.
Многие разработчики предпочитают держать все доработки в одном расширении. С организационной точки зрения это кажется проще: у вас одна точка входа, одно хранилище и нет необходимости искать, где именно был расширен конкретный справочник или форма.
Основные преимущества:
&Вместо, что порождает трудноуловимые ошибки.Главный риск — «Эффект домино»: Проанализируем ситуацию, когда в очередном обновлении типовой конфигурации поставщик изменил тип реквизита или удалил метод, который вы заимствовали. Если это единственное расширение не сможет подключиться (возникнет ошибка применимости), то отвалится весь функционал, накопленный за годы разработки. Программа для пользователя превратится в «тыкву» до тех пор, пока программист не исправит конкретную ошибку, даже если она возникла в малозначительном отчете, а заблокировала проведение чеков.
Альтернативный подход — создание расширения под каждую задачу или функциональный блок (например, «Производство», «Интеграция_с_API», «Логистика»).
Преимущества модульного подхода:
Недостатки: Сложность администрирования. Выясним причину: если вы расширили форму Документ.РеализацияТоваровУслуг в пяти разных расширениях, то разобраться, как в итоге собралась форма в режиме 1С:Предприятие, становится крайне сложно. Анализ последовательности выполнения обработчиков &Перед и &После превращается в детективное расследование.
Рассмотрим подробнее, что происходит на уровне платформы и SQL-сервера при использовании расширений. Каждое новое расширение — это дополнительная нагрузка на систему:
Управление торговлей стоит в режиме 8.3.12, вы не сможете использовать «фишки» версии 8.3.14.Опытные разработчики рекомендуют использовать компромиссный вариант, который мы разберем по шагам:
Шаг 1: Создание «Ядра» (Core)
Создаем одно основное расширение для общих механизмов, прав доступа и тех доработок, которые пронизывают всю систему. Сюда же относим мелкие правки (исправление опечатки в форме, добавление одного реквизита в справочник).
Шаг 2: Выделение крупных блоков
Если задача масштабная (например, сложный расчет себестоимости, не предусмотренный вендором), под нее создается отдельное расширение. Это позволяет изолировать сложный код.
Шаг 3: Группировка по метаданным
Старайтесь не расширять один и тот же объект (особенно формы и модули объектов) в разных расширениях. Если вам нужно доработать Проведение в документе ЗаказПокупателя, делайте это в том расширении, где этот документ уже заимствован.
Шаг 4: Использование программных подписок
Чтобы минимизировать заимствование объектов и конфликты применимости, посмотрим на пример использования программных подписок на события. Вместо заимствования модуля документа можно использовать код в модуле расширения для подписки на события:
// В модуле расширения при установке параметров сеанса или при запуске
Процедура ПриУстановкеПараметровСеанса(СеансИспользуется)
ДобавитьОбработчик ПодпискаНаСобытие("ОбработкаПроведения",
Документы.РеализацияТоваровУслуг,
"МойМодульРасширения.ПроверитьОстаткиПередПроведением");
КонецПроцедуры
Такой подход позволяет вообще не менять модуль объекта в расширении, что гарантирует стабильность при обновлениях.
Чтобы расширение реже «отваливалось», проанализируем ситуацию с использованием аннотаций:
&Вместо: это самая опасная аннотация. Если 1С добавит в типовую процедуру одну важную строчку (например, проверку прав), а у вас стоит &Вместо, эта проверка никогда не выполнится. Используйте &Перед или &После.ит_СуммаНалога, где ит — префикс вашей компании). Это поможет мгновенно отличить ваш код от типового.Перед тем как накатить обновление на рабочую базу, выполним следующие действия:
Подведем итог: для небольших доработок достаточно одного расширения. Если база активно развивается и доработок много — переходите на блочную структуру, группируя задачи по подсистемам или функциональным направлениям, и старайтесь избегать пересечения расширений по одним и тем же объектам метаданных.