Как организовать разработку в расширениях 1С: одно большое расширение или несколько?

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

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

Наш коллега, автор первого сообщения, поделился своим опытом, указывая на сложившуюся практику ведения разработки в разных расширениях, обычно под один объект конфигурации (например, документ) или под одну задачу (документ и необходимые справочники). Основным минусом такого подхода он считает невозможность разрабатывать отчеты, которым требуются данные из реквизитов, добавленных в разных расширениях. В связи с этим возникает вопрос: возможно, удобнее все доработки делать в одном расширении? Рассмотрим, какие плюсы и минусы имеет этот метод.

Преимущества и недостатки использования одного большого расширения

Когда мы принимаем решение о создании единого, большого расширения, мы централизуем все наши доработки в одном месте. Такой подход имеет свои особенности, которые мы подробно разберем.

Преимущества одного большого расширения:

  1. Простота для индивидуального разработчика: Если над проектом работает один человек, создание одного большого расширения часто оказывается наиболее удобным. Нам не нужно переключаться между разными расширениями, искать нужные объекты или функции в разных местах. Все находится под рукой, в одном дереве метаданных расширения, что значительно упрощает навигацию и разработку. Коллега в сообщении 5 подчеркивает: "Желательно делать в одном. Чтобы в других не искать объекты остальных расширений."
  2. Удобство разработки сквозных отчетов: Это одно из основных преимуществ, отмеченных автором темы. Когда все дополнительные реквизиты, документы и справочники находятся в одном расширении, нам значительно проще строить сложные отчеты, которые объединяют данные из разных источников. Мы можем легко задействовать добавленные реквизиты в общих запросах и схемах компоновки данных, не сталкиваясь с проблемами межрасширенческого взаимодействия, что является камнем преткновения при множестве расширений.
  3. Целостность функционала и отсутствие проблем с порядком отработки: В одном расширении мы видим весь массив доработок как единое целое. Это позволяет нам лучше контролировать связи между объектами и быть уверенными в порядке применения изменений. Коллега в сообщении 10 указывает: "Имхо, удобнее в одном расширении, ибо потом разбираться, какое расширение за каким отработало в одном и том же объекте - то еще удовольствие. Плюс увидеть весь массив доработок удобнее."
  4. Меньшее количество объектов в метаданных конфигурации: Хотя это не всегда критично, одно расширение, как правило, добавляет меньше служебных объектов в метаданные, чем множество мелких, что потенциально может немного сократить время загрузки конфигурации и уменьшить нагрузку на сервер 1С:Предприятия.

Недостатки одного большого расширения:

  1. Высокий риск полного отказа функционала при проблемах: Если в большом расширении после обновления типовой конфигурации обнаружится неявная проблема применения или ошибка в коде, весь функционал, реализованный в этом расширении, будет отключен или работать некорректно. Коллега в сообщении 7 отмечает: "Если после обновления обнаружится неявная проблема применения где-то в коде, то отключится весь функционал, а не отдельное расширение." Это требует тщательного и детального чек-листа после каждого обновления.
  2. Сложность выборочного отключения или изменения функционала: Если нам потребуется отключить лишь часть реализованного функционала (например, при глобальных обновлениях конфигурации или временной неактуальности), нам придется править и пересобирать все большое расширение. Мы не сможем просто отключить отдельный блок, как это возможно при использовании множества мелких расширений. Сообщение 7 подтверждает: "Чтобы отключить какой-то функционал, нужно будет править это одно расширение, а не просто отключить не нужное."
  3. Риск превращения в "неудобоваримого монстра": По мере роста проекта и увеличения количества доработок, одно большое расширение может стать крайне сложным для понимания, поддержки и развития. Коллега в сообщении 3 предупреждает: "Нет смысла делать всё в одном расширении, т.к. в конечном итоге получится неудобоваримый монстр." Поиск нужного кода или объекта в разросшемся расширении может стать трудоемкой задачей.
  4. Проблемы при совместной разработке: Если над проектом работает команда разработчиков, одно большое расширение может создать сложности. Параллельная работа нескольких специалистов над одним и тем же расширением неизбежно приведет к частым конфликтам при слиянии изменений, даже при использовании систем контроля версий. Это требует строгого распределения зон ответственности и может замедлять процесс.
  5. Потенциальные конфликты с типовой конфигурацией: Если в большом расширении не используются строгие правила именования (префиксы/суффиксы), есть риск коллизий с объектами типовой конфигурации при ее обновлениях или с другими расширениями, если они все же присутствуют.

