├── .gitattributes ├── .gitconfig ├── .github └── workflows │ ├── qa.yml │ ├── release.yml │ └── testing.yml ├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── features └── .gitkeep ├── lib.config ├── packagedef ├── sonar-project.properties ├── src ├── fake-entrypoint.os ├── Классы │ ├── ВерсияХранилища.os │ ├── КлиентХранилища.os │ ├── ОтветСервиса.os │ ├── ПараметрыСозданияХранилища.os │ └── ПользовательХранилища.os ├── Макеты │ ├── createDepot.txt │ └── package-loader.os └── Модули │ ├── Вспомогательный.os │ ├── МенеджерЗапросов.os │ ├── МенеджерХранилищ.os │ ├── ОбработкаXML.os │ └── РолиХранилища.os ├── tasks ├── coverage.os └── test.os └── tests ├── fixtures └── xml │ ├── call_exception.xml │ └── call_return.xml ├── Тест_БазовыеТесты.os └── Тест_ОбработкаXML.os /.gitattributes: -------------------------------------------------------------------------------- 1 | *.os eol=crlf filter=tabspace -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | # filters to convert between tabs to spaces 2 | [filter "tabspace"] 3 | smudge = unexpand --tabs=4 --first-only 4 | clean = expand --tabs=4 --initial -------------------------------------------------------------------------------- /.github/workflows/qa.yml: -------------------------------------------------------------------------------- 1 | name: Контроль качества 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | build: 6 | runs-on: ${{ matrix.os }} 7 | strategy: 8 | fail-fast: false 9 | matrix: 10 | os: [ubuntu-latest] 11 | oscript_version: ['1.2.0'] 12 | 13 | steps: 14 | - uses: actions/checkout@v2 15 | # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions 16 | - name: Extract branch name 17 | shell: bash 18 | run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" 19 | id: extract_branch 20 | - name: Установка OneScript 21 | uses: otymko/setup-onescript@v1.1 22 | with: 23 | version: ${{ matrix.oscript_version }} 24 | - name: Установка зависимостей 25 | run: | 26 | opm install opm 27 | opm install xml-parser@0.1.1 && opm install 1connector@2.1.3 && opm install 1bdd && opm install 1testrunner && opm install asserts && opm install fs && opm install coverage 28 | # - name: Авторизация в hub.docker 29 | # uses: azure/docker-login@v1 30 | # with: 31 | # username: ${{ secrets.DOCKER_HUB_USERNAME }} 32 | # password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 33 | - name: Запуск CRS 34 | run: docker run --name crs-host -d -p "5000:80" otymko/crs-apache:8.3.12.1855 35 | - name: Покрытие кода 36 | run: opm run coverage 37 | - name: Извлечение версии пакета 38 | shell: bash 39 | run: echo "##[set-output name=version;]`cat packagedef | grep ".Версия(" | sed 's|[^"]*"||' | sed -r 's/".+//'`" 40 | id: extract_version 41 | - name: Установка Sonar-scanner 42 | uses: warchant/setup-sonar-scanner@v3 43 | - name: Анализ в SonarQube (branch) 44 | if: github.event_name == 'push' && github.repository == 'otymko/crs-api' 45 | run: sonar-scanner 46 | -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} 47 | -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} 48 | -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} 49 | -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} 50 | - name: Анализ в SonarQube (pull-request) 51 | if: github.event_name == 'pull_request' && github.repository == 'otymko/crs-api' 52 | run: sonar-scanner 53 | -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} 54 | -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} 55 | -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} 56 | -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} 57 | -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} 58 | -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} 59 | -Dsonar.scm.revision=${{ github.event.pull_request.head.sha }} 60 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Подготовка релиза и публикация в хабе 2 | 3 | on: 4 | release: 5 | types: [published, edited] 6 | 7 | jobs: 8 | build: 9 | runs-on: ${{ matrix.os }} 10 | strategy: 11 | fail-fast: false 12 | matrix: 13 | os: [ubuntu-latest] 14 | oscript_version: ['1.2.0'] 15 | steps: 16 | - uses: actions/checkout@v2 17 | - name: Установка OneScript 18 | uses: otymko/setup-onescript@v1.1 19 | with: 20 | version: ${{ matrix.oscript_version }} 21 | - name: Установка зависимостей 22 | run: | 23 | opm install opm 24 | opm install xml-parser@0.1.1 && opm install 1connector@2.1.3 25 | - name: Сборка пакета 26 | run: opm build 27 | - name: Заливка артифактов 28 | uses: actions/upload-artifact@v2 29 | with: 30 | name: crs-api.zip 31 | path: ./crs-api-*.ospx 32 | - name: Заливка в релиз 33 | uses: AButler/upload-release-assets@v1.0 34 | with: 35 | files: ./crs-api-*.ospx 36 | repo-token: ${{ secrets.GITHUB_TOKEN }} 37 | - name: Публикация в hub.oscript.io 38 | shell: bash 39 | run: opm push -f ./crs-api-*.ospx --token ${{ env.TOKEN }} -c stable 40 | env: 41 | TOKEN: ${{ secrets.OSHUB_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/testing.yml: -------------------------------------------------------------------------------- 1 | name: Тестирование 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | - mail 8 | pull_request: 9 | 10 | jobs: 11 | build: 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | os: [ubuntu-latest] 17 | oscript_version: ['1.2.0'] 18 | 19 | steps: 20 | - uses: actions/checkout@v2 21 | - name: Установка OneScript 22 | uses: otymko/setup-onescript@v1.1 23 | with: 24 | version: ${{ matrix.oscript_version }} 25 | - name: Установка зависимостей 26 | run: | 27 | opm install opm 28 | opm install xml-parser@0.1.1 && opm install 1connector@2.1.3 && opm install 1bdd && opm install 1testrunner && opm install asserts && opm install fs 29 | # - name: Авторизация в hub.docker 30 | # uses: azure/docker-login@v1 31 | # with: 32 | # username: ${{ secrets.DOCKER_HUB_USERNAME }} 33 | # password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 34 | - name: Запуск CRS 35 | run: docker run --name crs-host -d -p "5000:80" otymko/crs-apache:8.3.12.1855 36 | - name: Тестирование 37 | run: opm run test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | out 3 | oscript_modules 4 | *.ospx 5 | coverage 6 | .vscode/launch.json -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "language-1c-bsl.linterEntryPoint": "./src/fake-entrypoint.os" 3 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Oleg Tymko 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CRS API - библиотека взаимодействия c сервером хранилищ 1С по HTTP 2 | 3 | [![GitHub release](https://img.shields.io/github/release/otymko/crs-api.svg?style=flat-square)](https://github.com/otymko/crs-api/releases) 4 | [![Статус Порога Качества](https://open.checkbsl.org/api/project_badges/measure?project=crs-api&metric=alert_status)](https://open.checkbsl.org/dashboard?id=crs-api) 5 | [![Покрытие](https://open.checkbsl.org/api/project_badges/measure?project=crs-api&metric=coverage)](https://open.checkbsl.org/dashboard?id=crs-api) 6 | [![Технический долг](https://open.checkbsl.org/api/project_badges/measure?project=crs-api&metric=sqale_index)](https://open.checkbsl.org/dashboard?id=crs-api) 7 | [![GitHub license](https://img.shields.io/github/license/otymko/crs-api.svg?style=flat-square)](https://github.com/otymko/crs-api/blob/develop/LICENSE.md) 8 | 9 | ## Краткое описание 10 | 11 | Библиотека позволяет напрямую взаимодействовать с сервером хранилища 1С по протоколу HTTP. 12 | В библиотеке не используется пакетный режим запуска 1С. 13 | 14 | ## Область применения 15 | 16 | Библиотека используется для централизованного управления хранилищами 1С. С помощью проекта например можно: 17 | * Управлять пользователями хранилищ в едином месте. 18 | 19 | P.S. Для этого требуется написать веб приложение на базе [OneScript.Web](https://github.com/EvilBeaver/OneScript.Web). 20 | 21 | ## Установка 22 | 23 | ### С помощью `opm` 24 | 25 | В консоли нужно выполнить команду: 26 | ```sh 27 | opm install crs-api 28 | ``` 29 | 30 | ### Из файла 31 | 32 | Собираем вручную или качаем пакет из раздела `Релизы`. Для установки из файла, в консоли выполняем команду: 33 | ```sh 34 | opm install -f /path/to/crs-api.osxp 35 | ``` 36 | 37 | ## Примеры 38 | 39 | ### Версия сервера хранилищ 1С 40 | 41 | Для запроса версии сервера хранилищ 1С: 42 | ```bsl 43 | АдресХранилища = "http://localhost/repo/repo.1cc"; 44 | ВерсияСервераХранилища = МенеджерХранилищ.ВерсияСервераХранилища(АдресХранилища); 45 | ``` 46 | 47 | После выполнения, `ВерсияСервераХранилища` содержит версию сервера хранилища. Например: `8.3.12.1855`. 48 | В случае возникновения будет вызвано исключение. 49 | 50 | ### Проверка существования хранилища 1С 51 | 52 | Для проверки существования хранилища 1С: 53 | ```bsl 54 | АдресХранилища = "http://localhost/repo/repo.1ccr"; 55 | ИмяХранилища = "MyTrade"; 56 | ВерсияПлатформы = "8.3.15.1855"; 57 | ХранилищеСуществует = МенеджерХранилищ.ХранилищеСуществует(АдресХранилища, ИмяХранилища, ВерсияПлатформы); 58 | ``` 59 | 60 | Если хранилище существует, то значение переменной `ХранилищеСуществует` будет `Истина`. 61 | 62 | ### Создание нового хранилища 1С 63 | 64 | Для создания нового хранилища 1С требуется: 65 | * Сервер хранилищ 1С опубликованный на веб-сервере 66 | 67 | ```bsl 68 | АдресХранилища = "http://localhost/repo/repo.1ccr"; 69 | ИмяХранилища = "MyTrade"; 70 | ВерсияПлатформы = "8.3.15.1855"; 71 | Пользователь = "Администратор"; 72 | Пароль = "qwerty12345"; 73 | Результат = МенеджерХранилищ.НовоеХранилище1C(АдресХранилища, ИмяХранилища, 74 | ВерсияПлатформы, Пользователь, Пароль); 75 | 76 | Сообщить(Результат); // ИмяХранилища 77 | ``` 78 | 79 | В результате на сервере хранилищ 1С будет создано новое хранилище 1С с именем `MyTrade`. 80 | Хранилище будет доступно по адресу: `http://localhost/repo/repo.1ccr/MyTrade`. 81 | Если хранилище не было создано, `Результат` будет равен `Неопределено`. 82 | 83 | ### Подключение к хранилищу 1С 84 | 85 | ```bsl 86 | АдресХранилища = "http://localhost/repo/repo.1ccr"; 87 | ВерсияПлатформы = "8.3.15.1855"; 88 | ИмяХранилища = "MyTrade"; 89 | Пользователь = "Администратор"; 90 | Пароль = "qwerty12345"; 91 | 92 | КлиентХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 93 | КлиентХранилища.Подключиться(Пользователь, Пароль, ИмяХранилища); 94 | ``` 95 | 96 | В результате с помощью `КлиентХранилища` теперь можно будет выполнять основное взаимодействие с хранилищем. 97 | При ошибке подключения (сервер хранилища недоступен) будет вызвано исключение. При успешном подключении: 98 | ```bsl 99 | // ... 100 | КлиентПодключен = КлиентХранилища.АвторизацияПройдена(); // КлиентПодключен будет равен Истина при успешном подключении 101 | ``` 102 | 103 | ### Создание пользователя хранилища 104 | 105 | Пример создания нового пользователя хранилища: 106 | 107 | ```bsl 108 | // ... 109 | ИмяПользователя = "Иванов Иван"; 110 | Пароль = "12345"; 111 | Роль = РолиХранилища.Разработчик; 112 | КлиентХранилища.СоздатьПользователя(ИмяПользователя, Пароль, Роль); 113 | ``` 114 | 115 | В случае неудачи будет вызвано исключение с текстом ошибки. 116 | 117 | У `РолиХранилища` доступны значения: 118 | * `ТолькоПросмотр` - дополнительных прав в хранилище не выдано 119 | * `Разработчик` - возможность захвата объектов в хранилище 120 | * `РазработчикРасширенный` - возможность захвата объектов и изменения состава версий в хранилище 121 | * `Администратор` - полные права без ограничений 122 | 123 | ### Поиск пользователя хранилища 124 | 125 | Существующего пользователя хранилища можно найти по его имени. 126 | 127 | ```bsl 128 | 129 | ИмяПользователя = "Иванов Иван"; 130 | ПользовательХранилища = КлиентХранилища.НайтиПользователя(ИмяПользователя); 131 | ``` 132 | 133 | Если пользователь найден, то `ПользовательХранилища` будет содержать объект со свойствами: 134 | * `Идентификатор` - идентификатор пользователя в хранилище, принимает значение формата GUID 135 | * `Имя` - имя пользователя 136 | * `ХешПароля` - хеш пароля пользователя 137 | * `Роль` - роль в хранилище 138 | * `Активен` - признак авторизации пользователя 139 | * `Удален` - признак деактивации пользователя 140 | 141 | Если пользователь не найден, то `ПользовательХранилища` будет равен `Неопределено`. 142 | 143 | ### Удаление пользователя хранилища 144 | 145 | Для удаления пользователя в хранилище, нужно знать его идентификатор. 146 | ```bsl 147 | // ... 148 | ИмяПользователя = "Иванов Иван"; 149 | ПользовательХранилища = КлиентХранилища.НайтиПользователя(ИмяПользователя); 150 | КлиентХранилища.УдалитьПользователя(ПользовательХранилища.Идентификатор); 151 | ``` 152 | 153 | При неуспешном удалении (деактивации) будет вызвано исключение с текстом ошибки. 154 | 155 | ### Восстановление пользователя хранилища 156 | 157 | Для восстановления существующего пользователя в хранилище, нужно знать его идентификатор. 158 | ```bsl 159 | // ... 160 | ИмяПользователя = "Иванов Иван"; 161 | ПользовательХранилища = КлиентХранилища.НайтиПользователя(ИмяПользователя); 162 | КлиентХранилища.ВосстановитьПользователя(ПользовательХранилища.Идентификатор); 163 | ``` 164 | 165 | При неуспешном удалении (деактивации) будет вызвано исключение с текстом ошибки. 166 | 167 | ### Изменение пользователя хранилища 168 | 169 | Изменение пользователя может понадобиться для следующего: 170 | * Изменение имени пользователя 171 | * Смена пароля 172 | * Изменение роли 173 | 174 | В случае неудачи изменения данных пользователя будет вызвано исключение с текстом ошибки. 175 | 176 | #### Изменение имени пользователя хранилища 177 | 178 | ```bsl 179 | // ... 180 | ИмяПользователя = "Иванов Иван"; 181 | ПользовательХранилища = КлиентХранилища.НайтиПользователя(ИмяПользователя); 182 | // ... 183 | ПользовательХранилища.Имя = "Иванов И.И."; 184 | КлиентХранилища.ОбновитьПользователяХранилища(ПользовательХранилища); 185 | ``` 186 | 187 | #### Изменение пароля пользователя хранилища 188 | 189 | ```bsl 190 | // ... 191 | ИмяПользователя = "Иванов Иван"; 192 | ПользовательХранилища = КлиентХранилища.НайтиПользователя(ИмяПользователя); 193 | // ... 194 | ПользовательХранилища.Пароль = "qwerty51"; 195 | КлиентХранилища.ОбновитьПользователяХранилища(ПользовательХранилища); 196 | ``` 197 | 198 | #### Изменение роли пользователя хранилища 199 | 200 | ```bsl 201 | // ... 202 | ИмяПользователя = "Иванов Иван"; 203 | ПользовательХранилища = КлиентХранилища.НайтиПользователя(ИмяПользователя); 204 | // ... 205 | ПользовательХранилища.Роль = РолиХранилища.Администратор; 206 | КлиентХранилища.ОбновитьПользователяХранилища(ПользовательХранилища); 207 | ``` 208 | 209 | ### Получение списка пользователей хранилища 210 | 211 | Для получения списка пользователей хранилища (включая "удаленных"): 212 | ```bsl 213 | // ... 214 | СписокПользователей = КлиентХранилища.СписокПользователей(); 215 | ``` 216 | 217 | `СписокПользователей` будет содержать массив объектов `ПользовательХранилища`. 218 | 219 | ### Получение список версий в хранилище 220 | 221 | Для получения списка версий в хранилище: 222 | ```bsl 223 | // ... 224 | СписокВерсийВХранилище = КлиентХранилища.СписокВерсий(); 225 | ``` 226 | 227 | `СписокВерсийВХранилище` будет содержать массив объектов `ВерсияХранилища`. Из объекта `ВерсияХранилища` доступны следующие свойства: 228 | * `Идентификатор` - внутренний идентификатор версии (GUID) 229 | * `Номер` - порядковый номер версии 230 | * `Дата` - дата создания версии 231 | * `ВнутренняяВерсия` - внутренняя версия конфигурации 232 | * `Версия` - версия конфигурации 233 | * `Пользователь` - автор версии 234 | * `Версия1С` - номер версии платформы 1С, под которой была создана версия 235 | * `Комментарий` - комментарий к версии хранилища 236 | * `Данные` - данные конфигурации, пока закрытый пакет 237 | 238 | ## Как вести разработку 239 | 240 | Разработка ведется в репозитории [otymko/crs-api](https://github.com/otymko/crs-api), issue и PR нужно создавать именно в нем. 241 | 242 | Используется: 243 | * Русский вариант синтаксиса 244 | * Тестирование (пока не опубликовано) 245 | * Разработка по `gitflow` 246 | 247 | Прежде чем `кодить` нужно: 248 | * Убедиться, что cуществует issue (или создать) 249 | * Обсудить идею с владельцем проекта 250 | 251 | ## Текущие ограничения 252 | 253 | На данный момент библиотека имеет следующие ограничения: 254 | * Новое хранилище 1С создается из встроенного шаблона конфигурации 1С (пустая конфигурация) 255 | 256 | ## "Дорожная карта" 257 | 258 | В планах реализовать: 259 | * Получение списка версий хранилища 260 | * Получение `cf` или `cfe` по версии хранилища 261 | * Создание нового хранилища из файла `cf` или `cfe` 262 | * Взаимодействия с версиями хранилища. Изменение меток, комментария 263 | * "Обрезка" хранилища 264 | 265 | ## Лицензия 266 | 267 | Используется лицензия [MIT License](LICENSE) 268 | -------------------------------------------------------------------------------- /features/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otymko/crs-api/645fabe6ce0431e6317b4466684ff704f9c4161e/features/.gitkeep -------------------------------------------------------------------------------- /lib.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////// 2 | // Описание пакета для сборки и установки 3 | // Полную документацию см. на hub.oscript.io/packaging 4 | // 5 | 6 | Описание.Имя("crs-api") 7 | .Версия("0.2.1") 8 | .Автор("Tymko Oleg") 9 | .АдресАвтора("olegtymko@yandex.ru") 10 | .Описание("Взаимодействие с хранилищем 1С по HTTP API") 11 | .ВерсияСреды("1.0.21") 12 | .ВключитьФайл("src") 13 | .ВключитьФайл("lib.config") 14 | .ВключитьФайл("README.md") 15 | .ВключитьФайл("LICENSE") 16 | .ЗависитОт("xml-parser", "0.1.1") 17 | .ЗависитОт("1connector", "2.1.3") 18 | .РазработкаЗависитОт("1bdd") 19 | .РазработкаЗависитОт("1testrunner") 20 | .РазработкаЗависитОт("asserts") 21 | .РазработкаЗависитОт("fs") 22 | ; -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | sonar.projectKey=crs-api 2 | sonar.projectName=crs-api 3 | sonar.sources=./src 4 | sonar.sourceEncoding=UTF-8 5 | sonar.coverageReportPaths=coverage/genericCoverage.xml -------------------------------------------------------------------------------- /src/fake-entrypoint.os: -------------------------------------------------------------------------------- 1 | #Использовать ".." -------------------------------------------------------------------------------- /src/Классы/ВерсияХранилища.os: -------------------------------------------------------------------------------- 1 | // Идентификатор версии хранилища (GUID) 2 | Перем Идентификатор Экспорт; 3 | // Порядковый номер версии хранилища 4 | Перем Номер Экспорт; 5 | // Дата версии хранилища 6 | Перем Дата Экспорт; 7 | // Внутренняя версия конфигурации 8 | Перем ВнутренняяВерсия Экспорт; 9 | // Версия конфигурации 10 | Перем Версия Экспорт; 11 | // Автор версии в хранилище 12 | Перем Пользователь Экспорт; 13 | // Номер версии платформы 1С 14 | Перем Версия1С Экспорт; 15 | // Комментарий к версии хранилища 16 | Перем Комментарий Экспорт; 17 | // Данные файла конфигурации 18 | Перем Данные Экспорт; 19 | 20 | // Заполняет объект на основе входящих данных 21 | // 22 | // Параметры: 23 | // ВходящиеДанные - Соответствие - результат разбора XML с помощью библиотеки xmp-parser 24 | // 25 | Процедура Заполнить(ВходящиеДанные) Экспорт 26 | 27 | info = ВходящиеДанные["info"]; 28 | 29 | Идентификатор = Вспомогательный.ЗначениеСвойства(info, "versionID"); 30 | Номер = info["verNum"]; 31 | Дата = Вспомогательный.ВычислитьДату(Вспомогательный.ЗначениеСвойства(info, "date")); 32 | Пользователь = Вспомогательный.ЗначениеСвойства(info, "userID"); 33 | Версия = Вспомогательный.ЗначениеСвойства(info, "code"); 34 | ВнутренняяВерсия = СтрШаблон("%1.%2", info["cvermajor"], info["cverminor"]); 35 | Версия1С = СтрШаблон("%1.%2.%3.%4", 36 | Вспомогательный.ЗначениеСвойства(info, "pvermajor"), 37 | Вспомогательный.ЗначениеСвойства(info, "pverminor"), 38 | Вспомогательный.ЗначениеСвойства(info, "pverbuild"), 39 | Вспомогательный.ЗначениеСвойства(info, "pverrevis")); 40 | Комментарий = info["comment"]; 41 | Данные = info["file"]; 42 | 43 | КонецПроцедуры 44 | -------------------------------------------------------------------------------- /src/Классы/КлиентХранилища.os: -------------------------------------------------------------------------------- 1 | #Использовать 1connector 2 | #Использовать xml-parser 3 | 4 | // Ссылка на сервер хранилищ 1С 5 | Перем Адрес; 6 | // Пользователь для авторизации 7 | Перем Пользователь; 8 | // Хеш пароля для авторизации, заполняется в методе "Подключиться" 9 | Перем ХешПароля; 10 | // Версия платформы 1С 11 | Перем ВерсияПлатформы; 12 | // Имя хранилища 1С. Например MyTrade 13 | Перем ИмяХранилища; 14 | 15 | // Событие при создании объекта 16 | // 17 | // Параметры: 18 | // АдресХранилища - Строка - URL-ссылка на сервер хранилищ 1С 19 | // ВерсияПлатформыХранилища - Строка - версия платформы 1С. Например: 8.3.15.1855 20 | // 21 | Процедура ПриСозданииОбъекта(Знач АдресХранилища, Знач ВерсияПлатформыХранилища) 22 | Адрес = АдресХранилища; 23 | ВерсияПлатформы = ВерсияПлатформыХранилища; 24 | КонецПроцедуры 25 | 26 | // Подключение к хранилищу 1С, если оно существует 27 | // 28 | // Параметры: 29 | // ПользовательХранилища - Строка - пользователь хранилища 30 | // ПарольХранилища - Строка - пароль пользователя хранилища 31 | // пИмяХранилища - Строка - имя хранилища. Например: `MyTrade` или `Trade/MyRepo`. 32 | // По умолчанию `maincr`. 33 | // 34 | Процедура Подключиться(Знач ПользовательХранилища, Знач ПарольХранилища, Знач пИмяХранилища = "maincr") Экспорт 35 | Пользователь = Неопределено; 36 | ХешПароля = Неопределено; 37 | 38 | Хеш = Вспомогательный.ХешированныйПароль(ПарольХранилища); 39 | 40 | Параметры = Новый Структура; 41 | Параметры.Вставить("ИмяХранилища", пИмяХранилища); 42 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 43 | Параметры.Вставить("ПользовательХранилища", ПользовательХранилища); 44 | Параметры.Вставить("ХешПароляПользователя", Хеш); 45 | 46 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаПодключение(Параметры); 47 | 48 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 49 | Если Ответ.КодСостояния = 200 Тогда 50 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(Ответ.Текст()); 51 | 52 | Если ОтветСервиса.ЕстьОшибка Тогда 53 | Сообщить(ОтветСервиса.СодержаниеОшибки); 54 | Возврат; 55 | КонецЕсли; 56 | 57 | Пользователь = ПользовательХранилища; 58 | ХешПароля = Хеш; 59 | Иначе 60 | ВызватьИсключение(Ответ.Текст()); 61 | КонецЕсли; 62 | 63 | ИмяХранилища = пИмяХранилища; 64 | 65 | КонецПроцедуры 66 | 67 | // Возвращает значение, пройдена ли авторизация 68 | // 69 | // Возвращаемое значение: 70 | // Булево - Истина или Ложь. 71 | // 72 | Функция АвторизацияПройдена() Экспорт 73 | Возврат ЗначениеЗаполнено(ХешПароля) И ЗначениеЗаполнено(ИмяХранилища); 74 | КонецФункции 75 | 76 | // Создать польльзователя хранилища. Работает только после подключения к хранилищу 77 | // (метод `Подключиться`) 78 | // 79 | // Параметры: 80 | // ИмяПользователя - Строка - имя пользователя хранилища 81 | // ПарольПользователя - Строка - пароль пользователя хранилища 82 | // Роль - РолиХранилища - роль пользовователя хранилища 83 | // 84 | Процедура СоздатьПользователя(Знач ИмяПользователя, Знач ПарольПользователя, Знач Роль) Экспорт 85 | 86 | ИдентификаторПодключения = Новый УникальныйИдентификатор(); 87 | ИдентификаторОперации = Новый УникальныйИдентификатор(); 88 | 89 | ХешНовогоПароля = Вспомогательный.ХешированныйПароль(ПарольПользователя); 90 | 91 | Параметры = Новый Структура; 92 | Параметры.Вставить("ИмяХранилища", ИмяХранилища); 93 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 94 | Параметры.Вставить("ПользовательХранилища", Пользователь); 95 | Параметры.Вставить("ХешПользователяХранилища", ХешПароля); 96 | Параметры.Вставить("ИдентификаторПодключения", ИдентификаторПодключения); 97 | Параметры.Вставить("ИдентификаторОперации", ИдентификаторОперации); 98 | Параметры.Вставить("ИмяПользователя", ИмяПользователя); 99 | Параметры.Вставить("ХешНовогоПароля", ХешНовогоПароля); 100 | Параметры.Вставить("Роль", Роль); 101 | 102 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаСозданиеПользователя(Параметры); 103 | 104 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 105 | ОбработатьБазовыйОтветСервиса(Ответ); 106 | 107 | КонецПроцедуры 108 | 109 | // Возвращает пользователя хранилища по его имени 110 | // 111 | // Параметры: 112 | // ИмяПользователя - Строка - имя пользователя хранилища 113 | // 114 | // Возвращаемое значение: 115 | // ПользовательХранилища - объект пользователя хранилища 116 | // Неопределено - если пользователь не был найден 117 | // 118 | Функция НайтиПользователя(Знач ИмяПользователя) Экспорт 119 | 120 | ИдентификаторПодключения = Новый УникальныйИдентификатор(); 121 | 122 | Параметры = Новый Структура; 123 | Параметры.Вставить("ИмяХранилища", ИмяХранилища); 124 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 125 | Параметры.Вставить("ПользовательХранилища", Пользователь); 126 | Параметры.Вставить("ХешПользователяХранилища", ХешПароля); 127 | Параметры.Вставить("ИдентификаторПодключения", ИдентификаторПодключения); 128 | Параметры.Вставить("ИмяПользователя", ИмяПользователя); 129 | 130 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаПоискаПользователя(Параметры); 131 | 132 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 133 | Результат = Ответ.Текст(); 134 | 135 | Если Ответ.КодСостояния = 200 Тогда 136 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(Результат); 137 | Если ОтветСервиса.ЕстьОшибка Тогда 138 | Сообщить(ОтветСервиса.СодержаниеОшибки); 139 | Возврат Неопределено; 140 | КонецЕсли; 141 | 142 | user = ОтветСервиса.РезультатЧтения["call_return"]["_Элементы"]["user"]; 143 | НайденныйПользователь = Новый ПользовательХранилища(); 144 | НайденныйПользователь.Заполнить(user); 145 | 146 | Возврат НайденныйПользователь; 147 | 148 | Иначе 149 | Сообщить(Результат); 150 | Возврат Неопределено; 151 | КонецЕсли; 152 | 153 | Попытка 154 | Структура = ОбработкаXML.ПрочитатьПользователяИзXML(Результат); 155 | Исключение 156 | // логировать 157 | Сообщить("Не удалось прочитать данные пользователя. Причина: " + ОписаниеОшибки()); 158 | Структура = Неопределено; 159 | КонецПопытки; 160 | 161 | Возврат Структура; 162 | 163 | КонецФункции 164 | 165 | // Обновляет пользователя хранилища на основе объекта ПользовательХранилища. 166 | // Обновляемые поля: имя пользователя, пароль, роль. 167 | // 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 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 193 | ОбработатьБазовыйОтветСервиса(Ответ); 194 | 195 | КонецПроцедуры 196 | 197 | // Удаляет (деактивирует) пользователя хранилища 1С. 198 | // Для получения идентификатора пользователя хранилища, нужно воспользоваться 199 | // методом `НайтиПользователя`. 200 | // 201 | // Параметры: 202 | // ИдентификаторПользователя - Строка - идентификатор пользователя хранилища 203 | // 204 | Процедура УдалитьПользователя(Знач ИдентификаторПользователя) Экспорт 205 | 206 | ИдентификаторПодключения = Новый УникальныйИдентификатор(); 207 | 208 | Параметры = Новый Структура; 209 | Параметры.Вставить("ИмяХранилища", ИмяХранилища); 210 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 211 | Параметры.Вставить("ПользовательХранилища", Пользователь); 212 | Параметры.Вставить("ХешПользователяХранилища", ХешПароля); 213 | Параметры.Вставить("ИдентификаторПодключения", ИдентификаторПодключения); 214 | Параметры.Вставить("ИдентификаторПользователя", ИдентификаторПользователя); 215 | 216 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаУдалениеПользователя(Параметры); 217 | 218 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 219 | ОбработатьБазовыйОтветСервиса(Ответ); 220 | 221 | КонецПроцедуры 222 | 223 | // Восстанавливает (ранее удаленного) пользователя хранилища 1С. 224 | // Для получения идентификатора пользователя хранилища, нужно воспользоваться 225 | // методом `НайтиПользователя`. 226 | // 227 | // Параметры: 228 | // ИдентификаторПользователя - Строка - идентификатор пользователя хранилища 229 | // 230 | Процедура ВосстановитьПользователя(Знач ИдентификаторПользователя) Экспорт 231 | 232 | ИдентификаторПодключения = Новый УникальныйИдентификатор(); 233 | 234 | Параметры = Новый Структура; 235 | Параметры.Вставить("ИмяХранилища", ИмяХранилища); 236 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 237 | Параметры.Вставить("ПользовательХранилища", Пользователь); 238 | Параметры.Вставить("ХешПользователяХранилища", ХешПароля); 239 | Параметры.Вставить("ИдентификаторПодключения", ИдентификаторПодключения); 240 | Параметры.Вставить("ИдентификаторПользователя", ИдентификаторПользователя); 241 | 242 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаВосстановлениеПользователя(Параметры); 243 | 244 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 245 | ОбработатьБазовыйОтветСервиса(Ответ); 246 | 247 | КонецПроцедуры 248 | 249 | // Возвращает список пользователей хранилища 250 | // 251 | // Возвращаемое значение: 252 | // Массив - список объектов ПользовательХранилища 253 | // 254 | Функция СписокПользователей() Экспорт 255 | СписокПользователей = Новый Массив; 256 | 257 | ИдентификаторПодключения = Новый УникальныйИдентификатор(); 258 | 259 | Параметры = Новый Структура; 260 | Параметры.Вставить("ИмяХранилища", ИмяХранилища); 261 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 262 | Параметры.Вставить("ПользовательХранилища", Пользователь); 263 | Параметры.Вставить("ХешПользователяХранилища", ХешПароля); 264 | Параметры.Вставить("ИдентификаторПодключения", ИдентификаторПодключения); 265 | 266 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаПолучениеСпискаПользователей(Параметры); 267 | 268 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 269 | ТекстОтвета = Ответ.Текст(); 270 | Если Ответ.КодСостояния = 200 Тогда 271 | 272 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(ТекстОтвета); 273 | Если ОтветСервиса.ЕстьОшибка Тогда 274 | Сообщить(ОтветСервиса.СодержаниеОшибки); 275 | Возврат СписокПользователей; 276 | КонецЕсли; 277 | 278 | call_return = ОтветСервиса.РезультатЧтения.Получить("call_return"); 279 | users = call_return._Элементы.Получить("users"); 280 | Для Каждого user Из users Цикл 281 | 282 | Пользователь = Новый ПользовательХранилища; 283 | Пользователь.Заполнить(user["value"]["second"]); 284 | 285 | СписокПользователей.Добавить(Пользователь); 286 | 287 | КонецЦикла; 288 | 289 | Иначе 290 | ВызватьИсключение(ТекстОтвета); 291 | КонецЕсли; 292 | 293 | Возврат СписокПользователей; 294 | 295 | КонецФункции 296 | 297 | // Возвращает список версий хранилища 298 | // 299 | // Возвращаемое значение: 300 | // Массив - список объектов ВерсияХранилища 301 | // 302 | Функция СписокВерсий() Экспорт 303 | 304 | СписокВерсий = Новый Массив; 305 | 306 | ИдентификаторПодключения = Новый УникальныйИдентификатор(); 307 | 308 | Параметры = Новый Структура; 309 | Параметры.Вставить("ИмяХранилища" , ИмяХранилища); 310 | Параметры.Вставить("ВерсияПлатформы" , ВерсияПлатформы); 311 | Параметры.Вставить("ПользовательХранилища" , Пользователь); 312 | Параметры.Вставить("ХешПароляПользователя" , ХешПароля); 313 | Параметры.Вставить("ИдентификаторПодключения", ИдентификаторПодключения); 314 | 315 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаПолученияВерсийХранилища(Параметры); 316 | 317 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 318 | ТекстОтвета = Ответ.Текст(); 319 | Если Ответ.КодСостояния = 200 Тогда 320 | 321 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(ТекстОтвета); 322 | Если ОтветСервиса.ЕстьОшибка Тогда 323 | Сообщить(ОтветСервиса.СодержаниеОшибки); 324 | Возврат СписокВерсий; 325 | КонецЕсли; 326 | 327 | call_return = ОтветСервиса.РезультатЧтения.Получить("call_return"); 328 | versions = call_return._Элементы.Получить("versions"); 329 | Для Каждого version Из versions Цикл 330 | 331 | Версия = Новый ВерсияХранилища(); 332 | Версия.Заполнить(version["value"]["second"]); 333 | 334 | СписокВерсий.Добавить(Версия); 335 | 336 | КонецЦикла; 337 | 338 | Иначе 339 | ВызватьИсключение(ТекстОтвета); 340 | КонецЕсли; 341 | 342 | Возврат СписокВерсий; 343 | 344 | КонецФункции // СписокВерсий() 345 | 346 | Процедура ОбработатьБазовыйОтветСервиса(Ответ) 347 | Результат = Ответ.Текст(); 348 | 349 | Если Ответ.КодСостояния = 200 Тогда 350 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(Результат); 351 | Если ОтветСервиса.ЕстьОшибка Тогда 352 | ВызватьИсключение(ОтветСервиса.СодержаниеОшибки); 353 | КонецЕсли; 354 | Иначе 355 | ВызватьИсключение(Результат); 356 | КонецЕсли; 357 | КонецПроцедуры -------------------------------------------------------------------------------- /src/Классы/ОтветСервиса.os: -------------------------------------------------------------------------------- 1 | // Признак наличия ошибки с типом булево 2 | Перем ЕстьОшибка Экспорт; 3 | // Результат чтение XML библиотекой xml-parser 4 | Перем РезультатЧтения Экспорт; 5 | // Текст ошибки 6 | Перем СодержаниеОшибки Экспорт; 7 | 8 | Процедура ПриСозданииОбъекта() 9 | ЕстьОшибка = Ложь; 10 | СодержаниеОшибки = Неопределено; 11 | КонецПроцедуры -------------------------------------------------------------------------------- /src/Классы/ПараметрыСозданияХранилища.os: -------------------------------------------------------------------------------- 1 | // URL-ссылка на сервер хранилищ 2 | Перем Адрес Экспорт; 3 | // Имя хранилища 1С. Например: `MyTrade` или `Trade/MyRepo`. 4 | Перем ИмяХранилища Экспорт; 5 | // Версия платформы 1С. Например: 8.3.12.1855 6 | Перем ВерсияПлатформы Экспорт; 7 | // Пользователь хранилища 8 | Перем Пользователь Экспорт; 9 | // Пароль пользователя хранилища 10 | Перем Пароль Экспорт; 11 | -------------------------------------------------------------------------------- /src/Классы/ПользовательХранилища.os: -------------------------------------------------------------------------------- 1 | // Идентификатор пользователя хранилища (GUID) 2 | Перем Идентификатор Экспорт; 3 | // Имя пользователя хранилища 4 | Перем Имя Экспорт; 5 | // Хеш пароля пользователя хранилища 6 | Перем ХешПароля Экспорт; 7 | // Пароль пользователя хранилища. Используется для изменения пароля 8 | Перем Пароль Экспорт; 9 | // Роль пользователя хранилища. Принимает значения перечисления РолиХранилища 10 | Перем Роль Экспорт; 11 | // Признак активности пользователя (если он авторизован) 12 | Перем Активен Экспорт; 13 | // Признак `удаления` пользователя. При Истина - пользователь деактивирован 14 | Перем Удален Экспорт; 15 | 16 | Процедура ПриСозданииНаСервере() 17 | Пароль = Неопределено; 18 | КонецПроцедуры 19 | 20 | // Заполняет объект на основе входящих данных 21 | // 22 | // Параметры: 23 | // ВходящиеДанные - Соответствие - результат разбора XML с помощью библиотеки xmp-parser 24 | // 25 | Процедура Заполнить(ВходящиеДанные) Экспорт 26 | 27 | info = ВходящиеДанные["info"]; 28 | 29 | Идентификатор = Вспомогательный.ЗначениеСвойства(info, "id"); 30 | Имя = Вспомогательный.ЗначениеСвойства(info, "name"); 31 | ХешПароля = Вспомогательный.ЗначениеСвойства(info, "password"); 32 | Роль = РолиХранилища.РольИзСтроки(Вспомогательный.ЗначениеСвойства(info, "rights")); 33 | Активен = Вспомогательный.ВычислитьБулево(Вспомогательный.ЗначениеСвойства(ВходящиеДанные, "online")); 34 | Удален = Вспомогательный.ВычислитьБулево(Вспомогательный.ЗначениеСвойства(ВходящиеДанные, "removed")); 35 | 36 | КонецПроцедуры 37 | 38 | // Представление роли пользователя 39 | // 40 | // Возвращаемое значение: 41 | // Строка 42 | // 43 | Функция ПредставлениеРоли() Экспорт 44 | Возврат РолиХранилища.ПредставлениеРоли(Роль); 45 | КонецФункции 46 | -------------------------------------------------------------------------------- /src/Макеты/createDepot.txt: -------------------------------------------------------------------------------- 1 | RDMiEQIAAAAFAAAA5QIAAAAAAADvu797NSxjOWRkMGYyYy00ZWQwLTQ4NGEtYmFh 2 | ZC01NjQ5NGFhNjczMDEsY2Y0YWJlYWItMzdiMi0xMWQ0LTk0MGYtMDA4MDQ4ZGEx 3 | MWY5LDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCwwMDAwMDAw 4 | MC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAsNDI5NDk2NzI5NSwwLDEzODI2 5 | MmEzLTVlMWQtNGE3Yy04ZjUyLWU5YzEwMDYzN2U2YSwxMzgyNjJhMy01ZTFkLTRh 6 | N2MtOGY1Mi1lOWMxMDA2MzdlNmEsItCa0L7QvdGE0LjQs9GD0YDQsNGG0LjRjyIs 7 | MCwNCnswfSwNCnsxLA0KezljZDUxMGNlLWFiZmMtMTFkNC05NDM0LTAwNDA5NWUx 8 | MmZjNywxLDBhMDhhYTg5LWEyNTAtNDMyYi1iZDRjLTZjOTZlMDczN2FhOH0NCn0s 9 | DQp7Niw0ZWI0YmQ1Mi03MTM0LTRjMGYtOTk4Zi01NDE1MTg3YTE3ZTQsNjFjYmRl 10 | ZTktNDdjYi00MTMyLWFmMDktNGI5YmMyODQyYTM4LDk1MjU4ODA3LWUzMjAtNDFl 11 | My1iYWU2LTI4MGY5ODhmMWExMixjZDZiZDM0OS01YzM5LTQ5ZmEtOGJhNy02NmZj 12 | MGNjNjc0YjMsY2RmOGJmNWQtZTc3MC00ZDEzLTgyZjItOTA3NDRkNWU5N2M1LGUx 13 | NTA4YWM0LTc5MTUtNDZmZC04ZGJhLTM4ZTc5Mzk5MjIwN30sDQp7MSwwYTA4YWE4 14 | OS1hMjUwLTQzMmItYmQ0Yy02Yzk2ZTA3MzdhYTgsMH0sItCa0L7QvdGE0LjQs9GD 15 | 0YDQsNGG0LjRjyIsMH0sDQp7NDI5NDk2NzI5NSwwLDAwMDAwMDAwLTAwMDAtMDAw 16 | MC0wMDAwLTAwMDAwMDAwMDAwMCwwMDAxMDEwMTAwMDAwMH0sDQp7MH08BgAAAAAA 17 | AL1YQY5ktw3dG/AlOtsSIEqkSG1zE5GSLmEMECCGt9nnFAa8MWDEvkL3SXKFvF9d 18 | v2Z6Yo87qEEKjUL9KoqiSL73qP73L799Vy7ffvNd9DnzLpF4zZzYeCQfYyZp3HmM 19 | pjXTh0s7THtMoRwzDd+RiCanzpVTzpy7LCo79LCj402u3vP9OV/yJeY23zLTUsVe 20 | k2qyskvqWZmnrK4hHy5Pz/98/vX5Xy/fP//8/NPL31/+9vzjyw/PP7/84+nqBwZP 21 | 8FUuupu2SpyU2oA34WS1ShpKo5qoF4pLvfS5Y7jv1IbCzMZIpoXS3LLUvDaNdqkf 22 | vv3m6phue/zRe7690u+8na9LHhnbWE+jCM5ZiyefHKlFbytrVfz4Tk/vMjoCf/07 23 | U/3hzaevuNVXM7JcqdxjPA7xfw7gbMynvyBtmm1PdEZ4rMQFpfOqNWUdMpR9rU4X 24 | uvbI1wugvM+s3pN0RHx9ukW9OKTuzmnJ1sQDULSgnAqZTyOKsei27umvwMw1/v9x 25 | eX1sOdGD6x9bXh7c/cHk8WPL5bHl7bHl+thye2x5f7Byn1X+cFEOgnylnSssyiuy 26 | utbmGSIU4xDBupMzHM+6umgb3tluIMphPbSXRC3qoX+SvDcHXCX7WHl0mafpXmzd 27 | EJWUeZi2NGroR1PVdjfdO3KPZBsSwRqBAAiPU0JGKTS1n+gnn2ObpClQaJ6dknvh 28 | NEZea1HtGap7MxXtLK2miAWvtBGA1UgrkDXvQzxObigcXJUtRa+WWDAG2ISsZuLC 29 | Q4sTrZtpzVOEpydhAk/uVpJ1SPmgaDP28uJxmuoue3RME0XbfViQt8PCzbT7nBsa 30 | ngMRskAuO7Q7zd5jw3XZ5KfpEs48IOZrI9YAR49JlDoyU+YewWF3U8WYEmDTpn9S 31 | Am7OMbumfYwkvCAEw0dJFXFNbR3RnF55WbE5WsqbObELpJ2wyShekQD1GWcGxIxN 32 | W0u1LQweGWkwA7tDS5Zzl57nmQGdMblODAwxJHEvLblwT2RcVhvYNPbNFINN8EDl 33 | 0f4IAEdO1lBixValbQIUzlitieZaVlJljCGLMLlVH0nmbMvGdrXT6220W18c7ehd 34 | g83V39jCaMCcammoU+WNrZemxTrbLK1a1NvWkVly7ytR9Y4DeUt9wjumtpxLLl3v 35 | 7RcYVrd2SxrAPzeCqc6SsG129RCS0xR75N624zc5oLIR8wYcsH9mVUJr+kdqODKw 36 | YxYZxwhcypmBAwXZMqPiRLsfdu0+ONyG2i4Flc44Wy1YTatigF4tFcu7m20aBxm9 37 | R+oxqsmVEQgptwweAIq/DJ3caGKaRU1Rf2Qkr9QFLbGmoo0rcm58murCAzrLdNPJ 38 | XqCd32EvqlS5ZEq7ZX81/SPoUIiu4eixin5ldpye5krLN75u6kj4yTNIhRDC3I4w 39 | 2bPgWOilGUdDMpV6Z9rahq3KKO8AFoF3zGPTJ+Z7XzVItavesUvFpwpuAX7IgQAP 40 | EZKKZ2+y+x75DACXBdejxKWv8mVGsDIIy7FtOYo60W5oGNAIYyvwp4x7rN7w80Cr 41 | U+M/8YoORfLhsAqw/mXTbSxEBgCpo7BWwAhxdJXMArr30k/T2IwCgJIqrjxnu+T9 42 | tnNfTUGy6FQUCvqBZGVU14R6qv0owt5FuNxRcQPGqs2gDpTyuLYYroqDwGp9V5bO 43 | u7uPT255N1QsElBF4HLWCYzWNoo3wT3VlvYKRi1Zb6p8tMbx9TKcFvIEBOIcBqpK 44 | Bqb0FV7yunfRXGt2tyNpDXSxwVkMGYiSB2QZublK0CfAnou4H/iMAvwPfAIxQONE 45 | IDLeXKp/jmkGQfsUMAuAAJlBNnu3fcje0cGDdPHH6Gt2yhnFRFEQvQJ/Y6Gs4RbD 46 | Bpiwnd26ET7WW2q8kBZZDirFhOB1rDkAibz0TfRCWCLT0hoMHssN045hBLHShVQy 47 | xpn139lvOBjy1I9xAt1DtYD9Mh69exSwAC7In8S/Gu7NAA5VBVl3AYZXB/DncgEf 48 | owJyxh+zQoBB1nIk06AY8AhNi+ngzWY86E38qxlZOfSvVHRPtYrsK9KZA0xZFdXS 49 | z7Mfs/k86ESiImZAOJkPTa1hUIpouJC93tdv/2hQABCq1aMeXKGESUrQFRkhDS91 50 | LnkT0nWX63X59uV/AMYBAAAAAAAA77u/ezUsMGEwOGFhODktYTI1MC00MzJiLWJk 51 | NGMtNmM5NmUwNzM3YWE4LDljZDUxMGNlLWFiZmMtMTFkNC05NDM0LTAwNDA5NWUx 52 | MmZjNyxjOWRkMGYyYy00ZWQwLTQ4NGEtYmFhZC01NjQ5NGFhNjczMDEsMDAwMDAw 53 | MDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwLDQyOTQ5NjcyOTUsMCwzNjE2 54 | MGM3MC1kOWZhLTRhNTQtYjYxOS04YjMzZjM1ODVjYTUsMzYxNjBjNzAtZDlmYS00 55 | YTU0LWI2MTktOGIzM2YzNTg1Y2E1LCLQoNGD0YHRgdC60LjQuSIsMCwNCnswfSwN 56 | CnswfSwNCnswfSwNCnsxLGM5ZGQwZjJjLTRlZDAtNDg0YS1iYWFkLTU2NDk0YWE2 57 | NzMwMSwxfSwiOWNkNTEwY2UtYWJmYy0xMWQ0LTk0MzQtMDA0MDk1ZTEyZmM3LtCg 58 | 0YPRgdGB0LrQuNC5IiwwfSwNCns0Mjk0OTY3Mjk1LDAsMDAwMDAwMDAtMDAwMC0w 59 | MDAwLTAwMDAtMDAwMDAwMDAwMDAwLDAwMDEwMTAxMDAwMDAwfSwNCnswfVkAAAAA 60 | AAAAe797f7WhDi9XtQGIgLKAMNHAIjHRwlI30cjUQNfE2ChJNynFJFnXLNnSLNXA 61 | 3NgcKFmro3RhwcXmi40XGy/surDjwk4liBFKRaVKGFJAxUogc2vB0rVABgACAQAA 62 | AAAAAO+7v3swLDIsYzlkZDBmMmMtNGVkMC00ODRhLWJhYWQtNTY0OTRhYTY3MzAx 63 | LCIyOGQ4MThhYmRhYzkwNzllODMxMGNlMDQwNDQwZGQ2YjZiOWYxNDlhIiwiMDc4 64 | Zjk3NmNkNDVmOTg1ZTliYjYzMDg2ZjYyNzlkZDFlMDA5OWM3NSIsMCwwYTA4YWE4 65 | OS1hMjUwLTQzMmItYmQ0Yy02Yzk2ZTA3MzdhYTgsImZhZTYwNjhlYTM0ZDI2M2Jm 66 | ZDEwNzZlNmI4MTExMTNiZTUxMDg1MDgiLCJhYjc0MmMwYzFkNTk5ZDYxZmEwYjg1 67 | NTIyMGE0ZGY4YjAyOTQ2NzRmIiwwfcAAAAAAAAAAESIzRAIAAAAFAAAAB4+XbNRf 68 | mF6btjCG9ied0eAJnHX5AgAAAAAAACjYGKvayQeegxDOBARA3WtrnxSaDAAAAAAA 69 | AACrdCwMHVmdYfoLhVIgpN+LApRnTwsLAAAAAAAA4pGj3vQUgLoW6XFmg2LH7NLW 70 | seFsCwAAAAAAAPrmBo6jTSY7/RB25rgRETvlEIUIPQkAAAAAAAAAAAAAAAAAAAAA 71 | AAAAAAAAAAAAALchNir7k7W3A4jUC3YArj+/QQAcCAEAAAAAAADikaPe9BSAuhbp 72 | cWaDYsfs0tax4e7m6yTlgR9EqykvNM4gqzOuX89Kpfcx5jiZBwlGEshA+ceB3w== -------------------------------------------------------------------------------- /src/Макеты/package-loader.os: -------------------------------------------------------------------------------- 1 | Процедура ПриЗагрузкеБиблиотеки(Знач Путь, СтандартнаяОбработка, Отказ) 2 | 3 | СтандартнаяОбработка = Ложь; 4 | ДобавитьМакет(ОбъединитьПути(Путь, "createDepot.txt"), "ШаблонКонфигурацииДляХранилища"); 5 | 6 | КонецПроцедуры -------------------------------------------------------------------------------- /src/Модули/Вспомогательный.os: -------------------------------------------------------------------------------- 1 | #Использовать "../Макеты" 2 | 3 | #Область СлужебныйПрограммныйИнтерфейс 4 | 5 | // Возвращает шаблон конфигурации 1С для создания нового хранилища 1С 6 | // 7 | // Возвращаемое значение: 8 | // Строка - шаблон конфигурации 1С в BASE64 9 | // 10 | Функция ШаблонКонфигурацииДляХранилища() Экспорт 11 | 12 | ПутьКШаблону = ПолучитьМакет("ШаблонКонфигурацииДляХранилища"); 13 | Содержимое = СодержимоеИзФайла(ПутьКШаблону); 14 | Возврат Содержимое; 15 | 16 | КонецФункции 17 | 18 | // Хеширует строку по "стандартам" хеширования хранилища 1С. 19 | // Метод используется для хеширования паролей пользователей хранилищ 1С. 20 | // 21 | // Параметры: 22 | // ВходящееЗначение - Строка - значениие для хеширования 23 | // 24 | // Возвращаемое значение: 25 | // Строка - хешированная строка 26 | // 27 | Функция ХешированныйПароль(Знач ВходящееЗначение) Экспорт 28 | Данные = ПолучитьДвоичныеДанныеИзСтроки(ВходящееЗначение, КодировкаТекста.UTF16, Ложь); 29 | ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); 30 | ХешированиеДанных.Добавить(Данные); 31 | Возврат НРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешированиеДанных.ХешСумма)); 32 | КонецФункции 33 | 34 | // Получает номер версии сервера хранилища из ответа сервера 35 | // 36 | // Параметры: 37 | // ОтветСервера - Строка - ответ сервера хранилища 38 | // 39 | // Возвращаемое значение: 40 | // Строка - номер версии сервера хранилища 41 | // 42 | Функция ВерсияСервераХранилища(Знач ОтветСервера) Экспорт 43 | 44 | Шаблон = "(?:версия|version).*?([1-9]{1}\.\d{1}\.\d{1,3}\.\d{1,5})"; 45 | РВ = Новый РегулярноеВыражение(Шаблон); 46 | Совпадения = РВ.НайтиСовпадения(ОтветСервера); 47 | 48 | Если Совпадения.Количество() = 0 Тогда 49 | Возврат Неопределено; 50 | КонецЕсли; 51 | 52 | Возврат Совпадения[0].Группы[1].Значение; 53 | 54 | КонецФункции // ВерсияСервераХранилища() 55 | 56 | // Получает значение свойства из входящих данных по имени 57 | // 58 | // Параметры: 59 | // ВходящиеДанные - Соответствие - данные (результат чтения XML-сообщения обмена с сервером хранилища) 60 | // из которых выполняется чтение свойства 61 | // ИмяСвойства - Строка - имя читаемого свойствами 62 | // 63 | // Возвращаемое значение: 64 | // Строка, Число - значение свойства 65 | // 66 | Функция ЗначениеСвойства(ВходящиеДанные, ИмяСвойства) Экспорт 67 | Возврат ВходящиеДанные[ИмяСвойства]._Атрибуты["value"]; 68 | КонецФункции // ЗначениеСвойства() 69 | 70 | // Преобразует значение в тип Булево 71 | // 72 | // Параметры: 73 | // ВходящееЗначение - Строка - значение для преобразования 74 | // 75 | // Возвращаемое значение: 76 | // Булево - результат преобразования 77 | // 78 | Функция ВычислитьБулево(Знач ВходящееЗначение) Экспорт 79 | Возврат НРег(ВходящееЗначение) = "true"; 80 | КонецФункции // ВычислитьБулево() 81 | 82 | // Преобразует значение в тип Дата 83 | // 84 | // Параметры: 85 | // ВходящееЗначение - Строка - значение для преобразования 86 | // 87 | // Возвращаемое значение: 88 | // Дата - результат преобразования 89 | // 90 | Функция ВычислитьДату(Знач ВходящееЗначение) Экспорт 91 | Возврат ПрочитатьДатуJSON(ВходящееЗначение + "Z", ФорматДатыJSON.ISO); 92 | КонецФункции // ВычислитьДату() 93 | 94 | #КонецОбласти 95 | 96 | #Область СлужебныеПроцедурыИФункции 97 | 98 | Функция СодержимоеИзФайла(ПутьКФайлу) 99 | ТекстовыйДокумент = Новый ТекстовыйДокумент; 100 | ТекстовыйДокумент.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8); 101 | Текст = ТекстовыйДокумент.ПолучитьТекст(); 102 | ТекстовыйДокумент = Неопределено; 103 | Возврат Текст; 104 | КонецФункции 105 | 106 | #КонецОбласти -------------------------------------------------------------------------------- /src/Модули/МенеджерЗапросов.os: -------------------------------------------------------------------------------- 1 | #Область СлужебныйПрограммныйИнтерфейс 2 | 3 | Функция ТелоЗапросаНаОткрытиеХранилища(Параметры) Экспорт 4 | ТелоЗапроса = " 5 | | 6 | | 7 | | 8 | | 9 | | 10 | |"; 11 | Возврат ТелоЗапроса; 12 | КонецФункции 13 | 14 | Функция ТелоЗапросаНаСозданиеХранилища(Параметры) Экспорт 15 | ТелоЗапроса = " 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | |" + Параметры.ШаблонКонфигурации + " 26 | | 27 | | 28 | | 29 | |"; 30 | Возврат ТелоЗапроса; 31 | КонецФункции 32 | 33 | Функция ТелоЗапросаНаПодключение(Параметры) Экспорт 34 | ТелоЗапроса = " 35 | | 37 | | 38 | | 39 | |"; 40 | Возврат ТелоЗапроса; 41 | КонецФункции 42 | 43 | Функция ТелоЗапросаПолученияВерсийХранилища(Параметры) Экспорт 44 | ТелоЗапроса = " 45 | | 46 | | 47 | | 48 | | 49 | | 50 | | 51 | | 52 | |4294967295 53 | |4294967295 54 | | 55 | | 56 | | 57 | | 58 | | 59 | | 60 | | 61 | | 62 | | 63 | |"; 64 | Возврат ТелоЗапроса; 65 | КонецФункции 66 | 67 | Функция ТелоЗапросаНаСозданиеПользователя(Параметры) Экспорт 68 | ТелоЗапроса = " 69 | | 70 | | 71 | | 72 | | 73 | | 74 | | 75 | | 76 | | 77 | | 78 | | 79 | | 80 | |"; 81 | Возврат ТелоЗапроса; 82 | КонецФункции 83 | 84 | Функция ТелоЗапросаПоискаПользователя(Параметры) Экспорт 85 | ТелоЗапроса = " 86 | | 87 | | 88 | | 89 | | 90 | | 91 | | 92 | |"; 93 | Возврат ТелоЗапроса; 94 | КонецФункции 95 | 96 | Функция ТелоЗапросаНаУдалениеПользователя(Параметры) Экспорт 97 | ТелоЗапроса = " 98 | | 99 | | 100 | | 101 | | 102 | | 103 | | 104 | |"; 105 | Возврат ТелоЗапроса; 106 | КонецФункции 107 | 108 | Функция ТелоЗапросаНаВосстановлениеПользователя(Параметры) Экспорт 109 | ТелоЗапроса = " 110 | | 111 | | 112 | | 113 | | 114 | | 115 | | 116 | |"; 117 | Возврат ТелоЗапроса; 118 | КонецФункции 119 | 120 | Функция ТелоЗапросаНаПолучениеСпискаПользователей(Параметры) Экспорт 121 | ТелоЗапроса = " 122 | | 123 | | 124 | | 125 | | 126 | | 127 | // фильтр 128 | | 129 | | 130 | |"; 131 | Возврат ТелоЗапроса; 132 | КонецФункции 133 | 134 | Функция ТелоЗапросаНаОбновлениеРолиПользователя(Параметры) Экспорт 135 | ТелоЗапроса = " 136 | | 137 | | 138 | | 139 | | 140 | | 141 | | 142 | | 143 | | 144 | | 145 | | 146 | | 147 | |"; 148 | Возврат ТелоЗапроса; 149 | КонецФункции 150 | 151 | #КонецОбласти 152 | 153 | #Область СлужебныеПроцедурыИФункции 154 | 155 | Функция КорневойИдентификаторКонфигурации() 156 | Возврат "c9dd0f2c-4ed0-484a-baad-56494aa67301"; 157 | КонецФункции 158 | 159 | #КонецОбласти -------------------------------------------------------------------------------- /src/Модули/МенеджерХранилищ.os: -------------------------------------------------------------------------------- 1 | #Использовать 1connector 2 | 3 | #Область ПрограммныйИнтерфейс 4 | 5 | // Получает версию сервера хранилища конфигурации 6 | // 7 | // Параметры: 8 | // Адрес - Строка - URL-ссылка на сервер хранилищ 9 | // 10 | // Возвращаемое значение: 11 | // Строка - Версия сервера хранилища конфигураций 12 | // 13 | Функция ВерсияСервераХранилища(Знач Адрес) Экспорт 14 | 15 | Параметры = Новый Структура; 16 | Параметры.Вставить("ИмяХранилища", "getVersion"); 17 | Параметры.Вставить("ВерсияПлатформы", "0.0.0.0"); 18 | 19 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаОткрытиеХранилища(Параметры); 20 | 21 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 22 | ТекстОтвета = Ответ.Текст(); 23 | 24 | Если Ответ.КодСостояния = 200 Тогда 25 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(ТекстОтвета); 26 | 27 | Если ОтветСервиса.ЕстьОшибка Тогда 28 | ВерсияСервера = Вспомогательный.ВерсияСервераХранилища(ОтветСервиса.СодержаниеОшибки); 29 | Если ВерсияСервера = Неопределено Тогда 30 | ВызватьИсключение(ТекстОтвета); 31 | КонецЕсли; 32 | 33 | Возврат ВерсияСервера; 34 | КонецЕсли; 35 | 36 | Иначе 37 | ВызватьИсключение(ТекстОтвета); 38 | КонецЕсли; 39 | 40 | Возврат "0.0.0.0"; 41 | 42 | КонецФункции // ВерсияСервераХранилища() 43 | 44 | // Проверяет существование хранилища 1С 45 | // 46 | // Параметры: 47 | // Адрес - Строка - URL-ссылка на сервер хранилищ 48 | // ИмяХранилища - Строка - имя хранилища. Например: `MyTrade` или `Trade/MyRepo`. 49 | // ВерсияПлатформы - Строка - версия платформы 1С. Например: 8.3.12.1855 50 | // 51 | // Возвращаемое значение: 52 | // Булево - Истина - хранилище существует; 53 | // Ложь - в противном случае. 54 | // 55 | Функция ХранилищеСуществует(Знач Адрес, Знач ИмяХранилища, Знач ВерсияПлатформы) Экспорт 56 | 57 | Параметры = Новый Структура; 58 | Параметры.Вставить("ИмяХранилища" , ИмяХранилища); 59 | Параметры.Вставить("ВерсияПлатформы", ВерсияПлатформы); 60 | 61 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаОткрытиеХранилища(Параметры); 62 | 63 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 64 | Если Ответ.КодСостояния = 200 Тогда 65 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(Ответ.Текст()); 66 | 67 | Если ОтветСервиса.ЕстьОшибка Тогда 68 | Сообщить(ОтветСервиса.СодержаниеОшибки); 69 | Возврат Ложь; 70 | КонецЕсли; 71 | 72 | Иначе 73 | ВызватьИсключение(Ответ.Текст()); 74 | КонецЕсли; 75 | 76 | Возврат Истина; 77 | 78 | КонецФункции // ХранилищеСуществует() 79 | 80 | // Создает новое хранилище 1С 81 | // 82 | // Параметры: 83 | // Адрес - Строка - URL-ссылка на сервер хранилищ 84 | // ИмяХранилища - Строка - имя хранилища. Например: `MyTrade` или `Trade/MyRepo`. 85 | // ВерсияПлатформы - Строка - версия платформы 1С. Например: 8.3.12.1855 86 | // ИмяПользователя - Строка - пользователь хранилища 87 | // ПарольПользователя - Строка - пароль пользователя хранилища 88 | // 89 | // Возвращаемое значение: 90 | // Строка - имя хранилища 91 | // 92 | Функция НовоеХранилище1C(Знач Адрес, Знач ИмяХранилища, Знач ВерсияПлатформы, Знач ИмяПользователя, 93 | Знач ПарольПользователя) Экспорт 94 | 95 | ХешПароляПользователя = Вспомогательный.ХешированныйПароль(ПарольПользователя); 96 | ШаблонКонфигурации = Вспомогательный.ШаблонКонфигурацииДляХранилища(); 97 | 98 | ПараметрыТелаЗапроса = Новый Структура; 99 | ПараметрыТелаЗапроса.Вставить("ИмяХранилища", ИмяХранилища); 100 | ПараметрыТелаЗапроса.Вставить("ВерсияПлатформы", ВерсияПлатформы); 101 | ПараметрыТелаЗапроса.Вставить("ИмяПользователя", ИмяПользователя); 102 | ПараметрыТелаЗапроса.Вставить("ХешПароляПользователя", ХешПароляПользователя); 103 | ПараметрыТелаЗапроса.Вставить("ШаблонКонфигурации", ШаблонКонфигурации); 104 | 105 | ТелоЗапроса = МенеджерЗапросов.ТелоЗапросаНаСозданиеХранилища(ПараметрыТелаЗапроса); 106 | 107 | Ответ = КоннекторHTTP.Post(Адрес, ТелоЗапроса); 108 | Результат = Ответ.Текст(); 109 | 110 | Если Ответ.КодСостояния = 200 Тогда 111 | ОтветСервиса = ОбработкаXML.ПрочитатьОтветИзТекста(Результат); 112 | Если ОтветСервиса.ЕстьОшибка Тогда 113 | ВызватьИсключение(ОтветСервиса.СодержаниеОшибки); 114 | КонецЕсли; 115 | Иначе 116 | ВызватьИсключение(Результат); 117 | КонецЕсли; 118 | 119 | Возврат ИмяХранилища; 120 | 121 | КонецФункции 122 | 123 | #КонецОбласти -------------------------------------------------------------------------------- /src/Модули/ОбработкаXML.os: -------------------------------------------------------------------------------- 1 | #Использовать xml-parser 2 | 3 | #Область СлужебныйПрограммныйИнтерфейс 4 | 5 | Функция ПрочитатьОтветИзТекста(Тест) Экспорт 6 | 7 | ПутьКФайлу = ВременныйФайлXML(Тест); 8 | Результат = ПрочитатьОтчетИзФайла(ПутьКФайлу); 9 | УдалитьФайлы(ПутьКФайлу); 10 | 11 | Возврат Результат; 12 | 13 | КонецФункции 14 | 15 | Функция ПрочитатьОтчетИзФайла(ПутьКФайлу) Экспорт 16 | 17 | ПроцессорXML = Новый СериализацияДанныхXML(); 18 | РезультатЧтения = ПроцессорXML.ПрочитатьИзФайла(ПутьКФайлу); 19 | 20 | Если ЭтоОтветСОшибкой(РезультатЧтения) Тогда 21 | Возврат ОбработаннаяОшибка(РезультатЧтения); 22 | КонецЕсли; 23 | 24 | Ответ = Новый ОтветСервиса(); 25 | Ответ.РезультатЧтения = РезультатЧтения; 26 | 27 | Возврат Ответ; 28 | 29 | КонецФункции 30 | 31 | Функция ПрочитатьПользователяИзXML(Данные) Экспорт 32 | 33 | Структура = Новый Структура; 34 | 35 | ИмяФайла = ПолучитьИмяВременногоФайла("xml"); 36 | 37 | ТД = Новый ТекстовыйДокумент(); 38 | ТД.УстановитьТекст(Данные); 39 | ТД.Записать(ИмяФайла, "UTF-8"); 40 | 41 | ПроцессорXML = Новый СериализацияДанныхXML(); 42 | РезультатЧтения = ПроцессорXML.ПрочитатьИзФайла(ИмяФайла); 43 | ПользовательXML = РезультатЧтения["call_return"]["_Элементы"]["user"]; 44 | Информация = ПользовательXML["info"]; 45 | Для Каждого КлючЗначение Из Информация Цикл 46 | Если КлючЗначение.Ключ = "id" Тогда 47 | Структура.Вставить("Идентификатор", КлючЗначение.Значение["_Атрибуты"]["value"]); 48 | ИначеЕсли КлючЗначение.Ключ = "name" Тогда 49 | Структура.Вставить("Имя", КлючЗначение.Значение["_Атрибуты"]["value"]); 50 | ИначеЕсли КлючЗначение.Ключ = "password" Тогда 51 | Структура.Вставить("ХешПароля", КлючЗначение.Значение["_Атрибуты"]["value"]); 52 | ИначеЕсли КлючЗначение.Ключ = "rights" Тогда 53 | Структура.Вставить("Права", КлючЗначение.Значение["_Атрибуты"]["value"]); 54 | КонецЕсли; 55 | КонецЦикла; 56 | 57 | УдалитьФайлы(ИмяФайла); 58 | 59 | Возврат Структура; 60 | 61 | КонецФункции 62 | 63 | #КонецОбласти 64 | 65 | #Область СлужебныеПроцедурыИФункции 66 | 67 | Функция ОбработаннаяОшибка(РезультатЧтения) 68 | Значение = РезультатЧтения.Получить("call_exception"); 69 | Содержимое = СокрЛП(Значение._Значение); 70 | Ошибка = СодержимоеИзBase64(Содержимое); 71 | 72 | Ответ = Новый ОтветСервиса; 73 | Ответ.ЕстьОшибка = Истина; 74 | Ответ.СодержаниеОшибки = Ошибка; 75 | 76 | Возврат Ответ; 77 | КонецФункции 78 | 79 | Функция ЭтоОтветСОшибкой(РезультатЧтения) 80 | Значение = РезультатЧтения.Получить("call_exception"); 81 | Возврат Не Значение = Неопределено; 82 | КонецФункции 83 | 84 | Функция ВременныйФайлXML(Текст) 85 | Путь = ПолучитьИмяВременногоФайла("xml"); 86 | ТекстовыйДокумент = Новый ТекстовыйДокумент(); 87 | ТекстовыйДокумент.УстановитьТекст(Текст); 88 | ТекстовыйДокумент.Записать(Путь, КодировкаТекста.UTF8); 89 | ТекстовыйДокумент = Неопределено; 90 | Возврат Путь; 91 | КонецФункции 92 | 93 | Функция СодержимоеИзBase64(ВходящиеДанные) 94 | ДД = Base64Значение(ВходящиеДанные); 95 | ВременныйФайл = ПолучитьИмяВременногоФайла("txt"); 96 | ДД.Записать(ВременныйФайл); 97 | ТекстовыйДокумент = Новый ТекстовыйДокумент; 98 | ТекстовыйДокумент.Прочитать(ВременныйФайл, КодировкаТекста.UTF8); 99 | Содержимое = ТекстовыйДокумент.ПолучитьТекст(); 100 | ТекстовыйДокумент = Неопределено; 101 | УдалитьФайлы(ВременныйФайл); 102 | Возврат Содержимое; 103 | КонецФункции 104 | 105 | #КонецОбласти 106 | -------------------------------------------------------------------------------- /src/Модули/РолиХранилища.os: -------------------------------------------------------------------------------- 1 | // только просмотр (дополнительных прав не выдано) 2 | Перем ТолькоПросмотр Экспорт; 3 | // возможность захвата объектов 4 | Перем Разработчик Экспорт; 5 | // возмоность захвата объектов и изменения состава версий 6 | Перем РазработчикРасширенный Экспорт; 7 | // полные права 8 | Перем Администратор Экспорт; 9 | 10 | Функция РольИзСтроки(Знач Значение) Экспорт 11 | 12 | Перем Роль; 13 | 14 | Если Значение = "1" Тогда 15 | Роль = Разработчик; 16 | ИначеЕсли Значение = "5" Тогда 17 | Роль = РазработчикРасширенный; 18 | ИначеЕсли Значение = "32773" Тогда 19 | Роль = Администратор; 20 | Иначе 21 | Роль = ТолькоПросмотр; 22 | КонецЕсли; 23 | 24 | Возврат Роль; 25 | 26 | КонецФункции // РольИзСтроки() 27 | 28 | Функция ПредставлениеРоли(Знач Значение) Экспорт 29 | 30 | Перем Роль; 31 | 32 | Если Значение = "1" Тогда 33 | Роль = "Разработчик"; 34 | ИначеЕсли Значение = "5" Тогда 35 | Роль = "РазработчикРасширенный"; 36 | ИначеЕсли Значение = "32773" Тогда 37 | Роль = "Администратор"; 38 | Иначе 39 | Роль = "ТолькоПросмотр"; 40 | КонецЕсли; 41 | 42 | Возврат Роль; 43 | 44 | КонецФункции // ПредставлениеРоли() 45 | 46 | ТолькоПросмотр = "0"; 47 | Разработчик = "1"; 48 | РазработчикРасширенный = "5"; 49 | Администратор = "32773"; -------------------------------------------------------------------------------- /tasks/coverage.os: -------------------------------------------------------------------------------- 1 | #Использовать coverage 2 | #Использовать 1commands 3 | #Использовать fs 4 | 5 | ФС.ОбеспечитьПустойКаталог("coverage"); 6 | ПутьКСтат = "coverage/stat.json"; 7 | 8 | Команда = Новый Команда; 9 | Команда.УстановитьКоманду("oscript"); 10 | Команда.ДобавитьПараметр("-encoding=utf-8"); 11 | Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); 12 | Команда.ДобавитьПараметр("tasks/test.os"); 13 | Команда.ПоказыватьВыводНемедленно(Истина); 14 | 15 | КодВозврата = Команда.Исполнить(); 16 | 17 | Файл_Стат = Новый Файл(ПутьКСтат); 18 | 19 | ИмяПакета = "crs-api"; 20 | 21 | Каталог = Новый Файл("coverage"); 22 | ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); 23 | ПроцессорГенерации.РабочийКаталог(Каталог.ПолноеИмя); 24 | 25 | ПроцессорГенерации.ОтносительныеПути() 26 | .ИмяФайлаСтатистики("stat*.json") 27 | .ФайлСтатистики(Файл_Стат.ПолноеИмя) 28 | .GenericCoverage() 29 | .Cobertura() 30 | .Clover(ИмяПакета) 31 | .Сформировать(); 32 | 33 | ЗавершитьРаботу(КодВозврата); -------------------------------------------------------------------------------- /tasks/test.os: -------------------------------------------------------------------------------- 1 | //заменить на путь к исходникам своей библиотеки, например, #Использовать ".." 2 | #Использовать "../src" 3 | #Использовать 1bdd 4 | #Использовать 1testrunner 5 | #Использовать fs 6 | 7 | Функция ПрогнатьТесты() 8 | 9 | Тестер = Новый Тестер; 10 | 11 | ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); 12 | ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "out"); 13 | 14 | ФС.ОбеспечитьКаталог(ПутьКОтчетуJUnit); 15 | 16 | ПутьКОтчетуJUnit = Новый Файл(ПутьКОтчетуJUnit).ПолноеИмя; 17 | 18 | РезультатТестирования = Тестер.ТестироватьКаталог( 19 | Новый Файл(ПутьКТестам), 20 | Новый Файл(ПутьКОтчетуJUnit) 21 | ); 22 | 23 | Успешно = РезультатТестирования = 0; 24 | 25 | Возврат Успешно; 26 | КонецФункции // ПрогнатьТесты() 27 | 28 | Функция ПрогнатьФичи(Знач ПутьФич = "features") 29 | 30 | ПутьОтчетаJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "out", "bdd-log.xml"); 31 | 32 | КаталогФич = ОбъединитьПути(".", ПутьФич); 33 | 34 | Файл_КаталогФич = Новый Файл(КаталогФич); 35 | 36 | ИсполнительБДД = Новый ИсполнительБДД; 37 | РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); 38 | ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); 39 | 40 | СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся; 41 | Если РезультатыВыполнения.Строки.Количество() > 0 Тогда 42 | 43 | СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); 44 | 45 | ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог()); 46 | КонецЕсли; 47 | 48 | ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; 49 | ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit); 50 | 51 | Сообщить(СтрШаблон("Результат прогона фич <%1>. Путь %2 52 | |", ИтоговыйРезультатВыполнения, ПутьФич)); 53 | 54 | Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался; 55 | КонецФункции // ПрогнатьФичи() 56 | 57 | // основной код 58 | 59 | ТекКаталог = ТекущийКаталог(); 60 | 61 | Попытка 62 | ТестыПрошли = ПрогнатьТесты(); 63 | Исключение 64 | ТестыПрошли = Ложь; 65 | Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно 66 | |%1 67 | |%2", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ОписаниеОшибки())); 68 | КонецПопытки; 69 | 70 | УстановитьТекущийКаталог(ТекКаталог); 71 | 72 | Попытка 73 | ФичиПрошли = ПрогнатьФичи("features"); 74 | Исключение 75 | ФичиПрошли = Ложь; 76 | Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно 77 | |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); 78 | КонецПопытки; 79 | 80 | Сообщить(СтрШаблон("Результат прогона тестов <%1> 81 | |", ТестыПрошли)); 82 | Сообщить(СтрШаблон("Результат прогона основных фич <%1> 83 | |", ФичиПрошли)); 84 | 85 | Если НЕ ТестыПрошли Или НЕ ФичиПрошли Тогда 86 | Сообщить("Тестирование завершилось неудачно!"); 87 | ЗавершитьРаботу(1); 88 | КонецЕсли; -------------------------------------------------------------------------------- /tests/fixtures/xml/call_exception.xml: -------------------------------------------------------------------------------- 1 | 2 | 77u/ew0KezNjY2IyNTE4LTk2MTYtNDQ0NS1hYWE3LTIwMDQ4ZmVhZDE3NCwi0J7R 3 | iNC40LHQutCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0LIg0YXRgNCw 4 | 0L3QuNC70LjRidC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCENCtCf0YDQvtCy 5 | 0LXRgNGM0YLQtSDQv9GA0LDQstC40LvRjNC90L7RgdGC0Ywg0LLQstC10LTQtdC9 6 | 0L3QvtCz0L4g0LjQvNC10L3QuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg 7 | 0L/QsNGA0L7Qu9GPLiJ9LDQsDQp7ImZpbGU6Ly8vaG9tZS91c3IxY3Y4Ly4xY3Y4 8 | L3JlcG8vcmVhIiwwfSwiIn0= -------------------------------------------------------------------------------- /tests/fixtures/xml/call_return.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tests/Тест_БазовыеТесты.os: -------------------------------------------------------------------------------- 1 | #Использовать "../src" 2 | #Использовать asserts 3 | 4 | Перем ВерсияПлатформы; 5 | Перем АдресХранилища; 6 | Перем ПарольПоУмолчанию; 7 | Перем ИмяХранилища; 8 | 9 | &Тест 10 | Процедура ПроверкаВерсииСервераХранилища() Экспорт 11 | 12 | ВерсияСервераХранилища = МенеджерХранилищ.ВерсияСервераХранилища(АдресХранилища); 13 | 14 | Шаблон = "([1-9]{1}\.\d{1}\.\d{1,3}\.\d{1,5})"; 15 | 16 | РВ = Новый РегулярноеВыражение(Шаблон); 17 | Совпадения = РВ.НайтиСовпадения(ВерсияСервераХранилища); 18 | 19 | Ожидаем.Что(Совпадения.Количество() > 0).ЕстьИстина(); 20 | 21 | КонецПроцедуры 22 | 23 | &Тест 24 | Процедура ПроверкаСуществованияХранилища() Экспорт 25 | 26 | ИмяНовогоХранилища = "newrepo2" + (Новый УникальныйИдентификатор()); 27 | Пользователь = "Администратор"; 28 | Попытка 29 | Результат = МенеджерХранилищ.НовоеХранилище1C(АдресХранилища, ИмяНовогоХранилища, ВерсияПлатформы, 30 | Пользователь, ПарольПоУмолчанию); 31 | Исключение 32 | Результат = ""; 33 | КонецПопытки; 34 | 35 | ХранилищеСуществует = МенеджерХранилищ.ХранилищеСуществует(АдресХранилища, ИмяНовогоХранилища, ВерсияПлатформы); 36 | 37 | Ожидаем.Что(ХранилищеСуществует).ЕстьИстина(); 38 | 39 | КонецПроцедуры 40 | 41 | &Тест 42 | Процедура ПроверкаОтсутствияХранилища() Экспорт 43 | 44 | ИмяНесуществующегоХранилища = "UnknownRepo"; 45 | 46 | ХранилищеСуществует = МенеджерХранилищ.ХранилищеСуществует(АдресХранилища, ИмяНесуществующегоХранилища, ВерсияПлатформы); 47 | 48 | Ожидаем.Что(ХранилищеСуществует).ЕстьЛожь(); 49 | 50 | КонецПроцедуры 51 | 52 | &Тест 53 | Процедура ПроверитьСозданиеХранилища() Экспорт 54 | 55 | Пользователь = "Администратор"; 56 | Попытка 57 | Результат = МенеджерХранилищ.НовоеХранилище1C(АдресХранилища, ИмяХранилища, ВерсияПлатформы, 58 | Пользователь, ПарольПоУмолчанию); 59 | Исключение 60 | Результат = ""; 61 | КонецПопытки; 62 | 63 | Ожидаем.Что(Результат).Равно(ИмяХранилища); 64 | 65 | КонецПроцедуры 66 | 67 | &Тест 68 | Процедура ПроверкаПодключения() Экспорт 69 | Пользователь = "Администратор"; 70 | 71 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 72 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 73 | Ожидаем.Что(МенеджерХранилища.АвторизацияПройдена()).ЕстьИстина(); 74 | 75 | МенеджерХранилища.Подключиться(Пользователь, "12345", ИмяХранилища); 76 | Ожидаем.Что(МенеджерХранилища.АвторизацияПройдена()).ЕстьЛожь(); 77 | 78 | КонецПроцедуры 79 | 80 | &Тест 81 | Процедура СписокПользователей() Экспорт 82 | 83 | Пользователь = "Администратор"; 84 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 85 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 86 | СписокПользователей = МенеджерХранилища.СписокПользователей(); 87 | 88 | Ожидаем.Что(СписокПользователей.Количество()).Больше(0); 89 | 90 | КонецПроцедуры 91 | 92 | &Тест 93 | Процедура НайтиПользователя() Экспорт 94 | 95 | Пользователь = "Администратор"; 96 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 97 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 98 | 99 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(Пользователь); 100 | Ожидаем.Что(ПользовательХранилища).Существует(); 101 | Ожидаем.Что(ПользовательХранилища.Имя).Равно(Пользователь); 102 | 103 | КонецПроцедуры 104 | 105 | &Тест 106 | Процедура СоздатьПользователя() Экспорт 107 | 108 | Пользователь = "Администратор"; 109 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 110 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 111 | 112 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 113 | Роль = РолиХранилища.Разработчик; 114 | МенеджерХранилища.СоздатьПользователя(ИмяПользователя, ПарольПоУмолчанию, Роль); 115 | 116 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 117 | Ожидаем.Что(ПользовательХранилища).Существует(); 118 | Ожидаем.Что(ПользовательХранилища.Имя).Равно(ИмяПользователя); 119 | Ожидаем.Что(ПользовательХранилища.Роль).Равно(Роль); 120 | 121 | КонецПроцедуры 122 | 123 | &Тест 124 | Процедура ПроверитьУстановкуРолей() Экспорт 125 | 126 | Пользователь = "Администратор"; 127 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 128 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 129 | 130 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 131 | ПроверитьРольПользователя(МенеджерХранилища, ИмяПользователя, РолиХранилища.ТолькоПросмотр); 132 | 133 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 134 | ПроверитьРольПользователя(МенеджерХранилища, ИмяПользователя, РолиХранилища.Разработчик); 135 | 136 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 137 | ПроверитьРольПользователя(МенеджерХранилища, ИмяПользователя, РолиХранилища.РазработчикРасширенный); 138 | 139 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 140 | ПроверитьРольПользователя(МенеджерХранилища, ИмяПользователя, РолиХранилища.Администратор); 141 | 142 | КонецПроцедуры 143 | 144 | &Тест 145 | Процедура УдалитьПользователя() Экспорт 146 | 147 | Пользователь = "Администратор"; 148 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 149 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 150 | 151 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 152 | МенеджерХранилища.СоздатьПользователя(ИмяПользователя, ПарольПоУмолчанию, РолиХранилища.Разработчик); 153 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 154 | 155 | МенеджерХранилища.УдалитьПользователя(ПользовательХранилища.Идентификатор); 156 | 157 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 158 | Ожидаем.Что(ПользовательХранилища.Имя).Равно(ИмяПользователя); 159 | Ожидаем.Что(ПользовательХранилища.Удален).ЕстьИстина(); 160 | 161 | КонецПроцедуры 162 | 163 | &Тест 164 | Процедура ВосстановитьПользователя() Экспорт 165 | 166 | Пользователь = "Администратор"; 167 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 168 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 169 | 170 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 171 | МенеджерХранилища.СоздатьПользователя(ИмяПользователя, ПарольПоУмолчанию, РолиХранилища.Разработчик); 172 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 173 | 174 | МенеджерХранилища.УдалитьПользователя(ПользовательХранилища.Идентификатор); 175 | 176 | МенеджерХранилища.ВосстановитьПользователя(ПользовательХранилища.Идентификатор); 177 | 178 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 179 | Ожидаем.Что(ПользовательХранилища.Имя).Равно(ИмяПользователя); 180 | Ожидаем.Что(ПользовательХранилища.Удален).ЕстьЛожь(); 181 | 182 | КонецПроцедуры 183 | 184 | &Тест 185 | Процедура ПроверитьОбновлениеПользователей() Экспорт 186 | 187 | Пользователь = "Администратор"; 188 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 189 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 190 | 191 | ИмяПользователя = "user_" + Новый УникальныйИдентификатор(); 192 | МенеджерХранилища.СоздатьПользователя(ИмяПользователя, ПарольПоУмолчанию, РолиХранилища.Разработчик); 193 | 194 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 195 | 196 | ПользовательХранилища.Пароль = "12345"; 197 | ХешПароля = Вспомогательный.ХешированныйПароль(ПользовательХранилища.Пароль); 198 | ПользовательХранилища.Роль = РолиХранилища.Администратор; 199 | МенеджерХранилища.ОбновитьПользователяХранилища(ПользовательХранилища); 200 | 201 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 202 | Ожидаем.Что(ПользовательХранилища.Имя).Равно(ИмяПользователя); 203 | Ожидаем.Что(ПользовательХранилища.ХешПароля).Равно(ХешПароля); 204 | Ожидаем.Что(ПользовательХранилища.Роль).Равно(РолиХранилища.Администратор); 205 | 206 | КонецПроцедуры 207 | 208 | Процедура ПроверитьРольПользователя(МенеджерХранилища, ИмяПользователя, Роль) 209 | 210 | МенеджерХранилища.СоздатьПользователя(ИмяПользователя, ПарольПоУмолчанию, Роль); 211 | 212 | ПользовательХранилища = МенеджерХранилища.НайтиПользователя(ИмяПользователя); 213 | Ожидаем.Что(ПользовательХранилища).Существует(); 214 | Ожидаем.Что(ПользовательХранилища.Имя).Равно(ИмяПользователя); 215 | Ожидаем.Что(ПользовательХранилища.Роль).Равно(Роль); 216 | 217 | КонецПроцедуры 218 | 219 | &Тест 220 | Процедура ПроверитьСписокВерсий() Экспорт 221 | 222 | Пользователь = "Администратор"; 223 | МенеджерХранилища = Новый КлиентХранилища(АдресХранилища, ВерсияПлатформы); 224 | МенеджерХранилища.Подключиться(Пользователь, ПарольПоУмолчанию, ИмяХранилища); 225 | 226 | ВерсииХранилища = МенеджерХранилища.СписокВерсий(); 227 | Ожидаем.Что(ВерсииХранилища.Количество()).БольшеИлиРавно(1); 228 | 229 | КонецПроцедуры 230 | 231 | Процедура Инициализация() 232 | 233 | ИмяХранилища = "newrepo1" + (Новый УникальныйИдентификатор()); 234 | ВерсияПлатформы = "8.3.12.1855"; 235 | АдресХранилища = "http://localhost:5000/repo/repo.1ccr"; 236 | ПарольПоУмолчанию = "1"; 237 | 238 | КонецПроцедуры 239 | 240 | Инициализация(); -------------------------------------------------------------------------------- /tests/Тест_ОбработкаXML.os: -------------------------------------------------------------------------------- 1 | #Использовать "../src" 2 | #Использовать asserts 3 | 4 | &Тест 5 | Процедура Тест() Экспорт 6 | 7 | ПутьКФайлу = "./tests/fixtures/xml/call_exception.xml"; 8 | Результат = ОбработкаXML.ПрочитатьОтчетИзФайла(ПутьКФайлу); 9 | Ожидаем.Что(Результат.ЕстьОшибка).ЕстьИстина(); 10 | Ожидаем.Что(Результат.СодержаниеОшибки).Заполнено(); 11 | 12 | ПутьКФайлу = "./tests/fixtures/xml/call_return.xml"; 13 | Результат = ОбработкаXML.ПрочитатьОтчетИзФайла(ПутьКФайлу); 14 | Ожидаем.Что(Результат.ЕстьОшибка).ЕстьЛожь(); 15 | Ожидаем.Что(Результат.СодержаниеОшибки).ЕстьНеопределено(); 16 | КонецПроцедуры --------------------------------------------------------------------------------