Как внедрить подсистему «Анкетирование» из БСП в расширение конфигурации?

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

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

Анализ технической возможности переноса подсистемы

Технически перенос любой подсистемы (включая Анкетирование) из состава БСП в расширение возможен. Основной метод, который применяют разработчики — это копирование объектов метаданных из поставки БСП в дерево расширения. Однако в процессе реализации мы сталкиваемся с рядом критических проблем:

  1. Потеря типов реквизитов: При копировании объектов, имеющих ссылки на справочники, документы или Определяемые типы БСП, которые не были перенесены в расширение, платформа автоматически сбрасывает их тип на Строка.
  2. Зависимости типов: В расширениях на ранних версиях платформы 8.3.18 ограничена работа с Определяемыми типами. Это вынуждает перепроектировать структуру реквизитов на составные типы, что является трудоемкой и подверженной ошибкам задачей.
  3. Высокая связность: БСП — это монолитная библиотека. Подсистема Анкетирование тесно интегрирована с общими модулями, регламентными заданиями и формами, которые ожидают наличия глобальных объектов БСП в основной конфигурации.

Алгоритм действий при попытке переноса

Если вы твердо намерены перенести функционал, проанализируем последовательность шагов, которую необходимо выполнить:

Шаг 1: Оценка состава метаданных. Перед началом работы выявите все объекты, от которых зависит подсистема. Это не только справочники (например, ШаблоныАнкет), но и общие модули, в которых сосредоточена логика обработки событий.

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

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


// Пример логики, которую необходимо перепроверить в расширении
// Вместо использования типов БСП, убедитесь, что все ссылки 
// приведены к типам, доступным в рамках вашего расширения.
СправочникСсылка.ВашиСправочники = ...

Архитектурные риски и рекомендации

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

Риск обновлений: Механизмы БСП постоянно меняются. При обновлении платформы или основной конфигурации (особенно если БСП в ней обновится) ваше расширение с «выдранным» куском кода, вероятнее всего, потеряет работоспособность. Данные, накопленные в ваших объектах, могут оказаться «заблокированными» из-за нарушенной логики ссылочной целостности.

Рекомендация по разделению ответственности:

Вместо того чтобы «воровать» функционал из БСП, рассмотрим более надежный путь — создание собственного автономного расширения. Если ваша задача — сделать коммерческое решение, которое будет подключаться к разным конфигурациям, следуйте правилам:

Итоги

Внедрение подсистем БСП в расширение — это путь создания высокого технического долга. Если вам требуется реализовать сложный функционал (например, конструктор анкет), помните: копирование кода (Ctrl+C / Ctrl+V) — это только 10% работы. Остальные 90% — это бесконечная отладка взаимосвязей, которые были нарушены при извлечении модуля из его родной «экосистемы» БСП.

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

← На главную