При обновлении типовых или доработанных конфигураций 1С (особенно в файловом варианте, таких как «Бухгалтерия предприятия 2.0») программисты иногда сталкиваются с редкой, но критической ошибкой MemoryMappedFileObject::write. Эта ошибка указывает на то, что платформа не смогла корректно записать данные в файл, проецируемый в память. Такой механизм 1С использует для быстрой работы с временными объектами и структурой конфигурации во время реструктуризации базы данных.
Рассмотрим подробно причины возникновения этой проблемы и разберем пошаговые алгоритмы её решения, основываясь на практическом опыте специалистов и особенностях работы платформы 1С:Предприятие.
Прежде чем приступать к активным действиям, проанализируем ситуацию. Ошибка MemoryMappedFileObject::write чаще всего возникает по одной из следующих причин:
Config, ConfigSave), отвечающие за поддержку, могут содержать некорректные записи или иметь нулевую длину.%TEMP% или нехватка места на системном диске.Как показывает практика, это самый быстрый и эффективный способ «проскочить» ошибку, если она вызвана нехваткой памяти. Даже если ваша база файловая и вы привыкли работать с 32-битным клиентом, для выполнения процедуры обновления рекомендуется использовать 64-битную платформу.
Рассмотрим алгоритм действий:
Если стандартное обновление через «Поиск доступных обновлений» или «Выбор файла обновления (.сфи)» завершается ошибкой, попробуем метод полной замены основной конфигурации. Этот метод помогает, если проблема кроется в механизме сравнения/объединения.
Разберем по шагам:
target.cf.target.cf.Важно: При использовании этого метода в файловой базе могут возникнуть нюансы с поддержкой. После загрузки .cf обязательно проверьте статус поддержки через Конфигурация — Поддержка — Настройка поддержки.
Иногда ошибка возникает из-за того, что платформа пытается сравнить текущую базу с конфигурацией поставщика, данные о которой повреждены. Посмотрим на ситуацию глубже: если кнопка «Сохранить в файл» в окне настройки поддержки выдает ту же ошибку или сохраняет файл размером 0 байт, значит, таблицы поддержки повреждены.
Выполним следующие действия:
.cf нужного релиза.Проанализируем влияние системного окружения. Ошибка записи в MemoryMappedFile напрямую связана с тем, как ОС выделяет место под временные файлы. Попробуем перенаправить эти потоки данных.
C: (или другом диске с большим объемом свободного места) папку, например C:\1C_TEMP.TEMP и TMP для текущего пользователя на C:\1C_TEMP.%AppData%\1C\1cv8\ и %LocalAppData%\1C\1cv8\).Если конфигурация сильно доработана и простая загрузка .cf невозможна без потери данных, используем метод «пересборки» индексов конфигурации через промежуточный файл. Проделаем следующее:
.cf из нашей проблемной базы..cf..cf..cf.В исключительных случаях, когда ничего не помогает, можно проанализировать файл базы .1CD с помощью утилиты Tool_1CD. Нам необходимо обратить внимание на таблицу Config. Если в ней присутствуют записи с аномальными размерами или некорректными заголовками, это может быть причиной сбоя MemoryMappedFileObject. Опытные системные администраторы практикуют очистку таблицы ConfigSave (где хранятся изменения до нажатия F7) непосредственно перед обновлением, чтобы освободить место внутри структуры файла базы данных.
Резюме: Ошибка MemoryMappedFileObject::write — это сигнал о том, что стандартный механизм записи конфигурации столкнулся с непреодолимым препятствием в памяти или структуре файла. Комбинация перехода на 64-битную платформу и переустановки конфигурации на поддержку через чистый .cf решает проблему в 99% случаев.