Современные типовые конфигурации 1С, такие как Бухгалтерия предприятия или ERP Управление предприятием, постепенно становятся перенасыщенными функционалом, который необходим лишь узкому кругу пользователей. Интеграции с государственными системами (ЕГАИС, ВетИС, «Честный знак») занимают значительный объем кода и ресурсов системы. В связи с этим возникает вопрос: насколько реально вынести эти блоки в расширения, чтобы сделать основную конфигурацию легче и маневреннее? Рассмотрим эту проблему детально, проанализируем технические риски и выберем оптимальную стратегию разработки.
Проанализируем текущую ситуацию. Многие разработчики отмечают, что типовые конфигурации становятся все более тяжеловесными. Включение в состав 1С:Бухгалтерии модулей для учета алкоголя или ветеринарных свидетельств оправдано для 1-5% пользователей, но нагрузку (в виде усложнения структуры метаданных и увеличения времени загрузки) несут все. На сегодняшний день существует два основных взгляда на развитие:
Одним из самых важных вопросов при переводе тяжелых систем (таких как ВетИС) в расширение является скорость выполнения кода. Выясним, насколько расширения медленнее основной конфигурации. Опираясь на замеры производительности, представленные специалистами, мы можем увидеть следующую картину при выполнении длительных итерационных циклов:
Проанализируем эти цифры: использование расширения дает замедление примерно на 25%. Для многих бизнес-процессов это не критично, однако в высоконагруженных системах с огромным количеством документов (например, при массовом гашении ВСД в ВетИС) это может стать узким местом. Тем не менее, с выходом новых версий платформы (8.3.15+) механизмы компиляции модулей расширений постоянно оптимизируются.
Разберем, как технически реализовать такой переход. Долгое время расширения не позволяли создавать собственные объекты данных (справочники, документы). Однако в актуальных версиях платформы 1С:Предприятие 8.3 эта возможность появилась. Теперь мы можем:
Активно для быстрого отключения модуля без потери данных в БД.Важно помнить про Функциональные опции (ФО). В типовых решениях модули госсистем уже скрыты за ФО. Если функционал не используется, пользователь его не видит, но код все равно присутствует в конфигурации. Перевод в расширение позволит физически удалить этот код из основной базы тех клиентов, кому он не нужен.
Самый острый вопрос в использовании расширений — это поддержка при обновлениях. Рассмотрим, как правильно модифицировать типовой функционал, не превращая поддержку в кошмар. Основная ошибка — злоупотребление аннотацией &Вместо.
Если мы копируем весь типовой метод в расширение через &Вместо, мы создаем дублирование кода. При обновлении типовой конфигурации вендор может изменить логику этого метода, и наше расширение либо перестанет работать, либо будет возвращать старые ошибки. Проанализируем правильный подход:
&Перед и &После. Это позволяет добавить свою логику, не заменяя основной алгоритм.&Вместо не обойтись, минимизируйте объем кода внутри расширения, вынося основную логику в отдельные модули самого расширения.Рассмотрим пример правильного расширения процедуры проведения документа:
&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
// Добавляем специфическую логику ВетИС, не трогая основной код
Если Не Отказ И ПолучитьФункциональнуюОпцию("ИспользоватьИнтеграциюВетИС") Тогда
МодульИнтеграцииВетИС.СформироватьЗаявкуНаВСД(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
Выясним, к чему идет стратегия фирмы «1С». Постепенно внедряется понятие «Библиотечной архитектуры». Библиотека интеграции с государственными системами (БИС) уже является обособленным блоком. Перевод таких библиотек в формат расширений — логичный шаг для упрощения обновлений.
Для разработчиков отраслевых решений это открывает новые горизонты. Вместо того чтобы выпускать огромную конфигурацию «Бухгалтерия сельскохозяйственного предприятия», можно выпускать расширение для типовой БП. Это позволит:
Подводя итог нашему анализу, можно сказать: перевод тяжелых модулей в расширения — это реальный и перспективный путь. Несмотря на небольшое снижение производительности, выигрыш в гибкости и простоте поддержки перекрывает этот минус.
Основные выводы для программиста:
&Перед и &После, чтобы избежать проблем при сравнении и объединении модулей при обновлении.