Как исправить ошибку «Запись не верна» при создании начального образа РИБ в 1С?

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

Часто при настройке распределенной информационной базы (РИБ) разработчики и администраторы сталкиваются с неприятной ситуацией: процесс создания начального образа прерывается спустя некоторое время, и система выдает лаконичную ошибку: Не удалось создать начальный образ по причине: запись не верна. При этом стандартное тестирование и исправление базы (ТиИ) может не приносить никаких результатов. Разберем эту проблему подробно, выясним причину сбоя и рассмотрим несколько надежных способов обойти эту ошибку.

Почему возникает ошибка «Запись не верна»?

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

Рассмотрим основные причины, почему выгружаемые данные отвергаются:

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

Шаг 1. Диагностика проблемы: как найти сбойный объект?

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

Использование Журнала регистрации (ЖР)
В момент падения процесса откроем Журнал регистрации главной базы (или логируемые события подчиненной, если они успели сформироваться в файле). Платформа обязательно фиксирует там детальное описание сбоя. Мы увидим запись примерно такого содержания: Запись не верна! Значение поля "Организация" не может быть пустым: (Регистр сведений: ...). Это сразу укажет нам на таблицу, которую нужно почистить в главной базе.

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

Решение 1. Временное отключение расширений

Если диагностика показала, что проблема кроется в объектах, добавленных через расширения, применим следующий метод:

  1. Зайдем в конфигуратор главной базы и временно исключим проблемные объекты расширения из состава плана обмена.
  2. Создадим начальный образ стандартным способом. Без этих объектов процесс должен пройти успешно.
  3. После создания образа вернем объекты в состав плана обмена в главной базе.
  4. Передадим конфигурацию в подчиненный узел через стандартный механизм обновления РИБ.

Решение 2. Создание РИБ из пустого CF (без переноса старых документов)

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

  1. Выгрузим файл конфигурации (CF) из главной базы.
  2. Создадим новую пустую базу и загрузим в нее наш CF.
  3. В новой базе зайдем в режим Предприятия. Откроем план обмена и пропишем коды узлов: код для ЭтотУзел (код нашей новой подчиненной базы) и создадим узел, который будет соответствовать главной базе.
  4. Назначим главную базу. Сделать это через интерфейс напрямую нельзя, поэтому воспользуемся простой обработкой или выполним следующий код:
    
    // Устанавливаем главный узел для нашей подчиненной базы
    УзелГлавнойБазы = ПланыОбмена.МойПланОбмена.НайтиПоКоду("ЦБ");
    ПланыОбмена.УстановитьГлавныйУзел(УзелГлавнойБазы);
    
  5. Перейдем в главную базу. Вручную или с помощью обработки зарегистрируем изменения нужных справочников (например, Номенклатура, Контрагенты), которые требуются кладовщикам для работы.
  6. Выполним сеанс синхронизации. Все зарегистрированные справочники и структура перенесутся в подчиненную базу. Старых документов в ней не будет.

Если подчиненных узлов планируется несколько, просто копируем полученную пустую базу-шаблон, заходим в нее, и вручную меняем код узла ЭтотУзел и префикс базы на нужные.

Решение 3. Создание начального образа через копирование базы

Если же нам необходимо передать в подчиненный узел абсолютно все старые данные, но штатный механизм упорно выдает ошибку «Запись не верна», применим классический метод обхода — создание РИБ через физическое копирование.

Этот способ работает в разы быстрее, так как полностью игнорирует пообъектную запись и копирует структуру СУБД целиком:

  1. Сделаем обычную физическую копию файла базы данных (1Cv8.1CD), если база файловая, или бекап/рестор средствами СУБД (SQL).
  2. Зайдем в скопированную базу. Первым делом нам нужно отвязать ее от старого главного узла (так как это полная копия центра). Выполним код:
    
    // Отвязываем базу
    ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
    
  3. Настроим узлы. Найдем предопределенный узел ЭтотУзел и поменяем его код на код нашей будущей подчиненной базы. Узел, который ранее был ЭтотУзел (Центр), оставим обычным узлом плана обмена.
  4. Теперь нам нужно очистить все таблицы регистрации изменений в нашей копии, так как они скопировались из центра и содержат мусор. Воспользуемся стандартной обработкой «Регистрация изменений для обмена данными» или напишем скрипт очистки.
  5. Снова привяжем базу к центру, указав центральный узел в качестве главного:
    
    УзелЦентра = ПланыОбмена.МойПланОбмена.НайтиПоКоду("ЦБ");
    ПланыОбмена.УстановитьГлавныйУзел(УзелЦентра);
    
  6. Настроим расписания регламентных заданий (если нужно) и каталоги обмена. РИБ готов к работе!

Подведем итог: Ошибка при формировании начального образа — это сигнал о наличии структурных проблем в данных или о несовместимости расширений. Проанализируем Журнал регистрации, чтобы найти корень проблемы. Если очистка данных нецелесообразна или невозможна, используем альтернативные пути: ручную настройку пустой базы (если исторические данные не нужны) или физическое копирование файла (если нужны все данные).

← На главную