Как добавить регистр накопления в расширение 1С и исправить ошибки режима совместимости

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

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

Анализ проблемы и причин возникновения ошибок

Рассмотрим стандартную ситуацию: при попытке сохранить расширение с новым регистром накопления система выдает ошибку: "Использование регистров накопления в расширениях недопустимо в режиме совместимости 8.3.12 и ниже". Если же попытаться отключить режим совместимости, выставив значение Не использовать, конфигурация отказывается запускаться, ссылаясь на то, что текущий режим не поддерживается.

Выясним причину такого поведения. Платформа 1С начала поддерживать собственные объекты данных (документы, справочники, регистры) в расширениях постепенно. Полноценная и стабильная работа с регистрами накопления была реализована только начиная с версии платформы 8.3.15. Даже если ваша физическая платформа (клиент и сервер) имеет версию 8.3.13 или 8.3.14, программное ограничение режима совместимости основной конфигурации блокирует создание этих объектов.

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

Способ 1: Повышение режима совместимости до 8.3.15 и выше

Это наиболее правильный и современный метод, если вы обладаете правом изменять основную конфигурацию. Посмотрим, как это сделать:

  1. Откроем свойства основной конфигурации.
  2. Найдем параметр Режим совместимости.
  3. Установим значение 8.3.15 или выше (рекомендуется использовать версию, соответствующую вашей актуальной платформе).
  4. После изменения режима совместимости в основной конфигурации, аналогичное значение нужно установить в свойствах самого расширения.

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

Способ 2: Обход проверки БСП (Workaround)

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

Найдем в глобальном поиске процедуру, отвечающую за проверку режима совместимости. Чаще всего это метод в модуле СтандартныеПодсистемыСервер. Посмотрим на примерный код, который блокирует запуск:


Процедура ПроверитьСовместимостьРежима() Экспорт
    ТекущийРежим = Метаданные.РежимСовместимости;
    Если ТекущийРежим = РежимСовместимости.Версия8_3_12 Тогда
        Возврат; // Все хорошо
    Иначе
        ВызватьИсключение "Режим совместимости не поддерживается...";
    КонецЕсли;
КонецПроцедуры

Чтобы обойти это ограничение, мы можем воспользоваться тем же механизмом расширений. Создадим в нашем расширении метод &Вместо для этой процедуры или просто закомментируем вызов ВызватьИсключение в основной конфигурации (если она снята с поддержки). После этого система позволит запустить 1С:Предприятие с установленным режимом Не использовать.

Способ 3: Использование альтернативных объектов данных

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

Для реализации логики остатков через регистр сведений выполним следующие шаги:

  1. Создадим в расширении новый Регистр сведений.
  2. Добавим измерения (например, Номенклатура, Склад) и ресурсы (Количество).
  3. Логику вычисления остатков (приход минус расход) реализуем программно в модулях менеджера или в подписках на события документов.

Внимание: этот метод подходит только для систем с невысокой интенсивностью транзакций, так как регистры накопления работают на уровне СУБД эффективнее при расчете итогов.

Способ 4: Добавление объекта в основную конфигурацию

Рассмотрим наиболее стабильный с точки зрения хранения данных подход. Как отмечают опытные разработчики, хранение важных бизнес-данных в расширениях несет определенные риски. Если расширение будет случайно удалено, данные в созданных им таблицах физически удалятся из СУБД без возможности простого восстановления.

Выполним следующие действия для безопасной разработки:

  1. Добавим сам объект РегистрНакопления.НазваниеРегистра в основную конфигурацию. Это гарантирует сохранность данных при обновлении или отключении расширений.
  2. В расширении реализуем всю "обвязку": формы, отчеты, логику проведения документов и интерфейсные изменения.

Таким образом, мы разделяем структуру данных (основная конфигурация) и бизнес-логику (расширение), что является "золотым стандартом" при работе с типовыми решениями 1С.

Важные замечания по реструктуризации

Проанализируем поведение системы при обновлении. При добавлении регистров через расширение платформа создает в базе данных таблицы с именами вида _AccumRegX_ExtensionY. Важно помнить:

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

← На главную