1С 8.3 Хранилище двоичных данных
Данные > Примеры кода 1С > 1С 8.3 Файлы, каталоги
Перейти в раздел примеры кода 1С 8.3:

Хранилище двоичных данных (ХДД) это механизм платформы 1С:8.3, 8.5, позволяющий хранить большие объёмы тяжёлых данных (сканы документов, изображения, видео, аудио, архивы) вне основной базы данных.Вместо того чтобы перегружать SQL‑сервер, такие объекты сохраняются в отдельном файловом каталоге или во внешнем S3‑совместимом хранилище. Таким образом, база данных остаётся компактной и быстрой, а двоичные объекты хранятся в специализированной среде.
Основные преимущества:
- Снижение нагрузки на СУБД - база работает быстрее, так как не хранит гигабайты бинарных данных.
- Ускорение обновлений и обслуживания - резервное копирование и восстановление выполняются быстрее.
- Масштабируемость - можно подключать внешние S3‑хранилища и распределять нагрузку.
- Гибкость - администратор задаёт минимальный размер объекта, начиная с которого данные будут уходить в ХДД.
- Прозрачность для разработчика - реквизиты типа ХранилищеЗначения автоматически сохраняются в ХДД, без дополнительного кода.
Настройка и использование:
- Включение ХДД производится через Функции для технического специалиста.
- Указывается минимальный размер объекта (например, 1 МБ). Всё, что больше - уходит в ХДД.
В качестве хранилища можно выбрать:
- каталог файловой системы;
- внешнее S3‑хранилище (например, MinIO, Amazon S3, Яндекс Object Storage).
Работает только в клиент‑серверном режиме (файловые базы не поддерживаются).
Новые возможности последних релизов:
- в 8.3.24 появилась дедупликация данных: система автоматически удаляет дубликаты файлов, экономя место. Также добавлен доступ к статистике хранилища (объём, количество объектов, время последней очистки).
- в 8.3.27 интерактивное и программное управление хранилищем (через rac, Java API, COM).
- в 8.3.28 внедрено горизонтальное масштабирование: можно использовать несколько сервисов ХДД и распределять нагрузку. Также реализован механизм переноса данных из базы в ХДД и обратно.
Практические сценарии:
- Архив документов: сканы договоров и актов хранятся в S3, а в базе остаются только ссылки.
- Фото и медиа: карточки товаров с изображениями не перегружают SQL‑сервер.
- Корпоративные внедрения: при объёмах в терабайты ХДД позволяет масштабировать систему без потери производительности.
Загрузка файла в документ в 1С 8.3:
// Процедура загружает внешний файл (например, PDF, изображение или текстовый документ)
// и сохраняет его в реквизите документа в виде объекта ХранилищеЗначения.
// Это позволяет хранить вложения прямо в базе данных 1С, а не только на диске.
// Задача: прикрепить файл к документу и обеспечить его сохранность в системе.
Процедура ЗагрузитьФайлВДокумент(ИмяФайла, ДокументОбъект)
// Загружаем файл в двоичные данные:
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
// Оборачиваем в ХранилищеЗначения:
Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
// Записываем в реквизит документа:
ДокументОбъект.Вложение = Хранилище;
// Сохраняем документ:
ДокументОбъект.Записать();
КонецПроцедуры
// и сохраняет его в реквизите документа в виде объекта ХранилищеЗначения.
// Это позволяет хранить вложения прямо в базе данных 1С, а не только на диске.
// Задача: прикрепить файл к документу и обеспечить его сохранность в системе.
Процедура ЗагрузитьФайлВДокумент(ИмяФайла, ДокументОбъект)
// Загружаем файл в двоичные данные:
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
// Оборачиваем в ХранилищеЗначения:
Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
// Записываем в реквизит документа:
ДокументОбъект.Вложение = Хранилище;
// Сохраняем документ:
ДокументОбъект.Записать();
КонецПроцедуры
Сохранение файла из документа на диск в 1С 8.3:
// Процедура извлекает ранее сохранённое вложение из документа
// и сохраняет его обратно на диск в виде файла.
// Задача: выгрузить вложение из базы 1С для дальнейшего использования вне системы.
Процедура СохранитьФайлИзДокумента(ДокументОбъект, ИмяФайла)
// Получаем двоичные данные из хранилища
ДвоичныеДанные = ДокументОбъект.Вложение.Получить();
// Сохраняем на диск
ДвоичныеДанные.Записать(ИмяФайла);
КонецПроцедуры
// и сохраняет его обратно на диск в виде файла.
// Задача: выгрузить вложение из базы 1С для дальнейшего использования вне системы.
Процедура СохранитьФайлИзДокумента(ДокументОбъект, ИмяФайла)
// Получаем двоичные данные из хранилища
ДвоичныеДанные = ДокументОбъект.Вложение.Получить();
// Сохраняем на диск
ДвоичныеДанные.Записать(ИмяФайла);
КонецПроцедуры
Проверка наличия вложения в 1С 8.3:
// Функция проверяет, есть ли у документа вложение.
// Возвращает Истина, если вложение отсутствует, и Ложь - если оно есть.
// Задача: быстро определить, прикреплён ли файл к документу.
Функция ЕстьВложение(ДокументОбъект) Экспорт
Возврат НЕ ЗначениеЗаполнено(ДокументОбъект.Вложение);
КонецФункции
// Возвращает Истина, если вложение отсутствует, и Ложь - если оно есть.
// Задача: быстро определить, прикреплён ли файл к документу.
Функция ЕстьВложение(ДокументОбъект) Экспорт
Возврат НЕ ЗначениеЗаполнено(ДокументОбъект.Вложение);
КонецФункции
Сохранение структуры в документ в 1С 8.3:
// Процедура создаёт структуру с дополнительными данными (например, автор, дата, комментарий)
// и сохраняет её в реквизите документа через ХранилищеЗначения.
// Задача: хранить метаданные или служебную информацию, связанную с документом.
Процедура СохранитьСтруктуруВДокумент(ДокументОбъект)
// Создаём структуру
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Автор", "Артур");
СтруктураДанных.Вставить("Дата", ТекущаяДата());
СтруктураДанных.Вставить("Комментарий", "Пример использования ХранилищеЗначения");
// Сохраняем в хранилище
ДокументОбъект.ТехническиеДанные = Новый ХранилищеЗначения(СтруктураДанных);
ДокументОбъект.Записать();
КонецПроцедуры
// и сохраняет её в реквизите документа через ХранилищеЗначения.
// Задача: хранить метаданные или служебную информацию, связанную с документом.
Процедура СохранитьСтруктуруВДокумент(ДокументОбъект)
// Создаём структуру
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Автор", "Артур");
СтруктураДанных.Вставить("Дата", ТекущаяДата());
СтруктураДанных.Вставить("Комментарий", "Пример использования ХранилищеЗначения");
// Сохраняем в хранилище
ДокументОбъект.ТехническиеДанные = Новый ХранилищеЗначения(СтруктураДанных);
ДокументОбъект.Записать();
КонецПроцедуры
Получение структуры из документа в 1С 8.3:
// Функция извлекает сохранённую структуру из документа.
// Если данные есть - возвращает структуру, если нет - возвращает Неопределено.
// Задача: получить ранее сохранённые метаданные или служебную информацию.
Функция ПолучитьСтруктуруИзДокумента(ДокументОбъект) Экспорт
Если ЗначениеЗаполнено(ДокументОбъект.ТехническиеДанные) Тогда
Возврат ДокументОбъект.ТехническиеДанные.Получить();
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
// Если данные есть - возвращает структуру, если нет - возвращает Неопределено.
// Задача: получить ранее сохранённые метаданные или служебную информацию.
Функция ПолучитьСтруктуруИзДокумента(ДокументОбъект) Экспорт
Если ЗначениеЗаполнено(ДокументОбъект.ТехническиеДанные) Тогда
Возврат ДокументОбъект.ТехническиеДанные.Получить();
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Итог:
Хранилище двоичных данных в 1С 8.3 это стратегический инструмент для оптимизации работы крупных информационных баз. Оно снижает нагрузку на СУБД, ускоряет администрирование и открывает путь к гибкой интеграции с современными облачными сервисами. Для разработчика и администратора это означает меньше проблем с раздутыми базами, больше контроля над хранением, возможность строить масштабируемые решения уровня enterprise.
💡Эволюция методов ХДД в 1С 8.3:
>8.3.23
ЗагрузитьДифференциальнуюРезервнуюКопию(). Загружает дифференциальную резервную копию хранилища двоичных данных.
ЗагрузитьПолнуюРезервнуюКопию(). Загружает полную резервную копию хранилища двоичных данных.
ПолучитьМинимальныйРазмерЗаписываемыхДанных(). Возвращает минимальный размер записываемых данных (размер порции).
ПолучитьРежимИспользованияХранилищаДвоичныхДанных(). Возвращает режим использования хранилища двоичных данных.
ПолучитьРежимЧтенияЗаписиХранилищаДвоичныхДанных(). Возвращает режим работы хранилища двоичных данных (чтение/запись).
СоздатьДифференциальнуюРезервнуюКопию(). Создает дифференциальную резервную копию хранилища двоичных данных.
>8.3.24
ОчиститьНеиспользуемоеМестоПоУниверсальнойДате(). Физически удаляет помеченные на удаление данные до указанной даты (UTC).
ПолучитьУниверсальнуюДатуСозданияРезервнойКопии(). Возвращает дату начала создания указанной резервной копии (UTC).
СоздатьПолнуюРезервнуюКопию(). Создает полную резервную копию хранилища двоичных данных.
>8.3.26
ПолучитьИспользованиеКакХранилищаПоУмолчанию(). Возвращает признак использования хранилища двоичных данных по умолчанию.
ПолучитьРежимРазмещенияКопийДанныхВХранилищеДвоичныхДанных(). Возвращает режим размещения копий данных в хранилище двоичных данных.
ПолучитьСоставХранимыхДанных(). Возвращает состав хранимых данных для настройки записи объектов метаданных.
📰 Актуальные новости с тегом #ХДД:
- В версии 8.5.3 улучшено хранилище двоичных данных, позволяющее экономить место и ускорять работу с большими файлами. Теперь несколько баз данных могут использовать одно хранилище, а работа с историей данных оптимизирована. Эти изменения повышают эффективность и удобство использования системы.
- Работа нескольких информационных баз с одним хранилищем двоичных данных
- Поддержка хранилища двоичных данных для истории данных
- Оптимизация запросов к хранилищу двоичных данных
- Использование хранилища двоичных данных при миграции или загрузки из файлов *.dt
- Удаление данных из хранилища двоичных данных при удалении объекта метаданных
- В версии 8.3.29 (она же 8.5.3) реализовано хранилище двоичных данных: для автоматического распределения данных между серверами, исходя из частоты обращения к ним. Система будет определять данные на: "горячие", которые чаще используются; "холодные" — редко.
- Распределение по серверам будет осуществляться с учетом их производительности: горячие данные отправятся на более быстрые серверы с SSD-дисками; а холодные — на менее производительные. Это поможет оптимизировать ресурсы и повысить производительность системы особенно на крупных внедрениях. А также работа нескольких инфобаз с одним хранилищем двоичных данных.
- В версии 8.3.28 (она же 8.5.2) реализовано горизонтальное масштабирование хранилища двоичных данных и механизм переноса данных из хранилища двоичных данных в базу данных и обратно.
- В версии 8.3.27 (она же 8.5.1) реализована возможность управления хранилищами двоичных данных через командную строку.
- В версии 8.3.27 (она же 8.5.1) реализована поддержка лимитов для S3 хранилищ.
- В версии 8.3.26 реализована настройка размещения данных в хранилищах двоичных данных.
- В версии 8.3.24 поддержана возможность подключения к внешним хранилищам двоичных данных по протоколу S3, реализована дедупликация двоичных данных.
- В версии 8.3.23 реализовано управление табличными пространствами базы данных (возможность размещения части БД на самом быстром диске).
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник