Как вернуть конфигурацию 1С «на замок» и исправить ошибку неуникальности записей регистра

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

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

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

Зачем возвращать конфигурацию «на замок»?

Когда в настройках поддержки включена возможность изменения, база данных переходит в режим частичного или полного редактирования. Даже если физически в код и объекты метаданных не вносилось никаких изменений, сам факт «снятого замка» накладывает ряд ограничений и неудобств:

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

---

Часть 1. Три способа возврата конфигурации в типовое состояние

Рассмотрим по шагам основные варианты решения задачи в зависимости от текущего состояния вашей информационной базы.

Способ 1. Загрузка чистого файла конфигурации (классический метод)

Этот способ является самым простым и быстрым, если в базе данных гарантированно нет пользовательских доработок кода или метаданных, которые вам необходимо сохранить. Нам потребуется файл конфигурации поставщика 1cv8.cf именно той версии (релиза), которая сейчас установлена у вас.

Выполним следующие шаги:

  1. Обязательно создайте резервную копию базы данных (файловый вариант копируем физически, для клиент-серверного делаем бэкап средствами СУБД или выгрузку .dt).
  2. Скачайте официальный дистрибутив вашей версии конфигурации с портала обновлений 1С и распакуйте его, чтобы получить чистый файл 1cv8.cf.
  3. Откройте базу данных в режиме Конфигуратор.
  4. Перейдите в меню Конфигурация — Загрузить конфигурацию из файла....
  5. Выберите ранее подготовленный файл 1cv8.cf вашей версии и подтвердите загрузку.
  6. После завершения процесса платформа предложит обновить конфигурацию базы данных. Нажмите «Да» и примите изменения (клавиша F7).

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

Способ 2. Снятие с поддержки и последующее объединение (безопасный метод)

Иногда прямая загрузка файла .cf может вызывать сбои или ошибки реструктуризации СУБД. Существует более «мягкий» и контролируемый способ, который заставляет платформу заново пересчитать все связи метаданных.

Инструкция по шагам:

  1. Откройте Конфигуратор и перейдите в меню Конфигурация — Поддержка — Настройка поддержки.
  2. В открывшемся окне нажмите кнопку Снять с поддержки. Подтвердите действие. Теперь конфигурация считается полностью кастомной.
  3. Перейдите в меню Конфигурация — Сравнить, объединить с конфигурацией из файла.... Выберите ваш чистый файл 1cv8.cf.
  4. Платформа обнаружит, что загружаемый файл находится на поддержке, а текущая конфигурация — нет. Система выдаст предупреждение: «Конфигурация не находится на поддержке. Поставить на поддержку?». Нажмите «Да».
  5. В окне сравнения и объединения оставьте все флажки включенными по умолчанию (так как мы накатываем идентичную чистую конфигурацию) и нажмите кнопку Выполнить.
  6. Примените изменения базы данных клавишей F7.

Способ 3. Перенос изменений в Расширения (современный стандарт разработки)

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

Разберем данный подход:

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

---

Часть 2. Ошибка «Записи регистра сведений стали неуникальными» — глубокий анализ

Очень часто при попытке загрузить чистый cf-файл (или при рядовом обновлении конфигурации) процесс прерывается критической ошибкой: «Записи регистра сведений стали неуникальными». Давайте проанализируем, почему это происходит и как решить проблему системно.

Причина возникновения ошибки

Данные в регистрах сведений 1С хранятся в жестком разрезе ключевых полей — Измерений. Платформа на уровне СУБД накладывает строгий индекс уникальности: в базе не может существовать двух строк, у которых совпадает абсолютно весь набор измерений.

Ошибка неуникальности при реструктуризации возникает в двух основных случаях:

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

    Пример: В вашей текущей базе в регистре СостоянияОбменовДанными есть две записи:

    • [Узел_А, Действие_Выгрузка]
    • [Узел_А, Действие_Загрузка]

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

  2. Пропуск обновлений («прыжок через релизы»): Если вы пытаетесь обновить базу сразу на много релизов вперед, минуя промежуточные. В промежуточных версиях разработчики обычно встраивают специальные обработчики обновления, которые запускаются при первом старте системы в режиме «Предприятие». Эти обработчики программно обходят спорные регистры, корректно сворачивают дубли или переносят устаревшие данные в новые структуры. Загружая финальный cf напрямую, вы лишаете систему возможности запустить эти обработчики, из-за чего реструктуризация ломается «наживую».

