Регистры сведений в 1С:Предприятие — это один из ключевых объектов конфигурации, который хранит данные с привязкой к нескольким измерениям (аналогично полям в базе данных). Но что делать, если бизнес-процессы изменились, и требуется модифицировать структуру существующего регистра? Изменение измерений — задача нетривиальная: она затрагивает не только саму конфигурацию, но и данные, отчеты, а иногда и производительность системы.

Многие разработчики сталкиваются с дилеммой: редактировать регистр вручную через конфигуратор или писать миграционные скрипты. Ошибки здесь чреваты потерей данных, нарушением целостности или даже "падением" базы при обновлении. В этой статье мы разберем все способы изменения измерений — от простых до сложных, с учетом нюансов разных версий платформы 1С 8.3 и 1С 8.2. Особое внимание уделим безопасным методам, которые минимизируют риски для рабочей базы.

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

📊 Какой тип регистра сведений вы чаще всего модифицируете?
Периодический
Непериодический
Подчиненный документам
Связанный с планом видов характеристик

1. Подготовка к изменению измерения: анализ структуры и данных

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

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

Особое внимание уделите связям регистра с другими объектами:

  • 🔄 Регламентные задания, которые записывают данные в регистр (например, расчет себестоимости или закрытие месяца).
  • 📊 Отчеты, где регистр используется как источник данных (например, Анализ субконто или Обороты между субконто).
  • 🔗 Обмены данными (если регистр участвует в интеграции с другими системами).

Если регистр периодический, проверьте, не используется ли он в механизме виртуальных таблиц (например, Обороты или Остатки). Изменение измерений может привести к ошибкам в существующих запросах.

💡

Используйте обработку "Анализ использования объектов" (доступна в некоторых тиражных решениях), чтобы быстро найти все места, где задействован регистр.

2. Способы изменения измерений в конфигураторе

Самый очевидный способ — редактирование регистра непосредственно в конфигураторе. Однако здесь есть несколько нюансов:

Добавление нового измерения:

  1. Откройте регистр сведений в дереве конфигурации (раздел Общие → Регистры сведений).
  2. Перейдите на вкладку Данные и нажмите Добавить в разделе Измерения.
  3. Задайте имя, тип (например, СправочникСсылка.Номенклатура) и свойства (индексирование, обязательность).

Удаление или переименование измерения требует осторожности:

  • 🚫 При удалении измерения предложит удалить все данные регистра — это необратимое действие!
  • 🔄 При переименовании проверьте, не используется ли старое имя в коде (например, в запросах или программных модулях).

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

Что произойдет если удалить измерение без резервной копии?

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

3. Программное изменение измерений: когда без кода не обойтись

В некоторых случаях редактирование через конфигуратор невозможно или нежелательно. Например:

  • 🔧 Нужно изменить измерение в тиражном решении без снятия с поддержки.
  • 📦 Требуется миграция данных из старого измерения в новое.
  • 🔄 Необходимо автоматизировать изменения для множества баз.

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

Процедура ДобавитьИзмерениеВРегистр()

Регистр = Метаданные.РегистрыСведений.НужныйРегистр;

НовоеИзмерение = Регистр.Измерения.Добавить();

НовоеИзмерение.Имя = "НовоеИзмерение";

НовоеИзмерение.Тип = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");

НовоеИзмерение.Индексировать = Истина;

КонецПроцедуры

Критический нюанс: при программном изменении структуры регистра не обновляет автоматически существующие данные. Их придется переносить отдельным скриптом.

Для миграции данных между измерениями можно использовать запрос:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НужныйРегистр.Период КАК Период,

| НужныйРегистр.СтароеИзмерение КАК Контрагент,

| НужныйРегистр.Ресурс1 КАК Сумма

|ИЗ

| РегистрСведений.НужныйРегистр КАК НужныйРегистр";

Результат = Запрос.Выполнить();

Пока Результат.Следующий() Цикл

НоваяЗапись = РегистрыСведений.НужныйРегистр.СоздатьМенеджерЗаписи();

НоваяЗапись.Период = Результат.Период;

НоваяЗапись.НовоеИзмерение = Результат.Контрагент; // Перенос данных

НоваяЗапись.Ресурс1 = Результат.Сумма;

НоваяЗапись.Записать();

КонецЦикла;

Сделать резервную копию базы|

Проверить права доступа (полные права на конфигурацию)|

Отключить регламентные задания|

Протестировать скрипт на копии базы|

Подготовить план отката на случай ошибок-->

4. Типичные ошибки и как их избежать

Даже опытные разработчики иногда сталкиваются с проблемами при изменении измерений. Вот самые распространенные:

Ошибка Причина Решение
Ошибка блокировки при записи Длинные транзакции при изменении больших регистров Разбивать миграцию на пакеты по 1000 записей
Нарушение уникальности Дубли в новом измерении после переноса данных Предварительно очищать целевой регистр
Падение производительности Отсутствие индексов на новых измерениях Включить индексирование для часто используемых полей
Ошибки в отчетах Не обновлены запросы в отчетах после изменения структуры Использовать пседонимы полей для совместимости

Особенно опасна ситуация, когда изменяется тип измерения (например, со Строка на СправочникСсылка). В этом случае:

  1. Создайте новое измерение с нужным типом.
  2. Перенесите данные через обработку, преобразуя значения (например, строку в ссылку на справочник).
  3. Удалите старое измерение только после проверки корректности новых данных.
💡

Если регистр используется в механизме бухгалтерского учета (например, для субконто), изменение измерений может потребовать перепроведения документов. Проверьте это заранее на тестовой базе.

