К статье
Практический материал

Администрирование · 10 мин

Как копировать файлы в 1С

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

Вопрос о копировании файлов в 1С возникает в нескольких разных ситуациях: нужно перенести присоединенный файл из одного документа в другой, скопировать внешнюю обработку на сервер, продублировать выгрузку для архива или переместить файл программно из встроенного языка. Каждый сценарий решается своим инструментом, и универсальной кнопки «скопировать файл» в типовых конфигурациях нет.

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

Различие между файлами на диске и файлами внутри 1С

Прежде чем копировать, важно понять, где физически находится файл. В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) документы, сканы и изображения хранятся как «присоединенные файлы» — внутри информационной базы или в томах на диске, но привязаны к конкретному объекту: документу, элементу справочника, письму. Просто скопировать такой файл через проводник Windows недостаточно — связь с объектом в базе потеряется.

Файлы вне базы — внешние обработки (.epf), отчеты (.erf), файлы выгрузки (.xml, .csv), архивы конфигураций (.dt) — лежат в обычной файловой системе и копируются стандартными средствами ОС или программно из 1С. Определите тип файла до начала работы: от этого зависит весь порядок действий.

Как скопировать присоединенный файл через интерфейс

Самый простой сценарий — перенести скан или документ из одной карточки в другую без программирования. В типовых конфигурациях это делается через промежуточное сохранение на диск: откройте объект-источник, найдите присоединенный файл в списке файлов, выделите его и выберите команду «Сохранить на диск» (обычно в меню «Еще»). Файл попадет в указанную папку компьютера.

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

Альтернативный вариант — перетаскивание мышью (drag-and-drop): в некоторых конфигурациях файл можно перетащить из списка прямо в окно другого объекта или на рабочий стол. Поведение зависит от конфигурации и режима работы клиента, поэтому заранее проверьте на тестовом файле.

Копирование присоединенного файла вручную
  1. 1
    Откройте объект-источник и список его присоединенных файлов
  2. 2
    Выделите файл и выберите «Сохранить на диск», укажите временную папку
  3. 3
    Откройте объект-приемник и перейдите к списку файлов
  4. 4
    Выберите «Добавить из файла на диске» и укажите сохраненный файл
  5. 5
    Откройте скопированный файл из нового объекта и убедитесь, что он читается

Программное копирование файлов встроенным языком

Для администраторов и разработчиков основной инструмент — функция встроенного языка КопироватьФайл(ИмяИсточника, ИмяПриемника). Она работает как на клиенте, так и на сервере, но важно помнить: код, выполняемый на сервере, видит файловую систему сервера, а не компьютера пользователя. Это самая частая причина ошибки «файл не найден» в клиент-серверном режиме.

Типовой фрагмент кода выглядит так:

