Сохранение файлов на диск в 1С:Предприятии 8.3 — вручную и кодом

· 9 мин

Содержание

Чтобы сохранить файл на диск в 1С, откройте отчёт или печатную форму и нажмите значок дискеты (или Ещё → Сохранить как), выберите формат — XLSX, PDF, DOCX, MXL — и папку. В коде то же делает одна строка: ТабличныйДокумент.Записать("C:\Выгрузка\Отчет.xlsx", ТипФайлаТабличногоДокумента.XLSX).

Дальше нюансы: где именно окажется файл (на вашем компьютере или на сервере), как писать картинки и архивы, как показать пользователю окно «Сохранить как» и почему в веб-клиенте прямой путь C:\ не работает .

1. Как сохранить отчёт или печатную форму на диск без программирования

Большинству пользователей код не нужен. Платформа 1С 8.3 умеет сохранять любой табличный документ — отчёт, печатную форму, выведенный список — штатными кнопками.

Отчёт

  1. Сформируйте отчёт.
  2. Нажмите значок дискеты на панели отчёта или откройте Ещё → Сохранить как.
  3. В поле «Тип файла» выберите формат.
  4. Укажите папку и имя, нажмите «Сохранить».

Если кнопки на панели нет, сработает главное меню: ☰ → Файл → Сохранить как. Курсор при этом должен стоять в самом табличном документе, а не в настройках отчёта.

Печатная форма

  1. В документе нажмите «Печать» и выберите нужную форму.
  2. В окне предпросмотра нажмите кнопку «Сохранить» (дискета).
  3. Отметьте один или несколько форматов галочками.
  4. Выберите, куда сохранить: в папку на компьютере или прикрепить к документу.

В типовых конфигурациях в этом окне есть ещё две полезные опции: упаковать файлы в ZIP и транслитерировать имена. Транслитерация выручает, если файл уйдёт контрагенту с почтовым сервером, который ломает кириллицу.

Список документов или справочника

  1. Откройте журнал или справочник.
  2. Выделите нужные строки (или ничего — тогда выведется весь список).
  3. Ещё → Вывести список, отметьте колонки, нажмите «ОК».
  4. Получится табличный документ — его сохраняйте так же, как отчёт.

Какой формат выбрать

ФорматКогда братьЧто учесть
📗 XLSXДальше считать в ExcelОбъединённые ячейки и картинки иногда «плывут»
📕 PDFОтправить контрагенту, распечататьНе редактируется
📘 DOCXПравить текст договора или письмаТаблицы со сложной разметкой съезжают
📙 MXLОткрыть потом снова в 1СБез 1С или «Просмотра MXL» не открыть
📄 TXT, HTMLЗагрузить в другую программу, выложить на сайтОформление теряется

Вложенные файлы (сканы, договоры)

К документам и справочникам в типовых конфигурациях прикрепляют файлы — значок скрепки или команда «Файлы». Чтобы забрать вложение на диск, откройте список файлов, выделите нужный и выберите «Сохранить как» в меню Ещё или в контекстном меню по правой кнопке. Двойной щелчок файл только открывает, но не сохраняет его в выбранную вами папку.

2. Программное сохранение файла: ТабличныйДокумент, ТекстовыйДокумент и объект Файл

Когда выгрузку нужно сделать из своей обработки, у каждого вида данных свой метод Записать().

Табличный документ