5. Особенности для разных версий платформы 1С

Алгоритм изменения измерений может отличаться в зависимости от версии 1С:Предприятие:

1С 8.3 (управляемые формы):

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

1С 8.2 (обычные формы):

  • 🔹 Требует полного обновления конфигурации при изменении структуры регистра.
  • 🔹 Нет встроенных инструментов для миграции данных — нужно писать обработки.
  • 🔹 Изменение измерений может привести к несовместимости с клиент-серверным вариантом.

В 1С 8.3.20+ появилась возможность изменять структуру регистров в режиме предприятия через механизм динамических списков, но это не заменяет полноценное редактирование в конфигураторе.

💡

В версиях 1С 8.3.18+ при добавлении измерения к периодическому регистру с большим объемом данных рекомендуется использовать флаг "Отложенное выполнение" для миграционных скриптов.

6. Оптимизация производительности после изменения измерений

Изменение структуры регистра сведений может существенно повлиять на скорость работы системы. Вот что нужно сделать для оптимизации:

Индексирование:

  • 📈 Добавьте индексы на новые измерения, если они будут использоваться в ГДЕ или СГРУППИРОВАТЬ ПО.
  • 🔍 Проверьте планы выполнения запросов — иногда не оптимально использует индексы.

Перестроение таблиц:

После массовых изменений выполните перестроение таблиц базы данных:

ТестовыйРежим = Истина;

ПерестроитьИндексыТаблицБазыДанных();

ТестовыйРежим = Ложь;

Архивация данных:

Если регистр стал слишком большим, рассмотрите возможность:

  • 🗃️ Переноса старых данных в архивный регистр.
  • 🧹 Очистки устаревших записей (например, старше 5 лет).

Для периодических регистров с высокой нагрузкой можно использовать разделение по периодам (например, текущий год и архив).

Как ускорить работу с регистром после добавления измерения?

1. Выполните ПЕРЕСЧИТАТЬ ИНДЕКСЫ для таблиц базы данных.

2. Проверьте, не используются ли в запросах конструкции ПОДОБНО или НАЧИНАЕТСЯ С — они тормозят работу.

3. Рассмотрите возможность денормализации данных, если регистр участвует в сложных отчетах.

7. Альтернативные подходы: когда изменять измерения не нужно

Иногда модификация регистра — не лучшее решение. Рассмотрите альтернативы:

Использование реквизитов:

Если новое "измерение" нужно только для хранения дополнительной информации, возможно, достаточно добавить реквизит к регистру (вкладка Реквизиты в конфигураторе). Это не затрагивает структуру данных.

Создание нового регистра:

Если логика работы кардинально изменилась, иногда проще:

  1. Создать новый регистр с нужной структурой.
  2. Перенести данные из старого регистра.
  3. Постепенно заменить использование старого регистра на новый в коде.

Использование планов видов характеристик (ПВХ):

Если измерение должно быть гибким (например, набор произвольных свойств), рассмотрите ПВХ вместо жесткой структуры регистра.

💡

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

Часто задаваемые вопросы

Можно ли изменить тип измерения с "Строка" на "СправочникСсылка" без потери данных?

Нет, прямое изменение типа измерения приведет к потере данных. Нужно:

  1. Создать новое измерение нужного типа.
  2. Написать обработку для переноса данных (преобразовав строки в ссылки на справочник).
  3. Удалить старое измерение после проверки.

Если строки не соответствуют элементам справочника, потребуется ручная корректировка или создание новых элементов.

Как изменить измерение в регистре, который используется в бухгалтерских отчетах?

Для регистров, задействованных в бухгалтерии (например, регистр бухгалтерии или регистр накопления), алгоритм такой:

  1. Проверьте, не используется ли измерение как субконто в плане счетов.
  2. Если используется, сначала измените настройки плана счетов.
  3. Выполните изменение измерения в нерабочее время.
  4. После изменения перепроведите документы за текущий период.

В некоторых случаях потребуется пересчет итогов (через Операции → Закрытие месяца → Пересчет итогов).

Что делать, если после изменения измерения перестали работать отчеты?

Проблема обычно в том, что в запросах отчетов используются прямые ссылки на поля. Решения:

  • Используйте пседонимы полей в запросах (например, Выборка.Поле1 КАК СтароеНазвание).
  • Обновите тексты запросов в отчетах (через конфигуратор или расширение).
  • Проверьте, не сбились ли настройки условного оформления в отчете.

Если отчет типовой, возможно, проще восстановить его из шаблона и заново настроить.

Как изменить измерение в регистре, который используется в обмене данными?

В этом случае порядок действий такой:

  1. Приостановите обмен данными на время изменений.
  2. Измените структуру регистра.
  3. Обновите правила обмена (если измерение участвует в синхронизации).
  4. Выполните первоначальную выгрузку измененных данных.
  5. Возобновите обмен и проверьте корректность синхронизации.

Если обмен настраивался через Универсальный формат обмена, возможно, потребуется изменить XDTO-пакеты.

Можно ли изменить измерение в регистре сведений без снятия конфигурации с поддержки?

Да, для этого используйте механизм расширений конфигурации:

  1. Создайте новое расширение (Файл → Новое → Расширение конфигурации).
  2. Добавьте в него измененный регистр сведений (копию оригинального).
  3. Модифицируйте измерения в расширении.
  4. Напишите обработку для переноса данных (если нужно).

Такой подход сохраняет поддержку тиражного решения, но требует аккуратности при обновлениях.

💡

Изменение измерений в регистрах сведений — это всегда компромисс между гибкостью системы и стабильностью. Всегда тестируйте изменения на копии базы и готовьте план отката.