
Работа с файлами в 1С часто требует доступа к их содержимому в двоичном виде. Такой подход необходим, если нужно сохранить файл в базу данных, передать его по веб-сервису или сформировать электронный документ без промежуточного сохранения на диск. Для этого в платформе предусмотрены специальные объекты и методы, позволяющие напрямую считывать содержимое и работать с ним как с бинарным потоком.
Ключевым инструментом является объект ДвоичныеДанные. Он позволяет загружать файл целиком и получать его содержимое для последующей обработки. Например, вызов Новый ДвоичныеДанные(ПутьКФайлу) открывает доступ к байтам указанного файла. Такие данные можно хранить в реквизитах справочников или документов, передавать через SOAP/REST-интерфейсы и использовать при генерации печатных форм.
Если требуется пошаговое чтение без загрузки файла в память полностью, применяется объект ЧтениеДвоичныхДанных. Этот механизм удобен при работе с крупными файлами, где важно оптимизировать использование оперативной памяти. С помощью методов Прочитать() или ПрочитатьДвоичныеДанные() можно последовательно обрабатывать блоки данных и избегать перегрузки системы.
Корректное использование двоичных данных в 1С позволяет не только повысить производительность, но и упростить интеграцию с внешними системами, где обмен осуществляется исключительно в формате байтовых потоков. Правильный выбор между загрузкой всего файла и постраничным чтением напрямую влияет на стабильность и скорость работы конфигурации.
Чтение файла с диска в двоичные данные

Для преобразования содержимого файла в тип «ДвоичныеДанные» используется метод Новый ДвоичныеДанные(ИмяФайла). В качестве параметра указывается полный путь к файлу. При этом весь файл загружается в память целиком, что необходимо учитывать при работе с крупными объектами.
Пример:
Файл = "C:\Temp\Документ.pdf";
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(Файл);
Если необходимо считывать только существующие файлы, перед вызовом рекомендуется проверять их наличие через функцию ФайлСуществует(). Это исключит ошибки выполнения.
При загрузке больших файлов целесообразно контролировать доступный объем памяти сервера. Для обработки сверхкрупных данных лучше использовать потоковое чтение через ЧтениеИзФайла, чтобы избегать избыточного потребления ресурсов.
Чтение в «ДвоичныеДанные» удобно для последующей передачи файла в веб-сервисы, записи в хранилища или хранения в базе в двоичном поле.
Использование встроенного объекта ДвоичныеДанные
Объект ДвоичныеДанные позволяет напрямую работать с содержимым файла, минуя сохранение его во временные каталоги. Это упрощает обмен файлами между базой данных, веб-сервисами и внешними системами.
Создание экземпляра выполняется конструктором:
- Новый ДвоичныеДанные(ПутьКФайлу) – загрузка содержимого с диска;
- Новый ДвоичныеДанные(МассивБайт) – формирование из массива байт.
Ключевые методы:
- Записать(Файл) – сохраняет данные на диск;
- ПолучитьДлину() – возвращает размер в байтах;
- ПолучитьОбъект() – преобразует в объект «Текст», «Картинка» или другой поддерживаемый тип;
- ПолучитьФрагмент(Смещение, Длина) – чтение части содержимого без полного копирования.
Рекомендации по применению:
- Использовать ПолучитьФрагмент() при работе с крупными файлами для снижения нагрузки на память.
- Для передачи в веб-сервисы комбинировать с Base64Строка().
- Избегать повторных преобразований в текст при работе с бинарными форматами (PDF, XLSX), чтобы не нарушить структуру.
- При сохранении файлов на диск задавать полный путь во избежание ошибок доступа.
Объект удобно применять для хранения документов в справочниках и регистрах, так как он сериализуется стандартными механизмами 1С и корректно обрабатывается при обмене через универсальные форматы.
Получение двоичных данных из табличной части
При хранении файлов в табличной части часто используется реквизит типа «ХранилищеЗначения» или «ДвоичныеДанные». Для извлечения содержимого необходимо обращаться к конкретной строке и колонке.
Пример получения содержимого:
| ФайлХранилище = ТабличнаяЧастьФайлы[0].Файл; |
| ДвоичныеДанные = ФайлХранилище.Получить(); |
| ЗаписатьФайл(«C:\Temp\Документ.pdf», ДвоичныеДанные); |
Если в колонке хранится тип «ХранилищеЗначения», вызов метода Получить() возвращает двоичные данные. Для прямого сохранения можно использовать функцию ЗаписатьФайл() или объект ЗаписьДвоичныхДанных для потоковой записи.
Для перебора всех строк:
| Для Каждого Стр Из ТабличнаяЧастьФайлы Цикл |
| ДвоичныеДанные = Стр.Файл.Получить(); |
| ИмяФайла = Стр.Имя; |
| ЗаписатьФайл(«C:\Temp\» + ИмяФайла, ДвоичныеДанные); |
| КонецЦикла; |
При работе с большими файлами рекомендуется использовать метод Прочитать() у ЧтениеДвоичныхДанных с буферизацией, чтобы избежать переполнения памяти.
Конвертация двоичных данных в строку Base64
В 1С для передачи файлов через веб-сервисы, REST API или хранения в текстовых полях используется кодирование содержимого в Base64. Это позволяет безопасно преобразовать двоичные данные в строковый вид.
Алгоритм преобразования в 1С:
- Получить поток двоичных данных из файла или объекта ДвоичныеДанные.
- Создать объект ЧтениеИзДвоичногоПотока и считать данные в буфер.
- Использовать функцию Base64ЗначениеСтрока() для преобразования в строку.
Пример кода:
ДвоичныеДанные = Новый ДвоичныеДанные("C:\temp\report.pdf");
СтрокаBase64 = Base64ЗначениеСтрока(ДвоичныеДанные);
Рекомендации при работе:
- Не хранить большие файлы в виде Base64 внутри базы – используйте временные хранилища.
- При передаче через HTTP всегда указывайте кодировку UTF-8 для исключения ошибок.
- Для экономии памяти обрабатывайте данные потоками, а не целиком загружайте в переменную.
- Проверяйте длину итоговой строки: размер увеличивается примерно на 33% относительно исходного файла.
Сохранение двоичных данных в файл на диске

