Администрирование · 10 мин
Как копировать файлы в 1С
Как скопировать файлы в 1С: через интерфейс, средствами встроенного языка, при обмене данными. Готовые примеры кода, типичные ошибки и проверка результата.
Вопрос о копировании файлов в 1С возникает в нескольких разных ситуациях: нужно перенести присоединенный файл из одного документа в другой, скопировать внешнюю обработку на сервер, продублировать выгрузку для архива или переместить файл программно из встроенного языка. Каждый сценарий решается своим инструментом, и универсальной кнопки «скопировать файл» в типовых конфигурациях нет.
Пользователю без прав разработчика доступны встроенные механизмы работы с присоединенными файлами: добавление с диска, сохранение на диск, копирование между карточками через буфер обмена операционной системы. Администратору или разработчику дополнительно доступны команды встроенного языка — КопироватьФайл(), НачатьКопированиеФайла() и методы работы с файловой системой.
Различие между файлами на диске и файлами внутри 1С
Прежде чем копировать, важно понять, где физически находится файл. В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) документы, сканы и изображения хранятся как «присоединенные файлы» — внутри информационной базы или в томах на диске, но привязаны к конкретному объекту: документу, элементу справочника, письму. Просто скопировать такой файл через проводник Windows недостаточно — связь с объектом в базе потеряется.
Файлы вне базы — внешние обработки (.epf), отчеты (.erf), файлы выгрузки (.xml, .csv), архивы конфигураций (.dt) — лежат в обычной файловой системе и копируются стандартными средствами ОС или программно из 1С. Определите тип файла до начала работы: от этого зависит весь порядок действий.
Как скопировать присоединенный файл через интерфейс
Самый простой сценарий — перенести скан или документ из одной карточки в другую без программирования. В типовых конфигурациях это делается через промежуточное сохранение на диск: откройте объект-источник, найдите присоединенный файл в списке файлов, выделите его и выберите команду «Сохранить на диск» (обычно в меню «Еще»). Файл попадет в указанную папку компьютера.
Затем откройте объект-приемник, перейдите к списку присоединенных файлов и выберите «Добавить из файла на диске». Укажите сохраненный ранее файл — он будет загружен в базу и привязан к новому объекту. После проверки файл-источник можно удалить, если копия нужна только в одном месте.
Альтернативный вариант — перетаскивание мышью (drag-and-drop): в некоторых конфигурациях файл можно перетащить из списка прямо в окно другого объекта или на рабочий стол. Поведение зависит от конфигурации и режима работы клиента, поэтому заранее проверьте на тестовом файле.
- 1Откройте объект-источник и список его присоединенных файлов
- 2Выделите файл и выберите «Сохранить на диск», укажите временную папку
- 3Откройте объект-приемник и перейдите к списку файлов
- 4Выберите «Добавить из файла на диске» и укажите сохраненный файл
- 5Откройте скопированный файл из нового объекта и убедитесь, что он читается
Программное копирование файлов встроенным языком
Для администраторов и разработчиков основной инструмент — функция встроенного языка КопироватьФайл(ИмяИсточника, ИмяПриемника). Она работает как на клиенте, так и на сервере, но важно помнить: код, выполняемый на сервере, видит файловую систему сервера, а не компьютера пользователя. Это самая частая причина ошибки «файл не найден» в клиент-серверном режиме.
Типовой фрагмент кода выглядит так:
&НаСервере
Процедура СкопироватьФайлНаСервере()
Источник = "C:\Обмен\выгрузка.xml";
Приемник = "D:\Архив\выгрузка_копия.xml";
Попытка
КопироватьФайл(Источник, Приемник);
Сообщить("Файл скопирован: " + Приемник);
Исключение
Сообщить("Ошибка копирования: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедурыВ тонком и веб-клиенте прямой доступ к диску пользователя ограничен. Для копирования между клиентом и сервером используются методы НачатьПомещениеФайла() и НачатьПолучениеФайла(), а для асинхронного копирования внутри одной стороны — НачатьКопированиеФайла() с описанием оповещения о завершении.
Перед копированием полезно проверить существование источника через объект Файл и метод Существует(), а также убедиться, что каталог приемника создан — функция КопироватьФайл() не создает недостающие папки автоматически.
Копирование присоединенных файлов программно
Если нужно скопировать файл между объектами базы массово (например, перенести сканы из договоров в контрагентов), ручной способ не подойдет. Программно это делается через работу со справочником присоединенных файлов: получаются данные файла из хранилища методом ПолучитьИзВременногоХранилища() или через менеджер присоединенных файлов, затем создается новый элемент с привязкой к целевому объекту.
В типовых конфигурациях на базе БСП (Библиотека стандартных подсистем) есть готовый программный интерфейс — модуль РаботаСФайлами (в новых версиях — РаботаСФайламиСлужебный). Он инкапсулирует чтение двоичных данных и создание копий, поэтому использовать его надежнее, чем обращаться к справочнику напрямую: при обновлении конфигурации структура хранения может измениться.
Копирование внешних обработок, отчетов и файлов обмена
Внешние обработки (.epf) и отчеты (.erf) — обычные файлы на диске. Их копируют средствами операционной системы: проводником, командной строкой или скриптом. Если обработка подключена к базе через справочник «Дополнительные отчеты и обработки», учтите: в базе хранится ее копия, и замена файла на диске не обновит версию внутри 1С — обработку нужно перезагрузить в справочнике.
Файлы выгрузки и загрузки (XML обменов, выгрузки в банк, отчетность) копируются так же, как любые файлы ОС. Для регулярного резервного копирования таких файлов удобно настроить регламентное задание на сервере 1С либо задачу планировщика Windows, которая копирует каталог обмена в архивное хранилище по расписанию.
Файл выгрузки информационной базы (.dt) — особый случай: его нельзя копировать, пока база открыта в файловом режиме и к ней есть активные подключения, иначе копия может оказаться поврежденной. В клиент-серверном режиме файл .dt создается через конфигуратор при отсутствии активных сеансов.
Проверка результата и типичные ошибки
После копирования всегда проверяйте результат, а не только факт завершения операции. Для файлов на диске сравните размер источника и копии — нулевой размер или расхождение означают неполное копирование. Для присоединенных файлов откройте копию из карточки объекта и убедитесь, что документ читается, а изображение отображается.
Программно проверку выполняют сравнением размеров через объект Файл и его свойство Размер(), а для критичных данных — контрольными суммами (хешами), если конфигурация позволяет их вычислить.
Как проверить результат
Совпадает с размером источника
Нулевой размер или заметное расхождение
Файл открывается из карточки нового объекта
Ошибка открытия, пустое имя, потерянное расширение
Нет ошибок при выполнении копирования
Записи об ошибках доступа или отсутствии файла
Когда ручного копирования недостаточно
Если копировать файлы нужно регулярно и в большом количестве — например, ежедневно архивировать выгрузки или переносить сканы между системами — ручной труд заменяют автоматизацией. Варианты: регламентное задание на сервере 1С с кодом копирования, внешний скрипт (PowerShell, bat) по расписанию, специализированная обработка переноса присоединенных файлов.
Выбор зависит от масштаба: разовые операции проще выполнить вручную через интерфейс, повторяющиеся на сервере — регламентным заданием, а сложные сценарии с фильтрами и трансформацией — отдельной обработкой. Любую автоматизацию сначала тестируйте на копии базы.
Как выбрать способ копирования
Что важно запомнить
Определите, где хранится файл: внутри базы как присоединенный или на диске. Присоединенные копируют через интерфейс 1С или механизмы БСП, файлы на диске — средствами ОС или командой КопироватьФайл(). После любой операции проверяйте размер и открываемость копии, а перед работой с файлами базы делайте резервную копию.
Частые вопросы
Почему КопироватьФайл() выдает ошибку «файл не найден», хотя файл есть?
Чаще всего код выполняется на сервере, а путь указывает на диск клиентского компьютера — сервер его не видит. Проверьте, в каком контексте работает процедура (директивы &НаСервере / &НаКлиенте), и используйте сетевые пути, доступные серверу, либо механизмы передачи файлов между клиентом и сервером.
Можно ли скопировать файл из 1С просто через проводник Windows?
Только если это обычный файл на диске — обработка, выгрузка, отчет. Присоединенные файлы хранятся внутри базы или в служебных томах, и прямое копирование разорвет связь с объектом. Такие файлы извлекают через команду «Сохранить на диск» в интерфейсе 1С.
Как скопировать сразу все присоединенные файлы документа?
В списке присоединенных файлов выделите все строки (Ctrl+A) и сохраните их на диск пакетно, если конфигурация поддерживает множественное сохранение. Для регулярного массового переноса лучше использовать обработку на базе механизмов БСП — она сохранит имена и структуру папок.
Опасно ли копировать файл базы 1Cv8.1CD?
Да, если база открыта и пользователи работают: файл будет изменяться в процессе копирования, и копия окажется поврежденной. Завершите все сеансы или используйте штатную выгрузку в .dt через конфигуратор — это безопасный способ получить копию базы.
Как скопировать файл в веб-клиенте, где нет доступа к диску?
В веб-клиенте прямой доступ к файловой системе ограничен. Используйте диалоги выбора и сохранения файлов, которые вызывают методы НачатьПомещениеФайла() и НачатьПолучениеФайла(), — браузер сам запросит у пользователя путь через стандартное окно загрузки или скачивания.