Как исправить ошибку «Поле BLOCKNO. Неверное содержимое поля Numeric - ****» в файле 1SBLOB.dbf в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При выполнении процедуры «Тестирование и исправление информационной базы» (ТИИ) в файловой версии 1С:Предприятия 7.7 пользователи иногда сталкиваются со следующей ошибкой:

Файл 1SBLOB.dbf. Запись 443365. Поле BLOCKNO. Неверное содержимое поля Numeric - "****"

Разберем детально, почему возникает эта ошибка, как устроена структура хранения длинных строк в DBF-версии 1С 7.7 и какими способами можно устранить проблему без потери важных данных.

Причина ошибки и устройство таблицы 1SBLOB.dbf

Проанализируем механику работы 1С 7.7 с реквизитами неограниченной длины. В файловом варианте базы данных (DBF) текстовые поля неограниченной длины и периодические данные неограниченной длины хранятся в специальной служебной таблице 1SBLOB.dbf.

Каждая длинная строка разбивается платформой на отдельные текстовые фрагменты — блоки размером по 80 символов (поле BLOCK, тип Char(80)). Для поддержания порядка этих блоков используется служебное поле BLOCKNO (номер блока).

Рассмотрим ограничение разрядности этого поля в структуре DBF:

  1. Поле BLOCKNO имеет жестко заданный тип Numeric(4,0).
  2. Максимально возможное числовое значение, которое помещается в 4 разряда, составляет 9999.
  3. Если длинная строка превышает 9999 блоков (что соответствует примерно 800 Кб текста или 799 920 символам), платформа 1С 7.7 пытается записать 10000-й блок.
  4. Так как число 10000 не влезает в разрядность Numeric(4,0), платформа записывает в поле символы ****, обозначающие переполнение числового поля DBF.

В результате этого повреждается индекс таблицы 1SBLOB.dbf, а процедура ТИИ сигнализирует о некорректном содержимом поля.

Шаг 1. Поиск реквизита и объекта-источника через 1Cv7.DD

Перед удалением или очисткой записей выясним, к какому именно документу, справочнику или реквизиту относится поврежденная строка. Для этого воспользуемся редактором DBF-таблиц (например, DBF Viewer) и файлом описания структуры базы данных 1Cv7.DD.

Разберем порядок действий по шагам:

  1. Откроем файл 1SBLOB.dbf с помощью любого DBF-редактора и перейдем к номеру записи, указанной в логе ТИИ (например, 443365).
  2. Посмотрим и выпишем значения служебных полей OBJID (идентификатор объекта) и FIELDID (идентификатор реквизита).
  3. Откроем текстовый файл 1Cv7.DD, который находится в каталоге базы данных, в любом текстовом редакторе.
  4. Выполним поиск по значению FIELDID. Файл 1Cv7.DD содержит таблицы соответствия ID реквизитов их названиям в конфигураторе (например, реквизит Комментарий документа ПриходнаяНакладная).
  5. Зная тип объекта и значение OBJID, найдем конкретную позицию в базе через встроенный язык 1С 7.7.

Рассмотрим пример кода на встроенном языке 1С 7.7 для получения ссылки на объект по известному OBJID:


// Пример поиска документа в 1С 7.7 по ID объекта
Док = СоздатьОбъект("Документ.ПриходнаяНакладная");
ЗначениеID = "   1FK2O  "; // Значение OBJID из таблицы 1SBLOB

Если Док.НайтиПоРеквизиту("ID", ЗначениеID, 0) = 1 Тогда
    Сообщить("Найден документ: " + Док.ТекущийДокумент());
    // Очищаем переполненный реквизит
    Док.Комментарий = "";
    Док.Записать();
КонецЕсли;

Шаг 2. Способы исправления проблемы

Выяснив источник переполнения, рассмотрим варианты решения технической проблемы.

Вариант 1. Очистка реквизита через интерфейс или код 1С

Если проблемный объект найден, наиболее безопасный способ — обрезать или полностью очистить содержимое слишком длинной строки средствами платформы. Это автоматически удалит лишние блоки из 1SBLOB.dbf и восстановит корректную структуру.

Вариант 2. Корректировка записи напрямую в DBF

Если объект не находится или является «осиротевшей» записью (остатком удаленного документа), допустимо физически пометить битые записи на удаление или очистить их в DBF-редакторе. Важно: после прямой работы с файл-сервером DBF необходимо обязательно запустить переиндексацию базы данных или выполнить режим ТИИ «Пересчет служебных таблиц / Создание индексов».

Рекомендации по предотвращению проблемы в будущем

Чтобы избежать повторения ошибок переполнения BLOCKNO, проанализируем архитектурные рекомендации:

  1. Не храните логи и внешние файлы в текстовых реквизитах: Часто причиной переполнения становятся модули электронного документооборота (ЭДО), сохраняющие массивные XML- или JSON-файлы ответов прямо в реквизиты неограниченной длины. Для хранения файлов используйте внешние каталоги на диске, сохраняя в базе только пути к ним.
  2. Переход на MS SQL Server: В SQL-версии 1С 7.7 данные таблицы 1SBLOB хранятся в типах данных IMAGE / TEXT. В них отсутствует деление на 80-байтовые блоки, и ограничение BLOCKNO не применяется.
← На главную