Для записи содержимого типа «ДвоичныеДанные» в файл используется объект «ЗаписьФайла». Он позволяет поэтапно выгружать данные без загрузки всего содержимого в память, что важно при работе с крупными файлами.
Пример записи:
ДвоичныеДанные = Новый ДвоичныеДанные("C:\Temp\source.bin");
Запись = Новый ЗаписьФайла("C:\Temp\result.bin");
Поток = ДвоичныеДанные.ПолучитьПоток();
Запись.Записать(Поток);
Запись.Закрыть();
Использование метода ПолучитьПоток() обеспечивает корректную работу с большими объемами. При прямом обращении через Записать() без потока возможно переполнение памяти.
Для бинарных данных текстовый режим записи недопустим. Важно убедиться, что путь к файлу доступен пользователю 1С и не требует административных прав. При работе в тонком клиенте файл сохраняется на сервере, в веб-клиенте – также на стороне сервера. Для сохранения на рабочем месте следует использовать «ДиалогВыбораФайла» и метод ЗаписатьФайл().
Рекомендуется явно закрывать все потоки, чтобы избежать блокировки файловой системы и ошибок при повторной записи.
Работа с изображениями через двоичные данные

В 1С изображения часто хранятся в виде двоичных данных (ТипЗнч = ДвоичныеДанные). Для чтения содержимого файла используйте метод `Получить()`, который возвращает поток байт. Пример: `ДвоичныеДанные = Новый ДвоичныеДанные(); Поток = ДвоичныеДанные.Получить();`.
Для сохранения изображения на диск применяют метод `Записать(ПутьКФайлу)`. Важно указывать корректное расширение файла, соответствующее формату изображения, иначе стандартные просмотрщики могут не открыть файл.
При загрузке изображения из внешнего источника создается объект `ДвоичныеДанные` и через метод `Загрузить(ПутьКФайлу)` заполняется бинарное содержимое. Для оптимизации работы с большими изображениями рекомендуется использовать потоковое чтение с `Чтение(РазмерБуфера)`, чтобы избежать переполнения оперативной памяти.
Для передачи изображений в другие объекты 1С используется сериализация двоичных данных в строку Base64 через метод `ПреобразоватьВСтроку(«Base64»)`. Обратное преобразование выполняется методом `ИзСтроки(«Base64»)`. Такой подход удобен при хранении изображений в регистре сведений или передаче через веб-сервисы.
При работе с изображениями следует контролировать тип контента: JPEG, PNG или BMP. Для автоматического определения формата можно анализировать первые байты файла (магические числа). Это важно при динамической генерации имен файлов и предотвращении ошибок при последующем открытии.
Использование двоичных данных позволяет обрабатывать изображения без прямого обращения к файловой системе, что особенно актуально для веб-сервисов и мобильных приложений на платформе 1С. Правильное управление потоками и контроль формата обеспечивают стабильность и предсказуемость работы с изображениями.
Передача двоичных данных через веб-сервисы 1С

