Скрипт архивации файловых баз 1c8 на лету

17.04.12

База данных - Архивирование (backup)

Скрипт написан на языке VBS. Используется на компьютерах, где пользователи не обладают достаточной квалификацией для архивирования и компьютеры не работают по ночам, когда можно было бы запускать архивацию. На практике использовалась на розничных точках в маленьких магазинах. База архивируется обычным копированием, на лету. Скрипт нужно прописать в планировщик. Продумана система разумного оставления некоторого количества предыдущих копий.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Тот же алгоритм, что и в статье, но файлом.
.vbs 5,23Kb
78 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Параметры

Параметры указываются в

DaysForStore – количество дневных архивов

ArcHEvery  – с какой периодичностью запускать архивацию баз

IsCompessing – сжимать ли скопированный файл или оставлять как есть.

Особенности работы

Скрипт нужно разместить в каталоге базы.

Скрипт создает архивы в подкаталоге ARC в каталоге рабочей базы.

 

Запуск скрипта нужно прописывать каждый час.

Скрипт проверяет, сколько времени прошло с момента последнего успешного бэкапа (по дате последнего архива) и сравнивает это значение с переменной DaysForStore.

Если нужно бэкапить, запускается копирование файла рабочей базы на лету в папку ARC.

Если установлен флаг IsCompessing, то файл сжимается в архив RAR, иначе просто переименовывается в RAR-файл без сжатия.

В имени архива указывается дата и время.

Чтобы не забивать диск архивами, проходит подчистка старых архивов. За текущий день архивы не чистятся, за предыдущие дни оставляется столько архивов, сколько дней указано в переменной DaysForStore.

Если в базе не работают пользователи на момент старта скрипта, он может заблокировать базу. Чтобы этого избежать, файл сначала открывается на чтение и только потом копируется. Это позволяет запустить копирование в разделенном режиме.

Возможность отключения архивации предусмотрена на слабых компьютерах, т.к. архивация там существенно тормозит работу самой 1с.

Скрипт разрабатывал по моему заданию и под моим контролем мой подчиненный, поэтому качество кода соответствующее, извиняюсь. Но работает, как часы.



 

'Версия от 20110913. Добавлено безопасное копирование, чтобы не блокировать базу. 


'=== Блок настроек ===
DaysForStore7 = 7 'количество дней в неделе ArcHEvery = 4 'промежуток времени через который нужно архивировать базу в часах
IsCompessing = false 'нужно ли архивировать (сжимать) 


'=== КОД ===

'Чтобы не висело сообщение об ошибке при ошибках... on error resume next 

Set fso = CreateObject("Scripting.FileSystemObject")


PathToBase = fso.GetParentFolderName(WScript.ScriptFullName)



base = PathToBase & "1Cv8.1CD"  'получаю путь к файлу базы
PathToArcFolder = PathToBase & "arc" 'проверяю есть ли папка для архива isExist = FSO.FolderExists(PathToArcFolder)
If isExist = False Then
	Set PathToArc = FSO.CreateFolder(PathToArcFolder)
Else
End If
PathToArc = PathToArcFolder & "" 
   
'проверяю нужно ли первый раз копировать и архивировать базу
NeedToBackup = False


'проверяю нужно ли копировать и архивировать базу 
Set Folder = FSO.GetFolder(PathToArc) 'указываю путь к папке где у нас лежат архивы
FirstFile = True
For Each file In Folder.Files 'Возвращаемое значение: объект-коллекция "Files", содержащая все файлы данного каталога 	maxdata = file.DateCreated 'получаю максимальную дату
	If maxdata > Maximum Then
		Maximum = maxdata
		FirstFile = False
	Else
	End If
Next
theTime = DateDiff("h", Now, Maximum) * -1 ' разница времени       
If theTime > ArcHEvery Then 'архивирую и копирую базу
    NeedToBackup = True
      ElseIf FirstFile = True Then
        NeedToBackup = True
    Else
End If
If NeedToBackup = True Then
 	'Если включен режим компрессии 	if IsCompessing then
	   	SafeCopyFile base, PathToArc  ' копирую файл базы

		set WshShell = WScript.CreateObject("WScript.Shell")

		CommandLine = """C:Program FilesWinRARRar.exe"" a -ag -ibck -df -ri1:20 """ & PathToArc & "arc.rar"" """ & PathToArc & "1Cv8.1CD"""
		'MsgBox CommandLine 
		Return = WshShell.Run(CommandLine)  'запуск архиватора и архивация
	else
		'Иначе просто копируем и переименовываем 		DstFileName = "" & PathToArc  & "" &  "arc" & FormatDateYYYYMMDDHHMMSS(Now) & ".rar"
 'MsbBox "" & DstFileName

		SafeCopyFile base, DstFileName  ' копирую файл базы 
	End If
