├── .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 | [](https://github.com/otymko/crs-api/releases)
4 | [](https://open.checkbsl.org/dashboard?id=crs-api)
5 | [](https://open.checkbsl.org/dashboard?id=crs-api)
6 | [](https://open.checkbsl.org/dashboard?id=crs-api)
7 | [](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 | КонецПроцедуры
--------------------------------------------------------------------------------