---

Часть 3. Способы устранения ошибки неуникальности

Выяснив причину проблемы, рассмотрим пошагово методы её локализации и исправления.

Шаг 1. Первичная диагностика базы данных

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

  1. Запустите утилиту chdbfl.exe (она находится в папке bin установленной платформы 1С) и проверьте файл базы данных на наличие физических повреждений.
  2. Выполните процедуру Тестирования и исправления (меню Администрирование — Тестирование и исправление...). Обязательно выберите пункты «Реиндексация таблиц» и «Проверка логической целостности».

Шаг 2. Ручное удаление дублирующихся записей

В тексте ошибки платформа всегда четко указывает имя проблемного регистра сведений (например, НастройкиТранспортаОбмена или СостоянияОбменовДанными) и значения ключевых полей, которые вызывают конфликт.

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

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

Для быстрой программной очистки всего регистра сведений (если его данные можно заполнить заново позже) вы можете запустить в режиме «Предприятие» короткий код:


НаборЗаписей = РегистрыСведений.НастройкиТранспортаОбмена.СоздатьНаборЗаписей();
// Если регистр подчинен регистратору, необходимо установить отбор по регистратору
// НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Записать(); // Запись пустого набора очищает данные в БД

Шаг 3. Метод временного экспорта данных (для сохранения важной информации)

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

Разберем алгоритм по шагам:

  1. Используйте стандартную обработку «Выгрузка и загрузка данных XML» (ее можно найти на диске ИТС или официальных ресурсах поддержки).
  2. Выберите проблемный регистр сведений и выгрузите все его записи во внешний XML-файл.
  3. Полностью очистите этот регистр в вашей текущей информационной базе программным путем (как показано на примере кода выше).
  4. Запустите Конфигуратор и успешно выполните загрузку конфигурации поставщика 1cv8.cf. Поскольку регистр пуст, реструктуризация пройдет без ошибок, и новая структура таблиц успешно применится.
  5. Запустите систему в режиме «1С:Предприятие» и снова откройте обработку «Выгрузка и загрузка данных XML».
  6. Загрузите ранее сохраненные данные из XML-файла обратно. Механизм платформы при импорте автоматически пропустит дублирующиеся ключи в соответствии с новой структурой или предложит правила их перезаписи, сохранив целостность вашей базы данных.

Шаг 4. Очистка на уровне СУБД (для клиент-серверных баз SQL)

В крупных клиент-серверных базах данных (под управлением MS SQL, PostgreSQL) иногда возникает ситуация, когда стандартные средства 1С не видят дублирующих записей из-за кэширования или повреждения внутренних индексов, но СУБД при попытке применить новый уникальный индекс (Unique Index) продолжает выдавать ошибку реструктуризации.

В таком случае системные администраторы СУБД могут решить проблему напрямую через SQL-запросы:

  1. Определите имя физической таблицы в СУБД, соответствующее вашему регистру сведений (с помощью функции платформы ПолучитьСтруктуруХраненияБазыДанных()).
  2. В консоли управления СУБД (например, SQL Server Management Studio) временно отключите или удалите уникальный индекс проблемной таблицы.
  3. Выполните обновление конфигурации в Конфигураторе 1С. Обновление успешно завершится, так как СУБД больше не блокирует транзакцию из-за отсутствия индекса.
  4. Напишите SQL-запрос для поиска строк с одинаковыми значениями новых измерений и удалите дубликаты физически из таблицы базы данных.
  5. Верните уникальный индекс таблицы СУБД в исходное состояние.

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

---

Подведем итоги

Мы детально рассмотрели процесс возврата конфигурации 1С к типовому виду «под замок». Наиболее эффективным и бесконфликтным является метод Снятия с поддержки с последующим сравнением/объединением, а также своевременный перенос всех доработок в Расширения.

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

← На главную