Разработка и Конфигурация · 12 мин
Как изменить измерение регистра сведений в 1С без потери данных
Пошаговая инструкция по изменению измерений регистра сведений в 1С: риски потери данных, перенос записей, типовые ошибки и проверка результата.
Изменение измерения регистра сведений — одна из самых деликатных операций в конфигураторе 1С. Измерения формируют уникальный ключ записи регистра, поэтому их добавление, удаление или смена типа напрямую влияет на целостность уже накопленных данных. Неправильно выполненная реструктуризация способна очистить регистр полностью или вызвать ошибки уникальности при записи.
Типовые сценарии такой задачи: в регистр «Курсы валют» нужно добавить измерение «Источник», из подчинённого регистра убрать лишнее измерение «Организация», либо изменить тип измерения со строки на ссылку на справочник. Во всех случаях последовательность действий строится по одному принципу: сначала сохранить данные, затем изменить структуру, потом вернуть данные и проверить результат.
Ниже разобраны все способы изменения измерений: через конфигуратор с реструктуризацией, через перенос данных обработкой, а также вариант с созданием нового регистра, который часто оказывается безопаснее правки существующего.
Что такое измерение и почему его изменение опасно
Измерение — это разрез, в котором хранятся сведения регистра. Совокупность значений всех измерений (плюс период для периодических регистров и регистратор для подчинённых) образует уникальный ключ записи. Две записи с одинаковым набором значений измерений существовать не могут — платформа выдаст ошибку нарушения уникальности.
Из-за этого изменение состава измерений затрагивает саму физическую структуру таблицы в базе данных. При удалении измерения записи, которые различались только этим измерением, становятся дубликатами — и реструктуризация удаляет «лишние» строки. При добавлении измерения новое поле у существующих записей остаётся пустым, что может нарушить логику отчётов и запросов, рассчитанных на заполненное значение.
Оценка рисков перед изменением структуры
Прежде чем открывать конфигуратор, определите, к какому сценарию относится ваша задача. От этого зависит, сохранятся ли данные автоматически или потребуется ручной перенос.
Относительно безопасные операции — расширение длины строкового измерения и добавление нового измерения в пустой регистр. Опасные — удаление измерения, сужение длины строки, смена типа измерения на несовместимый (например, со строки на число или на ссылку другого справочника). В последних случаях реструктуризация либо обрежет данные, либо очистит колонку полностью.
Можно менять измерения напрямую в конфигураторе и выполнять реструктуризацию
Проверить, не появятся ли дубликаты ключей после удаления разреза
Убедиться, что старые значения приводятся к новому типу, иначе колонка будет очищена
Продумать, чем заполнить новое поле у существующих записей
Обязательно проверьте, где используется регистр: в запросах, отчётах, движениях документов, обменах данными. Поиск ссылок на объект в конфигураторе (правый клик по регистру → «Поиск ссылок на объект») покажет все места, которые сломаются после изменения структуры.
Подготовка: резервная копия и выгрузка данных
Первый шаг — снять резервную копию информационной базы. Для файловой базы достаточно скопировать файл 1Cv8.1CD при остановленной работе пользователей, для клиент-серверной — выполнить выгрузку в dt через конфигуратор (Файл → Сохранить копию) или средствами СУБД.
Второй шаг — сохранить сами записи регистра в промежуточное хранилище. Удобнее всего выгрузить данные в таблицу значений и сериализовать её, либо использовать типовую обработку «Выгрузка и загрузка данных XML» с диска ИТС, либо написать простую выгрузку в табличный документ или файл. Главное — зафиксировать значения всех текущих измерений, ресурсов и реквизитов каждой записи.
Если регистр большой (сотни тысяч записей), выгружайте порциями и контролируйте итоговое количество строк. Расхождение количества выгруженных записей с фактическим — первый сигнал, что перенос идёт неправильно.
Способ 1. Изменение измерения через конфигуратор
Прямой способ подходит, когда регистр пустой, либо когда изменение не разрушает данные (например, добавление измерения с последующим программным заполнением). Порядок действий стандартный.
- 1Откройте конфигуратор и сделайте резервную копию базы
- 2Найдите регистр сведений в дереве конфигурации и откройте его свойства
- 3На закладке «Данные» добавьте, удалите или измените нужное измерение, задайте тип и длину
- 4Сохраните конфигурацию (F7) и запустите обновление конфигурации базы данных
- 5В окне реструктуризации проверьте список изменений и подтвердите принятие
- 6После завершения откройте регистр в режиме предприятия и проверьте данные
Окно реструктуризации показывает, какие таблицы будут изменены. Если напротив регистра стоит операция удаления поля или смены типа — это сигнал внимательно оценить последствия. Платформа не предупредит отдельно о потере данных, она просто выполнит преобразование.
После добавления нового измерения заполните его у существующих записей. Это делается небольшой обработкой: создаётся набор записей регистра без отборов, в цикле проставляется значение нового измерения, набор записывается в режиме замещения.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Если Не ЗначениеЗаполнено(Запись.Организация) Тогда
Запись.Организация = Справочники.Организации.НайтиПоНаименованию("Основная организация");
КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать(Истина);Способ 2. Перенос данных через временный регистр или файл
Когда измерение удаляется или меняет тип, безопаснее работать по схеме «выгрузить — изменить — загрузить». Сначала данные выгружаются в файл или копируются во временный регистр сведений с идентичной структурой. Затем структура основного регистра меняется в конфигураторе, реструктуризация очищает или преобразует таблицу, и после этого данные загружаются обратно с преобразованием значений под новую структуру.
При загрузке важно контролировать уникальность ключей. Если из регистра удалено измерение «Склад», а в старых данных были записи, различавшиеся только складом, при загрузке возникнет конфликт. Решение — либо сворачивать такие записи (оставлять одну, например последнюю по периоду), либо отказаться от удаления измерения.
Удобный приём при удалении измерения: перед реструктуризацией выполните запрос, группирующий записи по остающимся измерениям, и посчитайте количество строк в каждой группе. Если где-то больше одной записи — именно эти данные потеряются или вызовут ошибку, и по ним нужно заранее принять решение.
Способ 3. Создание нового регистра вместо изменения старого
В ряде случаев правильнее не трогать существующий регистр, а создать рядом новый с нужным составом измерений, перенести в него данные обработкой и переключить на него все запросы, отчёты и модули. Старый регистр помечается как неиспользуемый и удаляется позже, когда новая схема проверена в работе.
Этот вариант безопаснее: исходные данные остаются нетронутыми до полного завершения миграции, и откат сводится к простому переключению кода обратно на старый регистр. Цена вопроса — необходимость править все места использования и поддерживать два объекта на переходный период.
Сравнение вариантов
Быстро, подходит для пустых регистров и безопасных изменений; риск потери данных при удалении измерений или смене типа
Универсально и надёжно, позволяет преобразовать значения; требует написания обработки и контроля уникальности
Максимально безопасно для рабочих баз, легко откатить; нужно переписывать все обращения к регистру
Проверка результата и типичные ошибки
После любого способа результат проверяется по трём направлениям: количество записей, корректность значений ключевых измерений и работоспособность функционала, который использует регистр. Сравните число записей до и после, откройте несколько записей вручную, выполните типовой отчёт или операцию, которая читает регистр.
Как проверить результат
Совпадает с количеством до изменения (или отличается на ожидаемую величину)
Записей заметно меньше — реструктуризация удалила часть данных
У всех записей поле заполнено осмысленным значением
Пустые значения там, где логика требует заполнения
Новые записи создаются и перезаписываются без ошибок
Ошибка уникальности ключа при записи
Отчёты формируются и дают те же итоги
Пустые отчёты или ошибки обращения к удалённому полю
Отдельная ошибка — изменение регистра, участвующего в планах обмена. После реструктуризации узлы обмена могут начать выгружать данные по новой структуре в базы, где она ещё старая. Синхронизируйте изменение конфигурации на всех узлах распределённой базы одновременно.
Ограничения и частные случаи
У периодических регистров сведений период входит в уникальный ключ, поэтому добавление измерения в такой регистр требует заполнения нового поля с учётом периодичности — иначе срезы последних будут работать некорректно. У регистров, подчинённых регистратору, измерения нельзя менять независимо от логики проведения документов: модуль проведения должен формировать движения по новой структуре.
Изменить состав измерений программно, в режиме предприятия, нельзя — структура метаданных меняется только в конфигураторе. Если нужна гибкая аналитика без правки конфигурации, рассмотрите хранение дополнительных разрезов в реквизитах регистра или в механизме дополнительных сведений, хотя поиск и отборы по ним будут медленнее, чем по измерениям.
Что важно запомнить
Измерения регистра сведений образуют уникальный ключ записи, поэтому их изменение всегда начинается с резервной копии и выгрузки данных. Безопасная схема: выгрузить записи, изменить структуру в конфигураторе, загрузить данные обратно с преобразованием и сверить количество записей. Для рабочих баз надёжнее создать новый регистр и мигрировать на него.
Частые вопросы
Пропадут ли данные, если добавить новое измерение в регистр сведений?
Сами записи не удалятся — реструктуризация добавит новую колонку, и у существующих записей она останется пустой. Однако запросы и отчёты, рассчитанные на заполненное значение, могут перестать находить эти записи, поэтому после добавления измерения его нужно заполнить обработкой.
Можно ли изменить тип измерения со строки на ссылку на справочник?
Технически можно, но при реструктуризации платформа не сможет преобразовать строки в ссылки и очистит колонку. Правильный путь: выгрузить данные, сопоставить строковые значения элементам справочника, изменить тип и загрузить данные обратно уже со ссылками.
Что произойдёт при удалении измерения, если записи начнут дублироваться?
При реструктуризации платформа оставит по одной записи на каждый уникальный набор оставшихся измерений, остальные будут удалены без предупреждения. Заранее выполните запрос с группировкой по остающимся измерениям, чтобы увидеть, какие именно данные будут потеряны.
Можно ли изменить измерения регистра без монопольного доступа?
Нет. Обновление конфигурации базы данных с реструктуризацией требует монопольного режима — все пользователи и фоновые сеансы должны быть завершены. В клиент-серверном варианте также нужно остановить регламентные задания на время обновления.
Как откатить изменение, если реструктуризация прошла с ошибкой?
Автоматического отката нет. Восстановление выполняется только из резервной копии, снятой до обновления. Именно поэтому копия базы и отработка процедуры на тестовой среде — обязательные этапы, а не рекомендация.
Чем измерение отличается от реквизита регистра сведений?
Измерение входит в уникальный ключ записи и участвует в идентификации строки, а реквизит — просто дополнительное поле, не влияющее на уникальность. Добавлять и удалять реквизиты безопаснее, но отборы и соединения по ним в запросах работают медленнее, чем по измерениям.