При проведении технического обслуживания базы данных с помощью встроенного механизма «Тестирование и исправление» (ТиИ) пользователи часто сталкиваются с сообщениями вида: «Проверка логической целостности. РегистрБухгалтерии.Хозрасчетный.Ресурс.СуммаНУ ... Значение должно быть NULL». Эта ошибка может носить массовый характер и вызывать опасения за сохранность данных. В данной статье мы разберем причины возникновения этой проблемы и рассмотрим пошаговые методы её решения.
Для начала проанализируем ситуацию и выясним, почему система требует именно NULL. В архитектуре 1С:Предприятие ресурсы налогового учета, такие как СуммаНУ (налоговый учет), СуммаПР (постоянные разницы) и СуммаВР (временные разницы), имеют жесткую логическую связь с настройками плана счетов. Если для конкретного счета в Плане счетов не установлен признак «Налоговый учет», то в соответствующих полях регистра бухгалтерии физически не может находиться никакое значение, даже «0». Платформа ожидает увидеть там системный NULL.
Основные причины рассогласования данных:
NULL могут ошибочно преобразовываться в пустые значения (число 0).Это самый простой и рекомендуемый метод. Рассмотрим порядок действий в Конфигураторе:
1Cv8.1CD, в клиент-серверном — сделать бэкап средствами SQL или выгрузку в .dt.В процессе работы система заменит все некорректные значения «0» на NULL. В окне сообщений вы увидите записи: «Сохранено значение NULL». Это нормальное поведение программы, восстанавливающее логическую структуру.
Если ТиИ на файловой базе выдает слишком много ошибок или работает нестабильно, проанализируем метод реорганизации таблиц через файл выгрузки:
.dt (Администрирование — Выгрузить информационную базу)..dt в новую базу.При загрузке платформа пересоздает структуру таблиц «с нуля» в соответствии с актуальными метаданными конфигурации. Это часто помогает избавиться от технических «хвостов», которые не всегда удаляются при обычном тестировании.
Перед запуском ТиИ в конфигураторе полезно проверить физическую целостность файла базы данных. Для этого используем внешнюю утилиту chdbfl.exe, которая находится в папке bin установленной платформы 1С.
chdbfl.exe.1Cv8.1CD.После завершения работы утилиты рекомендуется повторно запустить ТиИ в конфигураторе для исправления логических ошибок, которые утилита физической проверки могла пропустить.
В сложных случаях, когда ошибок тысячи и стандартное ТиИ работает слишком долго, мы можем рассмотреть вариант написания небольшой обработки. Она будет обходить записи регистра и принудительно устанавливать NULL там, где это необходимо по логике плана счетов.
Пример логики для такой обработки:
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
// Устанавливаем фильтр по конкретному регистратору, где возникла ошибка
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Проверяем, поддерживает ли счет налоговый учет
Если НЕ Запись.СчетДт.НалоговыйУчет Тогда
Запись.СуммаНУДт = NULL;
Запись.СуммаПРДт = NULL;
КонецЕсли;
КонецЦикла;
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();
Использование свойства ОбменДанными.Загрузка = Истина позволяет обойти стандартные проверки при записи и ускорить процесс исправления данных.
После завершения процедур исправления крайне важно убедиться, что данные учета не «поплыли». Разберем, как это проверить:
Если ТиИ исправило только технические ошибки NULL, то суммы в бухгалтерском учете должны остаться неизменными. Если же суммы изменились, значит, ошибка была не только в логической структуре, но и в неверных настройках плана счетов, которые теперь приведены в соответствие с данными регистра.