Как сохранить файл в 1С программно: на диск, на клиенте и сервере
Как сохранить файл в 1С зависит от того, что сохраняем и где выполняется код.
Двоичные данные пишутся на диск методом ДвоичныеДанные.Записать(),
отчёт или печатная форма — методом ТабличныйДокумент.Записать()
с нужным ТипФайлаТабличногоДокумента (PDF, XLSX, MXL),
текстовые файлы — объектом ЗаписьТекста.
Ключевой момент: серверный код видит только диски сервера.
Чтобы файл оказался у пользователя, его передают с сервера на клиент через
временное хранилище и НачатьПолучениеФайлаССервера().
Сохранить данные в файл: ДвоичныеДанные.Записать
Универсальный способ в 1С сохранить данные в файл — объект ДвоичныеДанные.
Он подходит для любого содержимого: PDF из вложения, картинки, архива, ответа HTTP-сервиса.
Метод Записать() принимает полное имя файла или поток:
// Двоичные данные уже есть (из реквизита, HTTP-ответа, временного хранилища)
Данные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
// Записываем на диск (на сервере — диск сервера!)
Данные.Записать("D:\Exchange\schet_123.pdf");
Конструктор Новый ДвоичныеДанные(ИмяФайла) решает и обратную задачу — прочитать
существующий файл в память, чтобы затем положить его во временное хранилище или в реквизит
типа ХранилищеЗначения. Для асинхронного контекста клиента есть парный метод
ЗаписатьАсинх(ИмяФайла), возвращающий Обещание.
Сохранить отчёт в файл 1С: табличный документ в PDF, XLSX, MXL
Чтобы сохранить отчёт в файл, в 1С используют метод Записать() табличного
документа. Формат задаёт второй параметр — значение перечисления
ТипФайлаТабличногоДокумента:
ТабДок = Новый ТабличныйДокумент;
// ... заполняем: СКД, макет, СформироватьПечатнуюФорму и т.п.
ТабДок.Записать("D:\Reports\prodazhi.pdf", ТипФайлаТабличногоДокумента.PDF);
ТабДок.Записать("D:\Reports\prodazhi.xlsx", ТипФайлаТабличногоДокумента.XLSX);
ТабДок.Записать("D:\Reports\prodazhi.mxl", ТипФайлаТабличногоДокумента.MXL);
Метод доступен и на клиенте, и на сервере (включая веб-клиент — там платформа сама
предложит пользователю сохранить результат). Для PDF с длительным хранением есть
варианты PDF_A_1…PDF_A_3.
Документ сохранить в файл: печатная форма в PDF
Типовая задача «документ сохранить в файл» в 1С сводится к тому же табличному документу:
печатная форма счёта, накладной или акта — это ТабличныйДокумент, который
формирует команда печати. Получаем его программно и пишем на диск:
&НаСервере
Процедура СохранитьПечатнуюФормуНаСервере(ДокументСсылка, ПутьКФайлу)
// В типовых на БСП печатную форму отдаёт менеджер печати
ТабДок = Документы.СчетНаОплатуПокупателю.ПечатнаяФормаСчета(ДокументСсылка);
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
КонецПроцедуры
ТабличныйДокумент.Записать() и выполнит его.
Сохранить текстовый файл: ЗаписьТекста
Для текстовых форматов (выгрузки CSV, логи, обменные файлы) используется объект
ЗаписьТекста. В конструкторе задаются имя файла, кодировка и режим дозаписи:
Запись = Новый ЗаписьТекста("D:\Exchange\vygruzka.csv",
КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("Код;Наименование;Цена");
Запись.ЗаписатьСтроку("00-001;Ноутбук;54900");
Запись.Записать("строка без перевода"); // разделитель не добавляется
Запись.Закрыть(); // без Закрыть() файл останется пустым или занятым
Данные буферизуются: пока не вызван Закрыть(), содержимое может не попасть
на диск, а файл остаётся заблокированным процессом 1С. Готовый текстовый документ
целиком сохраняет и ТекстовыйДокумент.Записать(ИмяФайла, ТипФайла, РазделительСтрок).
Передача файла с сервера на клиент: временное хранилище
В клиент-серверной базе Записать() в серверном коде сохраняет файл на диск
сервера. Чтобы сохранить файл 1С 8.3 на компьютер пользователя, файл
формируют на сервере, помещают во временное хранилище и получают на клиенте:
&НаСервере
Функция СформироватьСчетНаСервере()
ТабДок = Документы.СчетНаОплатуПокупателю.ПечатнаяФормаСчета(ДокументСсылка);
ИмяВрФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяВрФайла, ТипФайлаТабличногоДокумента.PDF);
Данные = Новый ДвоичныеДанные(ИмяВрФайла);
УдалитьФайлы(ИмяВрФайла);
Возврат ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор(ЭтаФорма));
КонецФункции
&НаКлиенте
Процедура СохранитьСчет(Команда)
Адрес = СформироватьСчетНаСервере();
Оповещение = Новый ОписаниеОповещения("СохранитьСчетЗавершение", ЭтотОбъект);
НачатьПолучениеФайлаССервера(Оповещение, Адрес, "Счет.pdf");
КонецПроцедуры
&НаКлиенте
Процедура СохранитьСчетЗавершение(ПолученныйФайл, ДопПараметры) Экспорт
Если ПолученныйФайл <> Неопределено Тогда
ПоказатьОповещениеПользователя("Файл сохранён", , ПолученныйФайл.Имя);
КонецЕсли;
КонецПроцедуры
НачатьПолучениеФайлаССервера() — асинхронный вариант, работающий во всех
клиентах, включая веб-клиент. Старый синхронный ПолучитьФайл(Адрес, ИмяФайла,
Интерактивно) в конфигурациях с отключёнными синхронными вызовами вызывает ошибку
«Использование синхронных методов на клиенте не разрешено» — в новом коде его не используют.
КаталогВременныхФайлов(), имя компьютера и пользователя
ОС на сервере: сразу видно, от чьего имени работает код и куда реально пишутся файлы.
Выбор каталога и имени файла: ДиалогВыбораФайла
Когда путь должен выбрать пользователь, на клиенте открывают ДиалогВыбораФайла
в режиме сохранения или выбора каталога:
&НаКлиенте
Процедура ВыбратьПутьИСохранить(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Сохранить файл";
Диалог.Фильтр = "Документ PDF (*.pdf)|*.pdf";
Диалог.Расширение = "pdf";
Оповещение = Новый ОписаниеОповещения("ВыборЗавершение", ЭтотОбъект);
Диалог.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВыборЗавершение(ВыбранныеФайлы, ДопПараметры) Экспорт
Если ВыбранныеФайлы <> Неопределено Тогда
ПутьКФайлу = ВыбранныеФайлы[0];
// дальше — получение файла с сервера по выбранному пути
КонецЕсли;
КонецПроцедуры
Для выбора папки используйте режим РежимДиалогаВыбораФайла.ВыборКаталога —
выбранный путь окажется в свойстве Каталог. В веб-клиенте диалог требует
установленного расширения работы с файлами.
Сохранить вложение справочника на диск
Вложения и присоединённые файлы хранятся в базе как двоичные данные, поэтому их сохранение —
комбинация «достать ДвоичныеДанные → Записать()». Если файл лежит
в реквизите типа ХранилищеЗначения:
&НаСервере
Процедура СохранитьВложениеНаСервере(ФайлСсылка, Каталог)
Данные = ФайлСсылка.ДанныеФайла.Получить(); // ХранилищеЗначения → ДвоичныеДанные
Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
Данные.Записать(Каталог + "\" + ФайлСсылка.Наименование
+ "." + ФайлСсылка.Расширение);
КонецЕсли;
КонецПроцедуры
В типовых конфигурациях на БСП присоединённые файлы лежат в отдельных справочниках
*ПрисоединенныеФайлы, а двоичные данные достают функции общего модуля
работы с файлами (файл может физически находиться в томе на диске, а не в базе).
Дальше схема та же: двоичные данные — во временное хранилище — на клиент.
Как сохранить файл в 1С 8.3 программно: какой способ выбрать
- Произвольные бинарные данные (PDF, картинка, архив) —
ДвоичныеДанные.Записать(). - Отчёт, печатная форма —
ТабличныйДокумент.Записать()сТипФайлаТабличногоДокумента. - Текст, CSV, обменный файл —
ЗаписьТекстас явной кодировкой. - Файл должен оказаться у пользователя — временное хранилище +
НачатьПолучениеФайлаССервера(). - Путь выбирает пользователь —
ДиалогВыбораФайлана клиенте. - Файл из базы (вложение) — достать
ДвоичныеДанныеи записать любым способом выше.
Частые ошибки при программном сохранении файлов в 1С
-
Серверный код пишет «не туда».
Записать("C:\...")на сервере создаёт файл на диске сервера, а не на компьютере пользователя. Для клиента — только передача через временное хранилище. -
«Использование синхронных методов на клиенте не разрешено». Вызван
синхронный
ПолучитьФайл()илиДиалог.Выбрать()при отключённом режиме синхронных вызовов. Переходите наНачатьПолучениеФайлаССервера()иПоказать()с описанием оповещения. -
Нет прав на каталог. Серверный код работает от имени пользователя
службы сервера 1С (например, USR1CV8) — у него должны быть права записи в целевую папку.
Сетевые ресурсы указывайте UNC-путём (
\\server\share), подключённые диски службе недоступны. -
Недопустимые символы в имени файла. Имя, собранное из наименования
документа, может содержать
/ \ : * ? " |— перед записью символы нужно вычистить, иначеЗаписать()упадёт. -
Не вызван
Закрыть()у ЗаписьТекста. Файл остаётся пустым или заблокированным до закрытия записи (или завершения процесса). - Веб-клиент без расширения работы с файлами. Прямой записи на диск в веб-клиенте нет: диалоги и сохранение работают только через расширение либо через стандартное получение файла браузером.
-
Мусор из временных файлов. После
ПолучитьИмяВременногоФайла()и передачи данных вызывайтеУдалитьФайлы(), иначе каталог временных файлов сервера растёт бесконтрольно.
Частые вопросы о сохранении файлов в 1С
Как сохранить файл на сервере, а не на компьютере пользователя?
Выполнить запись в серверном контексте (&НаСервере или общий модуль
с признаком «Сервер»): Данные.Записать("D:\Exchange\file.pdf"). Путь
трактуется относительно файловой системы сервера, а права проверяются для пользователя
службы сервера 1С — убедитесь, что у него есть запись в целевой каталог.
Как программно сохранить отчёт в PDF в 1С 8.3?
Сформировать ТабличныйДокумент (СКД или макет) и вызвать
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF). Метод работает
на клиенте и на сервере; для архивного хранения есть форматы PDF/A.
Почему ПолучитьФайл выдаёт ошибку про синхронные вызовы?
В свойствах конфигурации отключён режим использования синхронных вызовов расширений
платформы, а ПолучитьФайл() — синхронный метод. Используйте асинхронный
НачатьПолучениеФайлаССервера() с описанием оповещения — он работает во всех
клиентах, включая веб-клиент.
ИИ Консоль кода 1С
Лайт
Для ознакомления с возможностями
- Полный набор инструментов без урезаний
- Без ввода карты
Старт
Для индивидуального использования
- До 5 конфигураций
- Встроенный агент запросов 1С
-
≈ 100 задач Подробнее про лимиты
- Техническая поддержка
Продвинутый
Популярный выборДля интенсивного использования или команд
- До 15 конфигураций
- Встроенный агент запросов 1С
-
≈ 300 задач Подробнее про лимиты
-
Свои подписки Codex, Claude и любые OpenAI-совместимые
-
Внешние обработки без Конфигуратора
- Приоритетная техническая поддержка