Переход с устаревшей конфигурации «Бухгалтерия предприятия» редакции 2.0 на современную редакцию 3.0 — это масштабный процесс реструктуризации всей базы данных. В процессе обновления конфигуратор выполняет перестроение физических таблиц СУБД, перенос реквизитов и создание новых связей между объектами. На крупных базах данных этот процесс нередко прерывается критическими ошибками.
Одной из наиболее сложных проблем является внезапное аварийное завершение работы процесса 1cv8.exe с системным кодом ошибки 0xC0000005 (Access Violation — нарушение прав доступа при чтении или записи в память) в модуле basic.dll. Чаще всего крах системы происходит на этапе реструктуризации таблиц справочника Номенклатура или других объемных справочников (например, Контрагенты или ДоговорыКонтрагентов).
В этой статье мы подробно разберем причины возникновения этой неполадки и рассмотрим проверенные практические методы ее устранения.
Ошибка нарушения прав доступа по адресу 0x0000000000000000 указывает на то, что платформа попыталась обратиться к сегменту оперативной памяти, который не был ей выделен, либо обратилась по пустому указателю (Null Pointer). В контексте обновления 1С это происходит по нескольким основным причинам:
8.3.11.2867) и некоторые релизы 8.3.12 имеют внутреннюю ошибку управления памятью при обработке больших порций метаданных в файловом режиме. При реструктуризации сложных справочников с множеством табличных частей или дополнительных реквизитов встроенный движок СУБД вызывает переполнение стека памяти.dbeng8, который критически зависим от объема свободной непрерывной памяти и системных временных папок. В процессе обновления объемы временных файлов возрастают лавинообразно, и при достижении внутренних лимитов адресации файлового движка программа «падает».basic.dll активно взаимодействует с системным окружением Microsoft Visual C++ и подсистемой предотвращения выполнения данных (DEP). Сбои могут вызываться некорректным распределением прав на выполнение кода в оперативной памяти.Номенклатура блокирует корректное перестроение его структуры.Перейдем к пошаговому разбору решений этой проблемы.
Как показывает практика и опыт многих администраторов, наиболее быстрым и эффективным решением при падении сборщика на платформе 8.3.11 является использование более ранней, но чрезвычайно стабильной ветки платформы — 8.3.10 (например, релиз 8.3.10.2699).
Выполним процедуру перехода по шагам:
8.3.10.2699 (или просто 8.3.10).8.3.11 или более новую.Если ваша база имеет внушительный объем, а справочник Номенклатура содержит десятки тысяч позиций с историей цен, штрихкодов и характеристик, файловый движок 1С может принципиально не справиться с реструктуризацией из-за архитектурных ограничений адресации памяти.
В этом случае отличным выходом будет временный или постоянный перенос базы на СУБД (Microsoft SQL Server, PostgreSQL или аналогичную):
*.dt.*.dt (меню Администрирование — Загрузить информационную базу...).Поскольку при работе в клиент-серверном варианте вся основная вычислительная нагрузка по перестроению индексов и таблиц переносится с локального процесса 1cv8.exe на мощный сервер СУБД, реструктуризация пройдет без переполнения локального стека памяти и без использования нестабильного механизма временных файлов файловой СУБД.
Прежде чем приступать к обновлению, необходимо убедиться в чистоте данных самого справочника. Нередко в базе присутствуют скрытые битые записи, которые вызывают сбой при попытке изменить структуру таблицы. Нам необходимо локализовать и устранить эти ошибки.
Для начала проведем полную программную проверку чтения элементов справочника Номенклатура. Мы можем написать внешнюю обработку или запустить в режиме «1С:Предприятие» следующий код в консоли кода:
Выборка = Справочники.Номенклатура.Выбрать();
СчетчикОшибок = 0;
Пока Выборка.Следующий() Цикл
Попытка
// Пытаемся принудительно прочитать все поля объекта из базы данных
ОбъектНоменклатуры = Выборка.ПолучитьОбъект();
Если ОбъектНоменклатуры = Неопределено Тогда
ВызватьИсключение "Пустая ссылка или объект отсутствует в БД";
КонецЕсли;
Исключение
СчетчикОшибок = СчетчикОшибок + 1;
ЗаписьЖурналаРегистрации("ОшибкиНоменклатуры",
УровеньЖурналаРегистрации.Предупреждение,
,
,
"Ошибка чтения элемента со ссылкой: " + Выборка.Ссылка + " | Описание: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Сообщить("Проверка завершена. Найдено проблемных элементов: " + СчетчикОшибок);
Если данный скрипт выявит проблемные элементы, их необходимо удалить или пересоздать до начала процедуры обновления конфигурации.
Также в обязательном порядке выполните стандартные процедуры обслуживания физической целостности базы данных:
chdbfl.exe (она находится в каталоге bin установленной платформы 1С). Выберите файл вашей базы 1Cv8.1CD, установите флаг «Исправлять обнаруженные ошибки» и запустите проверку.Часто сбой в модуле basic.dll провоцируют устаревшие индексные файлы и разросшийся локальный кэш конфигурации, которые хранятся вне самой базы данных.
Рекомендуем выполнить полную очистку системного окружения:
%userprofile%\AppData\Local\1C%userprofile%\AppData\Roaming\1C8e2b851d-d402-4b2a...).
1Cv8.1CD там могут находиться служебные файлы и папки. Удалите их:
*.cfl (файлы блокировок базы данных).1Cv8JobScheduler (кэш планировщика фоновых заданий платформы, который часто вызывает конфликты при обновлении).1Cv8Log (содержит журнал регистрации — перед удалением рекомендуется сделать его резервную копию, перенеся в другую директорию).Иногда операционная система Windows расценивает активные низкоуровневые манипуляции платформы 1С с оперативной памятью (динамическое создание структур во время реструктуризации таблиц) как потенциально опасную вирусную активность. Защитный механизм DEP (Data Execution Prevention) принудительно аварийно завершает работу процесса 1cv8.exe с кодом 0xC0000005.
Чтобы исключить влияние этой подсистемы, выполните следующие действия:
C:\Program Files\1cv8\8.3.11.2867\bin\1cv8.exe).Падение конфигуратора при обновлении с редакции 2.0 на 3.0 на этапе обработки справочника Номенклатура — это известная проблема, вызванная несовершенством распределения памяти в файловом движке платформ версий 8.3.11/8.3.12.
Для гарантированного решения проблемы рекомендуется придерживаться следующего алгоритма: сначала выполните проверку физической целостности базы через chdbfl.exe и очистку кэша. Если это не помогло, временно переключите платформу запуска базы на стабильную версию 8.3.10 для проведения реструктуризации либо выполните процедуру обновления в клиент-серверном (SQL) варианте.