В процессе работы с 1С бухгалтерией обязательно необходимо создание резервных копий баз 1С.

На просторах интернета конечно достаточно много (для Windows) различного ПО по выполнению данной задачи, но как правило, это ПО (для выполнения некоторых задач) является платным. Конечно достаточно много вариантов и бесплатного ПО, но оно обычно имеет ограниченный функционал.

Если же говорить о системах на базе Linux, то здесь дела обстоят более плачевно.

По сути ничего сложного в решении данной задачи нет. Организовать создание архивной копии папки (для файлового варианта работы 1С), или создать дамп базы (для серверного варианта работы 1С), или же сделать выгрузку базы штатными средствами самой 1С (для любого варианта 1С) процесс вполне тривиальный и решается достаточно просто в любой из систем. В качестве архивных копий легче всего использовать формат *.tar.gz, так как данный архив полностью поддерживается в любой системе изначально, ни чего доустанавливать не нужно (для Windows 10). В случае же использования более старой ОС Windows (паример Windows 2012 Server) лучше прибегнуть к средствам PowerShell и создать обычный zip архив. Ну и конечно же можно все таки и установить стороннее ПО — 7-Zip например (потому что бесплатен) и создавать архивы с его помощью. По умолчанию в скрипте используется именно этот метод.

Плюс ко всему, фирма 1С создала приложения командной строки rac/ras, благодаря которым можно управлять сеансами на сервере, самое главное — отключать зависшие сеансы. И теперь все эти функции можно выполнять автоматически. Более того, начиная с 14 релиза в 1С есть такое понятие как автономный сервер, здесь я не стану рассматривать его возможностей, но для решения нашей задачи у него есть замечательный инструмент ibcmd, который много чего позволяет делать, но самое главное, в данном случае, позволяет делать выгрузку базы в .dt формате сразу с сервера баз данных, что позволяет не «выбрасывать» работающих пользователей. А вот и конструкция вызова создания выгрузки: ibcmd infobase dump —db-server=localhost —dbms=MSSQLServer —db-name=sb_demo —db-user=test_db_user —db-pwd=test_pwd_123 —user=user1c —password=pass_1c «%tmp%\sb_demo.dt» (для платформы выше 8.3.17) или же ibcmd infobase dump —db-server=localhost —dbms=MSSQLServer —db-name=sb_demo —db-user=test_db_user —db-pwd=test_pwd_123 «%tmp%\sb_demo.dt» (для платформ от 8.3.14 до 8.3.17 включительно). В конструкции указаны конкретные значения, но я думаю, что по записи сориентироваться не сложно, что и куда. Но если не понятно, то на просторах интернета всё можно найти, как вариант вот здесь , а точнее во второй части — здесь.

Итак, допустим, мы имеем:

  1. Пусть на сервере крутятся как файловые базы, так и серверные базы. Пусть так же используется веб-доступ к нашим базам. В качестве сервера баз данных может использоваться как MsSQL так и PstgreSQL.

  2. Допустим, что есть некий пользователь (user), под которым прописаны все нужные нам базы в стартере 1С. Самое главное, что бы там не было «не нужных» баз или еще страшнее — не существующих баз. Мы будем использовать этот список для автоматического формирования списка баз, для которых будет создаваться резервная выгрузка баз, но ничто не мешает создать файл ibases.v8i со списком нужных баз, затем сохранить его где-нибудь, и «натравить» скрипт на него.

  3. Создание резервных копий всех баз будет происходить в определенную папку/папки, внутри которых будет автоматически формироваться: папка с именем базы — в ней будут находиться папки — День, Неделя и Месяц — для сохранения дневных копий (например за последние 4 дня), недельных копий (например за последние 4 недели) и месячных копий (например за последние 4 месяца) базы. Количество дневных, недельных и месячных копий задаётся раздельно. Здесь нужно отметить, что сохраняться будут просто n заданных в скрипте копий в папке, т.е. если быть более правильным — не за последние, например, 4 дня, а последние 4 копии, т.е. если Вы за день запустите этот скрипт 4 раза, то там на самом деле останутся просто последние 4 копии, которые относятся к одному и тому же дню. Т.е. для случая, что Вы запускаете этот скрипт один раз в день, будет верно выражение — копии за последние 4 дня.

  4. Так же предположим, что в качестве Web сервера для Windows будет использоваться его родной iis, а для Linux — apach. Хотя этот момент просто изменить.

  5. Так же для Windows важен еще один момент — нужно что бы для 64 битной системы устанавливалась так же и 1С 64 бита. К тому же необходимо, что бы в качестве сервера 1С выступала последняя установленная (по номеру версии) 1С. Нет — не последняя существующая версия 1С, а последняя по версии, установленная на данный сервер версия 1С. Дело в том, что в Windows (а начиная и с 18-ой платформы и для linux тоже) платформа 1С устанавливается в папки вида C:\Program Files\1cv8\8.x.xx.xxxx (а в linux начиная и с 18-ой платформы — /opt/1cv8/x86_64/8.x.xx.xxxx), и этих папок может быть несколько. И возникает вопрос — какая из них используется в качестве сервера? Конечно, можно жестко задать конкретный путь, но тогда в случае смены сервера можно забыть изменить этот путь в скрипте и как результат — остаться без копий. По этому было решено, что скрипт отыщет максимальную версию по названию папки и будет использовать именно его. Но тут есть один нехороший момент — иногда бывает так, что ставится более новый сервер, далее обнаруживается, что на нем база работает некорректно и сервер возвращается на предыдущий релиз. И вот в этом случае, даже если Вы из программ удалите свежий релиз 1С, то вот папка в C:\Program Files\1cv8\8.x.xx.xxxx (от нового релиза) может, к сожалению, остаться, и тогда скрипт опять же не отработает. Т.е. в этом случае потом нужно будет вручную так же удалить не нужную уже папку от удаленной версии. Можно конечно, при необходимости, в самом скрипте указать конкретный путь до сервера 1С, а так же, если нужно, сделать несколько таких скриптов с различными настройками путей до сервера 1С, и натравить на различные файлы списка баз 1С, и тем самым решить вопрос создания копий баз, если на сервере запущены параллельно работающие разные версии серверов 1С.

  6. На самом деле в скрипте есть возможность жёстко задавать и битность 1С, и конкретную версию при необходимости, так же есть возможность задавать пул в iis, но в последствии, при смене настроек в системе это нужно будет учитывать.

  7. И последнее — если создаются выгрузки из баз 1С, то необходимо что бы во всех базах был некий пользователь с именем, например, User1C с одинаковым паролем, который будет как раз использоваться для создания выгрузок из базы 1С.

