Как исправить ошибку записи значения NULL и сбои при переходе с 1С:Бухгалтерии 2.0 на 3.0?

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

Перевод конфигурации «Бухгалтерия предприятия» с устаревшей редакции 2.0 на современную редакцию 3.0 нередко сопровождается системными сбоями СУБД. Одной из наиболее распространенных проблем является аварийное завершение реструктуризации с сообщением: «Ошибка SQL: Запись значения NULL в поле, не допускающее NULL» с указанием технического имени поля (например, _FLD447), а также ошибки вида «Значение не является значением объектного типа (ПолучитьОбъект)» при первом запуске базы. Проанализируем причины возникновения данных неполадок и подробно разберем пошаговый порядок подготовки и конвертации базы данных.

Выясняем причины возникновения ошибок при переходе

Разберем, почему платформа 1С:Предприятие выдает подобные системные сообщения в процессе обновления конфигурации базы данных:

  1. Нарушение соответствия релизов конфигураций. Переход между редакциями не выполняется произвольным обновлением на любой дистрибутив. Редакция 2.0 и редакция 3.0 развивались параллельно, поэтому для каждого релиза ветки 2.0 существует строго определенная парная версия редакции 3.0. Попытка накатить устаревший переходный релиз (например, 3.0.9 или 3.0.27) на относительно свежую базу редакции 2.0.65 приводит к попытке даунгрейда метаданных. Платформа удаляет добавленные реквизиты, разрушает связи таблиц и вызывает сбои процедур обновления.
  2. Нарушение ссылочной целостности (битые ссылки). Если в подчиненных справочниках (например, Справочник.БанковскиеСчета) существуют элементы без указания владельца, либо в группах номенклатуры заполнены реквизиты, предназначенные строго для элементов, СУБД не может корректно перестроить таблицы при наложении ограничения NOT NULL.
  3. Пропуск промежуточных обработчиков обновления. При переходе на управляемые формы многие данные трансформируются: контактная информация, дополнительные свойства, параметры учетной политики переносятся в новые регистры. Если накатывать конфигурации подряд через конфигуратор без запуска в режиме «1С:Предприятие», алгоритмы заполнения не выполняются, что приводит к падению на строках вроде ВыборкаОбъект.Объект.ПолучитьОбъект().

Шаг 1. Идентификация проблемного поля в базе данных

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


ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
    Для Каждого ПолеТаблицы Из СтрокаТаблицы.Поля Цикл
        Если ПолеТаблицы.ИмяПоляХранения = "_FLD447" Тогда
            Сообщить("Метаданные: " + СтрокаТаблицы.ИмяТаблицы);
            Сообщить("Реквизит: " + ПолеТаблицы.ИмяРеквизита);
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Этот метод позволяет точно определить объект, в котором накопились некорректные или пустые значения, вызвавшие сбой реструктуризации.

Шаг 2. Проверка физической и логической целостности базы

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

  1. Физическая проверка утилитой chdbfl.exe. Для файловых баз закрываем конфигуратор и запускаем утилиту chdbfl.exe (находится в каталоге bin установленной технологической платформы). Устанавливаем флаг «Исправлять обнаруженные ошибки» и запускаем анализ файла 1Cv8.1CD.
  2. Тестирование и исправление в конфигураторе. Открываем базу в конфигураторе под учетной записью с полными правами, переходим в меню Администрирование — Тестирование и исправление. Включаем проверки:
    • Проверка логической целостности;
    • Проверка ссылочной целостности;
    • Реиндексация таблиц;
    • Реструктуризация таблиц.
    В параметрах обработки при наличии ссылок на несуществующие объекты выбираем вариант Очищать ссылки, а при частичной потере данных — Удалять объект.

Шаг 3. Очистка битых объектов и элементов без владельца

Рассмотрим ситуацию, когда в отчете тестирования зафиксированы ошибки вида Справочник.БанковскиеСчета: Не определен владелец или Справочник.Номенклатура.Реквизит.КодТНВЭД: Значение должно быть NULL.

Если пустые элементы не удаляются интерактивно из-за проверки прав или блокировок интерфейса, применим программное удаление с отключением бизнес-логики через режим загрузки данных:


Выборка = Справочники.БанковскиеСчета.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Не ЗначениеЗаполнено(Выборка.Владелец) Тогда
        ОбъектСчета = Выборка.ПолучитьОбъект();
        ОбъектСчета.ОбменДанными.Загрузка = Истина;
        ОбъектСчета.Удалить();
    КонецЕсли;
КонецЦикла;

Свойство ОбменДанными.Загрузка = Истина позволяет обойти встроенные проверки модуля объекта и очистить битые записи, препятствующие переходу.

Шаг 4. Корректная последовательность перехода на редакцию 3.0

Разберем по шагам правильный алгоритм обновления, исключающий сбои обработчиков миграции:

  1. Обновление платформы. Устанавливаем актуальную версию платформы 1С:Предприятие 8.3, рекомендованную для целевого релиза конфигурации. Базу переводим на работу под управлением платформы 8.3 в режиме совместимости.
  2. Подбор парного релиза. Находим в официальной таблице обновлений релиз редакции 3.0, предназначенный для прямого перехода с установленной версии 2.0 (например, переход с 2.0.65.х выполняется на соответствующую сборку 3.0.44.х или 3.0.43.х, а не на релизы 3.0.9 или 3.0.27).
  3. Установка конфигурации обновления. В меню конфигуратора выбираем Конфигурация — Поддержка — Обновить конфигурацию, указываем файл специального дистрибутива обновления перехода и применяем изменения клавишей F7.
  4. Обязательный промежуточный запуск. Запускаем программу в режиме «1С:Предприятие». Дожидаемся полного завершения работы фоновых и регламентных заданий обновления информационной базы. Подтверждаем легальность получения обновлений.
  5. Последующие обновления. Только после того, как база успешно запустилась в пользовательском режиме редакции 3.0 и отработали все процедуры заполнения регистров, выполняем пошаговое обновление до самого свежего релиза редакции 3.0.

Шаг 5. Контроль корректности данных после переноса

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

  1. Формируем стандартный отчет Оборотно-сальдовая ведомость (ОСВ) за все закрытые периоды в исходной копии базы 2.0 и в обновленной базе 3.0.
  2. Сверяем конечное сальдо по всем счетам бухгалтерского учета, обращая особое внимание на счета учета денежных средств (50, 51), расчетов с контрагентами (60, 62, 76) и остатков ТМЦ (10, 41, 43).
  3. Проверяем справочники организаций, банковских счетов и договоров на отсутствие дублирующихся или пустых элементов.
← На главную