С какой версии платформы можно использовать регистры накопления в расширениях и как избежать потери данных?

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

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

Выясняем причину ошибки: режим совместимости и версия платформы

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

Разберем по шагам, почему возникает ошибка:

  1. Поддержка собственных объектов (включая регистры накопления) была официально реализована в платформе 8.3.13.
  2. Если в основной конфигурации установлен РежимСовместимости версии 8.3.12 или ниже, платформа блокирует использование новых механизмов, чтобы обеспечить стабильность работы старого кода.
  3. Расширение не может иметь режим совместимости "выше", чем у основной конфигурации в плане использования функциональных возможностей СУБД.

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

Как правильно изменить режим совместимости

Рассмотрим алгоритм действий, если вам жизненно необходим регистр накопления в расширении:

  1. Проверка основной конфигурации: Зайдите в свойства корневого узла основной конфигурации. Если там стоит 8.3.12, вам придется поднять этот режим. Важно: это действие может потребовать доработки существующего кода основной базы, так как изменение режима совместимости меняет поведение некоторых функций платформы.
  2. Настройка расширения: В свойствах расширения установите аналогичный режим совместимости или значение "Не использовать".
  3. Обновление конфигурации базы данных: После изменения режима совместимости в основной базе потребуется реструктуризация таблиц.

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

Анализируем риски: почему данные в расширении могут «потеряться»

Опытные разработчики часто предостерегают от использования регистров в расширениях, аргументируя это возможной потерей данных. Разберем подробнее, как устроено хранение данных расширений в СУБД (MS SQL, PostgreSQL и др.).

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

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

Альтернативное решение: перенос регистра в основную конфигурацию

Если данные регистра критически важны (например, это финансовый учет), рассмотрим более безопасный вариант работы с конфигурацией на поддержке:

  1. Снимите основную конфигурацию с поддержки с сохранением возможности обновления (установите «замок» в состояние «Редактируется с сохранением поддержки»).
  2. Добавьте необходимый РегистрНакопления непосредственно в основную конфигурацию. Это гарантирует, что таблицы данных будут защищены стандартными механизмами платформы и не исчезнут при манипуляциях с расширениями.
  3. Всю логику проведения документов, заполнения движений и формирования отчетов вынесите в расширение.

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

Особенности работы регистраторов в расширениях

При использовании регистров накопления в расширениях важно понимать, кто может выступать в роли регистратора (документа, делающего движения). Рассмотрим доступные варианты:

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


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

Ограничения и производительность

Выясним, какие еще нюансы существуют при работе с итогами регистров в расширениях:

Рекомендации по стабильности

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

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

← На главную