1c
&НаСервере
Процедура СкопироватьФайлНаСервере()
    Источник = "C:\Обмен\выгрузка.xml";
    Приемник = "D:\Архив\выгрузка_копия.xml";
    Попытка
        КопироватьФайл(Источник, Приемник);
        Сообщить("Файл скопирован: " + Приемник);
    Исключение
        Сообщить("Ошибка копирования: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

В тонком и веб-клиенте прямой доступ к диску пользователя ограничен. Для копирования между клиентом и сервером используются методы НачатьПомещениеФайла() и НачатьПолучениеФайла(), а для асинхронного копирования внутри одной стороны — НачатьКопированиеФайла() с описанием оповещения о завершении.

Перед копированием полезно проверить существование источника через объект Файл и метод Существует(), а также убедиться, что каталог приемника создан — функция КопироватьФайл() не создает недостающие папки автоматически.

Копирование присоединенных файлов программно

Если нужно скопировать файл между объектами базы массово (например, перенести сканы из договоров в контрагентов), ручной способ не подойдет. Программно это делается через работу со справочником присоединенных файлов: получаются данные файла из хранилища методом ПолучитьИзВременногоХранилища() или через менеджер присоединенных файлов, затем создается новый элемент с привязкой к целевому объекту.

В типовых конфигурациях на базе БСП (Библиотека стандартных подсистем) есть готовый программный интерфейс — модуль РаботаСФайлами (в новых версиях — РаботаСФайламиСлужебный). Он инкапсулирует чтение двоичных данных и создание копий, поэтому использовать его надежнее, чем обращаться к справочнику напрямую: при обновлении конфигурации структура хранения может измениться.

Копирование внешних обработок, отчетов и файлов обмена

Внешние обработки (.epf) и отчеты (.erf) — обычные файлы на диске. Их копируют средствами операционной системы: проводником, командной строкой или скриптом. Если обработка подключена к базе через справочник «Дополнительные отчеты и обработки», учтите: в базе хранится ее копия, и замена файла на диске не обновит версию внутри 1С — обработку нужно перезагрузить в справочнике.

Файлы выгрузки и загрузки (XML обменов, выгрузки в банк, отчетность) копируются так же, как любые файлы ОС. Для регулярного резервного копирования таких файлов удобно настроить регламентное задание на сервере 1С либо задачу планировщика Windows, которая копирует каталог обмена в архивное хранилище по расписанию.

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

Проверка результата и типичные ошибки

После копирования всегда проверяйте результат, а не только факт завершения операции. Для файлов на диске сравните размер источника и копии — нулевой размер или расхождение означают неполное копирование. Для присоединенных файлов откройте копию из карточки объекта и убедитесь, что документ читается, а изображение отображается.

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

Типичные ошибки
01
Копирование на сервере пути с диска клиента — сервер не видит локальные диски пользователя, возникает ошибка «файл не найден»
02
Отсутствие каталога приемника — КопироватьФайл() не создает папки, операция завершается ошибкой
03
Копирование присоединенного файла через проводник вместо интерфейса 1С — теряется связь файла с объектом базы
04
Замена файла обработки на диске без перезагрузки в справочнике — в базе продолжает работать старая версия
05
Копирование заблокированного файла — открытый другой программой файл копируется с ошибкой или неполностью
Контрольные точки

Как проверить результат

Размер скопированного файла
Норма

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

Тревожный признак

Нулевой размер или заметное расхождение

Открытие присоединенной копии
Норма

Файл открывается из карточки нового объекта

Тревожный признак

Ошибка открытия, пустое имя, потерянное расширение

Сообщения в журнале
Норма

Нет ошибок при выполнении копирования

Тревожный признак

Записи об ошибках доступа или отсутствии файла

Когда ручного копирования недостаточно

Если копировать файлы нужно регулярно и в большом количестве — например, ежедневно архивировать выгрузки или переносить сканы между системами — ручной труд заменяют автоматизацией. Варианты: регламентное задание на сервере 1С с кодом копирования, внешний скрипт (PowerShell, bat) по расписанию, специализированная обработка переноса присоединенных файлов.

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

Маршрут решения

Как выбрать способ копирования

Нужно скопировать один-два присоединенных файлаИспользуйте ручной способ: сохранить на диск, добавить к другому объекту
Файл лежит на диске и копируется в пределах одного компьютераДостаточно проводника ОС или команды КопироватьФайл()
Файл нужно передать между клиентом и серверомИспользуйте НачатьПомещениеФайла() / НачатьПолучениеФайла()
Операция повторяется регулярноНастройте регламентное задание или внешний скрипт по расписанию
Итог

Что важно запомнить

Определите, где хранится файл: внутри базы как присоединенный или на диске. Присоединенные копируют через интерфейс 1С или механизмы БСП, файлы на диске — средствами ОС или командой КопироватьФайл(). После любой операции проверяйте размер и открываемость копии, а перед работой с файлами базы делайте резервную копию.

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

Почему КопироватьФайл() выдает ошибку «файл не найден», хотя файл есть?

Чаще всего код выполняется на сервере, а путь указывает на диск клиентского компьютера — сервер его не видит. Проверьте, в каком контексте работает процедура (директивы &НаСервере / &НаКлиенте), и используйте сетевые пути, доступные серверу, либо механизмы передачи файлов между клиентом и сервером.

Можно ли скопировать файл из 1С просто через проводник Windows?

Только если это обычный файл на диске — обработка, выгрузка, отчет. Присоединенные файлы хранятся внутри базы или в служебных томах, и прямое копирование разорвет связь с объектом. Такие файлы извлекают через команду «Сохранить на диск» в интерфейсе 1С.

Как скопировать сразу все присоединенные файлы документа?

В списке присоединенных файлов выделите все строки (Ctrl+A) и сохраните их на диск пакетно, если конфигурация поддерживает множественное сохранение. Для регулярного массового переноса лучше использовать обработку на базе механизмов БСП — она сохранит имена и структуру папок.

Опасно ли копировать файл базы 1Cv8.1CD?

Да, если база открыта и пользователи работают: файл будет изменяться в процессе копирования, и копия окажется поврежденной. Завершите все сеансы или используйте штатную выгрузку в .dt через конфигуратор — это безопасный способ получить копию базы.

Как скопировать файл в веб-клиенте, где нет доступа к диску?

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