Ниже можно скачать сами скрипты для выполнения данных задач, в них нужно лишь подправить (если будет нужно) переменные в разделе «Ввод начальных данных».

здесь готовые скрипты Windows & Ubuntu на GitHub Gist

здесь готовые скрипты Windows & Ubuntu на mail.ru

Конечно у этих скриптов есть свои минусы, ну например для Linux систем в скрипте явно указывается пароль от sudo пользователя, но это можно решить если позволить выбранному пользователю работать со службами, логика скрипта при этом не меняется.

В некоторых случаях в Linux была так же замечена проблема - изначально файл ibases.v8i не читается. Нужно его открыть в текстовом редакторе (например Mousepad) и пересохранить. После этого всё начинает работать.

Так же в скрипте для Windows используется переключение кодовой страницы mode con: cp select=1251 и mode con: cp select=866. Это сделано для корректной работы с кириллицей, но иногда возникает обратная ситуация, тогда эти строки нужно за комментировать.

Комментарии (8)


  1. jackgrebe
    31.05.2025 06:17

    файл ibases.v8i не читается.

    dos2unix, unix2dos

    переключение кодовой страницы mode con: cp select=1251 и mode con: cp select=866

    рекомендую настраивать всю винду на UTF-8 (стандарт де-факто).
    в скриптах: %COMSPEC%/chcp.com 65001
    в гуе: control.exe - региональные настройки - где-то там (до сих пор "бета").
    в реестре: не помню, надо отслеживать.


    1. jackgrebe
      31.05.2025 06:17

      ошибка. надо так
      %COMSPEC%\..\chcp.com 65001


  1. postgrez4ik
    31.05.2025 06:17

    Зачем юзать приблуду 1с (тока если для файловых баз), если есть инструментарий в самом powershell? https://learn.microsoft.com/ru-ru/powershell/module/sqlserver/backup-sqldatabase?view=sqlserver-ps Как минимум он лучше тем, что даëт делать инкрементальные бэкапы и бэкап журналов транзакций для PITR. Вот для Постгреса есть реализации https://gist.github.com/mvbl/d57b15ce2c5dba84f2d1e88e49476a15


    1. postgrez4ik
      31.05.2025 06:17

      Ну и православный баш https://gist.github.com/sirbrillig/4624937


  1. NefertumMortis
    31.05.2025 06:17

    1С не рекомендуют использовать выгрузку в dt, о чём сказано в документации :

    Не рекомендуется использовать данный способ для создания резервной копии информационной базы по следующим причинам:

    ● может возникнуть ситуация, при которой файл выгрузки будет невозможно загрузить, если в информационной базе, из которой производилась выгрузка, существовали ошибки;

    Если и использовать такой вариант, то надо обязательно проверять, восстановится ли дамп.


    1. onegreyonewhite
      31.05.2025 06:17

      У dt есть и другая проблема связанная с тем, что нельзя это делать во время работы (полная блокировка требуется).

      надо обязательно проверять, восстановится ли дамп

      Так-то это надо всегда делать.

      файл выгрузки будет невозможно загрузить, если в информационной базе, из которой производилась выгрузка, существовали ошибки

      Вот это как раз преимущество. Легче проверять бэкап, который на этапе загрузке сдохнет.


      1. torchbearer Автор
        31.05.2025 06:17

        Здесь есть использование автономного сервера, который позволяет делать dt без выброса работающих пользователей:)


    1. torchbearer Автор
      31.05.2025 06:17

      Да, согласен. Но я обычно делаю выгрузку и в dt, и дамп. Использую два таких скрипта с разными настройками. dt хорош для быстрого разворота где нибудь копии, например отдать аудитору. Я сам часто в разъездах, звонит бух - дай базу, говорю в папке такой то возьми то что тебе нужно:) Этот вариант я сделал, что бы постоянно ручками не настраивать. Натравил на файл запуска. Если потом добавили базу, она в в автомате сядет в копии. Да, есть свои заморочки... не без этого:) Не идеальна:) Глюки бывают и в винде и в linux, но мне хватает:) Может ещё кому пригодится:) Просто поделился:)