В 1С передача двоичных данных через веб-сервисы реализуется с использованием типов данных ДвоичныеДанные или Base64Binary. Для SOAP-сервисов двоичные файлы конвертируются в Base64 строку, которая включается в XML-запрос. В REST-сервисах двоичные данные можно передавать напрямую через тело запроса с указанием соответствующего MIME-типа, например application/octet-stream.
При отправке через SOAP необходимо использовать методы объекта HTTPСоединение или ВебСервисКлиент, формируя запрос следующим образом: объект ДвоичныеДанные преобразуется методом КакBase64(), а на стороне сервиса – обратно в двоичный массив с помощью ИзBase64(). Это гарантирует корректную сериализацию данных без потери информации.
Для REST API рекомендуется использовать методы POST или PUT, передавая двоичный поток через HTTPЗапрос.УстановитьТелоИзСтроки или УстановитьТелоИзФайла. Размер передаваемого файла ограничен настройками сервера и параметрами МаксимальныйРазмерТелаЗапроса. Оптимально разбивать файлы размером более 10 МБ на части и передавать последовательно с указанием контрольной суммы для проверки целостности.
При обработке полученных данных на стороне 1С необходимо проверять MIME-тип и при необходимости сохранять в объект ВременныйФайл перед дальнейшей обработкой. Для больших файлов рекомендуется использовать потоковую запись через ПотокЗаписи и чтение по блокам, чтобы избежать переполнения оперативной памяти.
Для повышения производительности передачи двоичных данных через веб-сервисы 1С стоит применять сжатие данных с помощью GZip и проверять контрольные суммы (например, MD5) перед отправкой и после получения. В случае REST-сервисов поддержка сжатия указывается в заголовках Content-Encoding и Accept-Encoding.
Вопрос-ответ:
Как в 1С получить содержимое файла в виде массива байт?
В 1С для получения двоичных данных файла можно использовать объект «ФайловаяСистема» или методы типа «ПрочитатьКакМассивБайт» у объекта «Файл». Сначала создаётся объект файла с указанием пути, затем вызывается метод, возвращающий массив байт. Полученный массив можно использовать для передачи в другие объекты, например, для сохранения в реквизит «БинарныеДанные» документа или для отправки по сети.
Можно ли получить данные файла без сохранения его на диск?
Да, в 1С существует возможность работать с файлами напрямую в памяти. Например, если файл загружен через «ВыбратьФайл» или приходит через HTTP-сервис, его содержимое можно сразу считать в массив байт с помощью методов «ПолучитьДвоичныеДанные» или «ПрочитатьКакМассивБайт». Это позволяет обрабатывать данные без создания временного файла на диске и упрощает интеграцию с другими системами.
Как правильно обрабатывать большие файлы при чтении их в двоичном виде?
При работе с крупными файлами важно учитывать ограничение оперативной памяти. Вместо чтения всего файла целиком можно использовать потоковое чтение через объект «ФайловыйПоток». Метод «Прочитать» позволяет считывать данные частями, например, по 1 Мб, и сохранять их в хранилище или отправлять по частям. Такой подход предотвращает зависания 1С при работе с файлами большого объёма и уменьшает нагрузку на сервер.
В каких случаях полезно хранить файлы в виде двоичных данных внутри 1С?
Хранение файлов в виде двоичных данных внутри базы 1С удобно, когда нужно сохранить документы вместе с объектами учета, чтобы обеспечить их целостность и доступность для пользователей без необходимости обращаться к файловой системе. Также это упрощает резервное копирование и перенос базы, так как все данные находятся в одном месте. Однако для очень больших файлов этот метод может увеличить размер базы и снизить скорость работы, поэтому иногда применяют комбинированный подход с хранением ссылок на файлы на диске.
