При обслуживании и тестировании информационных баз 1С:Предприятие 7.7 на платформе MS SQL Server администраторы и программисты нередко сталкиваются с ситуацией, когда процедура массового перепроведения документов внезапно прекращается аварийным завершением работы программы (тихий вылет процесса без вывода сообщений об ошибках). При этом попытка просмотреть документы за проблемный день в общем журнале также приводит к моментальному закрытию платформы, а Точка Актуальности (ТА) остается заблокированной на дате сбоя.
Разберем детально, почему возникает такое поведение платформы, как локализовать поврежденные данные и какими методами восстановить нормальную работоспособность системы.
Проанализируем ключевые технические факторы, вызывающие аварийную остановку процесса 1cv7s.exe:
_1SJOURN, операций _1SOPER, проводок _1SENTRY и табличных частей документов DH* тесно связаны. Если движения или проводки были удалены некорректно, в таблице журнала остаются флаги проведенности (CLOSED) или битые ссылки на несуществующие операции. При попытке пересчитать итоги или отрисовать строку в интерфейсе платформа падает при обращении к пустому указателю._1SJOURN, но отсутствует физическая строка в соответствующей таблице шапки DH<ID> (или наоборот).01.01.1753. При сбоях или ручных операциях могут возникнуть значения NULL или некорректные даты, ломающие расчет позиции документа DATE_TIME_IDDOC.Выясним разницу между штатными механизмами проведения, доступными в интерфейсе платформы:
Если на определенной дате перепроведение останавливается, выполним проведение проблемного периода через меню «Операции — Проведение документов». После этого можно вручную установить ТА на конец обработанного периода и запустить пересчет бухгалтерских и оперативных итогов.
Рассмотрим универсальный способ устранения структурных несоответствий в базе 1С 7.7. Механизм создания файла выгрузки полностью перечитывает логическую структуру данных, игнорируя поврежденные физические индексы, а при последующей загрузке пересоздает таблицы и системные индексы заново.
Разберем процесс по шагам:
Данный метод исправляет большинство ошибок, связанных с рассинхронизацией таблиц _1SJOURN и _1SENTRY.
Если размер базы данных не позволяет быстро выполнить полную выгрузку и загрузку, применим штатные сервисные утилиты Конфигуратора:
Очищать ссылки или Создавать объекты).Проанализируем состояние таблиц непосредственно в SQL Management Studio. При прямых операциях с базой данных необходимо убедиться в отсутствии физических повреждений страниц и актуальности индексов.
Выполним проверку базы командой:
DBCC CHECKDB ('ИмяБазыДанных') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Если обнаружены повреждения индексов, выполним их полное перестроение (Rebuild Indexes):
EXEC sp_MSforeachtable @command1="ALTER INDEX ALL ON ? REBUILD";
Также проверим наличие документов с некорректной пустой датой (в SQL-представлении это значение 1753-01-01) в таблице журнала:
SELECT IDDOC, DOCNO, DATE_TIME_IDDOC
FROM _1SJOURN
WHERE DATE_TIME_IDDOC LIKE '17530101%';
При обнаружении подобных записей их необходимо скорректировать либо удалить средствами платформы или запросом с предварительным созданием резервной копии.
Чтобы избежать переполнения оперативной памяти и зависаний при перепроведении больших периодов, воспользуемся следующими практическими правилами: