При повседневной работе с типовыми конфигурациями «1С:Предприятие» (в частности, в конфигурациях на обычных формах, таких как «Управление торговлей 10.3») пользователи иногда сталкиваются с аварийным завершением работы программы с сообщением «Недостаточно памяти». Особенность этой неполадки заключается в том, что она может проявляться строго у одного конкретного пользователя при попытке открыть один определенный отчет, в то время как у остальных сотрудников тот же отчет формируется без каких-либо нареканий. Пересоздание пользователя под тем же именем не дает стабильного эффекта, а заведение новой учетной записи помогает лишь на непродолжительное время.
Проанализируем технические причины такого поведения базы данных и разберем по шагам последовательность действий для гарантированного устранения сбоя.
С точки зрения архитектуры платформы 1С здесь действуют сразу несколько факторов, которые в совокупности приводят к критическому переполнению адресного пространства:
1cv8.exe ограничен операционной системой Windows 2 ГБ виртуального адресного пространства. При открытии отчета происходит десериализация сохраненных пользовательских настроек, макетов СКД и таблиц. Если в памяти возникает сильная фрагментация, системе не удается выделить непрерывный блок памяти, что вызывает ошибку._SYSTEMSETTINGS / _PARAMS). Механизм отчетов платформы по умолчанию сохраняет последнее состояние формы и настройки пользователя при закрытии отчета и восстанавливает их при повторном входе. Если в файловой базе данных физическая запись настроек пользователя повреждается, процесс десериализации зацикливается или требует экспоненциально растущего объема ОЗУ. При создании нового пользователя отчет открывается с дефолтными настройками, но как только программа заново записывает конфигурацию в поврежденный сектор базы, ошибка возвращается.1CD и распределенных баз (РИБ). В файловых периферийных узлах РИБ постоянный интенсивный обмен данными приводит к фрагментации файла базы, росту BLOB-полей и накоплению внутренних логических несоответствий, особенно если база доступна пользователям по локальной сети через общую папку.В случае с файловой информационной базой первое и самое эффективное действие — проверка целостности структуры файла 1Cv8.1CD. Разберем порядок выполнения:
1Cv8.1CD в надежное место).C:\Program Files (x86)\1cv8\номер_версии\bin\) и запустим утилиту chdbfl.exe.1Cv8.1CD, установим флаг «Исправлять обнаруженные ошибки» и нажмем кнопку «Выполнить».Утилита проверит целостность страниц, исправит битые указатели и восстановит поврежденные сегменты таблиц, что в большинстве случаев сразу же снимает проблему с нехваткой памяти при чтении сохраненных настроек.
Если повреждение затронуло непосредственно сохраненные варианты или параметры формы конкретного отчета, их можно принудительно удалить без удаления самой учетной записи пользователя. Рассмотрим два способа очистки.
Способ 1. Программная очистка через внешнюю обработку
В режиме «1С:Предприятие» можно выполнить специальную команду встроенного языка, которая очищает кэшированные настройки формы отчета для проблемного пользователя:
ИмяПользователя = "Киселева А Б";
КлючОбъекта = "Отчет.ВедомостьПоДенежнымСредствам";
// Удаляем сохраненные системные настройки отчета
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
ХранилищеОбщихНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
Способ 2. Удаление настроек через типовой интерфейс конфигурации
В типовых конфигурациях обычного приложения (включая «Управление торговлей 10.3») перейдем в меню Сервис -> Настройки пользователя (или откроем карточку пользователя в справочнике Пользователи) и откроем список сохраненных настроек. Найдем в списке нужный отчет (в нашем примере — Ведомость по денежным средствам) и удалим все сохраненные пользовательские настройки для данного отчета.
Для устранения логических несоответствий и сжатия внутренних таблиц базы данных выполним регламентные процедуры в конфигураторе:
После завершения тестирования полезно выполнить полную выгрузку базы в файл выгрузки (.dt), создать пустую информационную базу и загрузить .dt обратно. Это позволяет полностью избавиться от мусорных BLOB-сегментов и пересобрать физический файл 1Cv8.1CD с нуля.
Если отчет обрабатывает большие массивы данных, а на рабочих станциях используется 32-разрядная платформа 1С, целесообразно расширить доступный лимит виртуальной памяти:
bcdedit /set increaseuserva 3072
После перезагрузки компьютера пользовательское адресное пространство увеличится с 2048 МБ до 3072 МБ.1Cv8.1CD.В случае, если в узле РИБ сбои таблиц продолжают повторяться даже после исправления утилитой chdbfl.exe, наиболее надежным решением станет создание нового начального образа узла в центральной базе данных и замена поврежденной периферийной базы чистым сформированным образом.