Else
End If
    
    
    
'удаляю все лишние дневные архивы

       
If FirstFile = False Then

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(PathToArc) 'указываю путь к папке где у нас лежат архивы For Each File In Folder.Files
    nowday = DateSerial(Year(Now), Month(Now), Day(Now)) 'получил начало дня
    datafist = DateValue(File.DateCreated) 'получаю файл с которым буду сравнивать последующие         If File.DateCreated < nowday Then 'сравниваю с началом дня
            For Each file1 In Folder.Files '                 datatwo = DateValue(file1.DateCreated) 'получаю вторую дату
                If File.DateCreated <> file1.DateCreated Then
                    If datafist = datatwo Then
                        If File.DateCreated < file1.DateCreated Then 'если первый файл создан раньше вторго ,удаляем                             File.Delete
                            Exit For 'выхожу из цикла
                        End If
                        
                        Else
                    End If
                  Else
                End If
            Next
            Else:
           
        End If
 Next
               
     
'удаляю все лишние недельные архивы  
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set Folder = FSO.GetFolder(PathToArc) 'указываю путь к папке где у нас лежат архивы
 For Each File In Folder.Files
   wik = 0 'счетчик дней превышающие дату создания сравниваемого файла    wikfist = DateValue(File.DateCreated) 'получаю файл с которым буду сравнивать последующие
   If wikfist <> nowday Then
        For Each file1 In Folder.Files '             wiktwo = DateValue(file1.DateCreated) 'получаю вторую дату
            If wiktwo <> nowday Then
                If wikfist < wiktwo Then
                    wik = wik + 1                         If wik >= DaysForStore7 Then 'если количество файлов больше 7 превышающие дату создания данного файла,удаляем                             File.Delete
                            Exit For
                        Else
                        End If
                Else
                End If
            Else
            End If
   
    Next
    End If

    
   
 Next
Else
End If

Sub SafeCopyFile(Src, Dst)
	Set FSO = CreateObject("Scripting.FileSystemObject")
	Set File = FSO.GetFile(Src)
	Set TextStream = File.OpenAsTextStream(1)
	FSO.CopyFile Src, Dst, 1  ' копирую файл базы с заменой
	TextStream.Close
End Sub



Function FormatDateYYYYMMDD(D)
    
    FormatDateYYYYMMDD = Year(D) & Format2DigitString(Month(D)) & Format2DigitString(Day(D))

End Function

Function FormatDateYYYYMMDDHHMMSS(D)
    
    FormatDateYYYYMMDDHHMMSS = FormatDateYYYYMMDD(D) & Format2DigitString(Hour(D)) & Format2DigitString(Minute(D)) & Format2DigitString(Second(D))

End Function

Function Format2DigitString(N)
    If N >= 10 Then
        Format2DigitString= Format2DigitString & N
    Else
        Format2DigitString= Format2DigitString & "0" & N
    End If
End Function


 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Архивирование (backup) Инструменты администратора БД 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS! Версия 1.4 от 28.05.2026

7320 руб.

06.11.2012    80456    635    45    

94

Информационная безопасность Архивирование (backup) Системный администратор Разработчик 1С 8.3 Бесплатно (free)

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

10.11.2026    11400    nedomolkov.ivan    58    

19

Архивирование (backup) Обновление 1С Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Платформа 8.3.17, MS SQL Server: обновление конфигурации падает через 15 секунд на этапе обновления предопределённых данных, и конфигуратор при каждом входе предлагает только повторить. Проверьте у себя, когда сделана последняя полная копия базы: у нас её не было почти месяц. Разбор по минутам: что не помогло (перезапуск агента сервера 1С, перезагрузка, пакетный /UpdateDBCfg, три совета со стороны) и почему. Как ibcmd достал .dt из базы, которая не открывается, и как новую базу подставили под старым именем в кластере 1С через rac, не трогая пользователей. Простой 57 минут, потерь данных нет. Отдельно ошибки ИИ-агента Claude, который работал на сервере, и порядок действий на случай, если это случилось у вас.

03.11.2026    629    nedomolkov.ivan    12    

5

Архивирование (backup) Инструменты администратора БД Системный администратор Разработчик 1С 8.3 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Абонемент ($m)

