При разработке расширений для типовых конфигураций (например, Бухгалтерия предприятия 3.0) программисты часто сталкиваются с необходимостью добавить собственные объекты данных, такие как регистры накопления. Однако этот процесс сопряжен с рядом ограничений платформы и встроенных механизмов защиты Библиотеки стандартных подсистем (БСП). Разберем пошагово, почему возникают ошибки совместимости и как правильно реализовать задачу.
Рассмотрим стандартную ситуацию: при попытке сохранить расширение с новым регистром накопления система выдает ошибку: "Использование регистров накопления в расширениях недопустимо в режиме совместимости 8.3.12 и ниже". Если же попытаться отключить режим совместимости, выставив значение Не использовать, конфигурация отказывается запускаться, ссылаясь на то, что текущий режим не поддерживается.
Выясним причину такого поведения. Платформа 1С начала поддерживать собственные объекты данных (документы, справочники, регистры) в расширениях постепенно. Полноценная и стабильная работа с регистрами накопления была реализована только начиная с версии платформы 8.3.15. Даже если ваша физическая платформа (клиент и сервер) имеет версию 8.3.13 или 8.3.14, программное ограничение режима совместимости основной конфигурации блокирует создание этих объектов.
Проанализируем вторую ошибку при отключении совместимости. Типовые конфигурации построены на базе БСП. В коде этой библиотеки (обычно в модуле СтандартныеПодсистемыСервер) зашиты проверки, которые при старте системы сверяют текущий режим совместимости с эталонным. Если разработчик меняет это свойство в конфигураторе, программный код выбрасывает исключение, предотвращая запуск в "непротестированной" среде.
Это наиболее правильный и современный метод, если вы обладаете правом изменять основную конфигурацию. Посмотрим, как это сделать:
Режим совместимости.Важный момент: повышение режима совместимости всей конфигурации может повлечь за собой необходимость адаптации существующего кода (например, изменение логики работы с модальными окнами или асинхронными вызовами). Поэтому после этого шага необходимо провести полное тестирование системы.
Если вам критически важно оставить режим совместимости Не использовать или выбрать версию, отличную от стандартной, придется вмешаться в механизмы самодиагностики конфигурации. Разберем, как нейтрализовать проверку в коде:
Найдем в глобальном поиске процедуру, отвечающую за проверку режима совместимости. Чаще всего это метод в модуле СтандартныеПодсистемыСервер. Посмотрим на примерный код, который блокирует запуск:
Процедура ПроверитьСовместимостьРежима() Экспорт
ТекущийРежим = Метаданные.РежимСовместимости;
Если ТекущийРежим = РежимСовместимости.Версия8_3_12 Тогда
Возврат; // Все хорошо
Иначе
ВызватьИсключение "Режим совместимости не поддерживается...";
КонецЕсли;
КонецПроцедуры
Чтобы обойти это ограничение, мы можем воспользоваться тем же механизмом расширений. Создадим в нашем расширении метод &Вместо для этой процедуры или просто закомментируем вызов ВызватьИсключение в основной конфигурации (если она снята с поддержки). После этого система позволит запустить 1С:Предприятие с установленным режимом Не использовать.
Если изменение режима совместимости невозможно или слишком рискованно, проанализируем архитектурную альтернативу. Рассмотрим использование регистров сведений вместо регистров накопления. Регистры сведений поддерживаются в расширениях гораздо дольше и имеют меньше ограничений по режимам совместимости.
Для реализации логики остатков через регистр сведений выполним следующие шаги:
Номенклатура, Склад) и ресурсы (Количество).Внимание: этот метод подходит только для систем с невысокой интенсивностью транзакций, так как регистры накопления работают на уровне СУБД эффективнее при расчете итогов.
Рассмотрим наиболее стабильный с точки зрения хранения данных подход. Как отмечают опытные разработчики, хранение важных бизнес-данных в расширениях несет определенные риски. Если расширение будет случайно удалено, данные в созданных им таблицах физически удалятся из СУБД без возможности простого восстановления.
Выполним следующие действия для безопасной разработки:
РегистрНакопления.НазваниеРегистра в основную конфигурацию. Это гарантирует сохранность данных при обновлении или отключении расширений.Таким образом, мы разделяем структуру данных (основная конфигурация) и бизнес-логику (расширение), что является "золотым стандартом" при работе с типовыми решениями 1С.
Проанализируем поведение системы при обновлении. При добавлении регистров через расширение платформа создает в базе данных таблицы с именами вида _AccumRegX_ExtensionY. Важно помнить:
Подводя итог, можно сказать: если ваша версия БСП и платформы позволяет, лучшим решением будет плавное повышение режима совместимости до 8.3.15. Если же вы ограничены жесткими рамками поддержки, используйте добавление регистра в основную конфигурацию, вынося в расширение только программный код.