Как исправить ошибку «Значение должно быть NULL» при тестировании и исправлении базы 1С?

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

При проведении технического обслуживания базы данных с помощью встроенного механизма «Тестирование и исправление» (ТиИ) пользователи часто сталкиваются с сообщениями вида: «Проверка логической целостности. РегистрБухгалтерии.Хозрасчетный.Ресурс.СуммаНУ ... Значение должно быть NULL». Эта ошибка может носить массовый характер и вызывать опасения за сохранность данных. В данной статье мы разберем причины возникновения этой проблемы и рассмотрим пошаговые методы её решения.

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

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

Основные причины рассогласования данных:

  1. Некорректное обновление: При изменении свойств метаданных или обновлении конфигурации флаги налогового учета на счетах могли измениться, а старые записи в регистре сохранили числовые значения.
  2. Программная запись наборов записей: Использование внешних обработок или некорректного кода, который принудительно записывает «0» в ресурсы НУ/ПР вместо того, чтобы оставить их незаполненными для счетов без налогового учета.
  3. Сбои при обмене данными: При выгрузке и загрузке данных через XML или COM-соединение значения NULL могут ошибочно преобразовываться в пустые значения (число 0).
  4. Аварийное завершение работы: Сбои в работе сервера или выключение питания в момент записи транзакции.

Способ 1. Стандартное Тестирование и исправление (ТиИ)

Это самый простой и рекомендуемый метод. Рассмотрим порядок действий в Конфигураторе:

  1. Обязательно создаем резервную копию базы данных. В файловом варианте достаточно скопировать файл 1Cv8.1CD, в клиент-серверном — сделать бэкап средствами SQL или выгрузку в .dt.
  2. Переходим в меню Администрирование — Тестирование и исправление.
  3. Устанавливаем переключатель в положение «Тестирование и исправление» (чтобы система не просто нашла ошибки, но и применила изменения).
  4. Выбираем первые четыре опции:
    • Реиндексация таблиц информационной базы;
    • Проверка целостности логической структуры;
    • Проверка целостности ссылочной структуры;
    • Пересчет итогов.
  5. В полях выбора действий при наличии ошибок устанавливаем:
    • При наличии ссылок на несуществующие объекты — Очищать ссылки;
    • При частичной потере данных объектов — Не изменять (или «Создавать объекты», если вы уверены в необходимости восстановления удаленных записей).

В процессе работы система заменит все некорректные значения «0» на NULL. В окне сообщений вы увидите записи: «Сохранено значение NULL». Это нормальное поведение программы, восстанавливающее логическую структуру.

Способ 2. Выгрузка и загрузка информационной базы

Если ТиИ на файловой базе выдает слишком много ошибок или работает нестабильно, проанализируем метод реорганизации таблиц через файл выгрузки:

  1. Выполните выгрузку информационной базы в файл .dt (Администрирование — Выгрузить информационную базу).
  2. Создайте новую пустую информационную базу.
  3. Выполните загрузку данных из созданного файла .dt в новую базу.

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

Способ 3. Использование утилиты chdbfl.exe (для файловых баз)

Перед запуском ТиИ в конфигураторе полезно проверить физическую целостность файла базы данных. Для этого используем внешнюю утилиту chdbfl.exe, которая находится в папке bin установленной платформы 1С.

  1. Запустите chdbfl.exe.
  2. Укажите путь к файлу базы 1Cv8.1CD.
  3. Установите галочку «Исправлять обнаруженные ошибки» и нажмите «Выполнить».

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

Программное исправление через встроенный язык

В сложных случаях, когда ошибок тысячи и стандартное ТиИ работает слишком долго, мы можем рассмотреть вариант написания небольшой обработки. Она будет обходить записи регистра и принудительно устанавливать NULL там, где это необходимо по логике плана счетов.

Пример логики для такой обработки:


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

Для Каждого Запись Из НаборЗаписей Цикл
    // Проверяем, поддерживает ли счет налоговый учет
    Если НЕ Запись.СчетДт.НалоговыйУчет Тогда
        Запись.СуммаНУДт = NULL;
        Запись.СуммаПРДт = NULL;
    КонецЕсли;
КонецЦикла;

НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();

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

Контроль результата

После завершения процедур исправления крайне важно убедиться, что данные учета не «поплыли». Разберем, как это проверить:

  1. Сформируйте отчет «Оборотно-сальдовая ведомость» (ОСВ) до начала всех процедур и сохраните её (например, в Excel).
  2. После исправления ошибок сформируйте аналогичную ОСВ.
  3. Сравните итоговые суммы и обороты по счетам.

Если ТиИ исправило только технические ошибки NULL, то суммы в бухгалтерском учете должны остаться неизменными. Если же суммы изменились, значит, ошибка была не только в логической структуре, но и в неверных настройках плана счетов, которые теперь приведены в соответствие с данными регистра.

← На главную