Полностью автоматизированная внешняя обработка для администрирования 1С: блокировка/разблокировка ИБ, массовое завершение сеансов, резервное копирование и восстановление из .dt, выгрузка/загрузка конфигурации (.cf), пакетная работа с расширениями (.cfe) и дополнительными обработками – всё через удобную форму без ручных запусков конфигуратора и консоли кластера

1 стартмани

21.01.2026    6531    66    war41k    0    

18

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Разработчик Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    14227    nasonkin    19    

31

Архивирование (backup) Учет документов Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В текущих версиях 1С пока нет функции, позволяющей автоматически отмечать возврат оригиналов документов с помощью сканера штрих-кодов. Многие контрагенты часто сталкиваются с проблемой утери оригиналов УПД или их невозврата. В ответ на эти запросы было разработано расширение, которое упрощает контроль за возвратом оригиналов документов и помогает лучше организовать их хранение.

12200 руб.

19.02.2025    2959    3    0    

3

Архивирование (backup) Системный администратор 1С 8.3 Бесплатно (free)

Предлагаю Вашему вниманию 3 скрипта на bash (sh) для архивирования (backup) типовых конфигураций на Linux средствами 1С и Postgres. Перед запуском корректно заполните раздел "Параметры" в соответствии с Вашими настройками.

20.01.2025    5995    Prelude    5    

12

Архивирование (backup) 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Резервные копии базы 1С без завершения сеансов: .dt, файл базы, PostgreSQL, MS SQL, своя команда. Расписание, профили, ротация, ZIP, FTP, журнал и письмо об ошибке. Платформа 8.3+ (кроме 8.2), любая конфигурация с БСП. Подключение за 5 минут.

5000 руб.

27.08.2024    4161    1    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. fixin 4347 17.04.12 21:47 Сейчас в теме
Скрипт написан на языке VBS. Используется на компьютерах, где пользователи не обладают достаточной квалификацией для архивирования и компьютеры не работают по ночам, когда можно было бы запускать архивацию. На практике использовалась на розничных точках в маленьких магазинах.
База архивируется обычным копированием, на лету. Скрипт нужно прописать в планировщик.
Продумана система разумного оставления некоторого количества предыдущих копий.


Перейти к публикации

1. gavrikprog 118 17.04.12 21:47 Сейчас в теме
Файлы битые будут, если пользователи активно работают. На такой бэкап лучше не надеяться.
Как собственно и на другие файловые бэкапы "налету"

В смысле тесторование и исправление может дать несколько поводов для радости.
2. fixin 4347 18.04.12 00:47 Сейчас в теме
(1) лучше иметь такой архив, чем никакой.
Кстати, практика ваши опасения не подтверждает.
Все зависит от интенсивности работы с архивируемой базой.
3. rikony 18.04.12 08:58 Сейчас в теме
для не больших предприятий подойдет
там где в базу обращаются раз в час
5. fixin 4347 18.04.12 12:54 Сейчас в теме
(3) лучше иметь какой-то архив, чем никакой. На практике видно, что могут слететь только последние изменения в базу, но это лучше, чем начинать со старого бэкапа месячной давности. ;-)
На практике, если это магазин, где в момент архивации в 5 минут пробивается 1-2 чека, то вполне сойдет.

(4) возможно, но это уже мелочи, не так часто делаешь восстановление. К тому же у нас везде на точках работает без ключа архивации, место на диске стоит дешево, а процессорное время дорого.
4. shurik_shurik 18.04.12 10:24 Сейчас в теме
Думаю, стоит в архивирование добавить ключ -ep1 , чтобы исключить полный путь к файлу 1Сv8.1CD
6. Irek-kazan 18.04.12 16:32 Сейчас в теме
лучше в планировщике выставить задание на ежедневную архивацию ночью и не придеться "начинать со старого бэкапа месячной давности".
7. fixin 4347 18.04.12 16:45 Сейчас в теме
(6) прочитайте текст внимательнее. Речь идет о пользователях, работающих круглосуточно, или которые по ночам выключают компы (продавцы на точках). А заставлять их ждать, пока база сархивируется (10 минут) нереально.
8. glinmn 18.04.12 20:41 Сейчас в теме
Опыт эксплуатации подобной архивации, 1раз в час на поротижении 5 лет Acronis'ом, говорит только жизниспособности данного подхода. без данной архивации не представляю себе работу маленькой удаленной точки.
Прада кроме этого скрпта нужно еще и грамотную технологию востановления
Для отправки сообщения требуется регистрация/авторизация