При активной работе в распределенных информационных базах (УРБД) на платформе 1С:Предприятие 7.7 (формат DBF) администраторы и разработчики нередко сталкиваются с ошибками целостности данных. Одной из наиболее сложных проблем является появление записей вида «Объект не найден (код/префикс)» в отчетах по остаткам (например, зависшие резервы товаров), а также сообщения тестирования и исправления (ТиИ): «Проверка уникальности внутреннего идентификатора документов... Исправить вручную».
Разберем детально, почему возникают такие коллизии, как устроена идентификация объектов в 1С 7.7 и какими способами можно восстановить корректную работу базы данных.
Выясним причину возникновения ошибки:
IDDOC) и элемента справочника (ID) в 1С 7.7 представляет собой 9-значную строку в 36-ричной системе счисления. Первые 6 символов отводятся под порядковый номер созданного объекта в узле, а последние 3 символа — под префикс (код) узла распределенной базы.IDDOC для двух совершенно разных документов (например, для документа «ПеремещениеТМЦ» и «ЗаявкаПокупателя»).RA*.DBF) или итогов (RG*.DBF) могут остаться. В регистрах сохраняются движения по несуществующему документу, что проявляется как «Объект не найден» и формирует некорректный резерв или остаток ТМЦ.Важное ограничение платформы: Штатная процедура «Тестирование и исправление ИБ» в Конфигураторе 1С 7.7 не может автоматически разрешать дубли внутренних идентификаторов документов и справочников. При нахождении одинаковых IDDOC платформа выдает предупреждение «Исправить вручную» и пропускает операцию. Поэтому требуется ручное вмешательство.
Рассмотрим по шагам процесс устранения коллизии идентификаторов при помощи прямого редактирования таблиц базы данных DBF-редактором (перед выполнением работ обязательно создаем полную резервную копию каталога ИБ):
1cv7.dd (находится в каталоге информационной базы) в любом текстовом редакторе. Находим по именам документов и справочников физические имена таблиц:
1SJOURN.DBF — общий журнал всех документов;DHxxxx.DBF и DTxxxx.DBF — таблицы шапки и табличной части проблемного документа (где xxxx — номер таблицы из 1cv7.dd);1SCRDOC.DBF — таблица подчиненных документов;1SCONST.DBF — таблица периодических реквизитов (поле DOCID);RAxxxx.DBF — таблицы движений регистров, в которые документ формирует проводки.1SJOURN.DBF и берем сгенерированный 9-значный IDDOC новой записи.DHxxxx.DBF для нужной записи меняем старый IDDOC на новый.DTxxxx.DBF заменяем IDDOC во всех строках этого документа.1SJOURN.DBF проверяем запись: если запись документа была перезаписана другим видом документа из-за коллизии, формируем корректную строку с новым IDDOC, правильным кодом типа документа IDDOCDEF, номером и датой.RAxxxx.DBF, а также в 1SCRDOC.DBF заменяем старый идентификатор на новый.SCxxxx.DBF находим записи с одинаковым полем ID. У одной из записей заменяем ID на уникальное значение с одновременным обновлением ссылок в подчиненных таблицах и периодических реквизитах (1SCONST.DBF).*.CDX из каталога информационной базы и запускаем 1С:Предприятие в монопольном режиме для автоматического восстановления индексов.Если проблемный документ (например, неподтвержденная заявка покупателя) больше не нужен, но продолжает держать остатки в резерве и отображается как <Объект не найден>, проанализируем порядок действий по очистке движений:
1cv7.dd находим номер таблицы регистра остатков/резервов (таблицы RAxxxx.DBF и RGxxxx.DBF).RAxxxx.DBF в DBF-редакторе, находим записи, в которых значение IDDOC совпадает с идентификатором удаленного документа (из текста ошибки Объект не найден>(3298915/ПБ4)), и удаляем эти строки физически (с последующей упаковкой таблицы PACK).*.CDX и запускаем базу в монопольном режиме.Если коллизия произошла только в периферийном узле, а в центральной базе данные по проблемному документу сохранились корректно:
Для предотвращения повторного появления подобных коллизий обязательно проверьте уникальность кодов всех узлов в меню «Администрирование» -> «Распределенная ИБ» -> «Управление»: каждый узел должен иметь уникальный код длиной до 3 символов, который никогда не повторяется в рамках всей распределенной структуры.