Как правильно создать новый документ в конфигурации 1С: в основной конфигурации или через расширение?

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

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

Анализ ситуации: Почему возникает дилемма?

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

Риски хранения данных в расширениях

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

  1. Физическое удаление таблиц: Если по какой-то причине расширение будет удалено из базы (случайно администратором или из-за критического сбоя), все таблицы в СУБД, созданные этим расширением, будут безвозвратно удалены вместе с данными. В отличие от основной конфигурации, где удаление объекта требует предварительного удаления ссылок и выполнения реструктуризации с подтверждением, расширение удаляется «легким движением руки».
  2. Проблемы реструктуризации: При обновлении основной конфигурации могут возникнуть конфликты с метаданными расширения. Если платформа не сможет разрешить конфликт типов, она может потребовать отключения расширения для запуска системы, что опять же ставит под угрозу доступность данных.
  3. Сложность резервного копирования: Хотя данные расширений хранятся в той же базе, манипуляции с ними (например, перенос в другую базу через выгрузку/загрузку расширения) не переносят сами записи документов, только структуру.

Технические сложности при заимствовании объектов

Выясним, почему при попытке скопировать существующий документ «Счет на оплату» в расширение возникают ошибки. Рассмотрим основные причины:

  1. Общие реквизиты: В типовых решениях (особенно в BAS и БП 3.0) многие документы включены в состав общих реквизитов, таких как ОбластьДанныхОсновныеДанные или Организация. Расширения имеют жесткие ограничения на работу с общими реквизитами, которые являются разделителями данных. Если вы заимствуете объект, который «привязан» к разделителю, расширение может войти в конфликт с правилами разделения данных платформы.
  2. Цепочка зависимостей: Документ «Счет» ссылается на справочники, перечисления, определяемые типы и планы видов характеристик. Чтобы создать полноценный клон в расширении, вам придется «затянуть» туда (заимствовать) добрую половину метаданных конфигурации. Это приводит к «раздуванию» расширения, замедлению запуска сеанса и высокому потреблению оперативной памяти.
  3. Типы данных и характеристики: Как было отмечено в обсуждении, работа с Характеристиками и сложными типами в расширениях часто работает нестабильно, особенно если в основной конфигурации используется режим совместимости ниже 8.3.12.

Метод 1: Доработка в основной конфигурации

Этот метод считается классическим и наиболее надежным для создания новых объектов учета. Проанализируем последовательность действий:

  1. Снимем конфигурацию с поддержки с сохранением возможности обновления (режим «Объект поставщика редактируется с сохранением поддержки»).
  2. Создадим новый документ ЗаказПокупателя в основной конфигурации.
  3. Добавим необходимые реквизиты и табличные части.

Преимущества: Данные защищены стандартными механизмами платформы. Объект виден всем программистам, нет путаницы с тем, «где искать данные». Легко настраиваются права доступа и нумерация.

Недостатки: Немного усложняется процесс обновления, так как дерево конфигурации теперь содержит кастомные объекты.

Метод 2: Гибридный подход (Рекомендовано)

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

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

Шаг 2: Реализация логики в расширении.
Заимствуем созданный документ в расширение. Здесь мы уже создаем формы, команды, пишем обработчики событий. Рассмотрим пример кода в модуле расширения для обработки проведения нашего нового документа:


&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
    // Здесь пишем логику проведения, специфичную для Заказа
    РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
    // Дополнительные расчеты
КонецПроцедуры

Шаг 3: Связь с типовыми объектами.
Если нам нужно, чтобы «Заказ» создавался на основании типового «Счета», мы заимствуем процедуру ОбработкаЗаполнения в расширение и добавляем логику копирования данных из счета в заказ.

Рекомендации по реализации интерфейса

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

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

Итоги и выводы

Проанализировав все способы, можно сделать следующие выводы для качественной разработки:

  1. Для хранения важных данных: Используйте основную конфигурацию. Это гарантирует, что ваши «Заказы» не исчезнут после случайного удаления расширения или неудачного обновления платформы.
  2. Для бизнес-логики: Используйте расширения. Это позволит быстро вносить изменения в алгоритмы, менять формы и добавлять новые отчеты, не затрагивая ядро системы.
  3. Для интеграции: Если конфигурация (например, BAS PROF) поддерживает современные механизмы расширений, используйте аннотации &Перед, &После и &Вместо (с осторожностью) для изменения поведения типовых механизмов создания на основании.

Таким образом, создание нового документа «Заказ» лучше всего реализовать через добавление пустого объекта в основную конфигурацию с последующим «наполнением» его функционалом через расширение. Это обеспечит баланс между безопасностью данных и удобством поддержки системы.

← На главную