При работе с файловыми базами 1С:Предприятие 7.7, особенно в конфигурации «Торговля и Склад», мы часто сталкиваемся с ситуацией, когда база данных, проработавшая много лет, начинает вести себя нестабильно. Одна из самых распространенных и критических проблем — ошибка APPCrash с указанием на модуль KERNELBASE.dll или 1cv7s.exe при запуске, особенно после попыток свертки или массового удаления документов.
В этой статье мы подробно разберем ситуацию, когда база не запускается после ввода пароля, выясним причины ошибки, связанные с пределом размера файлов DBF, и рассмотрим пошаговые методы восстановления работоспособности системы.
Рассмотрим типичный сценарий: вы пытаетесь сделать свертку базы. Размер каталога базы велик (например, 15 ГБ). После пометки документов на удаление или попытки их физического удаления, программа аварийно завершает работу. При повторном запуске окно программы исчезает сразу после авторизации пользователя.
В журнале событий Windows мы видим следующую картину:
1cv7s.exeKERNELBASE.dll0xe06d7363 или нарушения прав доступа при работе с памятью.Если проанализировать файлы базы данных, часто можно заметить, что файл RG328.dbf (таблица итогов регистра партий) или другой файл RG* имеет размер, приближающийся к 2 ГБ (например, 1.94 ГБ или 1.99 ГБ). Это и есть корень проблемы.
Суть технического ограничения: Драйвер баз данных DBF, используемый в 1С 7.7, использует 32-битное знаковое целое для адресации записей. Максимальный размер файла не может превышать 2 ГБ. Как только файл пересекает эту границу (или подходит к ней вплотную, а при запуске 1С пытается записать туда новые итоги), происходит переполнение буфера, и приложение "падает".
Если база не запускается ни в режиме Предприятия, ни в Конфигураторе, нам необходимо уменьшить размер критических файлов вручную, чтобы дать движку возможность стартовать.
Файлы с именами, начинающимися на RG (например, RG328.dbf), хранят рассчитанные итоги регистров (остатки на каждый месяц). Файлы RA хранят сами движения (записи прихода и расхода).
Попробуем выполнить следующие действия:
*.cdx.RG*.dbf (или переместите их в другую папку).При удалении RG файлов 1С при запуске обнаружит их отсутствие и запустит процедуру пересчета итогов. Поскольку файлы будут созданы с нуля, их размер изначально будет минимальным, что позволит войти в систему. После этого необходимо выполнить Полный пересчет итогов через режим «Администрирование» -> «Тестирование и Исправление иб».
Простое удаление и пересчет могут не помочь надолго, если файл RG328.dbf снова вырастет до 2 ГБ. Это происходит, когда регистр партий не закрывается.
Проанализируем логику: регистр партий хранит остатки товаров в разрезе партий (документов поставки). Если вы списываете товар, но партия не указывается или указывается неверно, приход остается висеть в "плюсе", а расход уходит в "минус" (или висит по пустой партии). В итоге количество записей в таблице итогов растет лавинообразно, даже если общий остаток товара на складе равен нулю.
Что нужно сделать:
В старых файловых базах пометка на удаление записи в DBF не освобождает место физически. Запись просто помечается специальным байтом. Чтобы реально уменьшить размер файла, нужно выполнить операцию PACK (Сжатие).
Если стандартными средствами зайти не удается, или Тестирование и Исправление (ТиИ) вылетает, мы можем использовать внешний механизм для сжатия таблиц. Это позволит удалить записи, помеченные на удаление, и уменьшить размер файлов ниже критической отметки 2 ГБ.
Создадим простую обработку или используем следующий код, запуская его из другой рабочей базы 1С (подключившись к папке проблемной базы):
// Укажите путь к каталогу сбойной базы
КаталогБазы = "D:\Bases\TradeBroken\";
Если ФС.СуществуетФайл(КаталогБазы) = 0 Тогда
Сообщить("Каталог не найден!");
Возврат;
КонецЕсли;
Фс.УстТекКаталог(КаталогБазы);
БД = СоздатьОбъект("XBASE");
Файл = Фс.НайтиПервыйФайл("*.dbf");
Пока Фс.СуществуетФайл(КаталогБазы + Файл) = 1 Цикл
// Пробуем открыть файл эксклюзивно
Попытка
БД.ОткрытьФайл(КаталогБазы + Файл, "", 0); // 0 - монопольно
If БД.Открыта() = 1 Тогда
Сообщить("Сжимаю файл: " + Файл);
БД.Сжать(); // Команда PACK - физическое удаление помеченных записей
БД.Записать();
БД.ЗакрытьФайл();
КонецЕсли;
Исключение
Сообщить("Не удалось обработать файл: " + Файл + " (возможно, занят или поврежден)");
КонецПопытки;
Файл = ФС.НайтиСледующийФайл();
КонецЦикла;
Сообщить("Процедура сжатия завершена.");
После выполнения этого скрипта размер файлов RA и RG должен уменьшиться, если в них были записи, помеченные на удаление (например, после неудачной свертки). После этого обязательно удалите все .cdx файлы и запустите переиндексацию.
Иногда ошибка KERNELBASE.dll связана не с базой данных, а с механизмами защиты современных Windows (10/11, Server 2012+). Разберем необходимые настройки.
1. Отключение DEP (Data Execution Prevention)
Старая платформа 1С 7.7 может конфликтовать с механизмом предотвращения выполнения данных.
C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe.2. Исключение виртуализации (VirtualStore)
Если база данных или платформа установлены в C:\Program Files (x86), Windows может использовать теневое копирование файлов в папку пользователя. Это вызывает рассинхронизацию данных и индексов.
Рекомендация: Перенесите папку с базой данных и папку с платформой (BIN) в корень диска или в каталог, не требующий прав администратора (например, C:\1C_Base и C:\1C_Bin).
3. Игнорирование кодовой страницы
Если ошибка возникает сразу при старте, попробуйте создать в папке BIN (рядом с 1cv7s.exe) пустой файл с именем OrdNoChk.prm. Это отключит проверку порядка сортировки базы данных и системной локали.
Чтобы избежать ошибки переполнения при свертке большой базы, придерживайтесь следующего алгоритма:
Если база все равно упирается в лимит 2 ГБ, единственным кардинальным решением (кроме перехода на 1С 8) является «срезание» аналитики в регистрах. Например, очистка измерения «Партия» или «ДокументОприходования» в старых периодах через прямые запросы или специальные обработки, чтобы свернуть тысячи записей в одну. Альтернативный вариант — это организовать учет с нуля на основе имеющейся базы, перенеся в нее только справочники и актуальные остатки.