├── src ├── Модули │ └── .gitkeep └── Классы │ └── УправлениеКластером.os ├── tests └── fixtures │ └── .gitkeep ├── docs └── README.md ├── .gitignore ├── CHANGELOG.md ├── travis-ci.sh ├── packagedef ├── features └── build.feature ├── tasks ├── coverage.os └── test.os ├── TODO ├── LICENSE ├── .travis.yml └── README.md /src/Модули/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/fixtures/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # В РАЗРАБОТКЕ -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.xml 2 | *.ospx 3 | oscript_modules/* 4 | coverage/* -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 0.0.0 Первый релиз 2 | 3 | #### Новое 4 | 5 | * 6 | 7 | #### Документация 8 | 9 | * -------------------------------------------------------------------------------- /travis-ci.sh: -------------------------------------------------------------------------------- 1 | 2 | 3 | set -e 4 | echo "Устанавливаю версию OScript <$OSCRIPT_VERSION>" 5 | curl http://oscript.io/downloads/$OSCRIPT_VERSION/deb > oscript.deb 6 | dpkg -i oscript.deb 7 | rm -f oscript.deb 8 | 9 | opm install 1testrunner; 10 | opm install 1bdd; 11 | opm install notify; 12 | opm install coverage; 13 | opm install; 14 | 15 | opm run coverage; 16 | 17 | 18 | -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////// 2 | // Описание пакета для сборки и установки 3 | // Полную документацию см. на hub.oscript.io/packaging 4 | // 5 | 6 | Описание.Имя("v8rac") 7 | .Версия("0.2.2") 8 | .Автор("Khorev Aleksey") 9 | .АдресАвтора("Khorevaa@gmail.com") 10 | .Описание("Библиотека") 11 | .ВерсияСреды("1.0.21") 12 | .ВключитьФайл("src") 13 | //.ВключитьФайл("docs") 14 | //.ВключитьФайл("tests") 15 | .ЗависитОт("logos") 16 | .ЗависитОт("v8find", "0.1.2") 17 | .ЗависитОт("1commands") 18 | 19 | .ОпределяетКласс("УправлениеКластером", "src/Классы/УправлениеКластером.os") 20 | ; 21 | -------------------------------------------------------------------------------- /features/build.feature: -------------------------------------------------------------------------------- 1 | # language: ru 2 | 3 | Функционал: Проверка сборки продукта 4 | Как Пользователь 5 | Я хочу автоматически проверять сборку моего продукта 6 | Чтобы гарантировать возможность установку моего продукта у пользователей 7 | 8 | Контекст: Отключение отладки в логах 9 | Допустим Я выключаю отладку лога с именем "oscript.lib.ххх" 10 | И Я очищаю параметры команды "opm" в контексте 11 | 12 | Сценарий: Выполнение команды без параметров 13 | Когда Я добавляю параметр "build ." для команды "opm" 14 | И Я выполняю команду "opm" 15 | Тогда Вывод команды "opm" содержит "Сборка пакета завершена" 16 | И Вывод команды "opm" не содержит "Внешнее исключение" 17 | И Код возврата команды "opm" равен 0 18 | 19 | -------------------------------------------------------------------------------- /tasks/coverage.os: -------------------------------------------------------------------------------- 1 | #Использовать "../src" 2 | #Использовать 1commands 3 | #Использовать fs 4 | #Использовать coverage 5 | 6 | 7 | ФС.ОбеспечитьПустойКаталог("coverage"); 8 | ПутьКСтат = "coverage/stat.json"; 9 | 10 | Команда = Новый Команда; 11 | Команда.УстановитьКоманду("oscript"); 12 | Команда.ДобавитьПараметр("-encoding=utf-8"); 13 | Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); 14 | Команда.ДобавитьПараметр("tasks/test.os"); 15 | Команда.ПоказыватьВыводНемедленно(Истина); 16 | 17 | КодВозврата = Команда.Исполнить(); 18 | 19 | Файл_Стат = Новый Файл(ПутьКСтат); 20 | 21 | ИмяПакета = "v8rac"; 22 | 23 | ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); 24 | 25 | ПроцессорГенерации.ОтносительныеПути() 26 | .ФайлСтатистики(Файл_Стат.ПолноеИмя) 27 | .GenericCoverage() 28 | .Cobertura() 29 | .Clover(ИмяПакета) 30 | .Сформировать(); 31 | 32 | ЗавершитьРаботу(КодВозврата); -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | Релиз: 2 | @pre 0.1.0: 3 | ✔ Поиск ИБ @done(19-02-10 16:58) 4 | ✔ Полная информация по ИБ @done(19-02-09 21:03) 5 | ✔ Добавление ИБ @done(19-02-09 21:03) 6 | ✔ Удаление ИБ @done(19-02-09 21:03) 7 | ✔ Список ИБ @done(19-02-09 21:03) 8 | ✔ Список кластеров @done(19-02-09 21:03) 9 | ✔ Список сеансов @done(19-02-09 21:03) 10 | ✔ Список подключение @done(19-02-09 21:03) 11 | ✔ Блокировка доступа к ИБ @done(19-02-09 21:03) 12 | ✔ Отключение сеансов @done(19-02-09 21:03) 13 | ✔ Отключение подключений @done(19-02-09 21:03) 14 | ✔ Авторизация ИБ @done(19-02-09 21:03) 15 | ✔ Единая авторизация для всех ИБ @done(19-02-09 21:03) 16 | ✔ Авторизация кластера @done(19-02-09 21:03) 17 | 18 | 0.5.0: 19 | ✔ Избавиться от зависимости v8runner @done(19-02-10 16:58) 20 | ☐ Изменение ИБ 21 | ☐ Добавить контроль работы по с `rac` по таймауту 22 | ☐ Написать просты тесты на работу класса `УправлениеКластером` -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Aleksey Khorev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: generic 3 | 4 | notifications: 5 | email: false 6 | env: 7 | global: 8 | - CHANNEL=dev 9 | - PACKAGE_NAME=v8rac 10 | matrix: 11 | - OSCRIPT_VERSION=1_0_21 12 | - OSCRIPT_VERSION=night-build 13 | matrix: 14 | allow_failures: 15 | - env: OSCRIPT_VERSION=night-build 16 | 17 | services: 18 | - docker 19 | 20 | addons: 21 | sonarqube: true 22 | 23 | jdk: 24 | - oraclejdk8 25 | 26 | before_install: 27 | # Load cached docker images 28 | - if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi 29 | 30 | before_cache: 31 | # Save tagged docker images 32 | - > 33 | mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}' 34 | | xargs -n 2 -t sh -c 'test -e $HOME/docker/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.tar.gz' 35 | 36 | install: 37 | - docker pull evilbeaver/onescript:1.0.19 38 | 39 | script: 40 | - docker version 41 | - docker run -it -e OSCRIPT_VERSION=$OSCRIPT_VERSION -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; sh /work_dir/travis-ci.sh; exit' | tee /tmp/test.log 42 | - grep 'Результат прогона тестов <Да>' /tmp/test.log 43 | after_success: 44 | # - bash <(curl -s https://codecov.io/bash) 45 | - ./sonar-qube.sh 46 | 47 | cache: 48 | directories: 49 | - '$HOME/.m2/repository' 50 | - '$HOME/.sonar/cache' 51 | - '$HOME/docker' 52 | jobs: 53 | include: 54 | - stage: Сборка и публикация github & hub.oscript.io 55 | script: skip 56 | before_deploy: 57 | - docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm build ./ ; exit' 58 | deploy: 59 | - provider: releases 60 | api_key: "$GITHUB_OAUTH_TOKEN" 61 | file_glob: true 62 | file: $PACKAGE_NAME*.ospx 63 | skip_cleanup: true 64 | on: 65 | branch: master 66 | tags: true 67 | - provider: script 68 | skip_cleanup: true 69 | script: docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel dev --file ./$PACKAGE_NAME-*.ospx; exit' 70 | on: 71 | branch: develop 72 | - provider: script 73 | skip_cleanup: true 74 | script: docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel stable --file ./$PACKAGE_NAME-*.ospx; exit' 75 | on: 76 | branch: master 77 | tags: true 78 | -------------------------------------------------------------------------------- /tasks/test.os: -------------------------------------------------------------------------------- 1 | #Использовать "../src" 2 | #Использовать 1bdd 3 | #Использовать 1testrunner 4 | 5 | Функция ПрогнатьТесты() 6 | 7 | Тестер = Новый Тестер; 8 | 9 | ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); 10 | ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); 11 | 12 | КаталогТестов = Новый Файл(ПутьКТестам); 13 | Если Не КаталогТестов.Существует() Тогда 14 | Сообщить(СтрШаблон("Не найден каталог тестов %1", ПутьКТестам)); 15 | Возврат Истина; 16 | КонецЕсли; 17 | 18 | РезультатТестирования = Тестер.ТестироватьКаталог( 19 | КаталогТестов, 20 | Новый Файл(ПутьКОтчетуJUnit) 21 | ); 22 | 23 | Успешно = РезультатТестирования = 0; 24 | 25 | Возврат Успешно; 26 | КонецФункции // ПрогнатьТесты() 27 | 28 | Функция ПрогнатьФичи() 29 | 30 | ПутьОтчетаJUnit = "./bdd-log.xml"; 31 | 32 | КаталогФич = ОбъединитьПути(".", "features"); 33 | 34 | Файл_КаталогФич = Новый Файл(КаталогФич); 35 | Если Не Файл_КаталогФич.Существует() Тогда 36 | Сообщить(СтрШаблон("Не найден каталог фич %1", КаталогФич)); 37 | Возврат Истина; 38 | КонецЕсли; 39 | 40 | ИсполнительБДД = Новый ИсполнительБДД; 41 | РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); 42 | ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); 43 | 44 | СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся; 45 | Если РезультатыВыполнения.Строки.Количество() > 0 Тогда 46 | 47 | СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); 48 | 49 | КонецЕсли; 50 | 51 | ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; 52 | ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit); 53 | 54 | Сообщить(СтрШаблон("Результат прогона фич <%1> 55 | |", ИтоговыйРезультатВыполнения)); 56 | 57 | Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался; 58 | КонецФункции // ПрогнатьФичи() 59 | 60 | ТестыПрошли = Истина; 61 | 62 | Попытка 63 | ТестыПрошли = ПрогнатьТесты(); 64 | 65 | Исключение 66 | ТестыПрошли = Ложь; 67 | Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно 68 | |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); 69 | КонецПопытки; 70 | 71 | ФичиПрошли = Истина; 72 | 73 | Попытка 74 | ФичиПрошли = ПрогнатьФичи(); 75 | Исключение 76 | ФичиПрошли = Ложь; 77 | Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно 78 | |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); 79 | КонецПопытки; 80 | 81 | Если Не ТестыПрошли Или Не ФичиПрошли Тогда 82 | ВызватьИсключение "Тестирование завершилось неудачно!"; 83 | Иначе 84 | Сообщить(СтрШаблон("Результат прогона тестов <%1> 85 | |", ТестыПрошли)); 86 | КонецЕсли; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # v8rac 3 | Библиотека для работы с консольной утилитой `rac` 4 | 5 | [![Stars](https://img.shields.io/github/stars/khorevaa/v8rac.svg?label=Github%20%E2%98%85&a)](https://github.com/khorevaa/v8rac/stargazers) 6 | [![Release](https://img.shields.io/github/tag/khorevaa/v8rac.svg?label=Last%20release&a)](https://github.com/khorevaa/v8rac/releases) 7 | [![Открытый чат проекта https://gitter.im/EvilBeaver/oscript-library](https://badges.gitter.im/khorevaa/v8rac.png)](https://gitter.im/EvilBeaver/oscript-library) 8 | 9 | [![Build Status](https://travis-ci.org/khorevaa/v8rac.svg?branch=master)](https://travis-ci.org/khorevaa/v8rac) 10 | [![Coverage Status](https://coveralls.io/repos/github/khorevaa/v8rac/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/v8rac?branch=master) 11 | 12 | ## Возможности 13 | 14 | Данная библиотека предназначена для облегчения работы с консольной утилитой `rac` для 1С 15 | 16 | Упрощенная версия библиотеки [`irac`](https://github.com/arkuznetsov/irac). 17 | 18 | > Функционал `irac` не используется, но возможно комбинирование работы двух библиотек 19 | 20 | Реализован следующий функционал: 21 | 22 | * НайтиИнформационнуюБазу 23 | * СписокИнформационныхБаз 24 | * СписокЛокальныхКластеров 25 | * Управление сеансами и соединениями 26 | * СписокСоединенийИнформационнойБазы 27 | * СписокСеансовКластера 28 | * СписокСеансовИнформационнойБазы 29 | * ОтключитьСеансыИнформационнойБазы 30 | * ОтключитьСоединенияИнформационнойБазы 31 | * ОтключитьСеанс 32 | * ОтключитьСоединение 33 | * Управление информационной базой 34 | * СоздатьИнформационнуюБазу 35 | * УдалитьИнформационнуюБазу 36 | * ПолучитьПодробноеОписаниеИнформационнойБазы 37 | * Управление блокировкой к информационной базе 38 | * БлокировкаИнформационнойБазы 39 | * СнятьБлокировкуИнформационнойБазы 40 | * БлокировкаРегламентныхЗаданий 41 | * СнятьБлокировкуРегламентныхЗаданий 42 | * ВыполнитьКоманду 43 | 44 | ## Установка 45 | 46 | Для установки необходимо: 47 | * Скачать файл v8rac.ospx из раздела [releases](https://github.com/khorevaa/v8rac/releases) 48 | * Воспользоваться командой: 49 | 50 | ``` 51 | opm install -f <ПутьКФайлу> 52 | ``` 53 | или установить с хаба пакетов 54 | 55 | ``` 56 | opm install v8rac 57 | ``` 58 | 59 | ## Пример работы 60 | 61 | * Подготовка 62 | 63 | ```bsl 64 | 65 | АдресСервера = "localhost"; 66 | ВерсияПлатформы = "8.3"; 67 | 68 | УправлениеКластером = Новый УправлениеКластером; 69 | УправлениеКластером.УстановитьКластер(АдресСервера); 70 | УправлениеКластером.ИспользоватьВерсию(ВерсияПлатформы); 71 | 72 | // Если требуется нужно установить авторизация для администратора кластера 73 | // УправлениеКластером.УстановитьАвторизациюКластера(ПользовательКластера, ПарольКластера); 74 | 75 | УправлениеКластером.Подключить(); 76 | 77 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 78 | 79 | ``` 80 | * Поиск информационной базы 81 | 82 | ```bsl 83 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 84 | ИдентификаторИнформационнойбаза = УправлениеКластером.НайтиИнформационнуюБазу(ИмяИнформационнойбазы); 85 | ``` 86 | 87 | * Установка авторизации в информационной базе 88 | 89 | ```bsl 90 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 91 | ИдентификаторИнформационнойбаза = УправлениеКластером.НайтиИнформационнуюБазу(ИмяИнформационнойбазы); 92 | 93 | УправлениеКластером.УстановитьАвторизациюИнформационнойБазы(ИдентификаторИнформационнойбаза,"Администратор", "МируМир"); 94 | ``` 95 | 96 | * Список локальных кластеров 97 | 98 | ```bsl 99 | МассивЛокальныхКластеров = УправлениеКластером.СписокЛокальныхКластеров(); 100 | 101 | ``` 102 | 103 | * Список информационных баз 104 | 105 | ```bsl 106 | 107 | ТаблицаИБ = УправлениеКластером.СписокИнформационныхБаз(); 108 | 109 | // Или для определенного локального кластера 110 | МассивЛокальныхКластеров = УправлениеКластером.СписокЛокальныхКластеров(); 111 | ТаблицаИБ = УправлениеКластером.СписокИнформационныхБаз(МассивЛокальныхКластеров[0]); 112 | 113 | 114 | ``` 115 | * Блокировка информационной базы 116 | 117 | ```bsl 118 | 119 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 120 | 121 | УправлениеКластером.БлокировкаИнформационнойБазы(ИмяИнформационнойбазы, "Сообщение блокировки", "КлючДоступа"); 122 | ``` 123 | 124 | * Снятие блокировки информационной базы 125 | 126 | ```bsl 127 | 128 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 129 | УправлениеКластером.СнятьБлокировкуИнформационнойБазы(ИмяИнформационнойбазы); 130 | 131 | ``` 132 | 133 | * Отключение сеансов информационный базы 134 | ```bsl 135 | 136 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 137 | УправлениеКластером.ОтключитьСеансыИнформационнойБазы(ИмяИнформационнойбазы); 138 | 139 | ``` 140 | 141 | * Список сеансов информационный базы 142 | ```bsl 143 | 144 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 145 | ТаблицаСеансов = УправлениеКластером.СписокСеансовИнформационнойБазы(ИмяИнформационнойбазы); 146 | 147 | ``` 148 | 149 | * Отключение соединений информационный базы 150 | ```bsl 151 | 152 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 153 | УправлениеКластером.ОтключитьСоединенияИнформационнойБазы(ИмяИнформационнойбазы); 154 | 155 | ``` 156 | 157 | * Список соединений информационный базы 158 | ```bsl 159 | 160 | ИмяИнформационнойбазы = "Тестовая_ИБ"; 161 | ТаблицаСоединений = УправлениеКластером.СписокСоединенийИнформационнойБазы(ИмяИнформационнойбазы); 162 | 163 | ``` 164 | 165 | ## Публичный интерфейс 166 | 167 | [Документация публичного интерфейса (в разработке)](docs/README.md) 168 | 169 | ## Доработка 170 | 171 | Актуальные задачи в файле [`TODO`](TODO). 172 | 173 | Доработка проводится по git-flow. Жду ваших PR. 174 | 175 | ## Лицензия 176 | 177 | Смотри файл [`LICENSE`](LICENSE). 178 | -------------------------------------------------------------------------------- /src/Классы/УправлениеКластером.os: -------------------------------------------------------------------------------- 1 | #Использовать v8find 2 | #Использовать logos 3 | #Использовать 1commands 4 | 5 | Перем Лог; 6 | Перем ПутьКлиентаАдминистрирования; 7 | Перем ЭтоWindows; 8 | 9 | Перем АвторизацияАдминистратораКластера; 10 | Перем АдресСервера; 11 | Перем ПортСервера; 12 | 13 | Перем ИндексЛокальныхКластеров; 14 | Перем ИндексИнформационныхБаз; 15 | 16 | Перем ИндексЛокальныхКластеровОбновлен; 17 | Перем ИндексАвторизацийИнформационныхБаз; 18 | 19 | Перем ИмяКлючаВсеБазы; 20 | Перем КластерПодключен; 21 | 22 | // Устанавливает авторизацию на кластере 1С 23 | // 24 | // Параметры: 25 | // Пользователь - Строка - администратор кластера 26 | // Пароль - Строка - пароль администратора кластера 27 | // 28 | Процедура УстановитьАвторизациюКластера(Знач Пользователь, Знач Пароль = "") Экспорт 29 | 30 | АвторизацияАдминистратораКластера = Новый Структура("Пользователь, Пароль", Пользователь, Пароль); 31 | 32 | КонецПроцедуры 33 | 34 | // Устанавливает авторизацию для информационной базы на кластере 1С 35 | // 36 | // Параметры: 37 | // ИнформационнаяБаза - Строка - имя или uid информационной базы 38 | // Пользователь - Строка - администратор информационной базы 39 | // Пароль - Строка - пароль администратора информационной базы 40 | // 41 | Процедура УстановитьАвторизациюИнформационнойБазы(Знач ИнформационнаяБаза, Знач Пользователь, Знач Пароль = "") Экспорт 42 | 43 | АвторизацияИБ = Новый Структура("Пользователь, Пароль", Пользователь, Пароль); 44 | 45 | ИндексАвторизацийИнформационныхБаз.Вставить(ИнформационнаяБаза, АвторизацияИБ); 46 | 47 | КонецПроцедуры 48 | 49 | // Устанавливает кластер 1С 50 | // 51 | // Параметры: 52 | // АдресСерверКластера - Строка - адрес кластера 53 | // ПортСервераКластера - Число - порт кластера (по умолчанию 1545) 54 | // ПринудительноСброситьИндексы - Булево - признак необходимости сброса кеша данных кластера (по умолчанию ложь) 55 | // 56 | Процедура УстановитьКластер(Знач АдресСерверКластера, Знач ПортСервераКластера = 1545, Знач ПринудительноСброситьИндексы = Ложь) Экспорт 57 | 58 | ИзменилсяКластер = Ложь; 59 | 60 | ТекущийАдресКластера = АдресСервера; 61 | ТекущийПортКластера = ПортСервера; 62 | 63 | МассивСтрок = СтрРазделить(АдресСерверКластера, ":"); 64 | 65 | Если МассивСтрок.Количество() = 2 Тогда 66 | АдресСервера = МассивСтрок[0]; 67 | ПортСервера = МассивСтрок[1]; 68 | Иначе 69 | АдресСервера = АдресСерверКластера; 70 | ПортСервера = ПортСервераКластера; 71 | КонецЕсли; 72 | 73 | ИзменилсяКластер = НЕ ТекущийАдресКластера = АдресСервера 74 | ИЛИ НЕ ТекущийПортКластера = ПортСервера; 75 | 76 | Если ПринудительноСброситьИндексы 77 | ИЛИ ИзменилсяКластер Тогда 78 | КластерПодключен = Ложь; 79 | СброситьИндексы(); 80 | 81 | КонецЕсли; 82 | 83 | КонецПроцедуры 84 | 85 | // Возвращает значение абсолютного пути к клиенту администрирования 1С 86 | // 87 | // Возвращаемое значение: 88 | // Строка - Путь к клиенту администрирования 89 | // 90 | Функция ПолучитьПутьКлиентаАдминистрирования() Экспорт 91 | 92 | Возврат ?(ЗначениеЗаполнено(ПутьКлиентаАдминистрирования), ПутьКлиентаАдминистрирования, ""); 93 | 94 | КонецФункции 95 | 96 | // Возвращает адрес сервера 1С 97 | // 98 | // Возвращаемое значение: 99 | // Строка - Текущий адрес сервера 1С 100 | // 101 | Функция ПолучитьАдресСервера() Экспорт 102 | 103 | Возврат ?(ЗначениеЗаполнено(АдресСервера), АдресСервера, ""); 104 | 105 | КонецФункции 106 | 107 | // Возвращает порт сервера 1С 108 | // 109 | // Возвращаемое значение: 110 | // Число, Неопределено - Текущий порт сервера 1С, Неопределено в противном случае 111 | // 112 | Функция ПолучитьПортСервера() Экспорт 113 | 114 | Возврат ?(ЗначениеЗаполнено(ПортСервера), ПортСервера, Неопределено); 115 | 116 | КонецФункции 117 | 118 | // Возвращает состояние подключения к кластеру 1С 119 | // 120 | // Возвращаемое значение: 121 | // Булево - Подключен ли кластер 1С 122 | // 123 | Функция КластерПодключен() Экспорт 124 | 125 | Возврат ?(ЗначениеЗаполнено(КластерПодключен), КластерПодключен, Ложь); 126 | 127 | КонецФункции 128 | 129 | // Возвращает список локальных кластеров 130 | // 131 | // Возвращаемое значение: 132 | // Массив - список UID локальных кластеров 133 | // 134 | Функция СписокЛокальныхКластеров() Экспорт 135 | 136 | Если Не ИндексЛокальныхКластеровОбновлен Тогда 137 | ОбновитьИндексЛокальныхКластеров(); 138 | КонецЕсли; 139 | 140 | СписокКластеров = Новый Массив(); 141 | 142 | Для каждого КлючЗначение Из ИндексЛокальныхКластеров Цикл 143 | СписокКластеров.Добавить(КлючЗначение.Ключ); 144 | КонецЦикла; 145 | 146 | Возврат СписокКластеров; 147 | 148 | КонецФункции 149 | 150 | // Выполняет подключение к кластеру 1С 151 | // 152 | Процедура Подключить() Экспорт 153 | 154 | КластерПодключен = Истина; 155 | 156 | ОбновитьДанные(Истина); 157 | 158 | КонецПроцедуры 159 | 160 | // Устанавливает версию платформы для использования 161 | // 162 | // Параметры: 163 | // ВерсияПлатформы - Строка - версия платформы 1С в формfте <8.3.13.1513> 164 | // 165 | Процедура ИспользоватьВерсию(Знач ВерсияПлатформы) Экспорт 166 | 167 | ПутьКлиентаАдминистрирования = ПолучитьПутьКRAC(ВерсияПлатформы); 168 | 169 | КонецПроцедуры 170 | 171 | // Выполняет обновление данных индексов текущего кластера 172 | // 173 | // Параметры: 174 | // ОбновитьПринудительно - Булево - признак принудительного обновления 175 | // 176 | Процедура ОбновитьДанные(Знач ОбновитьПринудительно = Ложь) Экспорт 177 | 178 | Если ИндексЛокальныхКластеровОбновлен 179 | И НЕ ОбновитьПринудительно Тогда 180 | Возврат 181 | КонецЕсли; 182 | 183 | ОбновитьИндексЛокальныхКластеров(); 184 | 185 | МассивКластеров = Новый Массив; 186 | 187 | Для каждого Кластер Из ИндексЛокальныхКластеров Цикл 188 | МассивКластеров.Добавить(Кластер.Ключ); 189 | КонецЦикла; 190 | 191 | Для каждого Кластер Из МассивКластеров Цикл 192 | ОбновитьИндексИнформационныхБаз(Кластер, ОбновитьПринудительно); 193 | КонецЦикла; 194 | 195 | КонецПроцедуры 196 | 197 | // Возвращает таблицу информационных баз локального кластера 198 | // 199 | // Параметры: 200 | // ИдентификаторКластера - Строка, Неопределено - идентификатор локального кластера 201 | // 202 | // Возвращаемое значение: 203 | // ТаблицаЗначений - список информационных баз, колонки 204 | // * Имя - Строка - имя информационной базы на кластере 205 | // * UID - Строка - идентификатор информационной базы на кластере 206 | // * Кластер - Строка - идентификатор кластера 207 | // 208 | Функция СписокИнформационныхБаз(Знач ИдентификаторКластера = Неопределено) Экспорт 209 | 210 | ТаблицаИнформационныхБазы = Новый ТаблицаЗначений(); 211 | ТаблицаИнформационныхБазы.Колонки.Добавить("Имя"); 212 | ТаблицаИнформационныхБазы.Колонки.Добавить("UID"); 213 | ТаблицаИнформационныхБазы.Колонки.Добавить("Кластер"); 214 | 215 | Для каждого КлючЗначение Из ИндексИнформационныхБаз Цикл 216 | 217 | ОписаниеИБ = КлючЗначение.Значение; 218 | 219 | Если ЗначениеЗаполнено(ИдентификаторКластера) 220 | И Не ИдентификаторКластера = ОписаниеИБ.Кластер Тогда 221 | Продолжить; 222 | КонецЕсли; 223 | 224 | НайденнаяСтрока = ТаблицаИнформационныхБазы.Найти(ОписаниеИБ.Имя, "Имя"); 225 | Если Не НайденнаяСтрока = Неопределено Тогда 226 | Возврат; 227 | КонецЕсли; 228 | 229 | ЗаполнитьЗначенияСвойств(ТаблицаИнформационныхБазы.Добавить(), ОписаниеИБ); 230 | КонецЦикла; 231 | 232 | Возврат ТаблицаИнформационныхБазы; 233 | 234 | КонецФункции 235 | 236 | // Возвращает таблицу сеансов информационной базы 237 | // 238 | // Параметры: 239 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 240 | // 241 | // Возвращаемое значение: 242 | // ТаблицаЗначений - список сеансов информационной базы 243 | // * Идентификатор - Строка - идентификатор сеанса 244 | // * Приложение - Строка - имя приложения сеанса 245 | // * Пользователь - Строка - пользователь сеанса 246 | // * НомерСеанса - Строка - номер сеанса 247 | // * ИнформационнаяБаза - Строка - идентификатор информационной базы 248 | // * Кластер - Строка - идентификатор локального кластера 249 | // 250 | Функция СписокСеансовИнформационнойБазы(Знач ИнформационнаяБаза) Экспорт 251 | 252 | ОписаниеИБ = ИндексИнформационныхБаз[ИнформационнаяБаза]; 253 | 254 | Если ОписаниеИБ = Неопределено Тогда 255 | Возврат ПолучитьТаблицуСеансов(); 256 | КонецЕсли; 257 | 258 | Возврат СписокСеансовКластера(ОписаниеИБ.Кластер, ОписаниеИБ.UID); 259 | 260 | КонецФункции 261 | 262 | // Возвращает таблицу сеансов локального кластера 263 | // 264 | // Параметры: 265 | // ИдентификаторКластера - Строка - идентификатор локального кластера 266 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы (по умолчанию неопределено) 267 | // 268 | // Возвращаемое значение: 269 | // ТаблицаЗначений - список сеансов информационной базы 270 | // * Идентификатор - Строка - идентификатор сеанса 271 | // * Приложение - Строка - имя приложения сеанса 272 | // * Пользователь - Строка - пользователь сеанса 273 | // * НомерСеанса - Строка - номер сеанса 274 | // * ИнформационнаяБаза - Строка - идентификатор информационной базы 275 | // * Кластер - Строка - идентификатор локального кластера 276 | // 277 | Функция СписокСеансовКластера(Знач ИдентификаторКластера, Знач ИнформационнаяБаза = Неопределено) Экспорт 278 | 279 | ТаблицаСеансов = ПолучитьТаблицуСеансов(); 280 | 281 | Параметры = СтандартныеПараметрыЗапуска(); 282 | Параметры.Добавить("session"); 283 | Параметры.Добавить("list"); 284 | 285 | Если ЗначениеЗаполнено(ИнформационнаяБаза) Тогда 286 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 287 | КонецЕсли; 288 | 289 | Параметры.Добавить(КлючИдентификатораКластера(ИдентификаторКластера)); 290 | 291 | СписокСеансовИБ = ВыполнитьКоманду(Параметры); 292 | 293 | Данные = РазобратьПотокВывода(СписокСеансовИБ); 294 | 295 | Для Каждого Элемент Из Данные Цикл 296 | 297 | Если НРег(Элемент["app-id"]) = НРег("RAS") 298 | ИЛИ НРег(Элемент["app-id"]) = НРег("SrvrConsole") 299 | ИЛИ НРег(Элемент["app-id"]) = НРег("JobScheduler") 300 | Тогда 301 | Продолжить; 302 | КонецЕсли; 303 | 304 | ТекСтрока = ТаблицаСеансов.Добавить(); 305 | ТекСтрока.Идентификатор = Элемент["session"]; 306 | ТекСтрока.Пользователь = Элемент["user-name"]; 307 | ТекСтрока.Приложение = Элемент["app-id"]; 308 | ТекСтрока.НомерСеанса = Элемент["session-id"]; 309 | ТекСтрока.ИнформационнаяБаза = Элемент["infobase"]; 310 | ТекСтрока.Кластер = ИдентификаторКластера; 311 | 312 | КонецЦикла; 313 | 314 | Возврат ТаблицаСеансов; 315 | 316 | КонецФункции 317 | 318 | // Возвращает таблицу соединений информационной базы 319 | // 320 | // Параметры: 321 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы (по умолчанию неопределено) 322 | // 323 | // Возвращаемое значение: 324 | // ТаблицаЗначений - список соединений информационной базы 325 | // * Идентификатор - Строка - идентификатор соединения 326 | // * Приложение - Строка - имя приложения соединения 327 | // * Процесс - Строка - идентификатор процесса соединения 328 | // * НомерСоединения - Строка - номер соединения 329 | // * ИнформационнаяБаза - Строка - идентификатор информационной базы 330 | // * Кластер - Строка - идентификатор локального кластера 331 | // 332 | Функция СписокСоединенийИнформационнойБазы(Знач ИнформационнаяБаза) Экспорт 333 | 334 | ТаблицаСоединений = ПолучитьТаблицуСоединенийРабочегоПроцесса(); 335 | 336 | Параметры = СтандартныеПараметрыЗапуска(); 337 | Параметры.Добавить("connection"); 338 | Параметры.Добавить("list"); 339 | 340 | ОписаниеИБ = ИндексИнформационныхБаз[ИнформационнаяБаза]; 341 | 342 | Если ОписаниеИБ = Неопределено Тогда 343 | Возврат ТаблицаСоединений; 344 | КонецЕсли; 345 | 346 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 347 | 348 | ИдентификаторКластера = ОписаниеИБ.Кластер; 349 | 350 | Параметры.Добавить(КлючИдентификатораКластераБазы(ИнформационнаяБаза)); 351 | 352 | СписокСоединенийИБ = ВыполнитьКоманду(Параметры); 353 | 354 | Данные = РазобратьПотокВывода(СписокСоединенийИБ); 355 | 356 | Для Каждого Элемент Из Данные Цикл 357 | 358 | // Лог.ПоляИз(Элемент).Отладка("Получено соединение"); 359 | 360 | Если НРег(Элемент["application"]) = НРег("RAS") 361 | ИЛИ НРег(Элемент["application"]) = НРег("SrvrConsole") 362 | ИЛИ НРег(Элемент["application"]) = НРег("JobScheduler") 363 | Тогда 364 | Продолжить; 365 | КонецЕсли; 366 | 367 | Если Строка(Элемент["conn-id"]) = "0" Тогда 368 | Продолжить; // Не существующие соединение 369 | КонецЕсли; 370 | 371 | ТекСтрока = ТаблицаСоединений.Добавить(); 372 | ТекСтрока.Идентификатор = Элемент["connection"]; 373 | ТекСтрока.Процесс = Элемент["process"]; 374 | ТекСтрока.Приложение = Элемент["application"]; 375 | ТекСтрока.НомерСоединения = Элемент["conn-id"]; 376 | ТекСтрока.ИнформационнаяБаза = Элемент["infobase"]; 377 | ТекСтрока.Кластер = ИдентификаторКластера; 378 | 379 | КонецЦикла; 380 | 381 | Возврат ТаблицаСоединений; 382 | 383 | КонецФункции 384 | 385 | // Выполняет отключение сеансов информационной базы 386 | // 387 | // Параметры: 388 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 389 | // Фильтр - Структура - фильтр структура исключений при отключении (по умолчанию неопределено) 390 | // * Ключ - имя поля для поиска 391 | // * Значение - массив значений фильтра 392 | // 393 | Процедура ОтключитьСеансыИнформационнойБазы(Знач ИнформационнаяБаза, Знач Фильтр = Неопределено) Экспорт 394 | 395 | Лог.Отладка("Отключаю существующие сеансы"); 396 | 397 | СеансыБазы = СписокСеансовИнформационнойБазы(ИнформационнаяБаза); 398 | 399 | Для Каждого Сеанс Из СеансыБазы Цикл 400 | 401 | Если ВФильтре(Сеанс, Фильтр) Тогда 402 | Продолжить; 403 | КонецЕсли; 404 | 405 | Лог.Отладка("Отключаю сеанс %3 - <%1>, <%2>", Сеанс.Пользователь, Сеанс.Приложение, Сеанс.НомерСеанса ); 406 | 407 | Попытка 408 | ОтключитьСеанс(Сеанс.Идентификатор, Сеанс.Кластер); 409 | Исключение 410 | Лог.Ошибка(ОписаниеОшибки()); 411 | КонецПопытки; 412 | КонецЦикла; 413 | 414 | КонецПроцедуры 415 | 416 | // Выполняет отключение соединений информационной базы 417 | // 418 | // Параметры: 419 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 420 | // Фильтр - Структура - фильтр структура исключений при отключении (по умолчанию неопределено) 421 | // * Ключ - имя поля для поиска 422 | // * Значение - массив значений фильтра 423 | // 424 | Процедура ОтключитьСоединенияИнформационнойБазы(Знач ИнформационнаяБаза, Знач Фильтр = Неопределено) Экспорт 425 | 426 | Лог.Отладка("Отключаю существующие соединения"); 427 | 428 | СоединенияБазы = СписокСоединенийИнформационнойБазы(ИнформационнаяБаза); 429 | 430 | Для Каждого Соединение Из СоединенияБазы Цикл 431 | 432 | Если ВФильтре(Соединение, Фильтр) Тогда 433 | Продолжить; 434 | КонецЕсли; 435 | 436 | Лог.Отладка("Отключаю соединение %3 - <%1>, <%2>", 437 | Соединение.Идентификатор, 438 | Соединение.Приложение, 439 | Соединение.НомерСоединения); 440 | 441 | Попытка 442 | ОтключитьСоединение(Соединение.Идентификатор, Соединение.Процесс, Соединение.Кластер, Соединение.ИнформационнаяБаза); 443 | Исключение 444 | Лог.Ошибка(ОписаниеОшибки()); 445 | КонецПопытки; 446 | 447 | КонецЦикла; 448 | 449 | КонецПроцедуры 450 | 451 | // Получает и возвращает подробное описание информационной базы 452 | // 453 | // Параметры: 454 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 455 | // АвторизацияИБ - Структура, Неопределено - авторизация в информационной базе 456 | // * Пользователь - Строка - администратор информационной базы 457 | // * Пароль - Строка - пароль администратора информационной базы 458 | // 459 | // Возвращаемое значение: 460 | // Структура - подробное описание информационной базы 461 | // * Кластер - Строка - идентификатор локального кластера 462 | // * Наименование - Строка - наименование базы 463 | // * Описание - Строка - описание базы 464 | // * ТипСУБД - Строка - тип СУБД 465 | // * АдресСервераСУБД - Строка - адрес сервера СУБД 466 | // * БазаДанныхСУБД - Строка - база данных на сервере СУБД 467 | // * ПользовательСУБД - Строка - пользователь базы данных СУБД 468 | // * ЗапретРегламентныхЗаданий - Булево - текущее состояние запрета регламентных заданий 469 | // * ЗапретПодключенияСессий - Булево - текущее состояние запрета подключения сессий 470 | // 471 | Функция ПолучитьПодробноеОписаниеИнформационнойБазы(Знач ИнформационнаяБаза, Знач АвторизацияИБ = Неопределено) Экспорт 472 | Параметры = СтандартныеПараметрыЗапуска(); 473 | Параметры.Добавить("infobase"); 474 | Параметры.Добавить("info"); 475 | 476 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 477 | Параметры.Добавить(КлючИдентификатораКластераБазы(ИнформационнаяБаза)); 478 | 479 | Если Не АвторизацияИБ = Неопределено Тогда 480 | 481 | Если ЗначениеЗаполнено(АвторизацияИБ.Пользователь) Тогда 482 | Параметры.Добавить(СтрШаблон("--infobase-user=%1", ОбернутьВКавычки(АвторизацияИБ.Пользователь))); 483 | Если ЗначениеЗаполнено(АвторизацияИБ.Пароль) Тогда 484 | Параметры.Добавить(СтрШаблон("--infobase-pwd=%1", ОбернутьВКавычки(АвторизацияИБ.Пароль))); 485 | КонецЕсли; 486 | КонецЕсли; 487 | Иначе 488 | 489 | ДобавитьПараметрыАвторизацииИнформационнойБазы(Параметры, ИнформационнаяБаза); 490 | 491 | КонецЕсли; 492 | 493 | ПотокДанных = ВыполнитьКоманду(Параметры); 494 | 495 | МассивДанных = РазобратьПотокВывода(ПотокДанных); 496 | ПодробноеОписаниеИБ = Новый Структура(); 497 | 498 | Если МассивДанных.Количество() = 0 Тогда 499 | Возврат ПодробноеОписаниеИБ; 500 | КонецЕсли; 501 | Данные = МассивДанных[0]; 502 | 503 | ОписаниеИБ = ИндексИнформационныхБаз[ИнформационнаяБаза]; 504 | 505 | ПодробноеОписаниеИБ.Вставить("Кластер", ОписаниеИБ.Кластер); 506 | ПодробноеОписаниеИБ.Вставить("Наименование", Данные["name"]); 507 | ПодробноеОписаниеИБ.Вставить("Описание", Данные["descr"]); 508 | ПодробноеОписаниеИБ.Вставить("ТипСУБД", Данные["dbms"]); 509 | ПодробноеОписаниеИБ.Вставить("АдресСервераСУБД", Данные["db-server"]); 510 | ПодробноеОписаниеИБ.Вставить("БазаДанныхСУБД", Данные["db-name"]); 511 | ПодробноеОписаниеИБ.Вставить("ПользовательСУБД", Данные["db-user"]); 512 | ПодробноеОписаниеИБ.Вставить("ЗапретРегламентныхЗаданий", ?(Данные["scheduled-jobs-deny"] = "on", Истина, Ложь)); 513 | ПодробноеОписаниеИБ.Вставить("ЗапретПодключенияСессий", ?(Данные["sessions-deny"] = "on", Истина, Ложь)); 514 | 515 | Возврат ПодробноеОписаниеИБ; 516 | 517 | КонецФункции 518 | 519 | // Выполняет отключение сеанса по индентификаторы 520 | // 521 | // Параметры: 522 | // ИдентификаторСеанса - Строка - идентификатор сеанса 523 | // ИдентификаторКластер - Строка - идентификатор локального кластера 524 | // 525 | Процедура ОтключитьСеанс(Знач ИдентификаторСеанса, Знач ИдентификаторКластер) Экспорт 526 | 527 | Параметры = СтандартныеПараметрыЗапуска(); 528 | Параметры.Добавить("session"); 529 | Параметры.Добавить("terminate"); 530 | Параметры.Добавить(КлючИдентификатораКластера(ИдентификаторКластер)); 531 | 532 | Параметры.Добавить(СтрШаблон("--session=""%1""", ИдентификаторСеанса)); 533 | 534 | ВыполнитьКоманду(Параметры); 535 | 536 | КонецПроцедуры 537 | 538 | // Выполняет отключение соединения по идентификатору 539 | // 540 | // Параметры: 541 | // ИдентификаторСоединения - Строка - идентификатор соединения 542 | // ИдентификаторПроцесса - Строка - идентификатор рабочего процесса 543 | // ИдентификаторКластер - Строка - идентификатор локального кластера 544 | // ИнформационнаяБаза - Строка, Неопределено - Имя или идентификатор информационной базы 545 | // 546 | Процедура ОтключитьСоединение(Знач ИдентификаторСоединения, 547 | Знач ИдентификаторПроцесса, 548 | Знач ИдентификаторКластер, 549 | Знач ИнформационнаяБаза = Неопределено) Экспорт 550 | 551 | Параметры = СтандартныеПараметрыЗапуска(); 552 | Параметры.Добавить("connection"); 553 | Параметры.Добавить("disconnect"); 554 | Параметры.Добавить(КлючИдентификатораКластера(ИдентификаторКластер)); 555 | Параметры.Добавить(СтрШаблон("--process=%1", ИдентификаторПроцесса)); 556 | Параметры.Добавить(СтрШаблон("--connection=%1", ИдентификаторСоединения)); 557 | 558 | Если ЗначениеЗаполнено(ИнформационнаяБаза) Тогда 559 | ДобавитьПараметрыАвторизацииИнформационнойБазы(Параметры, ИнформационнаяБаза); 560 | КонецЕсли; 561 | 562 | ВыполнитьКоманду(Параметры); 563 | 564 | КонецПроцедуры 565 | 566 | // Снимает блокировку с информационной базы 567 | // 568 | // Параметры: 569 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 570 | // ОставитьБлокировкуРеглЗаданий - Булево - признак блокировки регламентных заданий 571 | // АвторизацияИБ - Структура, Неопределено - авторизация в информационной базе 572 | // * Пользователь - Строка - администратор информационной базы 573 | // * Пароль - Строка - пароль администратора информационной базы 574 | // 575 | Процедура СнятьБлокировкуИнформационнойБазы(Знач ИнформационнаяБаза, 576 | Знач ОставитьБлокировкуРеглЗаданий = Ложь, 577 | Знач АвторизацияИБ = Неопределено, 578 | Знач ОчищатьПараметрыБлокировки = Истина) Экспорт 579 | 580 | ПараметрыИнформационнойБазы = Новый Соответствие(); 581 | 582 | Если Не АвторизацияИБ = Неопределено Тогда 583 | 584 | Если ЗначениеЗаполнено(АвторизацияИБ.Пользователь) Тогда 585 | ПараметрыИнформационнойБазы.Вставить("--infobase-user", ОбернутьВКавычки(АвторизацияИБ.Пользователь)); 586 | Если ЗначениеЗаполнено(АвторизацияИБ.Пароль) Тогда 587 | ПараметрыИнформационнойБазы.Вставить("--infobase-pwd", ОбернутьВКавычки(АвторизацияИБ.Пароль)); 588 | КонецЕсли; 589 | КонецЕсли; 590 | 591 | КонецЕсли; 592 | 593 | ПараметрыИнформационнойБазы.Вставить("--sessions-deny", "off"); 594 | 595 | Если НЕ ОставитьБлокировкуРеглЗаданий Тогда 596 | ПараметрыИнформационнойБазы.Вставить("--scheduled-jobs-deny", "off"); 597 | КонецЕсли; 598 | 599 | Если ОчищатьПараметрыБлокировки Тогда 600 | ПараметрыИнформационнойБазы.Вставить("--denied-message", ОбернутьВКавычки("")); 601 | ПараметрыИнформационнойБазы.Вставить("--permission-code", ОбернутьВКавычки("")); 602 | ПараметрыИнформационнойБазы.Вставить("--denied-from", ОбернутьВКавычки("")); 603 | ПараметрыИнформационнойБазы.Вставить("--denied-to", ОбернутьВКавычки("")); 604 | КонецЕсли; 605 | 606 | ОбновитьПараметрыИнформационнойБазы(ИнформационнаяБаза, ПараметрыИнформационнойБазы); 607 | 608 | КонецПроцедуры 609 | 610 | // Выполняет поиск информационной базы в кластере 1С 611 | // 612 | // Параметры: 613 | // ИмяБазы - Строка - имя информационной базы в кластере 1С 614 | // 615 | // Возвращаемое значение: 616 | // Строка - пустая строка, если база не найдена, или идентификатор базы 617 | // 618 | Функция НайтиИнформационнуюБазу(Знач ИмяБазы) Экспорт 619 | 620 | ОписаниеИБ = ИндексИнформационныхБаз[ИмяБазы]; 621 | 622 | Если ОписаниеИБ = Неопределено Тогда 623 | Возврат ""; 624 | КонецЕсли; 625 | 626 | ИдентификаторБазы = ОписаниеИБ.UID; 627 | 628 | Возврат ИдентификаторБазы; 629 | 630 | КонецФункции 631 | 632 | // Создает информационную базу на кластере 633 | // 634 | // Параметры: 635 | // Кластер - Строка - идентификатор локального кластера 636 | // Наименование - Строка - наименование базы 637 | // ТипСУБД - Строка - тип СУБД 638 | // АдресСервераСУБД - Строка - адрес сервера СУБД 639 | // БазаДанныхСУБД - Строка - база данных на сервере СУБД 640 | // ПользовательСУБД - Строка - пользователь базы данных СУБД 641 | // ПарольСУБД - Строка - пароль пользователя базы данных СУБД 642 | // ЛокальИБ - Строка - локаль базы данных СУБД 643 | // СмещениеДат - Число - смещение даны на СУБД 644 | // Описание - Строка - описание базы 645 | // БлокировкаРеглЗаданий - Булево - признак установки блокировки регламентных заданий 646 | // СоздатьБазуДанных - Булево - признак создания базы данных на СУБД 647 | // 648 | // Возвращаемое значение: 649 | // Строка - идентификатор созданный информационной базы 650 | // 651 | Функция СоздатьИнформационнуюБазу(Знач Кластер, 652 | Знач Наименование, 653 | Знач ТипСУБД, 654 | Знач АдресСервераСУБД, 655 | Знач БазаДанныхСУБД, 656 | Знач ПользовательСУБД = "", 657 | Знач ПарольСУБД = "", 658 | Знач ЛокальИБ = "RU", 659 | Знач СмещениеДат = 0, 660 | Знач Описание = "", 661 | Знач БлокировкаРеглЗаданий = Ложь, 662 | Знач СоздатьБазуДанных = Ложь 663 | ) Экспорт 664 | 665 | Параметры = СтандартныеПараметрыЗапуска(); 666 | Параметры.Добавить("infobase"); 667 | Параметры.Добавить("create"); 668 | 669 | Параметры.Добавить(КлючИдентификатораКластера(Кластер)); 670 | 671 | Параметры.Добавить("--name=" + Наименование); 672 | 673 | Параметры.Добавить("--dbms=" + ТипСУБД); 674 | Параметры.Добавить("--db-server=" + АдресСервераСУБД); 675 | Параметры.Добавить("--db-name=" + БазаДанныхСУБД); 676 | 677 | Если ЗначениеЗаполнено(ПользовательСУБД) Тогда 678 | Параметры.Добавить("--db-user=" + ПользовательСУБД); 679 | 680 | Если ЗначениеЗаполнено(ПарольСУБД) Тогда 681 | Параметры.Добавить("--db-pwd=" + ПарольСУБД); 682 | КонецЕсли; 683 | 684 | КонецЕсли; 685 | 686 | Если СоздатьБазуДанных Тогда 687 | Параметры.Добавить("--create-database"); 688 | КонецЕсли; 689 | 690 | Параметры.Добавить("--locale=" + ЛокальИБ); 691 | Параметры.Добавить("--scheduled-jobs-deny=" + ?(БлокировкаРеглЗаданий, "on", "off")); 692 | 693 | Если ЗначениеЗаполнено(Описание) Тогда 694 | Параметры.Добавить("--descr=" + ОбернутьВКавычки(Описание)); 695 | КонецЕсли; 696 | 697 | Если ЗначениеЗаполнено(СмещениеДат) Тогда 698 | Параметры.Добавить("--date-offset=" + Строка(СмещениеДат)); 699 | КонецЕсли; 700 | 701 | Данные = РазобратьПотокВывода(ВыполнитьКоманду(Параметры)); 702 | 703 | ИдентификаторБазы = Данные[0]["infobase"]; 704 | ОписаниеИБ = ОписаниеИнформационнойБазы(Наименование, ИдентификаторБазы, Кластер); 705 | ИндексИнформационныхБаз.Вставить(ИдентификаторБазы, ОписаниеИБ); 706 | ИндексИнформационныхБаз.Вставить(Наименование, ОписаниеИБ); 707 | 708 | Возврат ИдентификаторБазы; 709 | 710 | КонецФункции 711 | 712 | // Удаляет информационную базу 713 | // 714 | // Параметры: 715 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 716 | // ОчиститьБазуДанных - Булево - признак очистки базы данных на СУБД 717 | // УдалитьБазуДанных - Булево - признак удаления базы данных на СУБД 718 | // АвторизацияИБ - Структура, Неопределено - авторизация в информационной базе 719 | // * Пользователь - Строка - администратор информационной базы 720 | // * Пароль - Строка - пароль администратора информационной базы 721 | // 722 | Процедура УдалитьИнформационнуюБазу(Знач ИнформационнаяБаза, 723 | Знач ОчиститьБазуДанных = Ложь, 724 | Знач УдалитьБазуДанных = Ложь, 725 | Знач АвторизацияИБ = Неопределено) Экспорт 726 | 727 | Параметры = СтандартныеПараметрыЗапуска(); 728 | Параметры.Добавить("infobase"); 729 | Параметры.Добавить("drop"); 730 | 731 | Если УдалитьБазуДанных Тогда 732 | Параметры.Добавить("--drop-database"); 733 | ИначеЕсли ОчиститьБазуДанных Тогда 734 | Параметры.Добавить("--clear-database"); 735 | КонецЕсли; 736 | 737 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 738 | Параметры.Добавить(КлючИдентификатораКластераБазы(ИнформационнаяБаза)); 739 | 740 | Если Не АвторизацияИБ = Неопределено Тогда 741 | 742 | Если ЗначениеЗаполнено(АвторизацияИБ.Пользователь) Тогда 743 | Параметры.Добавить(СтрШаблон("--infobase-user=%1", ОбернутьВКавычки(АвторизацияИБ.Пользователь))); 744 | Если ЗначениеЗаполнено(АвторизацияИБ.Пароль) Тогда 745 | Параметры.Добавить(СтрШаблон("--infobase-pwd=%1", ОбернутьВКавычки(АвторизацияИБ.Пароль))); 746 | КонецЕсли; 747 | КонецЕсли; 748 | Иначе 749 | 750 | ДобавитьПараметрыАвторизацииИнформационнойБазы(Параметры, ИнформационнаяБаза); 751 | 752 | КонецЕсли; 753 | 754 | ВыполнитьКоманду(Параметры); 755 | 756 | ОписаниеИБ = ИндексИнформационныхБаз[ИнформационнаяБаза]; 757 | 758 | Если НЕ ОписаниеИБ = Неопределено Тогда 759 | 760 | ИндексИнформационныхБаз.Удалить(ОписаниеИБ.UID); 761 | ИндексИнформационныхБаз.Удалить(ОписаниеИБ.Имя); 762 | 763 | КонецЕсли; 764 | 765 | КонецПроцедуры 766 | 767 | // Устанавливает блокировку на информационную базу 768 | // 769 | // Параметры: 770 | // ИнформационнаяБаза - Строка - Имя или идентификатор информационной базы 771 | // СообщениеОБлокировке - Строка - сообщение блокировки для пользователей 772 | // КлючРазрешенияЗапуска - Строка - ключ разрешения входа в информационную базу 773 | // ДатаНачалаБлокировки - Дата, Неопределено - дата начала блокировки 774 | // ДатаОкончанияБлокировки - Дата, Неопределено - дата окончания блокировки 775 | // БлокировкаРеглЗаданий - Булево - признак блокировки регламентных заданий (по умолчанию Ложь) 776 | // АвторизацияИБ - Структура, Неопределено - авторизация в информационной базе 777 | // * Пользователь - Строка - администратор информационной базы 778 | // * Пароль - Строка - пароль администратора информационной базы 779 | // 780 | Процедура БлокировкаИнформационнойБазы(Знач ИнформационнаяБаза, 781 | Знач СообщениеОБлокировке = "", 782 | Знач КлючРазрешенияЗапуска = "", 783 | Знач ДатаНачалаБлокировки = Неопределено, 784 | Знач ДатаОкончанияБлокировки = Неопределено, 785 | Знач БлокировкаРеглЗаданий = Ложь, 786 | Знач АвторизацияИБ = Неопределено) Экспорт 787 | 788 | ПараметрыИнформационнойБазы = Новый Соответствие(); 789 | 790 | Если Не АвторизацияИБ = Неопределено Тогда 791 | 792 | Если ЗначениеЗаполнено(АвторизацияИБ.Пользователь) Тогда 793 | ПараметрыИнформационнойБазы.Вставить("--infobase-user", ОбернутьВКавычки(АвторизацияИБ.Пользователь)); 794 | Если ЗначениеЗаполнено(АвторизацияИБ.Пароль) Тогда 795 | ПараметрыИнформационнойБазы.Вставить("--infobase-pwd", ОбернутьВКавычки(АвторизацияИБ.Пароль)); 796 | КонецЕсли; 797 | КонецЕсли; 798 | 799 | КонецЕсли; 800 | 801 | ПараметрыИнформационнойБазы.Вставить("--sessions-deny", "on"); 802 | 803 | Если БлокировкаРеглЗаданий Тогда 804 | ПараметрыИнформационнойБазы.Вставить("--scheduled-jobs-deny", "on"); 805 | КонецЕсли; 806 | 807 | Если ЗначениеЗаполнено(СообщениеОБлокировке) Тогда 808 | ПараметрыИнформационнойБазы.Вставить("--denied-message", ОбернутьВКавычки(СообщениеОБлокировке)); 809 | КонецЕсли; 810 | 811 | Если ЗначениеЗаполнено(КлючРазрешенияЗапуска) Тогда 812 | ПараметрыИнформационнойБазы.Вставить("--permission-code", ОбернутьВКавычки(КлючРазрешенияЗапуска)); 813 | КонецЕсли; 814 | 815 | Если ЗначениеЗаполнено(ДатаНачалаБлокировки) Тогда 816 | ПараметрыИнформационнойБазы.Вставить("--denied-from", ФорматДатыISO(ДатаНачалаБлокировки)); 817 | КонецЕсли; 818 | 819 | Если ЗначениеЗаполнено(ДатаОкончанияБлокировки) Тогда 820 | ПараметрыИнформационнойБазы.Вставить("--denied-to", ФорматДатыISO(ДатаОкончанияБлокировки)); 821 | КонецЕсли; 822 | 823 | ОбновитьПараметрыИнформационнойБазы(ИнформационнаяБаза, ПараметрыИнформационнойБазы); 824 | 825 | КонецПроцедуры 826 | 827 | // Выполняет блокировку регламентных заданий 828 | // 829 | // Параметры: 830 | // ИнформационнаяБаза - Строка, Неопределено - Имя или идентификатор информационной базы 831 | // 832 | Процедура БлокировкаРегламентныхЗаданий(ИнформационнаяБаза) Экспорт 833 | 834 | Параметры = СтандартныеПараметрыЗапуска(); 835 | Параметры.Добавить("infobase"); 836 | Параметры.Добавить("update"); 837 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 838 | Параметры.Добавить(КлючИдентификатораКластераБазы(ИнформационнаяБаза)); 839 | 840 | Если ЗначениеЗаполнено(ИнформационнаяБаза) Тогда 841 | ДобавитьПараметрыАвторизацииИнформационнойБазы(Параметры, ИнформационнаяБаза); 842 | КонецЕсли; 843 | 844 | Параметры.Добавить(СтрШаблон("--scheduled-jobs-deny=""%1""", "on")); 845 | 846 | ВыполнитьКоманду(Параметры); 847 | 848 | КонецПроцедуры 849 | 850 | // Отменяет блокировку регламентных заданий 851 | // 852 | // Параметры: 853 | // ИнформационнаяБаза - Строка, Неопределено - Имя или идентификатор информационной базы 854 | // 855 | Процедура СнятьБлокировкуРегламентныхЗаданий(ИнформационнаяБаза) Экспорт 856 | 857 | Параметры = СтандартныеПараметрыЗапуска(); 858 | Параметры.Добавить("infobase"); 859 | Параметры.Добавить("update"); 860 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 861 | Параметры.Добавить(КлючИдентификатораКластераБазы(ИнформационнаяБаза)); 862 | 863 | Если ЗначениеЗаполнено(ИнформационнаяБаза) Тогда 864 | ДобавитьПараметрыАвторизацииИнформационнойБазы(Параметры, ИнформационнаяБаза); 865 | КонецЕсли; 866 | 867 | Параметры.Добавить(СтрШаблон("--scheduled-jobs-deny=""%1""", "off")); 868 | 869 | ВыполнитьКоманду(Параметры); 870 | 871 | КонецПроцедуры 872 | 873 | // Выполняет команды на кластере 1С 874 | // 875 | // Параметры: 876 | // ПараметрыКоманды - Массив - массив параметров команды 877 | // 878 | // Возвращаемое значение: 879 | // Строка - результат выполнения команды на кластере 1С 880 | // 881 | Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт 882 | 883 | Если Не КластерПодключен Тогда 884 | ВызватьИсключение "Необходимо сначала выполнить подключение к кластеру 1С"; 885 | КонецЕсли; 886 | 887 | КомандаВыполнения = ПутьКлиентаАдминистрирования; 888 | АдресСервераАдминистрирования = СтрШаблон("%1:%2", АдресСервера, ПортСервера); 889 | 890 | Команда = Новый Команда(); 891 | Команда.УстановитьКоманду(КомандаВыполнения); 892 | 893 | Если ЕстьПараметр(ПараметрыКоманды, "--cluster") Тогда 894 | ДобавитьПараметрыАвторизацииКластера(ПараметрыКоманды); 895 | КонецЕсли; 896 | 897 | Команда.ДобавитьПараметры(ПараметрыКоманды); 898 | 899 | Команда.ДобавитьПараметр(АдресСервераАдминистрирования); 900 | Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); 901 | КодВозврата = Команда.Исполнить(); 902 | 903 | Если КодВозврата <> 0 Тогда 904 | ВызватьИсключение Команда.ПолучитьВывод(); 905 | КонецЕсли; 906 | 907 | Возврат Команда.ПолучитьВывод(); 908 | 909 | КонецФункции 910 | 911 | #Область Поиск_версии_платформы 912 | 913 | #КонецОбласти 914 | 915 | #Область Вспомогательные_процедуры_и_функции 916 | 917 | Процедура ОбновитьПараметрыИнформационнойБазы(Знач ИнформационнаяБаза, Знач ПараметрыИнформационнойБазы) 918 | 919 | Параметры = СтандартныеПараметрыЗапуска(); 920 | Параметры.Добавить("infobase"); 921 | Параметры.Добавить("update"); 922 | 923 | Параметры.Добавить(КлючИдентификатораБазы(ИнформационнаяБаза)); 924 | Параметры.Добавить(КлючИдентификатораКластераБазы(ИнформационнаяБаза)); 925 | 926 | Если ПараметрыИнформационнойБазы["--infobase-user"] = Неопределено Тогда 927 | ДобавитьПараметрыАвторизацииИнформационнойБазы(Параметры, ИнформационнаяБаза); 928 | КонецЕсли; 929 | 930 | Для каждого КлючЗначение Из ПараметрыИнформационнойБазы Цикл 931 | Параметры.Добавить(СтрШаблон("%1=%2", КлючЗначение.Ключ, КлючЗначение.Значение)); 932 | КонецЦикла; 933 | 934 | ВыполнитьКоманду(Параметры) 935 | 936 | КонецПроцедуры 937 | 938 | Процедура СброситьИндексы() 939 | 940 | ИндексЛокальныхКластеров = Новый Соответствие(); 941 | ИндексИнформационныхБаз = Новый Соответствие(); 942 | ИндексЛокальныхКластеровОбновлен = Ложь; 943 | 944 | КонецПроцедуры 945 | 946 | Функция ПолучитьТаблицуСоединенийРабочегоПроцесса() 947 | 948 | ТаблицаСоединенийРабочегоПроцесса = Новый ТаблицаЗначений; 949 | ТаблицаСоединенийРабочегоПроцесса.Колонки.Добавить("Идентификатор"); 950 | ТаблицаСоединенийРабочегоПроцесса.Колонки.Добавить("Приложение"); 951 | ТаблицаСоединенийРабочегоПроцесса.Колонки.Добавить("Процесс"); 952 | ТаблицаСоединенийРабочегоПроцесса.Колонки.Добавить("НомерСоединения"); 953 | ТаблицаСоединенийРабочегоПроцесса.Колонки.Добавить("ИнформационнаяБаза"); 954 | ТаблицаСоединенийРабочегоПроцесса.Колонки.Добавить("Кластер"); 955 | 956 | Возврат ТаблицаСоединенийРабочегоПроцесса; 957 | 958 | КонецФункции 959 | 960 | Функция ПолучитьТаблицуСеансов() 961 | 962 | ТаблицаСеансов = Новый ТаблицаЗначений; 963 | ТаблицаСеансов.Колонки.Добавить("Идентификатор"); 964 | ТаблицаСеансов.Колонки.Добавить("Приложение"); 965 | ТаблицаСеансов.Колонки.Добавить("Пользователь"); 966 | ТаблицаСеансов.Колонки.Добавить("НомерСеанса"); 967 | ТаблицаСеансов.Колонки.Добавить("ИнформационнаяБаза"); 968 | ТаблицаСеансов.Колонки.Добавить("Кластер"); 969 | 970 | Возврат ТаблицаСеансов; 971 | 972 | КонецФункции 973 | 974 | Функция ОписаниеИнформационнойБазы(Знач ИмяБазы, Знач UID, Знач Кластер) 975 | 976 | ОписаниеИБ = Новый Структура(); 977 | ОписаниеИБ.Вставить("Имя", ИмяБазы); 978 | ОписаниеИБ.Вставить("UID", UID); 979 | ОписаниеИБ.Вставить("Кластер", Кластер); 980 | 981 | Возврат ОписаниеИБ; 982 | 983 | КонецФункции 984 | 985 | Функция ФорматДатыISO(Знач ВходящаяДата) 986 | 987 | ФорматДаты = "ДФ='yyyy-MM-ddTHH:mm:ss'"; 988 | 989 | Возврат Формат(ВходящаяДата, ФорматДаты); 990 | 991 | КонецФункции 992 | 993 | Функция ОбернутьВКавычки(Знач Строка) 994 | 995 | Результат = """" + Строка + """"; 996 | 997 | Возврат Результат; 998 | 999 | КонецФункции 1000 | 1001 | Функция ПолучитьПутьКRAC(Знач ВерсияПлатформы = "") 1002 | 1003 | Если ПустаяСтрока(ВерсияПлатформы) Тогда 1004 | ВерсияПлатформы = "8.3"; 1005 | КонецЕсли; 1006 | 1007 | ПутьКRAC = Платформа1С.ПутьКRAC(ВерсияПлатформы); 1008 | 1009 | Возврат ПутьКRAC; 1010 | 1011 | КонецФункции 1012 | 1013 | Процедура ДобавитьПараметрыАвторизацииКластера(Знач ПараметрыЗапуска) 1014 | 1015 | Если ЗначениеЗаполнено(АвторизацияАдминистратораКластера.Пользователь) Тогда 1016 | ПараметрыЗапуска.Добавить(СтрШаблон("--cluster-user=""%1""", АвторизацияАдминистратораКластера.Пользователь)); 1017 | Если ЗначениеЗаполнено(АвторизацияАдминистратораКластера.Пароль) Тогда 1018 | ПараметрыЗапуска.Добавить(СтрШаблон("--cluster-pwd=""%1""", АвторизацияАдминистратораКластера.Пароль)); 1019 | КонецЕсли; 1020 | КонецЕсли; 1021 | 1022 | КонецПроцедуры 1023 | 1024 | Процедура ДобавитьПараметрыАвторизацииИнформационнойБазы(Знач ПараметрыЗапуска, Знач ИнформационнаяБаза) 1025 | 1026 | АвторизацияИБ = ИндексАвторизацийИнформационныхБаз[ИнформационнаяБаза]; 1027 | 1028 | Если АвторизацияИБ = Неопределено Тогда 1029 | АвторизацияИБ = ИндексАвторизацийИнформационныхБаз[ИмяКлючаВсеБазы]; 1030 | КонецЕсли; 1031 | 1032 | Если АвторизацияИБ = Неопределено Тогда 1033 | Возврат; 1034 | КонецЕсли; 1035 | 1036 | Если ЗначениеЗаполнено(АвторизацияИБ.Пользователь) Тогда 1037 | ПараметрыЗапуска.Добавить(СтрШаблон("--infobase-user=""%1""", АвторизацияИБ.Пользователь)); 1038 | Если ЗначениеЗаполнено(АвторизацияИБ.Пароль) Тогда 1039 | ПараметрыЗапуска.Добавить(СтрШаблон("--infobase-pwd=""%1""", АвторизацияИБ.Пароль)); 1040 | КонецЕсли; 1041 | КонецЕсли; 1042 | 1043 | КонецПроцедуры 1044 | 1045 | Функция СтандартныеПараметрыЗапуска() 1046 | 1047 | ПараметрыЗапуска = Новый Массив; 1048 | 1049 | Возврат ПараметрыЗапуска; 1050 | 1051 | КонецФункции 1052 | 1053 | Функция КлючИдентификатораКластера(Знач Кластер) 1054 | 1055 | ИдентификаторКластера = Кластер; 1056 | 1057 | Возврат СтрШаблон("--cluster=%1", ИдентификаторКластера); 1058 | 1059 | КонецФункции 1060 | 1061 | Функция КлючИдентификатораБазы(Знач ИнформационнаяБаза) 1062 | 1063 | ОписаниеИБ = ИндексИнформационныхБаз[ИнформационнаяБаза]; 1064 | 1065 | Если ОписаниеИБ = Неопределено Тогда 1066 | ВызватьИсключение "Не найдена информационная база: " + ИнформационнаяБаза; 1067 | КонецЕсли; 1068 | 1069 | Возврат СтрШаблон("--infobase=%1", ОписаниеИБ.UID); 1070 | 1071 | КонецФункции 1072 | 1073 | Функция КлючИдентификатораКластераБазы(Знач ИнформационнаяБаза) 1074 | 1075 | ОписаниеИБ = ИндексИнформационныхБаз[ИнформационнаяБаза]; 1076 | 1077 | Если ОписаниеИБ = Неопределено Тогда 1078 | ВызватьИсключение "Не найдена информационная база: " + ИнформационнаяБаза; 1079 | КонецЕсли; 1080 | 1081 | Возврат СтрШаблон("--cluster=%1", ОписаниеИБ.Кластер); 1082 | 1083 | КонецФункции 1084 | 1085 | Функция ВФильтре(Данные, Фильтр) 1086 | 1087 | Результат = ЗначениеЗаполнено(Фильтр); 1088 | 1089 | Если Не ЗначениеЗаполнено(Фильтр) Тогда 1090 | Возврат Результат; 1091 | КонецЕсли; 1092 | 1093 | Результат = Результат И ПараметраВФильтре(Фильтр, "Приложение", Данные.Приложение); 1094 | Результат = Результат И ПараметраВФильтре(Фильтр, "Пользователь", Данные.Пользователь); 1095 | 1096 | Возврат Результат; 1097 | 1098 | КонецФункции 1099 | 1100 | Функция ПараметраВФильтре(Фильтр, ИмяФильтра, ПроверяемоеЗначение) 1101 | 1102 | Если Не ЗначениеЗаполнено(Фильтр) 1103 | Или Не Фильтр.Свойство(ИмяФильтра) Тогда 1104 | Возврат Истина; 1105 | КонецЕсли; 1106 | 1107 | ЗначенияФильтра = Фильтр[ИмяФильтра]; 1108 | Для Каждого ТекЗначение Из ЗначенияФильтра Цикл 1109 | ВФильтре = ВРег(ТекЗначение)=ВРег(ПроверяемоеЗначение); 1110 | Если ВФильтре Тогда 1111 | Возврат Истина; 1112 | КонецЕсли; 1113 | КонецЦикла; 1114 | 1115 | Возврат Ложь; 1116 | 1117 | КонецФункции 1118 | 1119 | Процедура ОбновитьИндексИнформационныхБаз(Знач Кластер, Знач Принудительно = Ложь) 1120 | 1121 | Если Не Принудительно 1122 | И Не ИндексЛокальныхКластеров[Кластер] = Неопределено Тогда 1123 | Возврат; 1124 | КонецЕсли; 1125 | 1126 | Лог.Отладка("Получаю список баз кластера"); 1127 | 1128 | Параметры = СтандартныеПараметрыЗапуска(); 1129 | Параметры.Добавить("infobase"); 1130 | Параметры.Добавить("summary"); 1131 | Параметры.Добавить("list"); 1132 | Параметры.Добавить(КлючИдентификатораКластера(Кластер)); 1133 | 1134 | СписокБазВКластере = СокрЛП(ВыполнитьКоманду(Параметры)); 1135 | 1136 | Данные = РазобратьПотокВывода(СписокБазВКластере); 1137 | 1138 | ОчиститьИндексИнформационныхБазы(Кластер); 1139 | 1140 | ИндексИБКластера = Новый Соответствие(); 1141 | 1142 | Для Каждого Элемент Из Данные Цикл 1143 | 1144 | ОписаниеИБ = ОписаниеИнформационнойБазы(Элемент["name"], Элемент["infobase"], Кластер); 1145 | 1146 | Лог.Отладка("База <%1> (%2) добавлена в индекс", ОписаниеИБ.Имя, ОписаниеИБ.UID); 1147 | 1148 | ИндексИнформационныхБаз.Вставить(ОписаниеИБ.Имя, ОписаниеИБ); 1149 | ИндексИнформационныхБаз.Вставить(ОписаниеИБ.UID, ОписаниеИБ); 1150 | ИндексИБКластера.Вставить(ОписаниеИБ.UID, ОписаниеИБ); 1151 | 1152 | КонецЦикла; 1153 | 1154 | ИндексЛокальныхКластеров[Кластер] = ИндексИБКластера; 1155 | 1156 | КонецПроцедуры 1157 | 1158 | Процедура ОчиститьИндексИнформационныхБазы(Знач Кластер) 1159 | 1160 | ИндексИБКластера = ИндексЛокальныхКластеров[Кластер]; 1161 | 1162 | Если ИндексИБКластера = Неопределено Тогда 1163 | Возврат; 1164 | КонецЕсли; 1165 | 1166 | Для каждого КлючЗначение Из ИндексИБКластера Цикл 1167 | ОписаниеИБ = КлючЗначение.Значение; 1168 | ИндексИнформационныхБаз.Удалить(ОписаниеИБ.Имя); 1169 | ИндексИнформационныхБаз.Удалить(ОписаниеИБ.UID); 1170 | КонецЦикла; 1171 | 1172 | КонецПроцедуры 1173 | 1174 | Процедура ОбновитьИндексЛокальныхКластеров() 1175 | 1176 | Лог.Отладка("Получаю список кластеров"); 1177 | ИндексЛокальныхКластеров = Новый Соответствие(); 1178 | 1179 | Параметры = СтандартныеПараметрыЗапуска(); 1180 | Параметры.Добавить("cluster"); 1181 | Параметры.Добавить("list"); 1182 | 1183 | СписокКластеров = ВыполнитьКоманду(Параметры); 1184 | 1185 | Данные = РазобратьПотокВывода(СписокКластеров); 1186 | 1187 | Для Каждого Элемент Из Данные Цикл 1188 | 1189 | UIDКластера = Элемент["cluster"]; 1190 | 1191 | Лог.Отладка("Локальный кластер <%1> добавлена в индекс", UIDКластера); 1192 | 1193 | ИндексЛокальныхКластеров.Вставить(UIDКластера); 1194 | 1195 | КонецЦикла; 1196 | 1197 | ИндексКластераОбновлен = Истина; 1198 | 1199 | КонецПроцедуры 1200 | 1201 | Функция СтрокаЗапускаКлиента() 1202 | 1203 | Перем ПутьКлиентаАдминистрирования; 1204 | 1205 | Если ЭтоWindows Тогда 1206 | ПутьКлиентаАдминистрирования = ОбернутьВКавычки(ПутьКлиентаАдминистрирования); 1207 | Иначе 1208 | ПутьКлиентаАдминистрирования = ПутьКлиентаАдминистрирования; 1209 | КонецЕсли; 1210 | 1211 | Возврат ПутьКлиентаАдминистрирования; 1212 | 1213 | КонецФункции 1214 | 1215 | Функция ИспользуетсяАвторизацияКластера() 1216 | 1217 | Возврат ЗначениеЗаполнено(АвторизацияАдминистратораКластера.Пользователь); 1218 | 1219 | КонецФункции 1220 | 1221 | Функция ЕстьПараметр(ПараметрыКоманды, ИмяПараметра) 1222 | 1223 | Для каждого Параметр Из ПараметрыКоманды Цикл 1224 | 1225 | Если СтрНайти(Параметр, ИмяПараметра) > 0 Тогда 1226 | Возврат Истина; 1227 | КонецЕсли 1228 | КонецЦикла; 1229 | 1230 | Возврат Ложь; 1231 | 1232 | КонецФункции 1233 | 1234 | Функция РазобратьПотокВывода(Знач Поток) 1235 | 1236 | ТД = Новый ТекстовыйДокумент; 1237 | ТД.УстановитьТекст(Поток); 1238 | 1239 | СписокОбъектов = Новый Массив; 1240 | ТекущийОбъект = Неопределено; 1241 | 1242 | Для Сч = 1 По ТД.КоличествоСтрок() Цикл 1243 | 1244 | Текст = ТД.ПолучитьСтроку(Сч); 1245 | Если ПустаяСтрока(Текст) или ТекущийОбъект = Неопределено Тогда 1246 | Если ТекущийОбъект <> Неопределено и ТекущийОбъект.Количество() = 0 Тогда 1247 | Продолжить; // очередная пустая строка подряд 1248 | КонецЕсли; 1249 | 1250 | ТекущийОбъект = Новый Соответствие; 1251 | СписокОбъектов.Добавить(ТекущийОбъект); 1252 | КонецЕсли; 1253 | 1254 | СтрокаРазбораИмя = ""; 1255 | СтрокаРазбораЗначение = ""; 1256 | 1257 | Если РазобратьНаКлючИЗначение(Текст, СтрокаРазбораИмя, СтрокаРазбораЗначение) Тогда 1258 | ТекущийОбъект[СтрокаРазбораИмя] = СтрокаРазбораЗначение; 1259 | КонецЕсли; 1260 | 1261 | КонецЦикла; 1262 | 1263 | Если ТекущийОбъект <> Неопределено и ТекущийОбъект.Количество() = 0 Тогда 1264 | СписокОбъектов.Удалить(СписокОбъектов.ВГраница()); 1265 | КонецЕсли; 1266 | 1267 | Возврат СписокОбъектов; 1268 | 1269 | КонецФункции 1270 | 1271 | Функция РазобратьНаКлючИЗначение(Знач СтрокаРазбора, Ключ, Значение) 1272 | 1273 | ПозицияРазделителя = Найти(СтрокаРазбора, ":"); 1274 | Если ПозицияРазделителя = 0 Тогда 1275 | Возврат Ложь; 1276 | КонецЕсли; 1277 | 1278 | Ключ = СокрЛП(Лев(СтрокаРазбора, ПозицияРазделителя - 1)); 1279 | Значение = УбратьКавычки(СокрЛП(Сред(СтрокаРазбора, ПозицияРазделителя + 1))); 1280 | 1281 | Возврат Истина; 1282 | 1283 | КонецФункции 1284 | 1285 | Функция УбратьКавычки(Знач СтрокаСКавычками) 1286 | 1287 | СтрокаБезКавычек = СтрокаСКавычками; 1288 | 1289 | Если СтрНачинаетсяС(СтрокаСКавычками, """") Тогда 1290 | СтрокаБезКавычек = Сред(СтрокаБезКавычек, 2); 1291 | КонецЕсли; 1292 | 1293 | Если СтрЗаканчиваетсяНа(СтрокаСКавычками, """") Тогда 1294 | СтрокаБезКавычек = Лев(СтрокаБезКавычек, СтрДлина(СтрокаБезКавычек) - 1); 1295 | КонецЕсли; 1296 | 1297 | СтрокаБезКавычек = СтрЗаменить(СтрокаБезКавычек, """""", """"); 1298 | 1299 | Возврат СтрокаБезКавычек; 1300 | 1301 | КонецФункции 1302 | 1303 | Процедура ПриСозданииОбъекта() 1304 | 1305 | Лог = Логирование.ПолучитьЛог("oscript.lib.v8rac"); 1306 | // Лог = Логирование.ПолучитьЛог("oscript.lib.commands"); 1307 | // Лог.УстановитьУровень(УровниЛога.Отладка); 1308 | 1309 | СистемнаяИнформация = Новый СистемнаяИнформация; 1310 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; 1311 | ИндексЛокальныхКластеровОбновлен = Ложь; 1312 | 1313 | АвторизацияАдминистратораКластера = Новый Структура("Пользователь, Пароль"); 1314 | 1315 | ИндексИнформационныхБаз = Новый Соответствие(); 1316 | ИндексЛокальныхКластеров = Новый Соответствие(); 1317 | ИндексАвторизацийИнформационныхБаз = Новый Соответствие(); 1318 | 1319 | ПутьКлиентаАдминистрирования = ПолучитьПутьКRAC("8.3"); 1320 | 1321 | ИмяКлючаВсеБазы = "all"; 1322 | 1323 | КонецПроцедуры 1324 | 1325 | #КонецОбласти 1326 | --------------------------------------------------------------------------------