При обслуживании и обновлении файловых баз данных «1С:Бухгалтерия 8» (редакция 3.0) технические специалисты и администраторы часто сталкиваются с неприятной ошибкой: в процессе обновления конфигурация аварийно завершает работу, выдавая сообщение «Недостаточно места на диске» или «Недостаточно памяти». При этом свободного места на физическом жестком диске компьютера может быть более чем достаточно.
Выясним истинную причину этой проблемы. Чаще всего виновником оказывается сильно разросшийся адресный классификатор (ранее — ФИАС, теперь — ГАР). В этой статье мы подробно рассмотрим, почему адресные сведения переполняют базу данных, как правильно и безопасно очистить неиспользуемые регионы и какие современные альтернативные методы помогут навсегда забыть об этой проблеме.
Рассмотрим ситуацию по шагам и проанализируем механизмы работы платформы «1С:Предприятие» с адресными данными.
Для начала разберем природу возникновения ошибок памяти при обновлении файловых информационных баз формата .1CD. Здесь действуют два независимых технических ограничения:
1Cv8.1CD, внутри которого находятся таблицы. Максимальный объем любой внутренней таблицы (включая её индексы) ограничен 4 Гигабайтами. При переходе ФНС РФ на новый формат адресов ГАР (Государственный адресный реестр) объем данных вырос в разы по сравнению со старым ФИАС, так как теперь учитывается не только административное, но и муниципальное деление. Загрузка даже 3–4 крупных регионов (например, Москвы, Московской области и Санкт-Петербурга) может мгновенно раздуть таблицы адресных сведений до критического предела. При реструктуризации базы во время очередного обновления лимит в 4 Гб превышается, и система выдает ошибку нехватки места.Проанализируем структуру хранения данных. Напрямую очищать регистры сведений вручную через Конфигуратор или внешние обработки крайне опасно.
Иногда ИТ-специалисты пытаются решить проблему радикально — находят через Конфигуратор регистр сведений АдресныеОбъекты и вручную удаляют записи по коду субъекта РФ. Разберем, почему так делать категорически нельзя:
АдресныеОбъекты, существуют подчиненные регистры: ДомаЗданияСтроения, ИсторияАдресныхОбъектов, Ориентиры и другие. Удаление записей только из одной таблицы приведет к появлению «битых» связей и «осиротевших» записей в других таблицах. Это гарантированно вызовет критические ошибки при последующем тестировании базы и проверке контрагентов.1Cv8.1CD на диске не уменьшается. Удаленные строки просто помечаются платформой как «свободные» для записи новых данных в будущем. Чтобы вернуть неиспользуемое дисковое пространство операционной системе, обязательно требуется процедура сжатия таблиц.Ниже приведен пример запроса, с помощью которого мы можем оценить распределение загруженных адресов по регионам в нашей базе данных перед началом очистки:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АдресныеОбъекты.КодСубъектаРФ КАК Регион,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ АдресныеОбъекты.Ссылка) КАК КоличествоОбъектов
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
|СГРУППИРОВАТЬ ПО
| АдресныеОбъекты.КодСубъектаРФ";
РезультатЗапроса = Запрос.Выполнить();
Теперь рассмотрим правильные, штатные и безопасные методы решения этой проблемы.
Если в базу уже загружены тяжелые адресные сведения, которые вам больше не требуются для работы (например, вы ведете деятельность только по одному или двум регионам), выполним корректную процедуру очистки классификатора.
Шаг 1. Запуск штатной очистки в пользовательском интерфейсе
Шаг 2. Физическое уменьшение размера базы данных (сжатие)
Как мы уже выяснили, после удаления записей размер файла базы данных не изменился. Проведем процедуру дефрагментации и сжатия таблиц:
После завершения сжатия вы увидите, что размер файла 1Cv8.1CD существенно уменьшился (в некоторых случаях экономия составляет от 1 до 5 Гигабайт), и последующие обновления конфигурации будут проходить без ошибок.
Самый прогрессивный и эффективный способ раз и навсегда решить проблему разрастания базы из-за адресов — полностью отказаться от локального хранения адресного классификатора ГАР/ФИАС.
В современных релизах «1С:Бухгалтерии 3.0» реализована возможность работы с адресами в режиме онлайн через веб-сервис фирмы 1С. При этом адреса подбираются, проверяются и автоматически подставляются прямо «из облака» в режиме реального времени. Локальные таблицы в вашей базе данных остаются пустыми, что экономит дисковое пространство и системные ресурсы.
Для настройки работы в режиме онлайн выполним следующие действия:
После этого вы можете запустить штатную очистку всех ранее загруженных регионов (как описано в Способе 1) и сжать базу. База станет легкой, а адреса продолжат отлично искаться и подбираться через онлайн-сервис.
Если вам по каким-то причинам жизненно важно хранить весь адресный классификатор локально в базе данных, но при обновлении программа все равно «падает» с ошибками памяти, воспользуемся обходом ограничений разрядности.
Установите и используйте для проведения обновлений 64-разрядную версию платформы «1С:Предприятие». В отличие от стандартного 32-битного клиента, 64-битный процесс Конфигуратора может адресовать практически неограниченный объем оперативной памяти вашего компьютера. Это позволит успешно завершить даже самые тяжелые процедуры реструктуризации таблиц ГАР/ФИАС без аварийного завершения работы программы.
Мы подробно разобрали причины переполнения базы данных адресными сведениями и изучили три надежных метода решения проблемы. Рекомендуем использовать сочетание Способа 1 и Способа 2 для обеспечения максимальной производительности и легкости вашей информационной базы «1С:Бухгалтерия».