Преимущества и недостатки использования множества расширений

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

Преимущества множества расширений:

  1. Модульность и автономность: Каждое расширение представляет собой законченный функциональный блок (сообщение 9). Это означает, что мы можем разрабатывать, тестировать, включать и отключать эти блоки независимо друг от друга. Если один блок вызывает проблемы, это не влияет на работоспособность других.
  2. Гибкость управления функционалом: Мы можем легко включать или отключать отдельные расширения через консоль администрирования 1С:Предприятия. Это особенно удобно для временного функционала, тестовых доработок или "горячих" исправлений (хотфиксов), которые могут быть удалены после применения в основной конфигурации или при выходе новой версии (сообщение 10).
  3. Удобство для командной разработки: При работе команды разработчиков, каждому специалисту можно назначить разработку в отдельном расширении или над разными, но связанными расширениями. Это минимизирует конфликты при слиянии кода и позволяет работать более параллельно и эффективно.
  4. Логическая группировка функционала: Мы можем создавать расширения по принципу одного объекта конфигурации (например, расширение для `Документа "ЗаказПокупателя"`) или по одной задаче (например, расширение для блока "Интеграция с внешним сервисом" или "Управление персоналом"). Автор темы сам отмечает, что так сложилось у них: "расширение под один объект конфигурации - документ наприер. Или под одну задачу - один документ и необходимые справочники." Коллега в сообщении 8 также рекомендует: "в одном расширении собирать логически связанные задачи."
  5. Улучшенная управляемость при обновлениях: Если проблема возникает в одном небольшом расширении после обновления типовой конфигурации, мы можем отключить только его, сохраняя работоспособность остальной системы. Это упрощает процесс тестирования и локализации ошибок.

Недостатки множества расширений:

  1. Сложность создания сквозных отчетов: Это основной минус, который автор темы выделил в своем сообщении. Разработка отчетов, которым нужны данные из реквизитов, добавленных в *разных* расширениях, становится значительно сложнее. Нам приходится прибегать к объединению данных из разных источников, что может быть громоздко и не всегда эффективно.
  2. Поиск объектов и функционала: При большом количестве расширений поиск нужного объекта, реквизита или алгоритма может превратиться в настоящую головоломку. Нам придется помнить, в каком именно расширении была сделана та или иная доработка, или использовать специализированные инструменты для поиска по метаданным всех расширений.
  3. Избыточное дробление и риск "зоопарка" расширений: Без строгих правил и дисциплины, количество расширений может выйти из-под контроля, превратив систему в "зоопарк". Коллега в сообщении 3 предупреждает: "Нет смысла делать всё в одном расширении, т.к. в конечном итоге получится неудобоваримый монстр". Это также относится к чрезмерному дроблению, когда функционал, который должен быть объединен, разнесен по разным расширениям. Сообщение 9 приводит негативный пример: "У нас в работе есть конфигурация, где в УТ в чек ккм заказ покупателя добавлен три раза. Удобно, ппц =)".
  4. Увеличение нагрузки на метаданные: Каждое расширение добавляет свои объекты в метаданные, что в совокупности может немного увеличить время загрузки конфигурации и занять дополнительную оперативную память. Однако для большинства сценариев это влияние незначительно.
  5. Риск конфликтов между расширениями: Если расширения не являются полностью независимыми и затрагивают одни и те же типовые объекты или алгоритмы, могут возникнуть конфликты при их одновременном применении. Например, два разных расширения могут изменить один и тот же обработчик события одного и того же объекта.

