В процессе работы с платформой «1С:Предприятие» разработчики и администраторы могут столкнуться с критической ситуацией: при попытке открыть форму документа определенного вида, создать новый объект или выполнить программный метод ПолучитьОбъект() приложение экстренно завершает работу. При этом операционная система фиксирует ошибку APPCRASH с кодом исключения c0000005 (обращение к недействительной памяти) в модуле basic.dll.
Рассмотри характерную особенность данной проблемы: падение происходит до выполнения клиентских и серверных обработчиков событий формы (таких как ПередОткрытием, ПриОткрытии или ОбработкаПолученияПредставления). Запросы к таблицам документа через консоль запросов при этом могут отрабатывать штатно. Разберем по шагам, почему возникает эта ошибка и какими способами её можно устранить.
Анализ причин аварийного завершения платформы
Проанализируем механику возникновения ошибки. Код c0000005 означает, что исполняемый файл платформы 1CV8.exe попытался прочитать или записать данные по адресу в оперативной памяти, к которому у него нет доступа. В контексте работы с метаданными 1С это происходить по следующим причинам:
Повреждение связей в графе метаданных: документ включен в служебные объекты (критерии отбора, подписки на события, функциональные опции, определяемые типы). Если внутренние идентификаторы (UUID) связей нарушены, обращение к документу вызывает сбой при сборке структуры формы в памяти.
Искажение сохраненных настроек формы: в системных таблицах хранения пользовательских настроек для конкретной формы или пользователя сохранились ссылки на удаленные или измененные реквизиты.
Расхождение кэша платформы и сервера: при динамическом обновлении конфигурации («сохранении на лету») кэш сервера или клиента сохраняет устаревшие структуры метаданных.
Повреждение индексов или итогов таблицы СУБД: физические таблицы данных не соответствуют представлению метаданных платформы.
Способ 1. Пересборка связей метаданных (критерии отбора, подписки, опции)
Как показывает практика, наиболее частой причиной падения 1С на уровне библиотеки basic.dll является повреждение внутренних ссылок метаданных, связывающих документ с другими объектами конфигурации. Рассмотрим алгоритм исправления этой проблемы:
Откроем конфигуратор и найдем состав всех объектов КритерииОтбора, в которых участвует проблемный документ или его реквизиты.
Временно исключим реквизиты и сам документ из состава всех найденных критериев отбора.
Выполним обновление конфигурации базы данных (нажатием F7). При этом платформа пересчитает и перестроит внутренние таблицы связей.
Проверим работу документа в режиме «1С:Предприятие». Документ должен начать открываться и создаваться без ошибок.
Вернем реквизиты документа обратно в состав критериев отбора и повторно обновим конфигурацию базы данных.
Аналогичную процедуру при необходимости следует провести для подписок на события и состава определяемых типов, связанных с данным документом.
Способ 2. Очистка пользовательских настроек формы и кэша платформы
Если сбой связан с локальным кэшем сеанса или поврежденными сохраненными настройками конкретного пользователя, выполним следующие шаги:
Очистка локального и серверного кэша: Завершим сеансы пользователей, остановим службу агента сервера 1С:Предприятие и удалим содержимое каталогов кэша сеансов и метаданных. Для локального пользователя удалим содержимое папок:
%LOCALAPPDATA%\1C\1cv8
%APPDATA%\1C\1cv8
Сброс настроек формы внутри базы: Если используется типовая конфигурация на базе БСП (Библиотеки Стандартных Подсистем), сбросим настройки формы для проблемного документа через хранилище пользовательских настроек (раздел административных обработок «Очистка настроек пользователей»).
Проверка под правами администратора: Зайдем в систему под пользователем с полными правами, чтобы исключить влияние ограничений на уровне записей (RLS).
Способ 3. Пошаговая изоляция и диагностика кода
Чтобы убедиться, что падение происходит именно из-за формы или модуля документа, проанализируем поведение объекта с помощью смены основных форм или программных вызовов:
В конфигураторе временно очистим поле ОсновнаяФормаДокумента в свойствах объекта. При открытии документа платформа сгенерирует форму по умолчанию динамически. Если документ откроется — проблема кроется в самой форме или в сохраненных настройках элементов.
Попробуем скопировать основной модуль документа и временно закомментировать код в обработчиках событий объекта (таких как ОбработкаЗаполнения, ПередЗаписью).
Настроим Технологический журнал для отслеживания момента падения процесса. Для этого в файле logcfg.xml добавим сбор событий EXCP:
Способ 4. Выгрузка и загрузка базы данных (dt) и реструктуризация
Если перечисленные действия не дали результата, проверим физическое состояние таблиц СУБД. Нам понадобятся процедуры выгрузки данных и восстановления индексов:
Создадим резервную копию базы данных средствами СУБД (SQL Server / PostgreSQL) или выполним выгрузку информационной базы в файл .dt через конфигуратор.
Выполним загрузку файла .dt в новую тестовую базу данных. В процессе загрузки платформа 1С полностью пересоздает индексы и служебные таблицы, удаляя устаревший мусор.
Запустим процедуру Тестирование и исправление в Конфигураторе (меню Администрирование -> Тестирование и исправление...), установив флаги Реиндексация таблиц базы данных и Реструктуризация таблиц базы данных.
В случае использования Microsoft SQL Server запустим принудительное обслуживание индексов и пересчет статистики для таблиц, соответствующих проблемному документу.
Таким образом, сочетание пересборки связей метаданных (в частности, критериев отбора) и очистки накопившегося кэша позволяет полностью устранить аварийные вылеты 1С при обращении к объектам документов.