Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/arkuznetsov/cpdb

Приложение oscript для копирования баз данных 1C / MS SQL и развертывания на целевой системе.
https://github.com/arkuznetsov/cpdb

1c 1c-enterprise bsl hacktoberfest mssql onescript oscript sql

Last synced: about 1 month ago
JSON representation

Приложение oscript для копирования баз данных 1C / MS SQL и развертывания на целевой системе.

Awesome Lists containing this project

README

        

[![GitHub release](https://img.shields.io/github/release/ArKuznetsov/cpdb.svg?style=flat-square)](https://github.com/ArKuznetsov/cpdb/releases)
[![GitHub license](https://img.shields.io/github/license/ArKuznetsov/cpdb.svg?style=flat-square)](https://github.com/ArKuznetsov/cpdb/blob/develop/LICENSE)
[![GitHub Releases](https://img.shields.io/github/downloads/ArKuznetsov/cpdb/latest/total?style=flat-square)](https://github.com/ArKuznetsov/cpdb/releases)
[![GitHub All Releases](https://img.shields.io/github/downloads/ArKuznetsov/cpdb/total?style=flat-square)](https://github.com/ArKuznetsov/cpdb/releases)

[![Build Status](https://img.shields.io/github/workflow/status/ArKuznetsov/cpdb/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0)](https://github.com/arkuznetsov/cpdb/actions/)
[![Quality Gate](https://open.checkbsl.org/api/project_badges/measure?project=cpdb&metric=alert_status)](https://open.checkbsl.org/dashboard/index/cpdb)
[![Coverage](https://open.checkbsl.org/api/project_badges/measure?project=cpdb&metric=coverage)](https://open.checkbsl.org/dashboard/index/cpdb)
[![Tech debt](https://open.checkbsl.org/api/project_badges/measure?project=cpdb&metric=sqale_index)](https://open.checkbsl.org/dashboard/index/cpdb)

Checked by Silver Bulleters SonarQube BSL plugin

# 1C Database copier (cpdb)

Библиотека и приложение для получения информации о базах 1С, копирования баз 1C и развертывания на целевой системе.

* [Зависимости](#dependencies)
* [Команды приложения](#application)
* [database](#database)
* [infobase](#infobase)
* [file](#file)
* [yadisk](#yadisk)
* [nextcloud](#nextcloud)
* [sftp](#sftp)
* [batch](#batch)
* [Использование c Jenkins](#jenkins)

* [Библиотека](#library)
* [Класс РаботаССУБД](#lib-database)
* [Модуль РаботаСИБ](#lib-infobase)
* [Модуль РаботаСФайлами](#lib-file)
* [Класс РаботаСЯндексДиск](#lib-yadisk)
* [Класс РаботаСNextCloud](#lib-nextcloud)
* [Класс РаботаСSFTP](#lib-sftp)
* [Класс СтруктураХраненияИБ](#lib-dbstoragestructure)

* [Запуск тестов](#testing)

## Требуются следующие библиотеки и инструменты

* [1commands](https://github.com/artbear/1commands)
* [logos](https://github.com/oscript-library/logos)
* [v8runner](https://github.com/oscript-library/v8runner)
* [v8storage](https://github.com/oscript-library/v8storage)
* [cli](https://github.com/Stepa86/cli)
* [yadisk](https://github.com/kuntashov/oscript-yadisk)
* [nextcloud-lib](https://github.com/arkuznetsov/nextcloud-lib)
* [ClientSSH](https://github.com/arkuznetsov/oscript-ssh)
* [ParserFileV8i](https://github.com/ret-Phoenix/parserV8i)
* [7-zip](http://www.7-zip.org/)
* [MS Command Line Utilities for SQL Server (sqlcmd)](https://www.microsoft.com/en-us/download/details.aspx?id=53591)

## Команды приложения

---

### Типичный сценарий работы

1. Сформировать резервную копию базы
2. Передать резервную копию на целевую систему
* Через общую папку / С использованием Yandex-Диск
* Возможно разбиение больших файлов на части (используется 7-zip)
3. Восстановить резервную копию в новую или существующую базу
4. Подключить базу к хранилищу конфигурации

||||
|-|-|-|
|**database** | Группа команд работы с СУБД||
|| **create** | - Создание базы MS SQL ||
|| **backup** | - Создание резервной копии базы MS SQL ||
|| **restore** | - Восстановление базы MS SQL из резервной копии |
|| **compress** | - Выполнить компрессию страниц таблиц и индекстов в базе MS SQL |
|| **drop** | - Удаление базы MS SQL ||
|| **script** | - Выполнить произвольный скрипт на сервере MS SQL |
|**infobase** | Группа команд работы с информационными базами 1С||
|| **create-srv-ib** | - Создать информационную базу на сервере 1С |
|| **create-file-ib** | - Создать файловую информационную базу 1С |
|| **dump** | - Выгрузить информационную базу в файл |
|| **restore** | - Загрузить информационную базу из файла |
|| **clearcache** | - Очистить локальный кэш информационных баз 1С |
|| **uconstorage** | - Отключить информационную базу от хранилища конфигураций |
|| **constorage** | - Подключить информационную базу к хранилищу конфигураций |
|**file** | Группа команд работы с файлами||
|| **copy** | - Копировать/переместить файлы |
|| **split** | - Архивировать файл с разбиением на части указанного размера (используется 7-Zip) |
|| **merge** | - Разархивировать файл (используется 7-Zip) |
|| **mapdrive** | - Подключить сетевой диск |
|| **umapdrive** | - Отключить сетевой диск |
| **yadisk** | Группа команд работы с сервисом Yandex-Диск |
|| **put** | - Помещение файла на Yandex-Диск |
|| **get** | - Получение файла из Yandex-Диска |
| **nextcloud** | Группа команд работы с сервисом NextCloud |
|| **put** | - Помещение файла в сервис NextCloud |
|| **get** | - Получение файла из сервиса NextCloud |
| **sftp** | Группа команд работы с SFTP-сервером |
|| **put** | - Помещение файла на сервер SFTP |
|| **get** | - Получение файла с сервера SFTP |
| **batch** | - Последовательное выполнение команд по сценариям, заданным в файлах (json) |
||||

Для подсказки по конкретной команде наберите **<команда> --help**

## database - Группа команд работы с СУБД

| Общие параметры для команд группы: ||
|-|-|
| **--srvr** | - Адрес сервера MS SQL |
| **--user** | - Пользователь сервера |
| **--pwd** | - Пароль пользователя сервера |
---

### create - Создание базы MS SQL

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--db** | - Имя базы для восстановления |
| **--db-recovery** | - Установить модель восстановления (RECOVERY MODEL), возможные значения "FULL", "SIMPLE", "BULK_LOGGED" |

#### Пример

```bat
cpdb database --srvr MySQLName --user sa --pwd 12345 create --db MyDatabase --db-recovery SIMPLE
```

### backup - Создание резервной копии базы MS SQL

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--db** | - Имя базы для восстановления |
| **--bak-path** | - Путь к резервной копии |

#### Пример

```bat
cpdb database --srvr MySQLName --user sa --pwd 12345 backup --db MyDatabase --bak-path "d:\MSSQL\Backup\MyDatabase_copy.bak"
```

### restore - Восстановление базы MS SQL из резервной копии

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--db** | - Имя базы для восстановления |
| **--bak-path** | - Путь к резервной копии |
| **--create-db** | - Создать базу в случае отсутствия |
| **--db-owner** | - Имя владельца базы после восстановления |
| **--compress-db** | - Включить компрессию страниц таблиц и индексов после восстановления |
| **--shrink-db** | - Сжать файлы данных после восстановления |
| **--shrink-log** | - Сжать файлы журнала транзакций после восстановления |
| **--db-path** | - Путь к каталогу файлов данных базы после восстановления |
| **--db-logpath** | - Путь к каталогу файлов журнала после восстановления |
| **--db-recovery** | - Установить модель восстановления (RECOVERY MODEL), возможные значения "FULL", "SIMPLE", "BULK_LOGGED" |
| **--db-changelfn** | - Изменить логические имена файлов (LFN) базы, в соответствии с именем базы |
| **--delsrc** | - Удалить файл резервной копии после восстановления |

#### Пример

```bat
cpdb database --srvr MyNewSQLServer --user SQLUser --pwd 123456 restore --db MyDatabase_copy --bak-path "d:\data\MyBackUpfile.bak" --create-db --shrink-db --db-owner SQLdbo --db-path "d:\MSSQL\data" --db-logpath "e:\MSSQL\logs" --db-recovery SIMPLE --delsrc
```

### compress - Выполнить компрессию страниц таблиц и индекстов в базе MS SQL

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--db** | - Имя базы для восстановления |
| **--shrink-db** | - Сжать базу после выполнения компрессии |
| **--shrink-log** | - Сжать файлы журнала транзакций после восстановления |

#### Пример

```bat
cpdb database --srvr MyNewSQLServer --user SQLUser --pwd 123456 compress --db MyDatabase_copy --shrink-db
```

### drop - Удаление базы MS SQL

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--db** | - Имя базы для восстановления |

#### Пример

```bat
cpdb database --srvr MySQLName --user sa --pwd 12345 drop --db MyDatabase
```

### script - Выполнить скрипты из файла(ов)

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--files** | - Файлы SQL, содержащие текст скрипта, могут быть указаны несколько файлов, разделённые ";" |
| **--vars** | - Строка значений переменных (без пробелов) для скриптов SQL в виде "<Имя>=<Значение>", разделенные ";" |

#### Пример

```bat
cpdb database --srvr MyNewSQLServer --user SQLUser --pwd 123456 script --params "./JSON/cpdb_env.json" --files "./tools/config_error.sql;./tools/print_message.sql" --vars "varBase=MyDB;message=\"Hello world\""
```

#### Пример config_error.sql

```sql
use $(varBase)
go
truncate table [dbo].[ConfigSave]
go
UPDATE SchemaStorage SET Status = 100
```

#### Пример print_message.sql

```sql
PRINT N'$(message)'
```

## infobase - Группа команд работы с информационной базой 1С

| Общие параметры для команд группы: ||
|-|-|
| **--v8version** | - маска версии платформы 1С (например: 8.3.8, 8.3.17.1851) |
---

### create-srv-ib - Создать информационную базу на сервере 1С

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-srvr** | - Адрес кластера серверов 1С ([<протокол>://]<адрес>[:<порт>]) |
| **--ib-ref** | - Имя базы в кластере 1С |
| **--err-if-exist** | - Сообщить об ошибке если ИБ в кластере 1С существует |
| **--dbms** | - Тип сервера СУБД (MSSQLServer <по умолчанию>; PostgreSQL; IBMDB2; OracleDatabase) |
| **--db-srvr** | - Адрес/имя сервера СУБД |
| **--db-user** | - Пользователь сервера СУБД" |
| **--db-pwd** | - Пароль пользователя сервера СУБД" |
| **--db-name** | - Имя базы на сервере СУБД (если не указано, используется имя базы 1С)" |
| **--sql-offs** | - Смещение дат на сервере MS SQL (0; 2000 <по умолчанию>) |
| **--create-db** | - Создавать базу данных в случае отсутствия |
| **--allow-sch-job** | - Разрешить регламентные задания |
| **--allow-lic-dstr** | - Разрешить выдачу лицензий сервером 1С |
| **--cadm-user** | - Имя администратора кластера |
| **--cadm-pwd** | - Пароль администратора кластера |
| **--name-in-list** | - Имя в списке баз пользователя (если не задано, то ИБ в список не добавляется) |
| **--tmplt-path** | - Путь к шаблону для создания информационной базы (*.cf; *.dt). Если шаблон не указан, то будет создана пустая ИБ |

#### Пример

```bat
cpdb infobase --v8version 8.3.8 create-srv-ib --ib-srvr My1CServer --ib-ref TST_DB_MyDomain --db-srvr MySQLServer --db-user _1CSrvUsr1 --db-pwd p@ssw0rd --db-name TST_DB_MyDomain --createdb --nameinlist "My test base" --errifexist
```

### create-file-ib - Создать файловую информационную базу 1С

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-path** | - Путь к каталогу базы 1С |
| **--err-if-exist** | - Сообщить об ошибке если ИБ в кластере 1С существует |
| **--name-in-list** | - Имя в списке баз пользователя (если не задано, то ИБ в список не добавляется) |
| **--tmplt-path** | - Путь к шаблону для создания информационной базы (*.cf; *.dt). Если шаблон не указан, то будет создана пустая ИБ |

#### Пример

```bat
cpdb infobase --v8version 8.3.8 create-file-ib --ib-path "D:\1cbases\My1CBase" --name-in-list "My test base" --err-if-exist
```

### dump - Выгрузить информационную базу в файл

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-path** | - Строка подключения к ИБ |
| **--ib-user** | - Пользователь ИБ |
| **--ib-pwd** | - Пароль пользователя ИБ |
| **--dt-path** | - Путь к файлу для выгрузки ИБ |
| **--uccode** | - Ключ разрешения запуска ИБ |

#### Пример

```bat
cpdb infobase --v8version 8.3.8 dump --ib-path "/FD:/data/MyDatabase" --dt-path "d:\data\1Cv8.dt" --ib-user Администратор --ib-pwd 123456 --uccode 1234
```

### restore - Загрузить информационную базу из файла

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-path** | - Строка подключения к ИБ |
| **--ib-user** | - Пользователь ИБ |
| **--ib-pwd** | - Пароль пользователя ИБ |
| **--dt-path** | - Путь к файлу для загрузки в ИБ |
| **--jobs-count** | - Количество заданий загрузки файла (для клиент-серверной базы, начиная с версии платформы 8.3.19) |
| **--uccode** | - Ключ разрешения запуска ИБ |
| **--delsrc** | - Удалить файл после загрузки |

#### Пример

```bat
cpdb infobase --v8version 8.3.8 restore --ib-path "/FD:/data/MyDatabase" --dt-path "d:\data\1Cv8.dt" --ib-user Администратор --ib-pwd 123456 --uccode 1234 -delsrc
```

### clearcache - Очистить локальный кэш информационных баз 1С

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-path** | - Строка подключения к ИБ (если не указан то удаляются локальные кэши всех информационных баз)|

#### Пример

```bat
cpdb infobase clearcache --ib-path "/FD:/data/MyDatabase"
```

### uconstorage - Отключить информационную базу от хранилища конфигурации

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-path** | - Строка подключения к ИБ");
| **--ib-user** | - Пользователь ИБ");
| **--ib-pwd** | - Пароль пользователя ИБ");
| **--extension** | - Имя отключаемого расширения конфигурации |
| **--uccode** | - Ключ разрешения запуска ИБ");

#### Пример

```bat
cpdb infobase --v8version 8.3.8 uconstorage --ib-path "/FD:/data/MyDatabase" --ib-user Администратор --ib-pwd 123456 --uccode 1234
```

### constorage - Подключить информационую базу к хранилищу конфигурации

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--ib-path** | - Строка подключения к ИБ |
| **--ib-user** | - Пользователь ИБ |
| **--ib-pwd** | - Пароль пользователя ИБ |
| **--extension** | - Имя подключаемого расширения конфигурации |
| **--storage-path** | - Адрес хранилища конфигурации |
| **--storage-user** | - Пользователь хранилища конфигурации |
| **--storage-pwd** | - Пароль пользователя хранилища конфигурации |
| **--update-ib** | - Выполнить обновление ИБ (применить полученную из хранилища конфигурацию к ИБ) |
| **--uccode** | - Ключ разрешения запуска ИБ |

#### Пример

```bat
cpdb infobase --v8version 8.3. constorage --ib-path "/FD:/data/MyDatabase" --ib-user Администратор --ib-pwd 123456 --storage-path "tcp://MyServer/MyRepository" --storage-user MyDatabase_usr1 --storage-pwd 123456 --uccode 12348
```

## file - Группа команд работы с файлами

---

### copy - Скопировать/переместить файлы

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--src** | - Файл источник |
| **--dst** | - Файл/каталог приемник (если оканчивается на "\", то каталог) |
| **--move** | - Выполнить перемещение файлов (удалить источник после копирования) |
| **--lastonly** | - Копирование файлов, измененных не ранее текущей даты |

#### Простой пример. Копирование файла в каталог

```bat
cpdb file copy --src "d:\MSSQL\Backup\MyDatabase_copy.bak" --dst "N:\NewDestination\" --replace --move
```

#### Сложный пример. В каталоге-источнике имеется несколько резервных копий с датой в имени файла. Необходимо скопировать только свежий файл (созданный сегодня). Новое имя файла не должно содержать дату

```bat
cpdb file copy --src "d:\MSSQL\Backup\MyDatabase_copy*.bak" --dst "N:\NewDestination\MyDatabase_copy.bak*" --replace --move --lastonly
```

### split - Архивировать файл с разбиением на части указанного размера

Используется 7-zip

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| **--src** | - Путь к исходному локальному файлу для разбиения |
| **--arch** | - Имя файла архива (не обязательный, по умолчанию <имя исходного файла>.7z) |
| **--list** | - Имя файла, списка томов архива (не обязательный, по умолчанию <имя исходного файла>.split) |
| **--vol-size** | - Размер части {\, \, \} (по умолчанию 50m) |
| **--compress-level** | - Уровень сжатия частей архива {0 - 9} (по умолчанию 0 - не сжимать) |
| **--delsrc** | - Удалить исходный файл после выполнения операции |

#### Пример

```bat
cpdb file split "d:\MSSQL\Backup\MyDatabase_copy.bak" --list "d:\MSSQL\Backup\MyDatabase_copy.split" --vol-size 40m --delsrc
```

### merge - Разархивировать файл

Используется 7-zip

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--arch** | - Имя первого файла архива |
| **--list** | - Имя файла, списка файлов архива (параметр -arch игнорируется) |
| **--delsrc** | - Удалить исходные файлы после выполнения операции |

#### Пример

```bat
cpdb file merge --file "d:\MSSQL\Backup\MyDatabase_copy.7z.001" --delsrc
```

```bat
cpdb file merge --list "d:\MSSQL\Backup\MyDatabase_copy.split" --delsrc
```

### mapdrive - Подключить сетевой диск

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| **--drive** | - Имя устройства (буква диска) |
| **--res** | - Путь к подключаемому ресурсу |
| **--user** | - Пользователь для подключения |
| **--pwd** | - Пароль для подключения |

#### Пример

```bat
cpdb file mapdrive --drive N --res "\\MyServer\MyFolder" --user superuser --pwd P@$$w0rd
```

### umapdrive - Отключить сетевой диск

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| **--drive** | - Имя устройства (буква диска) |

#### Пример

```bat
cpdb file umapdrive --drive N
```

## yadisk - Группа команд работы с сервисом Yandex-Диск

| Общие параметры для команд группы: ||
|-|-|
| **--token** | - Token авторизации |
---

### put - Помещение файла на Yandex-Диск

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--file** | - Путь к локальному файлу для помещения на Yandex-Диск |
| **--list** | - Путь к локальному файлу со списком файлов, которые будут помещены на Yandex-Диск (параметр --file игнорируется) |
| **--path** | - Путь к каталогу на Yandex-Диск, куда помещать загружаемые файлы |
| **--replace** | - Перезаписать файл на Yandex-диске при загрузке |
| **--delsrc** | - Удалить исходные файлы после отправки |

#### Пример

```bat
// Помещает файл "MyDatabase_copy.bak" на Yandex-диск
cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX put --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --path "/transfer" --delsrc
```

```bat
// Помещает файлы, указанные в списке "MyDatabase_copy.split" на Yandex-диск
cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX put --list "d:\MSSQL\Backup\MyDatabase_copy.split" --path "/transfer" --delsrc
```

### get - Получение файла из Yandex-Диска

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--path** | - Путь к локальному каталогу для сохранения загруженных файлов |
| **--file** | - Путь к файлу на Yandex-Диск для загрузки |
| **--list** | - Путь к файлу на Yandex-Диск со списком файлов, которые будут загружены (параметр --file игнорируется) |
| **--delsrc** | - Удалить файлы из Yandex-Диск после получения |

#### Пример

```bat
// Получает файл "MyDatabase_copy.bak" из Yandex-диска
cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX get --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --file "/transfer/MyDatabase_copy.bak" --delsrc
```

```bat
// Получает файлы, указанные в списке "MyDatabase_copy.split" из Yandex-диска
cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX get --path "d:\MSSQL\Backup\" --list "/transfer/MyDatabase_copy.split" -delsrc
```

#### Для получения токена авторизации Яндекс-диска

* Зарегистрировать приложение: [https://oauth.yandex.ru/client/new](https://oauth.yandex.ru/client/new)
* Название приложения, например "OScript.YaDisk"
* Платформы "Веб-сервисы"
* Callback URI #1: [https://oauth.yandex.ru/verification_code](https://oauth.yandex.ru/verification_code)
* Дать нужные права для приложения
* Сервис Яндекс.Диск REST API
* Запись в любом месте на Диске
* Чтение всего Диска
* Доступ к информации о Диске
* Нажать "Создать приложение" внизу формы: после этого будет показан ID пароль, прочие параметры созданного приложения
* Получить токен для приложения: перейти по ссылке https://oauth.yandex.ru/authorize?response_type=token&client_id=<ВАШ ID (ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)>
* На вопрос "Приложение OScript.YaDisk запрашивает доступ к вашим данным на Яндексе" ответить "Разрешить": после этого на экране появится сформированный токен

## nextcloud - Группа команд работы с сервисом NextCloud

| Общие параметры для команд группы: ||
|-|-|
| **--srvr** | - Адрес сервиса NextCloud |
| **--user** | - Имя пользователя сервиса NextCloud |
| **--pwd** | - Пароль пользователя сервиса NextCloud |
---

### put - Помещение файла в сервис NextCloud

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--file** | - Путь к локальному файлу для помещения в сервис NextCloud |
| **--list** | - Путь к локальному файлу со списком файлов, которые будут помещены в сервис NextCloud (параметр --file игнорируется) |
| **--path** | - Путь к каталогу в сервисе NextCloud, куда помещать загружаемые файлы |
| **--replace** | - Перезаписать файл в сервисе NextCloud при загрузке |
| **--delsrc** | - Удалить исходные файлы после отправки |

#### Пример

```bat
// Помещает файл "MyDatabase_copy.bak" в сервис NextCloud
cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" put --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --path "/transfer" --delsrc
```

```bat
// Помещает файлы, указанные в списке "MyDatabase_copy.split" в сервис NextCloud
cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" put --list "d:\MSSQL\Backup\MyDatabase_copy.split" --path "/transfer" --delsrc
```

### get - Получение файла из сервиса NextCloud

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--path** | - Путь к локальному каталогу для сохранения загруженных файлов |
| **--file** | - Путь к файлу в сервисе NextCloud для загрузки |
| **--list** | - Путь к файлу в сервисе NextCloud со списком файлов, которые будут загружены (параметр --file игнорируется) |
| **--delsrc** | - Удалить файлы из сервиса NextCloud после получения |

#### Пример

```bat
// Получает файл "MyDatabase_copy.bak" из сервиса NextCloud
cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --file "/transfer/MyDatabase_copy.bak" --delsrc
```

```bat
// Получает файлы, указанные в списке "MyDatabase_copy.split" из сервиса NextCloud
cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\" --list "/transfer/MyDatabase_copy.split" -delsrc
```

## sftp - Группа команд работы с SFTP-сервером

| Общие параметры для команд группы: ||
|-|-|
| **--srvr** | - Адрес сервера SFTP в виде `<адрес>:<порт>` |
| **--port** | - Порт сервера SFTP |
| **--user** | - Имя пользователя сервера SFTP |
| **--pwd** | - Пароль пользователя сервера SFTP, если указан параметр **--key-file**, то используется как пароль для доступа к закрытому ключу |
| **--key-file** | - Путь к файлу закрытого ключа, если указано, то параметр **--pwd** интерпретируется как пароль к закрытому ключу |
---

### put - Помещение файла на сервер SFTP

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--file** | - Путь к локальному файлу для помещения на сервер SFTP |
| **--list** | - Путь к локальному файлу со списком файлов, которые будут помещены на сервер SFTP (параметр --file игнорируется) |
| **--path** | - Путь к каталогу на сервере SFTP, куда помещать загружаемые файлы |
| **--replace** | - Перезаписать файл на сервере SFTP при загрузке |
| **--delsrc** | - Удалить исходные файлы после отправки |

#### Пример

```bat
// Помещает файл "MyDatabase_copy.bak" на сервере SFTP
cpdb sftp --server "sftp.myServer.org" --port 22 --user "admin" --pwd "P@$$w0rd" put --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --path "/transfer" --delsrc
```

```bat
// Помещает файлы, указанные в списке "MyDatabase_copy.split" на сервере SFTP
cpdb sftp --server "sftp.myServer.org" --port 22 --user "admin" --pwd "P@$$w0rd" put --list "d:\MSSQL\Backup\MyDatabase_copy.split" --path "/transfer" --delsrc
```

### get - Получение файла с сервера SFTP

| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--path** | - Путь к локальному каталогу для сохранения загруженных файлов |
| **--file** | - Путь к файлу на сервере SFTP для загрузки |
| **--list** | - Путь к файлу на сервере SFTP со списком файлов, которые будут загружены (параметр --file игнорируется) |
| **--delsrc** | - Удалить файлы с сервера SFTP после получения |

#### Пример

```bat
// Получает файл "MyDatabase_copy.bak" с сервера SFTP
cpdb sftp --server "sftp.myServer.org" --port 22 --user "user" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --file "/transfer/MyDatabase_copy.bak" --delsrc
```

```bat
// Получает файлы, указанные в списке "MyDatabase_copy.split" с сервера SFTP
cpdb sftp --server "sftp.myServer.org" --port 22 --user "user" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\" --list "/transfer/MyDatabase_copy.split" -delsrc
```

## batch - Выполнить сценарий

Последовательно выполняет команды указнные в файле JSON

| Параметры: ||
|-|-|
| **\<Сценарии\>** | - Файлы JSON содержащие команды и значения параметров, могут быть указаны несколько файлов разделенные "";"" (обработка файлов выполняется в порядке следования) |

#### Пример

```bat
cpdb batch "./rest_TST_DB_MyDomain.json"
```

#### Пример сценария

```json
{
"params": {},
"stages": {
"Восстановление": {
"description": "Восстановление из резервной копии",
"command": "database restore",
"params": {
"srvr": "MySQLServer",
"user": "_1CSrvUsr1",
"pwd": "p@ssw0rd",
"bak-path": "d:\\tmp\\PRD_DB_MyDomain.bak",
"db": "TST_DB_MyDomain",
"db-owner": "_1CSrvUsr1",
"db-path": "D:\\sqldata",
"db-logpath": "D:\\sqldata",
"db-recovery": "SIMPLE",
"db-changelfn": true
}
},
"Отключение": {
"description": "Отключение от хранилища",
"command": "infobase uconstorage",
"params": {
"ib-path": "/SSport1\\TST_DB_MyDomain",
"ib-user": "\"1C User\"",
"ib-pwd": "p@ssw0rd"
}
},
"Сжатие": {
"description": "Сжатие базы данных",
"command": "database compress",
"params": {
"srvr": "Sport1",
"user": "_1CSrvUsr1",
"pwd": "p@ssw0rd",
"db": "TST_DB_MyDomain",
"shrink-db": true
}
}
}
}
```

## Использование c Jenkins

В jenkinsfile описан конвейер, выполняющий следующий сценарий:

* Создание резервной копии указанной базы на системе-источнике
* Разбиение резервной копии на части (используется 7-Zip)
* Копирование частей файла на Yandex-Диск (в указанный каталог)
* Получение файла резервной копии из Yandex-Диск на системе-приемнике
* Восстановление указанной базы из резервной копии
* Подключает базу к хранилищу конфигурации

| Переменные окружения конвейера ||
|-|-|
| **src_db_cred** | - Идентификатор credentials для доступа к MS SQL в системе, где расположена база-источник |
| **src_agent_label** | - Метка агента Jenkins в системе, где расположена база-источник |
| **src_server_name** | - Имя сервера MS SQL в системе-источнике |
| **src_db_name** | - Имя базы-источника |
| **src_bak_path** | - Путь к каталогу резервной копии в системе-источнике |
|||
| **bak_file_name** | - Имя файла резервной копии |
| **list_file_name** | - Имя файла списка томов архива |
|||
| **storage_token** | - Token для доступа к Yandex-Диску |
| **storage_path** | - Путь к каталогу на Yandex-Диск для передачи файлов в систему-приемник |
|||
| **dst_db_cred** | - Идентификатор credentials для доступа к MS SQL в системе-приемнике |
| **dst_agent_label** | - Метка агента Jenkins в системе, где расположена база-приемник |
| **dst_bak_path** | - Путь к каталогу резервной копии в системе-приемнике, в который будут загружены файлы из Yandex-Диска |
| **dst_server_name** | - Имя сервера MS SQL в системе-приемнике |
| **dst_db_name** | - Имя базы-приемника |
| **dst_dbo** | - Имя пользователя-владельца базы в системе-приемнике (dbowner) |
| **dst_db_path** | - Путь к каталогу размещения файлов данных базы-приемника
| **dst_log_path** | - Путь к каталогу размещения файлов журнала базы-приемника |
| **dst_ib_agent_label** | - Метка агента Jenkins в системе, где выполняется подключение к хранилищу конфигурации |
| **dst_ib_con_string** | - Строка подключения к информационной базе, подключаемой к хранилищу |
| **dst_ib_cred** | - Идентификатор credentials для доступа к информационной базе |
| **dst_ib_storage_adr** | - Адрес хранилища конфигурации |
| **dst_ib_storage_cred** | - Идентификатор credentials для подключения к хранилищу конфигурации |

## Прграммный интерфейс библиотеки (API)

---

### Класс РаботаССУБД

```bsl
Подключение = Новый ПодключениеMSSQL("MyServer", "user", "P@ssw0rd);
РаботаССУБД = Новый РаботаССУБД(Подключение);
```

#### **Функция БазаСуществует()** - проверяет существование базу на сервере СУБД

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

*Возвращаемое значение:* Булево - Истина - база существует

#### **Функция СписокБаз()** - получает список баз с сервера СУБД

| Параметры: |||
|-|-|-|
| ФильтрБазПоИмени | Строка | имя базы данных |
| ФильтрПоТаблице | Строка | имя таблицы базы данных |
| ВключаяСистемные | Строка | имя таблицы базы данных |

*Возвращаемое значение:* Соответствие Из Структура - список баз на сервере СУБД

```txt
* Имя - Строка - имя базы данных
* Ид - Число - идентификатор базы данных
* ИдСоздателя - Число - идентификатор пользователя, создавшего базу
* Статус1 - Число - флаги состояния базы данных
* Статус2 - Число - флаги состояния базы данных
* ДатаСоздания - Дата - дата создания базы данных
* РежимСовместимости - Число - версия режима совместимости базы
* ФайлДанных - Строка - путь к файлу данных
```

#### **Функция ТаблицаСуществует()** - проверяет существование таблицы в базе на сервере СУБД

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| Таблица | Строка | имя таблицы базы данных |

*Возвращаемое значение:* Булево - Истина - таблица существует в базе данных

#### **Процедура СоздатьБазуДанных()** - создает базу данных

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| МодельВосстановления | Строка | модель восстановления (FULL, SIMPLE, BULK_LOGGED) |
| ПутьККаталогу | Строка | путь к каталогу для размещения файлов базы данных если не указан, то файлы размещаются в каталоге по умолчанию SQL Server |

#### **Процедура УдалитьБазуДанных()** - удаляет базу данных

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

#### **Процедура ВыполнитьрезервноеКопирование()** - выполняет резервное копирование базы

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| ПутьКРезервнойКопии | Строка | путь к файлу резервной копии |

#### **Процедура ВыполнитьВосстановление()** - выполняет восстановление базы из резервной копии

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| ПутьКРезервнойКопии | Строка | путь к файлу резервной копии |
| ПутьКФайлуДанных | Строка | путь к файлу данных базы |
| ПутьКФайлуЖурнала | Строка | путь к файлу журнала транзакций базы |
| СоздаватьБазу | Булево | Истина - создать базу в случае отсутствия

#### **Функция ПолучитьОписание()** - получает описание базы данных

| Параметры: |||
|-|-|-|
| База | Структура | описание базы данных |

*Возвращаемое значение:* Структура - описание базы данных

```txt
* Имя - Строка - имя базы данных (name)
* Ид - Число - числовой идентификатор базы (database_id)
* ФизическоеИмя - Строка - физическое имя базы (physical_database_name)
* Владелец - Строка - пользователь - владелец базы (db owner)
* ДатаСоздания - Дата - дата создания базы (create_date)
* РежимСовместимости - Число - режим совместимости базы (версия MS SQL)
(compatibility_level)
* ЯзыковыеУстановки - Строка - используемые языковые установки (collation_name)
* РежимДоступа - Булево - режим пользовательского доступа к базе
(SINGLE_USER, MULTI_USER) (user_access_desc)
* ТолькоДляЧтения - Булево - флаг режима только для чтения (is_read_only)
* Состояние - Строка - состояние базы (ONLINE, OFFLINE) (state_desc)
* РежимОжидания - Булево - флаг нахождения базы в режиме ожидания (is_in_standby)
* РежимИзоляцииСнимков - Булево - флаг использования режима изоляции снимков
(snapshot_isolation_state)
* РежимФиксированногоЧтенияСнимков - Булево - флаг использования фиксированного чтения снимков
(is_read_committed_snapshot_on)
* МодельВосстановления - Строка - модель восстановления базы (FULL, SIMPLE, BULK_LOGGED)
(recovery_model_desc)
* АвтоСозданиеСтатистики - Булево - флаг автоматического создания статистики
(is_auto_create_stats_on)
* АвтоСозданиеСтатистикиИнкрементально - Булево - флаг автоматического инкрементального создания статистики
(is_auto_create_stats_incremental_on)
* АвтоОбновлениеСтатистики - Булево - флаг автоматического обновления статистики
(is_auto_update_stats_on)
* АвтоОбновлениеСтатистикиАсинх - Булево - флаг автоматического асинхронного обновления статистики
(is_auto_update_stats_async_on)
* ПолнотекстовыйПоиск - Булево - флаг использования полнотекстового поиска
(is_fulltext_enabled)
* Шифрование - Булево - флаг использования шифрования базы (is_encrypted)
```

#### **Процедура УстановитьОднопользовательскийРежимБазы()** - переводит базу данных в однопользовательский режим

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

#### **Процедура УстановитьМногопользовательскийРежимБазы()** - переводит базу данных в многопользовательский режим

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

#### **Функция ПолучитьВладельца()** - получает текущего владельца базы

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

*Возвращаемое значение:* Строка - имя текущего владельца базы

#### **Процедура ИзменитьВладельца()** - устанавливает нового владельца базы

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| ВладелецБазы | Строка | новый владелец базы |

#### **Процедура ПолучитьМодельВосстановления()** - получает модель восстановления базы (FULL, SIMPLE, BULK_LOGGED)

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

*Возвращаемое значение:* Строка - текущая модель восстановления базы

#### **Процедура ИзменитьМодельВосстановления()** - устанавливает модель восстановления базы (FULL, SIMPLE, BULK_LOGGED)

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| МодельВосстановления | Строка | новая модель восстановления (FULL, SIMPLE, BULK_LOGGED) |

#### **Функция ПолучитьЛогическоеИмяФайла()** - получает логическое имя файла в базе

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| ТипФайла | Строка | ROWS - файл базы; LOG - файл журнала транзакций |

*Возвращаемое значение:* Строка - логическое имя файла в базе данных

#### **Процедура ИзменитьЛогическоеИмяФайла()** - устанавливает новое логическое имя файла базы

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| Имя | Строка | логическое имя файла для изменения |
| НовоеИмя | Строка | новое логическое имя файла|

#### **Процедура УстановитьЛогическиеИменаФайлов()** - устанавливает логические имена файлов в формате

*<НовоеИмя>* - для файла данных

*<НовоеИмя>_log* - для файла журнала транзакций

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |
| НовоеИмя | Строка | новое имя файлов, если не указано, то используется имя базы |

#### **Процедура ВключитьКомпрессию()** - включает компрессию данных базы на уровне страниц

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

#### **Процедура СжатьБазу()** - выполняет сжатие базы (shrink)

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

#### **Процедура СжатьФайлЖурналаТранзакций()** - выполняет сжатие файла журнала транзакций (shrink)

| Параметры: |||
|-|-|-|
| База | Строка | имя базы данных |

#### **Функция ВыполнитьСкрипты()** - выполняет указанные скрипты

| Параметры: |||
|-|-|-|
| СкриптыВыполнения | Строка | пути к файлам скриптов, разделенные ";" |
| СтрокаПеременных | Строка | набор значений переменных в виде "<Имя>=<Значение>", разделенные ";" |

*Возвращаемое значение:* Строка - результат выполнения скриптов

#### **Функция ВыполнитьЗапрос()** - выполняет запрос к СУБД

| Параметры: |||
|-|-|-|
| ТекстЗапроса | Строка | текст исполняемого запроса |
| Разделитель | Строка | символ - разделитель колонок результата |
| УбратьПробелы | Булево | Истина - будут убраны выравнивающие пробелы из результата |

*Возвращаемое значение:* Строка - результат выполнения запроса

### Модуль РаботаСИБ

#### **Процедура ВыгрузитьИнформационнуюБазуВФайл()** - выполняет выгрузку информационной базы в DT-файл

| Параметры: |||
|-|-|-|
| ПараметрыИБ | Структура | параметры подключения к базе 1С |
| **СтрокаПодключения* | Строка | строка подключения к базе 1С |
| **Пользователь* | Строка | имя пользователя базы 1С |
| **Пароль* | Строка | пароль пользователя базы 1С |
| ПутьКФайлу | Строка | путь к DT-файлу для выгрузки базы 1С |
| ИспользуемаяВерсияПлатформы | Строка | маска версии 1С |
| КлючРазрешения | Строка | ключ разрешения входа в заблоrированную серверную базу 1С (/UC) |

#### **Процедура ЗагрузитьИнформационнуюБазуИзФайла()** - выполняет загрузку информационной базы из DT-файла

| Параметры: |||
|-|-|-|
| ПараметрыИБ | Структура | параметры подключения к базе 1С |
| **СтрокаПодключения* | Строка | строка подключения к базе 1С |
| **Пользователь* | Строка | имя пользователя базы 1С |
| **Пароль* | Строка | пароль пользователя базы 1С |
| ПутьКФайлу | Строка | путь к DT-файлу для загрузки в базу 1С |
| КоличествоЗаданий | Число | количество заданий загрузки файла (для клиент-серверной базы, начиная с версии платформы 8.3.19)) |
| ИспользуемаяВерсияПлатформы | Строка | маска версии 1С |
| КлючРазрешения | Строка | ключ разрешения входа в заблоrированную серверную базу 1С (/UC) |

#### **Процедура ОчиститьЛокальныйКэшИнформационнойБазы()** - выполняет очистку локального кэша информационной базы 1С

| Параметры: |||
|-|-|-|
| СтрокаПодключения | Строка | строка подключения к базе 1С |

#### **Процедура ОчиститьВсеЛокальныеКэшиИнформационныхБаз()** - выполняет очистку всех локальных кэшей информационных баз 1С

| Параметры: |||
|-|-|-|
| нет | | |

#### **Процедура ОтключитьОтХранилища()** - выполняет отключение информационной базы от хранилища конфигурации

| Параметры: |||
|-|-|-|
| ПараметрыИБ | Структура | параметры подключения к базе 1С |
| **СтрокаПодключения* | Строка | строка подключения к базе 1С |
| **Пользователь* | Строка | имя пользователя базы 1С |
| **Пароль* | Строка | пароль пользователя базы 1С |
| ИспользуемаяВерсияПлатформы | Строка | маска версии 1С |
| ИмяРасширения | Строка | имя расширения, отключаемого от хранилища (если не указано, отключается основная конфигурация) |
| КлючРазрешения | Строка | ключ разрешения входа в заблоrированную серверную базу 1С (/UC) |

#### **Процедура ПодключитьКХранилищу()** - выполняет подключение информационной базы к хранилищу конфигурации

| Параметры: |||
|-|-|-|
| ПараметрыИБ | Структура | параметры подключения к базе 1С |
| **СтрокаПодключения* | Строка | строка подключения к базе 1С |
| **Пользователь* | Строка | имя пользователя базы 1С |
| **Пароль* | Строка | пароль пользователя базы 1С |
| ПараметрыХранилища | Структура | параметры подключения к хранилищу конфигурации |
| **Адрес* | Строка | адрес хранилища конфигурации |
| **Пользователь* | Строка | имя пользователя хранилища конфигурации |
| **Пароль* | Строка | пароль пользователя хранилища конфигурации |
| ИспользуемаяВерсияПлатформы | Строка | маска версии 1С |
| ИмяРасширения | Строка | имя расширения, отключаемого от хранилища (если не указано, отключается основная конфигурация) |
| ОбновитьИБ | Булево | Истина - после обновления обновить конфигурацию базы данных |
| КлючРазрешения | Строка | ключ разрешения входа в заблоrированную серверную базу 1С (/UC) |

#### **Процедура СоздатьСервернуюБазу()** - создание серверной информационной базы 1С

| Параметры: |||
|-|-|-|
| Параметры1С | Структура | параметры создания базы 1С |
| **Сервер1С* | Строка | адрес кластера серверов 1С ([<протокол>://]<адрес>[:<порт>]) |
| **ИмяИБ* | Строка | имя информационной базы на сервере 1С |
| **РазрешитьВыдачуЛицензий* | Булево | Истина - разрешить выдачу лицензий сервером 1С (по умолчанию: Истина) |
| **РазрешитьРегЗадания* | Булево | Истина - разрешить запуск рег. заданий (по умолчанию: Ложь) |
| ПараметрыСУБД | Структура | параметры подключения к СУБД |
| **ТипСУБД* | Строка | тип сервера СУБД ("MSSQLServer" <по умолчанию>, "PostgreSQL", "IBMDB2", "OracleDatabase") |
| **СерверСУБД* | Строка | адрес сервера СУБД |
| **ПользовательСУБД* | Строка | пользователь сервера СУБД |
| **ПарольСУБД* | Строка | пароль пользователя сервера СУБД |
| **ИмяБД* | Строка | имя базы на сервере СУБД (если не указано будет использовано имя ИБ 1С) |
| **СмещениеДат* | Число | смещение дат на сервере MS SQL (0; 2000 <по умолчанию>) |
| **СоздаватьБД* | Булево | Истина - будет создана база на сервере СУБД в случае отсутствия |
| АвторизацияВКластере | Структура | параметры авторизации в кластере 1С |
| **Имя* | Строка | имя администратора кластера 1С |
| **Пароль* | Строка | пароль администратора кластера 1С |
| ИспользуемаяВерсияПлатформы | Строка | маска версии 1С |
| ОшибкаЕслиСуществует | Булево | Истина - вызвать исключение если ИБ в кластере 1С существует (по умолчанию: Ложь) |
| ПутьКШаблону | Строка | путь к шаблону для создания информационной базы (*.cf; *.dt). Если шаблон не указан, то будет создана пустая ИБ |
| ИмяВСпискеБаз | Строка | имя в списке баз пользователя (если не задано, то ИБ в список не добавляется) |

#### **Процедура СоздатьФайловуюБазу()** - создание файловой информационной базы 1С

| Параметры: |||
|-|-|-|
| ПутьКБазе | Строка | путь к каталогу базы 1С |
| ИспользуемаяВерсияПлатформы | Строка | маска версии 1С |
| ПутьКШаблону | Строка | путь к шаблону для создания информационной базы (*.cf; *.dt). Если шаблон не указан, то будет создана пустая ИБ |
| ИмяВСпискеБаз | Строка | имя в списке баз пользователя (если не задано, то ИБ в список не добавляется) |

### Модуль РаботаСФайлами

#### **Процедура КомандаСистемыКопироватьФайл()** - выполняет копирование/перемещение указанных файлов с использованием команд системы (xcopy)

| Параметры: |||
|-|-|-|
| Источник | Строка | копируемые файлы |
| Приемник | Строка | назначение копирования, каталог или файл |
| Перемещение | Булево | выполнить перемещение файлов (удалить источник после копирования) |
| ТолькоСегодня | Булево | копирование файлов, измененных не ранее текущей даты (параметр /D для xcopy) |

#### **Процедура КомандаСистемыУдалитьФайл()** - выполняет удаление указанных файлов с использованием команды системы (del)

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | путь к удаляемому файлу |
| ИсключениеПриОшибке | Булево | Истина - вызывать исключение при ошибке удаления |

#### **Функция ПрочитатьСписокФайлов()** - читает список файлов из файла

| Параметры: |||
|-|-|-|
| ПутьКСписку | Строка | путь к удаляемому файлу |
| ДобавитьПутьКИсходномуФайлу | Булево | Истина - при чтении добавлять к результату путь к исходному файлу списка |
| ДобавитьИсходныйФайл | Булево | Истина - добавить исходный файл в список |

*Возвращаемое значение:* Массив из Строка - прочитанный список файлов

#### **Процедура ЗапаковатьВАрхив()** - выполняет архиваци указанного файла с разбитием на части указанного размера

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | путь к файлу, который будет архивироваться |
| ИмяАрхива | Строка | имя файла-архива |
| ИмяСпискаФайлов | Строка | имя файла-списка (содержащего все чати архива) |
| РазмерТома | Строка | размер части {, , } (по умолчанию 50m) |
| СтепеньСжатия | Число | уровень сжатия частей архива {0 - 9} (по умолчанию 0 - не сжимать) |
| УдалитьИсточник | Булево | Истина - после архивации исходный файл будет удален |

#### **Процедура РаспаковатьАрхив()** - выполняет выполняет распаковку архива

| Параметры: |||
|-|-|-|
| ПутьКАрхиву | Строка | путь к файлу архива, который будет распаковываться |
| ЭтоСписокФайлов | Булево | Истина - передан список файлов; Ложь - передан первый том архива |
| УдалитьИсточник | Булево | Истина - после распаковки исходный файл будет удален |

#### **Процедура ПодключитьДиск()** - подключает указанный сетевой диск

| Параметры: |||
|-|-|-|
| ИмяУстройства | Строка | имя (буква) подключаемого диска |
| ИмяРесурса | Строка | сетевой путь к подключаемому ресурсу |
| Пользователь | Строка | пользователь от имени которого выполняется подключение |
| ПарольПользователя | Строка | пароль пользователя от имени которого выполняется подключение |

#### **Процедура ОтключитьДиск()** - отключает указанный сетевой диск

| Параметры: |||
|-|-|-|
| ИмяУстройства | Строка | имя (буква) отключаемого диска |

### Класс РаботаСЯндексДиск

```bsl
РаботаСЯндексДиск = Новый РаботаСЯндексДиск(<Токен>);
```

| Параметры: |||
|-|-|-|
| _Токен | Строка | токен авторизации Yandex-диска |

#### **Функция Соединение()** - возвращает соединение с Yandex-диском

| Параметры: |||
|-|-|-|
| нет |||

*Возвращаемое значение:* ЯндексДиск - соединение с Yandex-диском

#### **Процедура УстановитьПараметрыСоединения()** - создает соединение с Yandex-диском с указанными параметрами

| Параметры: |||
|-|-|-|
| _Токен | Строка | токен авторизации Yandex-диска |

#### **Процедура СоздатьКаталог()** - создает каталог на Yandex-диске

| Параметры: |||
|-|-|-|
| ЦелевойПуть | Строка | путь на yandex-диске к создаваемому каталогу |

#### **Процедура ОтправитьФайл()** - отправляет файл на Yandex-Диск

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | путь к отправляемому файлу |
| ЦелевойПуть | Строка | путь на yandex-диске, куда будет загружен файл |
| Перезаписывать | Булево | перезаписать файл на Яндекс-диске при загрузке |

#### **Функция ПолучитьФайл()** - получает файл из Yandex-Диска

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | расположение файла на yandex-диске |
| ЦелевойПуть | Строка | путь, куда будет загружен файл |
| УдалитьИсточник | Булево | Истина - удалить файл после загрузки |

*Возвращаемое значение:* Число - код возврата команды

#### **Функция Существует()** - проверка существования файла / каталога на Yandex-Диске

**Не реализовано**

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | расположение файла на yandex-диске |

*Возвращаемое значение:* Булево - Истина - файл / каталог существует

#### **Процедура Удалить()** - удаляет файл из Yandex-Диска

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | расположение файла на yandex-диске |

### Класс РаботаСNextCloud

```bsl
РаботаСNextCloud = Новый РаботаСNextCloud("http://MyNextCloudServer:8080", "user", "P@ssw0rd");
```

#### **Функция Адрес()** - возвращает адрес сервера NextCloud

*Возвращаемое значение:* Строка - адрес сервера NextCloud

#### **Функция Пользователь()** - возвращает имя пользователя сервера NextCloud

*Возвращаемое значение:* Строка - имя пользователя сервера NextCloud

#### **Функция Соединение()** - возвращает соединение с сервером NextCloud

*Возвращаемое значение:* ПодключениеNextCloud - соединение с сервером NextCloud

#### **Процедура УстановитьПараметрыСоединения()** - создает соединение с сервером NextCloud с указанными параметрами

| Параметры: |||
|-|-|-|
| _Адрес | Строка | адрес сервера NextCloud |
| _Пользователь | Строка | имя пользователя сервера NextCloud |
| Пароль | Строка | пароль пользователя сервера NextCloud |

#### **Процедура СоздатьКаталог()** - создает каталог в сервисе NextCloud

| Параметры: |||
|-|-|-|
| ЦелевойПуть | Строка | путь к создаваемому каталогу |

#### **Процедура ОтправитьФайл()** - отправляет файл в сервис NextCloud

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | путь к отправляемому файлу |
| ЦелевойПуть | Строка | путь к каталогу в сервисе NextCloud, куда будет загружен файл |
| Перезаписывать | Булево | перезаписать файл в сервисе NextCloud при загрузке |

#### **Функция ПолучитьФайл()** - получает файл из сервиса NextCloud

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | расположение файла на сервисе NextCloud |
| ЦелевойКаталог | Строка | путь к каталогу, куда будет загружен файл |
| УдалитьИсточник | Булево | Истина - удалить файл после загрузки |

*Возвращаемое значение:* Строка - путь к полученному файлу

#### **Функция Существует()** - проверяет существование файла / каталога в сервиса NextCloud

| Параметры: |||
|-|-|-|
| ПутьНаДиске | Строка | расположение файла на сервисе NextCloud |

*Возвращаемое значение:* Булево - Истина - файл / каталог существует

#### **Процедура Удалить()** - удаляет файл из сервиса NextCloud

| Параметры: |||
|-|-|-|
| ПутьНаДиске | Строка | расположение файла на сервисе NextCloud |

### Класс РаботаСSFTP

```bsl
РаботаСSFTP = Новый РаботаСSFTP("MySFTPServer:2222", "user", "P@ssw0rd");
```

#### **Функция Адрес()** - возвращает адрес сервера SSH

*Возвращаемое значение:* Строка - адрес сервера SSH

#### **Функция Пользователь()** - возвращает имя пользователя сервера SSH

*Возвращаемое значение:* Строка - имя пользователя сервера SSH

#### **Функция Соединение()** - возвращает соединение с сервером SSH

*Возвращаемое значение:* КлиентSSH - соединение с сервером SSH

#### **Процедура УстановитьПараметрыСоединения()** - создает соединение с сервером SSH с указанными параметрами

| Параметры: |||
|-|-|-|
| _Адрес | Строка | адрес сервера SSH |
| _Пользователь | Строка | имя пользователя сервера SSH |
| ПутьККлючу | Строка | путь к файлу закрытого ключа сервера SSH |

#### **Процедура СоздатьКаталог()** - каталог на сервере SFTP

| Параметры: |||
|-|-|-|
| ЦелевойПуть | Строка | путь к создаваемому каталогу |

#### **Процедура ОтправитьФайл()** - отправляет файл в сервис NextCloud

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | путь к отправляемому файлу |
| ЦелевойПуть | Строка | путь к каталогу на сервере SFTP, куда будет загружен файл |
| Перезаписывать | Булево | перезаписать файл на сервере SFTP при загрузке |

#### **Функция ПолучитьФайл()** - получает файл с сервера SFTP

| Параметры: |||
|-|-|-|
| ПутьКФайлу | Строка | расположение файла на сервере SFTP |
| ЦелевойКаталог | Строка | путь к каталогу, куда будет загружен файл |
| УдалитьИсточник | Булево | Истина - удалить файл после загрузки |

*Возвращаемое значение:* Строка - путь к полученному файлу

#### **Функция Существует()** - проверяет существование файла / каталога на сервере SFTP

| Параметры: |||
|-|-|-|
| ПутьНаДиске | Строка | расположение файла на сервере SFTP |

*Возвращаемое значение:* Булево - Истина - файл / каталог существует

#### **Процедура УдалитьФайл()** - удаляет файл с сервера SFTP

| Параметры: |||
|-|-|-|
| ПутьНаДиске | Строка | расположение файла на сервере SFTP |

#### **Процедура УдалитьКаталог()** - удаляет каталог с сервера SFTP

| Параметры: |||
|-|-|-|
| ПутьНаДиске | Строка | расположение каталога на сервере SFTP |

### Класс СтруктураХраненияИБ

```bsl
СтруктураИБ = Новый СтруктураХраненияИБ();
```

#### **Функция ВерсияФорматаКонфигурации()** - возвращает версию формата конфигурации

| Параметры: |||
|-|-|-|
| нет |||

*Возвращаемое значение:* Структура - информация о версии формата конфигурации

```txt
* Версия - Число - номер версии формата конфигурации
* ТребуемаяВерсияПлатформы - Строка - минимальная версия платформы 1С
```

#### **Функция ОписаниеКонфигурации()** - возвращает описание конфигурации

| Параметры: |||
|-|-|-|
| нет |||

*Возвращаемое значение:* Структура - описание конфигурации

```txt
* Имя - Строка - имя конфигурации
* Синоним - Строка - синоним конфигурации
* Версия - Строка - версия конфигурации
* РежимСовместимости - Строка - версия режима совместимости конфигурации
* КраткаяИнформация - Строка - краткая информация о конфигурации
* ПодробнаяИнформация - Строка - подробная информация о конфигурации
* Поставщик - Строка - поставщик конфигурации
* АвторскиеПрава - Строка - данные об авторских правах
* АдресИнформацииОПоставщике - Строка - адрес сайта с информацией о поставщике
* АдресИнформацииОКонфигурации - Строка - адрес сайта с информацией о конфигурации
* АдресКаталогаОбновлений - Строка - адрес сайта с каталогом обновлений
```

#### **Функция ОписаниеМетаданныхОбъектаБД1С()** - возвращает описание метаданных 1С для объекта СУБД по его имени

| Параметры: |||
|-|-|-|
| ИмяОбъекта | Строка | имя таблицы или поля таблицы СУБД |

*Возвращаемое значение:* Структура - описание метаданных 1С по имени объекта СУБД

```txt
* Владелец - Структура - структура описания объекта владельца
* Тип - Строка - тип объекта или коллекция
(например: Справочник, Документ, ТабличнаяЧасть, Поле)
* ТипАнгл - Строка - тип объекта или коллекция на английском
(например: Reference, Document, TabularSection, Field)
* Назначение - Строка - назначение таблицы БД (например: Основная, Итоги, Обороты)
* Имя - Строка - имя объекта в БД (Префикс + Индекс)
* Префикс - Строка - префикс объекта (например: Reference, Document, VT, Fld))
* Индекс - Число - числовой индекс объекта
* Суффикс - Строка - дополнительный суффикс имени объекта (например: "_RRef")
* Ид - Строка - UUID объекта 1С
* ИмяМетаданных - Строка - имя метаданных 1С
* ПолноеИмяМетаданных - Строка - имя метаданных 1С
```

#### **Функция ОписаниеМетаданныхОбъектовБД1С()** - возвращает описание метаданных 1С для таблиц и полей таблиц СУБД

| Параметры: |||
|-|-|-|
| ДобавлятьКолонки | Булево | Истина - будет добавлена информация для колонок таблиц |

*Возвращаемое значение:* Соответствие - соответствия имен таблиц СУБД и полных имен метаданных 1С описаниям объектов метаданных (см. ОписаниеМетаданныхОбъектаБД1С)

#### **Функция ЗанимаемоеМесто()** - возвращает описание занимаеиого места в базе MS SQL Server

| Параметры: |||
|-|-|-|
| нет |||

*Возвращаемое значение:* Структура - описание занимаего места

```txt
* РазмерБазы - Число - размер текущей базы данных в байтах, включает файлы данных и журналов
* Свободно - Число - место в базе данных, не зарезервированное для объектов базы данных
* Зарезервировано - Число - общий объем, выделенный объектам в базе данных
* Данные - Число - зарезервированный объем, используемый данными
* Индексы - Число - зарезервированный объем, используемый индексами
* НеИспользуется - Число - объем, зарезервированный для объектов в базе данных,
но пока не используемый
* ЖурналВсего - Число - полный объем журнала транзакций
* ЖурналИспользуется - Число - используемый объем журнала транзакций
```

#### **Функция ПоказателиИспользованияТаблицБазы()** - возвращает список таблиц в базе MS SQL Server и их показатели использования

| Параметры: |||
|-|-|-|
| ФильтрТаблицПоИмени | Строка | фильтр имен таблиц в формате для оператора "LIKE" |
| СтатистикаОпераций | Булево | Истина - в результат будет включена статистика по операциям с таблицами (для больших баз - может занять много времени) |

*Возвращаемое значение:* Массив из Структура - таблицы и показатели использования

```txt
* Таблица - Строка - имя таблицы
* КоличествоСтрок - Число - количество строк в таблице
* ВсегоЗанято - Число - общий объем заниаемого места (байт)
* Используется - Число - объем, используемый данными (байт)
* НеИспользуется - Число - не используемый объем (байт)
* ОперацийЧтения - Число - количество операций чтения (read)
* ОперацийВыборки - Число - количество операций выборки (select)
* ОперацийСканирования - Число - количество операций сканирования (scan)
* ОперацийПоиска - Число - количество операций поиска (seek)
* ОперацийЗаписи - Число - количество операций записи (write)
```

## Запуск тестов

### Необходимые настройки

Для тестирования подключения / отключения сетевого диска требуются дополнительные настройки.

В реестре в ключе `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters` указать:

**BasicAuthLevel** : 0x00000002 (2)

В реестре в ключе `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager` указать:

**ProtectionMode** : 0x00000000 (0)

Для тестирования работы с базами MS SQL пользователю, под которым выполняется вход на сервер необходимо назначить роль `sysadmin`

### Выполнение тестов

Запуск и остановка окружения выполняются автоматически.

`./tools/runtests.bat`

### Запуск окружения

Для выполнения отладки

`./tools/startenv.bat`

### Остановка окружения

После выполнения отладки

`./tools/stopenv.bat`