Ключевые рекомендации по организации разработки в расширениях 1С

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

  1. Придерживайтесь принципа логической связанности:

    Критически важно создавать расширения не просто так, а для реализации целостной функциональной подсистемы или группы логически связанных задач. Мы можем представить, что каждое расширение — это мини-конфигурация для определенного блока. Коллега в сообщении 8 предлагает стандартное решение: "в одном расширении собирать логически связанные задачи. Добавили документ и справочники, потом понадобятся отчеты, потом обработки ... К этим документам могут потом понадобиться еще документы или справочники."

    Рассмотрим пример: если мы добавляем новый `Документ` `ЗаказНаПроизводство` и связанные с ним `Справочники` `ВидыНоменклатурыДляПроизводства`, `ОперацииТехпроцесса`, а также `Отчеты` по этому документу и `Обработки` для его создания, то все это логично собрать в одно расширение под названием "ПроизводственныйЗаказ". Это позволит нам легко управлять этим блоком функционала.

  2. Избегайте избыточного дробления:

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

    Мы видим, как в сообщении 9 приводится пример "заказ покупателя добавлен три раза", что является следствием неконтролируемого дробления. Поэтому мы всегда стремимся к золотой середине между одним "монстром" и множеством "зоопарка".

  3. Организуйте разработку отчетов:

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

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

  4. Учитывайте влияние на обновления типовой конфигурации:

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

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

  5. Используйте префиксы и суффиксы для объектов:

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

    Например, если наше расширение называется "МояПодсистема", то новый реквизит в документе `ЗаказПокупателя` мы можем назвать `МП_ДополнительныйРеквизит`, а новую форму `ФормаДокументаМП_ЗаказПокупателя`.

  6. Применяйте системы контроля версий (СКВ):

    Для командной работы в 1С с расширениями крайне рекомендуется использовать системы контроля версий, такие как Git. Это позволяет нескольким разработчикам параллельно работать над одним расширением или над разными, но связанными расширениями, эффективно разрешать конфликты и отслеживать изменения. СКВ становится незаменимым инструментом для управления кодом и версиями расширений.

  7. Минимизируйте зависимости между расширениями:

    Старайтесь, чтобы ваши расширения были максимально независимы друг от друга. Если одно расширение изменяет объекты или данные, которые критически важны для другого, это может привести к трудноотлавливаемым ошибкам и сложностям при обновлении. Мы должны стремиться к тому, чтобы изменения в одном расширении как можно меньше влияли на другие.

  8. Рассмотрите разработку в основной конфигурации для крупных внедрений:

    Некоторые опытные коллеги предлагают, что для крупных внедрений, особенно если речь идет о существенных изменениях в ядре системы, возможно, предпочтительнее вести разработку непосредственно в основной конфигурации. Коллега в сообщении 6 прямо говорит: "А вообще, как правильно сказал коллега, крупное внедрение лучше вести в основной конфигурации". Этот подход имеет свои плюсы (полная интеграция, отсутствие ограничений расширений) и минусы (сложность обновления, поддержка типовых конфигураций), но его также стоит рассмотреть в зависимости от масштаба и специфики проекта.

  9. Оптимизация производительности:

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

Заключение

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

Итоговое решение всегда будет компромиссом между следующими аспектами:

  1. Удобством разработки и поддержки: Насколько легко будет найти нужный функционал, вносить изменения и исправлять ошибки.
  2. Масштабом проекта и количеством разработчиков: Для индивидуального разработчика и небольшого проекта одно расширение может быть оптимальным, для большой команды и сложного проекта — модульный подход с несколькими расширениями.
  3. Предполагаемой частотой обновлений типовой конфигурации: Чем чаще обновляется типовая конфигурация, тем важнее гибкость расширений и возможность их независимого тестирования и отключения.
  4. Требованиями к модульности и гибкости системы: Если требуется возможность быстрого включения/отключения отдельных блоков функционала, то множество расширений будет предпочтительнее.

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

← На главную