Ошибка возникает при непосредственном удалении записи (в терминах 1С) в таблице с количеством записей более 16777215 штук. Удаляемые записи могут располагаться и до этой границы. Сообщение об ошибке указывает на индекс "IDELETED" с индексным выражением "D" и выражением фильтра "DELETED()". Этот индекс используется для нахождение помеченных на удаление записей (в терминах DBF) и размещения на их месте новых добавляемых записей в таблицу.
Первые кандидаты на такой количество записей: 1SCRDOC, 1SACCSEL.
Способов устранения проблемы, пока, не найдено.
Мнение разработчиков по поводу этой ошибки:
http://www.codebase.com/support/kb/?article=C01054
Допускаю, что такое проявление ошибки было привнесено именно в 1С. Т.к. продукт "CodeBase" продаётся с исходными текстами и "встраивался" в 1С с некоторыми изменениями на уровне исходных текстов разработчиками 1С. Само ядро "CodeBase" находится в библиотеке DBEng32.dll. Эта библиотека одинаковая для версий 1С: 18, 25, 27. Другие версии не проверялись.
Временное решение проблемы в ручном режиме.
Суть способа:
Отключить индекс "IDELETED" для проблемных таблиц. Естественно, отключится механизм использования помеченных на удаление записей (в терминах DBF). А это приведет к более быстрому росту размера таблицы. Частично решает проблему установка "Kernel3x", т.е. снимается ограничение на размер DBF файла в 1 гигабайт. Но при использовании данной разработки категорически нельзя использовать прямые запросы на FoxPro. Кроме этого придется чаще (регулярно) выполнять упаковку таблиц и внимательно отслеживать рост размера таблиц, т.к. существует ограничение на размер DBF файла в 2 гигабайта.
Последовательность действий:
1) При возникновении ошибки -310, на любой рабочей станции, срочно выгнать всех пользователей из 1C. Не сохранять никаких открытых форм ввода информации. Прекратить (прервать) выполнение отчетов. И т.д. Если произошёл сбой при выполнении регламентных работ, то восстановить базу с последней копии. При этом заранее оповестить всех пользователей об возможности появления такой ошибки и довести до них информацию о действиях в таком случае.
2) Т.к. в сообщении об ошибке -310 не выдаётся имя таблицы, то необходимо найти эту таблицу силой ума или тупым открытием подряд всех DBF-ов в порядке от большего размера файла к меньшему. Ищем таблицы в которых количество записей подбирается или уже больше 16777215 штук.
3) Удалить все CDX файлы. Зайти в сессию 1С монопольно и выполнить, тем самым, реиндексацию.
4) Вызвать утилиту обслуживания DBF/CDX структур. Например, бесплатную утилиту "Advantage Data Architect" можно скачать по ссылке:
http://devzone.advantagedatabase.com/dz/content.aspx?Key=20&Release=13&Product=8&Platform=6
5) Открыть проблемную таблицу в формате "FoxPro (DBF/CDX)". Вызвать свойства таблицы. Выбрать закладку с описанием индексов. Найти индекс "IDELETED". Изменить выражение фильтра с "DELETED()" на ".F.". Сохранить изменения с реиндексацией. Закрыть таблицу.
6) Открыть таблицу "1SUSERS" (DBF файл без индексов). В поле "USRSCNT" установить значение больше нуля. Закрыть таблицу. Выйти из утилиты.
7) Запустить сессию 1С в монопольном режиме. Согласиться с реиндексацией.
Дополнительная информация:
1) Необходимо повторять действия по отключению индекса после каждого удаления файлов CDX. После реиндексации без удаления файлов повторять отключение индекса не надо.
2) Данная технология проверялась только на тестовой базе. В промышленной эксплуатации - нет возможности проверить, т.к. у нас не возникала ошибка -310 при использовании "родного движка" и мы уже давно перешли на другу СУБД.
3) Надеюсь найдутся заинтересованные люди, и напишут утилиту для автоматического анализа проблемных таблиц и не ручного отключения индекса. Я готов оказать в этом деле консультацию.