Каждый системный администратор и разработчик 1С рано или поздно сталкивается с проблемой стремительного роста размера информационной базы. Типичный сценарий: руководство компании принимает решение сканировать договора, спецификации или первичные документы и прикреплять их непосредственно к карточкам контрагентов или документов в программе. С точки зрения пользователей — это невероятно удобно, ведь вся история взаимоотношений доступна в один клик. Однако для технического специалиста это превращается в серьезную проблему, особенно если база работает в файловом режиме.
В этой статье мы подробно разберем, почему файловая база начинает сбоить при накоплении сканов, как устроен лимит объема таблиц, рассмотрим штатные и альтернативные механизмы хранения файлов вне базы данных, а также проанализируем подводные камни, с которыми придется столкнуться при администрировании таких систем.
Среди специалистов часто бытует мнение, что файловая база 1С имеет жесткое ограничение в 4 Гб, после которого она перестает нормально функционировать. Давайте разберем эту ситуацию детальнее. Файловая база данных представляет собой один физический файл с расширением 1Cv8.1CD. Внутри него платформа организует сложную структуру, разделенную на таблицы. Каждая таблица состоит из нескольких внутренних файлов:
Критическое ограничение в 4 Гб применяется не к общему объему файла базы 1Cv8.1CD, а конкретно к каждому из этих внутренних файлов таблиц по отдельности. Это означает, что сама база может весить и 15 Гб, но если таблица присоединенных файлов превысит порог в 4 Гб, база станет не просто тормозить — она полностью потеряет работоспособность. Заполнить этот объем сканами высокого разрешения при активной работе пользователей можно буквально за несколько месяцев.
Как же временно решить эту проблему без срочного перехода на клиент-серверный вариант (SQL)? Начиная с версии платформы 8.3.8, разработчики предоставили системным администраторам полезный инструмент. По умолчанию размер страницы данных в файловой базе равен 4 Кб (что и накладывает лимит таблицы в 4 Гб). Однако мы можем воспользоваться стандартной утилитой конвертации базы данных CNVDBFL.EXE, которая находится в каталоге установленной платформы 1С. С ее помощью можно увеличить размер страницы данных до 8, 16, 32 или 64 Кб. При установке максимального размера страницы в 64 Кб лимит одного внутреннего файла таблицы увеличивается до 6 Гб. Это не решает проблему кардинально, но дает значительный запас времени для подготовки к переносу файлов.
Если конфигурация разработана на базе современных решений 1С (например, 1С:Управление торговлей, 1С:ERP или любая другая конфигурация, использующая Библиотеку стандартных подсистем — БСП), нам доступен мощный штатный механизм. Подсистема ПрисоединенныеФайлы позволяет настроить хранение файлов вне базы данных — в так называемых томах на диске.
Давайте разберем по шагам, как устроен этот процесс. Вместо того чтобы записывать двоичные данные файла непосредственно в таблицу базы данных, платформа сохраняет файл в специальный каталог на сервере или сетевом диске, а в самой базе оставляет лишь небольшую текстовую ссылку на этот файл и метаданные (размер, автор, дата создания).
Для активации этого режима выполним следующие действия в интерфейсе программы:
Здесь крайне важно обратить внимание на формат указания пути. Для корректной работы всех пользователей путь должен быть сетевым. Мы должны предоставить общий сетевой доступ к папке на сервере и прописать ее адрес следующим образом:
\\ИмяКомпьютераСервера\ИмяОбщейПапкиФайлов
Если указать локальный путь (например, C:\Files1C), то файлы сможет открывать только тот пользователь, на чьем локальном компьютере физически создана эта папка. Все остальные сотрудники при попытке открыть договор будут получать ошибку доступа.
Несмотря на то, что использование томов хранения файлов кажется идеальным решением, в реальной эксплуатации файловых баз системные администраторы сталкиваются с серьезными проблемами безопасности и администрирования. Рассмотрим их подробнее.
Проблема разграничения прав доступа. В файловом режиме работы базы данных программа запущена непосредственно на компьютерах пользователей. Это означает, что каждый сеанс обращается к сетевой папке с файлами от имени текущего Windows-пользователя. Следовательно, абсолютно каждый сотрудник, имеющий доступ к базе, должен обладать правами на чтение и запись в сетевую папку \\ИмяКомпьютераСервера\ИмяОбщейПапкиФайлов. Возникает огромная брешь в безопасности: любой недоброжелатель или просто невнимательный пользователь может зайти в эту папку через обычный проводник Windows и безвозвратно удалить или изменить оригиналы документов в обход контроля прав 1С. В клиент-серверном (SQL) варианте этой проблемы нет, так как доступ к папке нужен только системной учетной записи, под которой запущен сам сервер приложений 1С.
Сложности синхронизации резервных копий. Когда все файлы хранились внутри файла 1Cv8.1CD, для создания бэкапа достаточно было скопировать один этот файл. При переносе файлов в тома ситуация усложняется. Теперь база данных и файлы на диске живут отдельной жизнью. Если мы настроим резервное копирование базы данных раз в сутки, но забудем про сетевой каталог с файлами, при сбое оборудования мы получим критическую рассинхронизацию. Представим ситуацию: мы восстановили базу из вчерашней копии, но папка с файлами осталась актуальной на сегодня. В системе появятся так называемые "сироты" — файлы на диске, ссылки на которые стерты в восстановленной базе. Обратная ситуация еще хуже: если восстановить старую папку с файлами на новую базу, пользователи увидят в карточках контрагентов ссылки на договора, при нажатии на которые программа выдаст ошибку "Файл не найден на диске". Администратору необходимо тщательно продумывать сценарии одновременного бэкапа базы и томов файлов.
Лимиты оперативной памяти. По умолчанию в настройках работы с файлами в БСП установлен лимит на размер загружаемого файла (как правило, это 50 Мб). Настоятельно не рекомендуется увеличивать этот лимит без веских причин. При работе на 32-разрядных версиях платформы или серверов попытка прочитать или записать файл большого объема (например, тяжелый скан чертежа или видеофайл размером более 100 Мб) может легко привести к аварийному завершению рабочего процесса из-за нехватки виртуального адресного пространства.
В старых конфигурациях, таких как Управление производственным предприятием (УПП 1.3), штатный механизм хранения на диске сильно ограничен или отсутствует для большинства объектов. В таком случае приходится прибегать к доработкам. Однако современная платформа позволяет делать это безопасно, не снимая конфигурацию с поддержки, с помощью механизма расширений.
Мы можем перехватить стандартную процедуру записи файла и перенаправить поток данных на сетевой диск, сохранив в базе данных лишь текстовый путь. Рассмотрим пример программного кода, который можно внедрить через расширение:
&После("ЗаписатьФайлВИнформационнуюБазу")
Процедура Расш_ЗаписатьФайлВИнформационнуюБазу(ПараметрыФайла, АдресВХранилище)
// Перехватываем стандартную запись и сохраняем файл на сетевой диск
ИмяФайлаНаДиске = ПолучитьУникальноеИмяФайла(ПараметрыФайла.Расширение);
ПолныйПуть = "\\Server\Files\" + ИмяФайлаНаДиске;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
ДвоичныеДанные.Записать(ПолныйПуть);
// Записываем в реквизит карточки только имя файла вместо бинарных данных
ПараметрыФайла.ПутьКФайлу = ПолныйПуть;
КонецПроцедуры
Такой подход позволяет сохранить структуру конфигурации типовой и не препятствует автоматическому обновлению штатных объектов.
В последние годы в сообществе администраторов и разработчиков 1С набрал популярность новый тренд, который позволяет полностью решить проблемы безопасности и администрирования дисковых томов — интеграция с S3-совместимыми облачными хранилищами. Давайте проанализируем, почему этот метод превосходит классические сетевые папки.
S3-хранилище (Simple Storage Service) — это объектное хранилище, доступ к которому осуществляется по протоколу HTTP/HTTPS через специальный API. Популярными провайдерами таких услуг являются VK Cloud, Yandex Cloud, Selectel, а для локального бесплатного использования внутри локальной сети компании можно развернуть сервер MinIO.
Рассмотрим ключевые преимущества интеграции 1С с S3:
БСП. Они подключаются в режиме предприятия, не мешают последующим обновлениям и прозрачно заменяют стандартный механизм записи файлов на локальный диск отправкой данных в облако.Если вы приняли решение навести порядок в хранении файлов, вам обязательно понадобятся специализированные инструменты автоматизации.
Обработка автоматического переноса файлов. Что делать, если база уже разрослась до гигантских размеров, а файлы лежат внутри таблиц? Ручной перенос исключен. К счастью, разработчики предусмотрели эту ситуацию. В составе БСП есть встроенная обработка "Перенос файлов в тома". После того как вы создадите и настроите внешние тома или облачное хранилище, достаточно запустить эту обработку. Она в фоновом режиме найдет все двоичные данные внутри таблиц базы, скопирует их на внешний ресурс, проверит контрольные суммы и корректно перепишет ссылки в карточках документов, очистив таблицы базы данных.
Контроль размеров таблиц. Чтобы вовремя заметить аномальный рост базы данных и предотвратить аварийную остановку работы, мы рекомендуем использовать специализированные внешние обработки, такие как "Размер таблиц базы данных" или "SQLБазомер". Эти инструменты позволяют в наглядном виде отобразить, сколько мегабайт занимает каждая конкретная таблица внутри вашего файла 1Cv8.1CD. Вы всегда будете точно знать, какая подсистема расходует драгоценное дисковое пространство.
Подводя итог, можно с уверенностью сказать: хранение тяжелых файлов внутри базы данных 1С — это тупиковый путь развития информационной системы. Использование штатных томов БСП или современных облачных S3-технологий позволяет сохранить быстродействие файловой базы, защитить критически важные документы от утери и сэкономить бюджет на покупку дорогостоящих клиент-серверных лицензий.