ТабДок = Новый ТабличныйДокумент;
// ... заполнение макетом ...
ТабДок.Записать("C:\Выгрузка\Остатки.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Второй параметр задаёт формат. Самые ходовые значения: MXL, XLSX, XLS, PDF, DOCX, ODS, HTML, TXT.

Текстовый файл

Для одного куска текста хватит ТекстовыйДокумент:

Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку("Артикул;Наименование;Остаток");
Текст.ДобавитьСтроку("A-001;Бумага А4;120");
Текст.Записать("C:\Выгрузка\остатки.csv", КодировкаТекста.UTF8);

Для больших выгрузок построчно надёжнее ЗаписьТекста: она не держит весь файл в памяти.

Запись = Новый ЗаписьТекста("C:\Выгрузка\большой.csv", КодировкаТекста.ANSI);
Для Каждого Строка Из ТаблицаДанных Цикл
    Запись.ЗаписатьСтроку(Строка.Артикул + ";" + Строка.Остаток);
КонецЦикла;
Запись.Закрыть();

Excel при двойном щелчке по CSV ждёт кодировку Windows-1251. Если файл откроется «кракозябрами», пишите в КодировкаТекста.ANSI или в UTF-8 с BOM.

Объект Файл: проверки перед записью

Объект Файл сам ничего не записывает. Он нужен, чтобы проверить путь и узнать свойства:

Каталог = Новый Файл("C:\Выгрузка");
Если Не Каталог.Существует() Тогда
    СоздатьКаталог("C:\Выгрузка");
КонецЕсли;

ФайлОтчета = Новый Файл("C:\Выгрузка\Остатки.xlsx");
Если ФайлОтчета.Существует() Тогда
    УдалитьФайлы(ФайлОтчета.ПолноеИмя);
КонецЕсли;

Полезные свойства и методы: ПолноеИмя, Имя, ИмяБезРасширения, Расширение, Путь, Существует(), Размер(), ЭтоКаталог(). Для операций с готовыми файлами есть глобальные КопироватьФайл(), ПереместитьФайл(), УдалитьФайлы(), НайтиФайлы().

3. Сохранение двоичных данных: картинки, PDF, архивы

Сканы, фото, PDF от контрагента и ZIP-архивы в 1С хранятся как ДвоичныеДанные. Чаще всего они лежат в реквизите типа ХранилищеЗначения или приходят из временного хранилища.

Запись одним вызовом

Данные = Объект.Скан.Получить();   // ХранилищеЗначения → ДвоичныеДанные
Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
    Данные.Записать("C:\Выгрузка\скан.pdf");
КонецЕсли;

Если данные пришли из временного хранилища по адресу:

Данные = ПолучитьИзВременногоХранилища(Адрес);
Данные.Записать(ПолучитьИмяВременногоФайла("pdf"));

ПолучитьИмяВременногоФайла() выдаёт уникальное имя в каталоге временных файлов. Удобно для промежуточных файлов — но удалять их потом вам.

Потоки для больших объёмов

Файл в сотни мегабайт целиком в ДвоичныеДанные загружать дорого. В актуальных версиях платформы есть потоки: ФайловыйПоток, ЧтениеДанных, ЗаписьДанных. Они пишут кусками.

ПотокЗаписи = ФайловыеПотоки.ОткрытьДляЗаписи("C:\Выгрузка\архив.bin");
Запись = Новый ЗаписьДанных(ПотокЗаписи);
Запись.Записать(ПорцияДанных);   // повторять для каждой порции
Запись.Закрыть();
ПотокЗаписи.Закрыть();

Для ZIP есть отдельный объект ЗаписьZipФайла: добавляете файлы методом Добавить(), затем Записать().

4. Диалог «Сохранить как»: пользователь сам выбирает имя и папку

Жёсткий путь C:\Выгрузка годится для себя. Обработке, которой пользуются другие, нужен диалог выбора файла.

Асинхронный вариант (платформа 8.3.18 и выше)

&НаКлиенте
Асинх Процедура СохранитьФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок = "Куда сохранить отчёт";
    Диалог.Фильтр = "Книга Excel (*.xlsx)|*.xlsx|Документ PDF (*.pdf)|*.pdf";
    Диалог.ПолноеИмяФайла = "Остатки.xlsx";

    Выбранные = Ждать Диалог.ВыбратьАсинх();
    Если Выбранные = Неопределено Тогда
        Возврат; // пользователь нажал «Отмена»
    КонецЕсли;

    Ждать ТабДок.ЗаписатьАсинх(Выбранные[0], ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры

Вариант с оповещением (старые релизы платформы)

До появления Асинх/Ждать диалог открывают методом Показать() и передают ОписаниеОповещения — процедуру, которую платформа вызовет после выбора. Синхронный Диалог.Выбрать() в управляемом приложении при режиме использования модальности «Не использовать» вызовет ошибку — не опирайтесь на него в новых разработках.

Фильтр и расширение

  • 🧩 Строка фильтра — пары «описание|маска», разделённые |.
  • 🧩 Пользователь может стереть расширение. Проверьте его через Новый Файл(Путь).Расширение и при необходимости допишите.
  • 🧩 Свойство Каталог задаёт папку, которая откроется первой. Удобно подставлять последнюю выбранную пользователем — сохраните её в настройках формы, и в следующий раз человеку не придётся заново искать папку.
  • 🧩 Если файл с выбранным именем уже есть, перед записью стоит проверить его через Новый Файл(Путь).Существует() и решить: перезаписать или добавить к имени дату и время.
  • 🧩 Формат в Записать() и расширение в имени должны совпадать: XLSX, записанный как .xls, Excel откроет с предупреждением.

5. Тонкий клиент, веб-клиент и сервер: куда на самом деле попадёт файл

Главная причина «файл не сохраняется» — код выполнился не на том компьютере.

Где выполняется Записать()Куда пишетТипичная ловушка
&НаКлиенте, тонкий клиентДиск пользователяНет прав на папку
&НаКлиенте, веб-клиентБез расширения работы с файлами — никудаПрямой путь C:\ недоступен браузеру
&НаСервере, файловая базаДиск компьютера, где запущен процесс 1СОбычно совпадает с клиентом, поэтому ошибку не видно до перехода на сервер
&НаСервере, клиент-серверная базаДиск сервера 1СФайл появляется на сервере, а пользователь ищет его у себя

Правильная схема для клиент-серверной базы

  1. На сервере формируете данные и кладёте их во временное хранилище: Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор).
  2. Возвращаете адрес на клиент.
  3. На клиенте передаёте файл пользователю.
&НаКлиенте
Асинх Процедура Выгрузить(Команда)
    Адрес = СформироватьНаСервере();
    Ждать ПолучитьФайлССервераАсинх(Адрес, "Остатки.xlsx");
КонецПроцедуры

В тонком клиенте платформа покажет окно сохранения. В веб-клиенте файл уйдёт в обычную загрузку браузера — в папку «Загрузки» или туда, куда настроен браузер.

Расширение работы с файлами в веб-клиенте

Чтобы веб-клиент мог писать на диск по указанному пути, ставят расширение для работы с файлами. В коде проверяют и подключают его методами НачатьПодключениеРасширенияРаботыСФайлами() и НачатьУстановкуРасширенияРаботыСФайлами(). Без расширения остаётся только скачивание через браузер — для большинства задач этого хватает.

Серверный код пишет файлы от имени учётной записи службы сервера 1С, а не от имени пользователя. Сетевая папка, открытая у бухгалтера, для службы может быть закрыта.

6. Автоматическая выгрузка файлов: регламентные задания и пакетный запуск

Ежедневные выгрузки остатков, прайсов, реестров удобно поручить самой базе.

Регламентное задание

  • ⏱ Процедура задания выполняется на сервере, без клиента и без диалогов.
  • ⏱ Путь указывайте сетевой (\\fileserver\obmen\) или локальный путь сервера, не путь чьего-то рабочего места.
  • ⏱ Дайте учётной записи службы 1С права на запись в эту папку.
  • ⏱ В имя файла добавьте дату, чтобы выгрузки не перезаписывали друг друга: "Остатки_" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd") + ".xlsx".
  • ⏱ Ошибки пишите в журнал регистрации через ЗаписьЖурналаРегистрации() — иначе о сбое никто не узнает.

В файловой базе регламентные задания выполняются, только пока база открыта у кого-то из пользователей, — для надёжной выгрузки по расписанию нужен клиент-серверный вариант или внешний запуск.

Пакетный запуск из командной строки

Для файловой базы выгрузку можно запускать планировщиком Windows: платформа открывает базу и сразу выполняет внешнюю обработку .

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Robot" /P"pass" /Execute"D:\Scripts\vygruzka.epf"

Номер платформы в пути подставьте свой. Обработка в обработчике ПриОткрытии делает выгрузку и закрывает сеанс через ЗавершитьРаботуСистемы(Ложь).

Не храните пароль администратора в открытом bat-файле. Заведите отдельного пользователя только с правами на чтение нужных данных.

Пакетная выгрузка вложений

Если надо забрать сотни сканов одним махом, перебирайте файлы запросом и пишите каждый методом ДвоичныеДанные.Записать(). Имена собирайте из номера и даты документа и вычищайте символы, запрещённые в Windows: \ / : * ? " < > |.

Какой способ сохранения вам нужен?

7. Ошибки при сохранении файла на диск и как их избежать

СимптомПричинаЧто сделать
Ошибка при вызове метода контекста (Записать)Нет папки или прав на записьСоздайте каталог через СоздатьКаталог(), проверьте права учётной записи
Файл «не появился»Код отработал &НаСервереИщите на сервере или переделайте через временное хранилище
Использование модальных окон в данном режиме запрещеноВызов Выбрать()Перейдите на ВыбратьАсинх() или Показать()
Безопасный режим запрещает операциюВнешняя обработка без разрешенийПодключите её через «Дополнительные отчёты и обработки» с нужными разрешениями или включите в конфигурацию
Файл занятПредыдущая версия открыта в ExcelЗакройте файл или пишите под новым именем

Перед массовой выгрузкой проверьте свободное место на диске сервера. Временные файлы, которые вы создавали через ПолучитьИмяВременногоФайла(), удаляйте в конце процедуры — сервер их сам не чистит.

8. Частые вопросы

Можно ли сохранить сразу несколько печатных форм одним файлом?
Можно сохранить их одним архивом: в окне сохранения печатной формы отметьте нужные форматы и галочку упаковки в ZIP.
Почему при сохранении в Excel пропали картинки и штрихкоды?
Сложные элементы макета (рисунки, диаграммы) переносятся не во все форматы одинаково. Для документа «как на экране» берите PDF.
Как сохранить файл из 1С, если нет кнопки «Сохранить»?
Откройте главное меню ☰ → Файл → Сохранить как, предварительно щёлкнув внутри табличного документа.
Где по умолчанию хранятся прикреплённые файлы — в базе или на диске?
Зависит от настройки хранения файлов в томах. По умолчанию — в самой базе; при настроенных томах — в папках на сервере. Сохранять их пользователю всё равно нужно через команду «Сохранить как».
Можно ли сохранить MXL-файл, чтобы его открыл человек без 1С?
MXL без 1С открыть не получится. Для таких адресатов выбирайте XLSX или PDF.