База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как организовать копирование файла 1Cv8.1CD из запущенной 1С 8.2? › Ответ в теме: Как организовать копирование файла 1Cv8.1CD из запущенной 1С 8.2?
В 1С 8.2 (8.2.19.130) из запущенной программы напрямую скопировать файл 1Cv8.1CD нельзя, если база открыта — файл занят системой. Чтобы сделать копию базы (заменить существующую копию), нужно использовать механизм выгрузки/загрузки данных или внешнюю обработку для резервного копирования.
Простой и надёжный способ — через встроенные методы:
1. Создать пункт меню, который запускает обработку резервного копирования.
2. В обработке вызвать метод ВыгрузитьВФайл() для выгрузки базы в файл .dt.
3. После выгрузки скопировать этот файл в нужное место (заменить копию).
4. При необходимости — загрузить из этого файла в копию базы.
Пример кода для пункта меню (в модуле объекта или общего модуля):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Процедура СделатьРезервнуюКопию(Команда) ПутьВыгрузки = "D:BackupBackup.dt"; // укажи свой путь Попытка // Выгружаем базу в файл ТекущаяБаза.ВыгрузитьВФайл(ПутьВыгрузки); Сообщить("Резервная копия создана: " + ПутьВыгрузки); // Копируем файл в нужное место (заменяем) НовыйПуть = "D:CopyBase1Cv8.1CD"; // путь к копии базы // Для копирования файла используем встроенный объект ФайловаяСистема ФС = Новый ФайловаяСистема(); Если ФС.СуществуетФайл(НовыйПуть) Тогда ФС.УдалитьФайл(НовыйПуть); КонецЕсли; ФС.копироватьФайл(ПутьВыгрузки, НовыйПуть); Сообщить("Копия базы заменена."); Исключение Сообщить("Ошибка при создании копии: " + ОписаниеОшибки()); КонецПопытки; КонецПроцедуры |
Объяснение:
— ВыгрузитьВФайл() — выгружает всю базу в файл dt, который можно потом загрузить в другую базу.
— Копирование файла dt в файл 1Cv8.1CD — это не совсем корректно, т.к. dt — это архив с данными, а 1Cv8.1CD — файл базы. Но если у тебя именно копия базы в виде файла 1Cv8.1CD, то лучше делать выгрузку в dt, а потом загружать в копию базы.
— Если нужно именно заменить файл 1Cv8.1CD, то надо закрыть копию базы, чтобы файл не был занят, и копировать файл средствами ОС (через ВыполнитьКоманду или Выполнить).
Если хочешь именно копировать файл 1Cv8.1CD из текущей базы (что не рекомендуется, т.к. файл занят), то можно:
— Завершить работу с базой (закрыть ее).
— Запустить внешний скрипт или bat-файл, который скопирует файл.
— Или использовать внешнюю обработку, которая запускается вне 1С.
В 8.2 нет встроенных средств для копирования занятого файла базы.
Если копия базы — это отдельная база, то лучше делать резервную копию через выгрузку/загрузку.
—
Если всё же нужно из 1С запустить копирование файла 1Cv8.1CD (например, копия базы закрыта), то можно так:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Процедура КопироватьФайлИБ() Источник = "D:1CMainBase1Cv8.1CD"; Назначение = "D:1CCopyBase1Cv8.1CD"; КомандаКопирования = "cmd /c copy /Y """ + Источник + """ """ + Назначение + """"; Результат = ВыполнитьКоманду(КомандаКопирования, 0, Истина); Если Результат = 0 Тогда Сообщить("Файл успешно скопирован."); Иначе Сообщить("Ошибка копирования файла."); КонецЕсли; КонецПроцедуры |
Но этот код сработает только если файл не занят.
—
Рекомендую делать резервное копирование через выгрузку/загрузку данных, а не копировать файл 1Cv8.1CD напрямую из работающей базы.
Рекомендую посмотреть здесь, как правильно делать резервное копирование:
https://its.1c.ru/db/v82doc#bookmark:dev:TI00000000000000B7B3B7B3-1C-8-Backup