├── .gitignore ├── LICENSE ├── README.md ├── precommit ├── README.md ├── copy-to-hook.cmd ├── ibService │ └── 1Cv8.1CD ├── post-merge ├── pre-commit ├── tools │ └── v8unpack.exe ├── v8Reader │ ├── LICENSE │ ├── README.md │ ├── V8Reader.epf │ ├── history.txt │ └── releaseCheck.txt └── v8files-extractor.os ├── scripts ├── compile.cmd └── decompile.cmd ├── src ├── integration-1c-redmine │ ├── Form │ │ ├── Форма │ │ │ ├── form │ │ │ └── module.bsl │ │ ├── ФормаЗадачи │ │ │ ├── form │ │ │ └── module.bsl │ │ ├── ФормаНастройкиПанелиПользователя │ │ │ ├── form │ │ │ └── module.bsl │ │ ├── ФормаРедактирования │ │ │ ├── form │ │ │ └── module.bsl │ │ └── ФормаУправляемая │ │ │ └── Форма.bsl │ ├── ObjectModule.bsl │ ├── maps.txt │ ├── renames.txt │ ├── und │ │ ├── 15593028-0724-4d87-ad5a-987baebb04f3 │ │ ├── 37e2d88c-1b48-4718-9cdc-bf2072e0cd1e │ │ ├── 37e2d88c-1b48-4718-9cdc-bf2072e0cd1e.0 │ │ ├── 60101dac-fdfa-42a6-9bfc-b08a18a5c615 │ │ ├── 60101dac-fdfa-42a6-9bfc-b08a18a5c615.0 │ │ ├── 691846bc-b4a1-4fb1-a914-470f4dee8df8 │ │ ├── 6a652304-4c72-4f42-b961-b4d4c0dac3bd │ │ ├── 6a652304-4c72-4f42-b961-b4d4c0dac3bd.0 │ │ ├── b1f79ef2-4d8e-4108-a233-00bb25b18666 │ │ ├── c0af406c-58c2-4d78-9d7b-80c451ca5647 │ │ ├── c0af406c-58c2-4d78-9d7b-80c451ca5647.0 │ │ ├── c41d4d58-338d-475e-9fee-433707457d2c │ │ ├── c41d4d58-338d-475e-9fee-433707457d2c.0 │ │ ├── ceaee0d2-5bce-4169-b6ad-905fc83870ef │ │ ├── copyinfo │ │ ├── d8966fa6-1f9f-4801-9127-a4dfcc3c7b72 │ │ ├── fb4f8a6b-158a-4798-a08a-cc7cf6f09f01.0 │ │ │ └── info │ │ ├── root │ │ ├── version │ │ └── versions │ └── Макеты │ │ ├── redmine_32x32_png.txt │ │ ├── showdown_min_js.txt │ │ ├── textile_js.txt │ │ ├── ИнтегрироватьВирПортативные.mxl │ │ └── ИнтегрироватьВирПортативные_mxl.txt └── tests │ └── tests_integration-1c-redmine │ ├── ObjectModule.bsl │ ├── maps.txt │ ├── renames.txt │ └── und │ ├── 3aa77920-2f32-4f97-9c57-fd85a281aa0a │ ├── copyinfo │ ├── d8de7525-5865-455d-98c1-87352900fec1.0 │ └── info │ ├── root │ ├── version │ └── versions └── tests └── settings_.json /.gitignore: -------------------------------------------------------------------------------- 1 | integration-1c-redmine.epf 2 | 3 | /tests/tests_integration-1c-redmine.epf 4 | /tests/settings.json 5 | 6 | /precommit/v8Reader/V8Reader.epf 7 | /precommit/*.log 8 | 9 | /scripts/deploy.cmd 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # integration-1c-redmine 2 | Внешняя обработка для 1С:Предприятия 8 - "клиент" для работы с системой управления проектами "Redmine" 3 | 4 | // TO DO 5 | Описание обработки 6 | -------------------------------------------------------------------------------- /precommit/README.md: -------------------------------------------------------------------------------- 1 | ## Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git 2 | 3 | [![Join the chat at https://gitter.im/xDrivenDevelopment/precommit1c](https://badges.gitter.im/xDrivenDevelopment/precommit1c.svg)](https://gitter.im/xDrivenDevelopment/precommit1c?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам 4 | 5 | ### Что к чему 6 | ---- 7 | * v8files-extractor.os - скрипт для OneScript, получающий список помещаемых файлов при коммите, фильтрующий по расширению только внешние отчёты/обработки и запускающий внешнюю обработку для распаковки этих файлов. Так же позволяет собирать обработки из полученных исходников. 8 | * [V8Reader.epf](http://infostart.ru/public/106310/) - внешняя обработка 1С, которая с помощью [v8unpack](http://svn2.assembla.com/svn/V8Unpack/track/) разбирает внешние обработки, определяет нормальные наименования для каталогов форм, файлов модулей объектов и т. д. и раскладывает их в нормальную структуру папок. 9 | * ibService - сервисная база данных на 1С для запуска V8Reader.epf 10 | * pre-commit - собственно командный файл, вызываемый git перед каждым помещением. Выполняет роль простой запускалки скрипта v8files-extractor.os 11 | 12 | ### Установка 13 | 14 | 1. Зависимости: 15 | * OneScript http://oscript.io/ 16 | * установленная платформа 1С:Предприятие 8 17 | * git 18 | * в случае запуска из под wine необходим msscriptcontrol 19 | * Библиотеки [oscript-library]( https://github.com/EvilBeaver/oscript-library) 20 | 21 | 2. По умолчанию считается, что пути к oscript.exe и git.exe находятся в переменной path, иначе необходимо указать явный путь в файле pre-commit 22 | 23 | 3. Путь хранения исходных текстов разобранных обработок по умолчанию используется как **src** (для обеспечения совместимости со старыми версиями обработки), однако его можно переназначить в файле `pre-commit` 24 | 25 | #### Установка через zip-архив 26 | 27 | 1. Скачайте zip-архив precommit1c.zip со страницы [последнего релиза](https://github.com/xDrivenDevelopment/precommit1c/releases/latest). 28 | 29 | 2. Содержмое архива необходимо разархивировать в каталог .git/hooks/ вашего проекта. 30 | *Примечание:* каталог .git по умолчанию скрыт. 31 | В итоге у вас должна получиться следующая структура каталога: 32 | ``` 33 | .git\ 34 | hooks\ 35 | pre-commit 36 | V8Reader 37 | tools 38 | ibService 39 | v8files-extractor.os 40 | ``` 41 | 42 | #### Установка через git clone 43 | 44 | 1. Склонируйте репозиторий `precommit1c` в удобное место. 45 | 46 | 2. После клонирования репозитория необходимо инициализировать используемые подмодули. 47 | Откройте командую строку и выполните команды: 48 | ```cmd 49 | cd путь/к/репозиторию/precommit1c 50 | git submodule update --init --recursive 51 | ``` 52 | 53 | 3. Cодержимое каталога необходимо скопировать в каталог .git/hooks/ вашего проекта. 54 | *Примечание:* каталог .git по умолчанию скрыт. 55 | В итоге у вас должна получиться следующая структура каталога: 56 | ``` 57 | .git\ 58 | hooks\ 59 | pre-commit 60 | V8Reader 61 | tools 62 | ibService 63 | v8files-extractor.os 64 | ``` 65 | 66 | ## Запуск 67 | 68 | После установки достаточно для проверки сделать commit для любого файла epf/erf, и в вашем репозитории автоматически должна создаться папка *src*, полностью повторяющая структуру проекта, изменённые или добавленные файлы распакуются в папки с аналогичными наименованиями. 69 | 70 | ## Командная строка запуска OneScript 71 | 72 | ``` 73 | oscript v8files-extractor.os ? 74 | 75 | Утилита сборки/разборки внешних файлов 1С 76 | 77 | Параметры командной строки: 78 | --decompile inputPath outputPath 79 | Разбор файлов на исходники 80 | --help 81 | Показ этого экрана 82 | --git-precommit outputPath [--remove-orig-bin-files] 83 | Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс 84 | Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git 85 | --compile inputPath outputPath [--recursive] 86 | Собрать внешний файл/обработку. 87 | Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога 88 | ``` 89 | 90 | ## Ограничения 91 | 92 | Дополнительно необходима настройка git для возможности использования кириллических наименований внешних обработок `git config --local core.quotepath false` 93 | 94 | Не стоит называть файлы с разным расширением epf и erf одинаковыми именами - каталоги с исходниками создаются только по наименованию без учёта расширения и возможен конфликт имен. 95 | 96 | ## Что внутри 97 | 98 | Как это работает: v8files-extractor.os полностью повторяет иерархию папок относительно корня репозитория только в папке SRC (от слова source), для каждой изменённой внешней обработки создаётся своя папка и туда с помощью v8unpack распаковывается помещаемая обработка, с помощью v8reader определяются наименования макетов, форм, модуля обработки и переименовываются, переименования сохраняются в служебном файле renames.txt, те файлы, которые невозможно определить или же носят чисто служебный характер, переносятся в каталог *und* 99 | 100 | ## Лицензия 101 | 102 | Лицензировано на условиях Apache License 2.0. Смотрите файл [LICENSE.md](LICENSE.md) в корневом каталоге репозитория. 103 | -------------------------------------------------------------------------------- /precommit/copy-to-hook.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | @echo copy current version repo 4 | 5 | xcopy .\ibService .\..\.git\hooks\ibService\ /Y /E /F 6 | xcopy .\scripts .\..\.git\hooks\scripts\ /Y /E /F 7 | xcopy .\pre-commit .\..\.git\hooks\ /Y /F 8 | xcopy .\v8files-extractor.os .\..\.git\hooks\ /Y /F 9 | 10 | mkdir .\..\.git\hooks\v8Reader 11 | xcopy .\v8Reader\V8Reader.epf .\..\.git\hooks\v8Reader\ /Y /F 12 | 13 | mkdir .\..\.git\hooks\tools 14 | xcopy .\tools\v8unpack.exe .\..\.git\hooks\tools\ /Y /F 15 | 16 | cd .\..\ 17 | 18 | echo storage localization to use Cyrillic characters 19 | git config --local core.quotepath false 20 | 21 | echo init used submodules 22 | git submodule update --init --recursive 23 | 24 | 25 | -------------------------------------------------------------------------------- /precommit/ibService/1Cv8.1CD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andranik-ss/integration-1c-redmine/e2d523f07539277159c864aa1bb565de5bc1c462/precommit/ibService/1Cv8.1CD -------------------------------------------------------------------------------- /precommit/post-merge: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo "Start hooks after git merge or git pull for compile ert, epf files" 3 | oscript .git/hooks/v8files-extractor.os --compile ./src ./ --recursive -------------------------------------------------------------------------------- /precommit/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo "Start hooks before commit for v8unpack erf and epf" 3 | #python.exe .git/hooks/pyv8unpack.py --g --index 4 | oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src --remove-orig-bin-files 5 | -------------------------------------------------------------------------------- /precommit/tools/v8unpack.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andranik-ss/integration-1c-redmine/e2d523f07539277159c864aa1bb565de5bc1c462/precommit/tools/v8unpack.exe -------------------------------------------------------------------------------- /precommit/v8Reader/LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /precommit/v8Reader/README.md: -------------------------------------------------------------------------------- 1 | v8Reader 2 | ======== 3 | 4 | [Исходный адрес публикации](http://infostart.ru/public/106310/) 5 | 6 | Обработка, позволяющая анализировать и сравнивать файлы отчетов, обработок, конфигураций и обновлений. 7 | 8 | Имеет мощные инструменты по анализу форм, ролей и ограничений доступа. 9 | 10 | Логическое продолжение публикаций http://infostart.ru/public/97194/ и http://infostart.ru/public/69976/ 11 | 12 | вызванное обсуждением в комментариях (в частности, этим комментарием), с попыткой объединить в себя параллельное направление разработки, обозначенное в публикациях: 13 | 14 | [Декомпиляция и анализ форм с генерацией кода формы от MRAK](http://infostart.ru/profile/9094/) 15 | 16 | [Сравнение объектов и форм метаданных (очередная декомпиляция и анализ форм) от alexer](http://infostart.ru/profile/31755/) 17 | 18 | [Деструктивный анализ формы от asady](http://infostart.ru/profile/6841/) 19 | 20 | [Декомпилятор форм от Sverkalov](http://infostart.ru/profile/18041/) 21 | 22 | И, наконец, их обобщенным и логичноструктурированным продолжением - 23 | 24 | [Декомпиляция элементов формы для 8.2 для обычных форм (не управляемых) от Istur](http://infostart.ru/profile/28574/) - 25 | 26 | всем рекомендую (только ошибки исправить надо - письмо о них было написано - никакой реакции) 27 | 28 | Для более тщательного анализа форм был использован материал, предложенный brix8x в этом комментарии, а также развитие этой идеи, предложенное tormozit в публикации http://infostart.ru/public/57431/ 29 | 30 | Для придания "рюшечек" использовалась идея, предложенная Шепотом теней в публикации http://infostart.ru/public/59581/ 31 | 32 | Ну, и, как обычно... использовалась программа V8Unpack от disa_da 33 | 34 | 35 | v8Reader 36 | -------------------------------------------------------------------------------- /precommit/v8Reader/V8Reader.epf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andranik-ss/integration-1c-redmine/e2d523f07539277159c864aa1bb565de5bc1c462/precommit/v8Reader/V8Reader.epf -------------------------------------------------------------------------------- /precommit/v8Reader/history.txt: -------------------------------------------------------------------------------- 1 | 1.12 2 | 3 | Доработана совместимость регулярок с внутренним представлением 8.3.6. 4 | 5 | Реализован программный интерфейс для открытия сравнения файлов из стороннего кода 1С – в модуле обработки экспортная процедура ОткрытьСравнение(ПутьФайла1,ПутьФайла2). Этот интерфейс позволяет использовать весь функционал проекта v8diff – можно сравнивать обработки, отчеты, конфигурации, файлы mxl, файлы форм и сериализованные в XML табличные документы, выгруженные платформой 8.3. Для всего остального будет открываться произвольное текстовое сравнение. 6 | 7 | Добавлена обработка ключа запуска convert-mxl2txt для скрипта precommit. 8 | // Пример строки запуска для precommit - "decompile;pathtocf;E:\ПутьКФайлуКоторыйНадоРазобратьНаИсходники;pathout;E:\ПутьКПапкеИсходников;convert-mxl2txt;shutdown" 9 | В случае запуска скрипта precommit с ключом convert-mxl2txt для файлов табличных документов дополнительно создаются текстовые аналоги с постфиксом *_mxl.txt. 10 | 11 | Используется новая версия V8Unpack (by baton_pk) – исправлены ошибки распаковки файлов form, ssf и cfu. Главное преимущество новой версии – возможность распаковки конфигураций большого объема (например ERP2.0, которую V8Unpack2.0 не распаковывает) без ущерба для производительности. 12 | 13 | Мелкие доработки эргономики вывода сравнения временных файлов. 14 | 15 | [Исправлены ошибки в 1.12](https://github.com/xDrivenDevelopment/v8Reader/issues?q=milestone%3A1.12+is%3Aclosed) 16 | 17 | 1.11 18 | 19 | В таблице структурного сравнения модулей изменена сортировка по изменениям - неизмененные строки выводятся в самом низу. 20 | 21 | Реализована совместимость регулярок реквизитов и табличных частей с внутренним представлением 8.3.6 (в первом приближении - возможно, позже потребуются правки). В управляемой форме в число допустимых видов поля формы добавлен новый вид - Поле планировщика. 22 | 23 | [Исправлены ошибки в 1.11](https://github.com/xDrivenDevelopment/v8Reader/issues?q=milestone%3A1.11+is%3Aclosed) 24 | 25 | 1.10 26 | 27 | Увеличение скорости распаковки порядка 20% 28 | В макет V8Unpack помещена новая версия, собранная Сергеем Батановым aka dmpas 29 | https://build.batanov.me/job/v8unpack-win/label=mingw32/lastSuccessfulBuild/artifact/bin/Release/v8unpack.exe 30 | Новая версия не требует дополнительных библиотек + прирост скорости распаковки по сравнению с версией V8Unpack2.0 порядка 20% 31 | 32 | В V8Reader была добавлена возможность разбора обработок в структуру папок с исходниками, имеющими человекопонятные имена. 33 | Эта автоматизация была реализована в рамках проекта precommit, представляющего собой скрипт, который запускает этот разбор при каждом коммите в систему контроля версий Git. 34 | 35 | Также в рамках проекта diff1C реализован скрипт, запускающий V8Reader для сравнения выгруженных с помощью стандартной выгрузки 8.3 обычных форм и табличных документов в формате xml. 36 | Попробуйте, это очень удобно! 37 | 38 | 1) https://github.com/xDrivenDevelopment/v8Reader/issues/9 - из командной строки через батник diff-1c-cf.bat из проекта v8Diff можно сравнить XML-файлы табличных документов из выгрузки 8.3 39 | 2) https://github.com/xDrivenDevelopment/v8Reader/issues/2 - реализована проверка версии через github API (проверяется содержимое поля data из страницы https://api.github.com/repos/bambr1975/v8reader/commits?per_page=1 40 | 3) Оптимизированы регулярки для корректного разбора реквизитов и табличных частей объектов метаданных 41 | 4) Исправлен разбор управляемых форм (иногда выскакивала ошибка разбора) 42 | 5) Изменилась логика сравнения в модулях (теперь строки структурного сравнения сравниваются без учета пустого пространства) 43 | 6) Логика построения дерева обычных форм отвязана от идеи деструктивного анализа – иерархия элементов строится на основе внутреннего представления 44 | 7) В управляемых формах реализован разбор командного интерфейса. 45 | 46 | Добавлена возможность корректной обработки объектов платформы 8.3. 47 | 48 | Исправлены различные ошибки 49 | 50 | 1.9 51 | 52 | Реализовано требование https://github.com/xDrivenDevelopment/v8Reader/issues/6 53 | Теперь можно увидеть различия в модулях, если в методе модуля исправлен регистр буквы. 54 | 55 | Реализованы требования 56 | 1) https://github.com/xDrivenDevelopment/v8Reader/issues/1 57 | 2) https://github.com/xDrivenDevelopment/v8Diff/issues/4 58 | 3) https://github.com/xDrivenDevelopment/v8Diff/issues/3 59 | 60 | - исправлена маленькая ошибка формирования синонимов форм в конфигурациях 61 | - добавлены работа с http-сервисами, 62 | - исправлена совместимость со старыми версиями платформ 8.2, 63 | - исправлена картинка строк для отображения http-сервисов, 64 | - удаляются пустые ветки добавленных метаданных (HTTP-сервисов и определяемых типов) 65 | 66 | 27.01.2012 - на infostart.ru опубликована первая версия v8Reader -------------------------------------------------------------------------------- /precommit/v8Reader/releaseCheck.txt: -------------------------------------------------------------------------------- 1 | Перед выпуском релиза нужно выполнить операции по следующему чек-листу: 2 | - Изменить номер версии в методе Версия() модуля обработки V8Reader.epf 3 | - Выполнить все тесты из папки Tests. Ошибок быть не должно. 4 | - Описать все изменения версии в файле history.txt 5 | - Убедиться, что в задачах/issues на Гитхабе для нового релиза/milestone не осталось невыполненных задач. 6 | - Если все-таки есть незавершенные задачи, их нужно убрать из нового релиза/milestone. -------------------------------------------------------------------------------- /precommit/v8files-extractor.os: -------------------------------------------------------------------------------- 1 | // Copyright 2016 xDrivenDevelopment 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | #Использовать cmdline 16 | #Использовать logos 17 | #Использовать tempfiles 18 | #Использовать asserts 19 | #Использовать v8runner 20 | #Использовать strings 21 | 22 | Перем Лог; 23 | Перем КодВозврата; 24 | Перем мВозможныеКоманды; 25 | Перем ЭтоWindows; 26 | 27 | Функция Версия() Экспорт 28 | 29 | Версия = "2.0.4"; 30 | 31 | Возврат "v" + Версия; 32 | 33 | КонецФункции 34 | 35 | Функция ВозможныеКоманды() 36 | 37 | Если мВозможныеКоманды = Неопределено Тогда 38 | мВозможныеКоманды = Новый Структура; 39 | мВозможныеКоманды.Вставить("Декомпилировать", "--decompile"); 40 | мВозможныеКоманды.Вставить("Помощь", "--help"); 41 | мВозможныеКоманды.Вставить("ОбработатьИзмененияИзГит", "--git-precommit"); 42 | мВозможныеКоманды.Вставить("Компилировать", "--compile"); 43 | КонецЕсли; 44 | 45 | Возврат мВозможныеКоманды; 46 | 47 | КонецФункции 48 | 49 | Функция ЗапускВКоманднойСтроке() 50 | Лог_cmdline = Логирование.ПолучитьЛог("oscript.lib.cmdline"); 51 | Лог_cmdline.УстановитьУровень(УровниЛога.Отладка); 52 | Лог_cmdline.Закрыть(); 53 | 54 | ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); 55 | Лог_cmdline.ДобавитьСпособВывода(ВыводПоУмолчанию); 56 | 57 | Аппендер = Новый ВыводЛогаВФайл(); 58 | Аппендер.ОткрытьФайл(ОбъединитьПути(КаталогПроекта(), ИмяСкрипта()+".cmdline.log")); 59 | Лог_cmdline.ДобавитьСпособВывода(Аппендер); 60 | 61 | КодВозврата = 0; 62 | 63 | Если ТекущийСценарий().Источник <> СтартовыйСценарий().Источник Тогда 64 | Возврат Ложь; 65 | КонецЕсли; 66 | 67 | Лог.Информация("precommit1c " + Версия() + Символы.ПС); 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 | ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"], Аргументы.ЗначенияПараметров["--remove-orig-bin-files"]); 97 | ИначеЕсли Команда = ВозможныеКоманды().Компилировать Тогда 98 | Компилировать( 99 | Аргументы.ЗначенияПараметров["ПутьВходящихДанных"], 100 | Аргументы.ЗначенияПараметров["ВыходнойКаталог"], 101 | Аргументы.ЗначенияПараметров["--recursive"] 102 | ); 103 | КонецЕсли; 104 | 105 | Исключение 106 | Лог.Ошибка(ОписаниеОшибки()); 107 | КодВозврата = 1; 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 | Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--remove-orig-bin-files"); 136 | Парсер.ДобавитьКоманду(ОписаниеКоманды); 137 | 138 | КонецПроцедуры 139 | 140 | Процедура ДобавитьОписаниеКомандыКомпилировать(Знач Парсер) 141 | ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().Компилировать); 142 | Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ПутьВходящихДанных"); 143 | Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ВыходнойКаталог"); 144 | Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--recursive"); 145 | Парсер.ДобавитьКоманду(ОписаниеКоманды); 146 | КонецПроцедуры 147 | 148 | Процедура Инициализация() 149 | СистемнаяИнформация = Новый СистемнаяИнформация; 150 | ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; 151 | 152 | Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor"); 153 | Лог.Закрыть(); 154 | //Лог.УстановитьУровень(УровниЛога.Отладка); 155 | 156 | ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); 157 | Лог.ДобавитьСпособВывода(ВыводПоУмолчанию); 158 | 159 | Аппендер = Новый ВыводЛогаВФайл(); 160 | Аппендер.ОткрытьФайл(ОбъединитьПути(КаталогПроекта(), ИмяСкрипта()+".log")); 161 | Лог.ДобавитьСпособВывода(Аппендер); 162 | КонецПроцедуры 163 | 164 | 165 | ///////////////////////////////////////////////////////////////////////////// 166 | // РЕАЛИЗАЦИЯ КОМАНД 167 | 168 | Процедура Декомпилировать(Знач Путь, Знач КаталогВыгрузки) Экспорт 169 | Файл = Новый Файл(Путь); 170 | Если Файл.ЭтоКаталог() Тогда 171 | РазобратьКаталог(Файл, КаталогВыгрузки, Файл.ПолноеИмя); 172 | Иначе 173 | РазобратьФайл(Файл, КаталогВыгрузки, Файл.Путь); 174 | КонецЕсли; 175 | КонецПроцедуры 176 | 177 | Процедура РазобратьКаталог(Знач ОбъектКаталога, Знач КаталогВыгрузки, Знач КаталогКорень) Экспорт 178 | ПутьКаталога = ОбъектКаталога.ПолноеИмя; 179 | 180 | ОтносительныйПутьКаталога = ПолучитьОтносительныйПутьФайла(КаталогКорень, ПутьКаталога); 181 | ОтносительныйПутьКаталога = ?(ПустаяСтрока(ОтносительныйПутьКаталога), ПутьКаталога, ОтносительныйПутьКаталога); 182 | Лог.Информация(СтрШаблон("Подготовка выгрузки каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень)); 183 | 184 | ИмяКаталогаВыгрузки = Новый Файл(КаталогВыгрузки).Имя; 185 | 186 | Файлы = НайтиФайлы(ПутьКаталога, ПолучитьМаскуВсеФайлы()); 187 | Для Каждого Файл из Файлы Цикл 188 | Если Файл.ЭтоКаталог() Тогда 189 | 190 | РазобратьКаталог(Новый Файл(Файл.ПолноеИмя), КаталогВыгрузки, КаталогКорень); 191 | 192 | ИначеЕсли ТипФайлаПоддерживается(Файл) Тогда 193 | Лог.Информация(СтрШаблон("Подготовка выгрузки файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); 194 | 195 | РазобратьФайлВнутр(Файл, КаталогВыгрузки, КаталогКорень); 196 | 197 | Лог.Информация(СтрШаблон("Завершена выгрузка файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); 198 | КонецЕсли; 199 | КонецЦикла; 200 | 201 | Лог.Информация(СтрШаблон("Завершена выгрузка каталога %1 в каталог %2, корень %3", ОтносительныйПутьКаталога, КаталогВыгрузки, КаталогКорень)); 202 | КонецПроцедуры 203 | 204 | Функция РазобратьФайл(Знач Файл, Знач КаталогВыгрузки, Знач КаталогКорень = "") Экспорт 205 | ПутьФайла = Файл.ПолноеИмя; 206 | Лог.Информация(СтрШаблон("Проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень)); 207 | 208 | КаталогИсходников = РазобратьФайлВнутр(Файл, КаталогВыгрузки, КаталогКорень); 209 | 210 | Лог.Информация(СтрШаблон("Завершена проверка необходимости выгрузки файла %1 в каталог %2, корень %3", ПутьФайла, КаталогВыгрузки, КаталогКорень)); 211 | 212 | Возврат КаталогИсходников; 213 | 214 | КонецФункции 215 | 216 | Функция ТипФайлаПоддерживается(Файл) 217 | Если ПустаяСтрока(Файл.Расширение) Тогда 218 | Возврат Ложь; 219 | КонецЕсли; 220 | 221 | Поз = Найти(".epf,.erf,", Файл.Расширение+","); 222 | Возврат Поз > 0; 223 | 224 | КонецФункции 225 | 226 | Функция РазобратьФайлВнутр(Знач Файл, Знач КаталогВыгрузки, Знач КаталогКорень) 227 | 228 | ПутьФайла = Файл.ПолноеИмя; 229 | Если Не ТипФайлаПоддерживается(Файл) Тогда 230 | ВызватьИсключение "Тип файла """+Файл.Расширение+""" не поддерживается"; 231 | КонецЕсли; 232 | 233 | Ожидаем.Что(Файл.Существует(), "Файл " + ПутьФайла + " должен существовать").ЭтоИстина(); 234 | 235 | ОтносительныйПутьКаталогаФайла = ПолучитьОтносительныйПутьФайла(КаталогКорень, ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения)); 236 | Лог.Отладка("ОтносительныйПутьКаталогаФайла <"+ОтносительныйПутьКаталогаФайла+">"); 237 | 238 | ПутьКаталогаИсходников = ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталогаФайла); 239 | Лог.Отладка("ПутьКаталогаИсходников <"+ПутьКаталогаИсходников+">"); 240 | ПапкаИсходников = Новый Файл(ПутьКаталогаИсходников); 241 | 242 | ОбеспечитьПустойКаталог(ПапкаИсходников); 243 | ЗапуститьРаспаковку(Файл, ПапкаИсходников); 244 | 245 | Возврат ПапкаИсходников.ПолноеИмя; 246 | 247 | КонецФункции 248 | 249 | Функция ПолучитьОтносительныйПутьФайла(КаталогКорень, ВнутреннийКаталог) 250 | Если ПустаяСтрока(КаталогКорень) Тогда 251 | Возврат ""; 252 | КонецЕсли; 253 | 254 | ФайлКорень = Новый Файл(КаталогКорень); 255 | ФайлВнутреннийКаталог = Новый Файл(ВнутреннийКаталог); 256 | Рез = СтрЗаменить(ФайлВнутреннийКаталог.ПолноеИмя, ФайлКорень.ПолноеИмя, ""); 257 | Если Лев(Рез, 1) = "\" Тогда 258 | Рез = Сред(Рез, 2); 259 | КонецЕсли; 260 | Если Прав(Рез, 1) = "\" Тогда 261 | Рез = Лев(Рез, СтрДлина(Рез)-1); 262 | КонецЕсли; 263 | Возврат Рез; 264 | КонецФункции 265 | 266 | Процедура ЗапуститьРаспаковку(Знач Файл, Знач ПапкаИсходников) 267 | 268 | Лог.Отладка("Запускаем распаковку файла"); 269 | 270 | Конфигуратор = Новый УправлениеКонфигуратором(); 271 | КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); 272 | Конфигуратор.КаталогСборки(КаталогВременнойИБ); 273 | 274 | ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); 275 | ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); 276 | ЛогКонфигуратора.Закрыть(); 277 | 278 | Параметры = Конфигуратор.ПолучитьПараметрыЗапуска(); 279 | Параметры[0] = "ENTERPRISE"; 280 | 281 | ПутьV8Reader = ОбъединитьПути(ТекущийСценарий().Каталог, "v8Reader", "V8Reader.epf"); 282 | Лог.Отладка("Путь к V8Reader: " + ПутьV8Reader); 283 | Ожидаем.Что(Новый Файл(ПутьV8Reader).Существует(), "Некорректно установлен V8Reader. Не обнаружен файл <" + ПутьV8Reader + ">").ЭтоИстина(); 284 | 285 | КоманднаяСтрокаV8Reader = СтрЗаменить("/C""decompile;pathtocf;%1;pathout;%2;convert-mxl2txt;ЗавершитьРаботуПосле;""","%1", Файл.ПолноеИмя); 286 | КоманднаяСтрокаV8Reader = СтрЗаменить(КоманднаяСтрокаV8Reader,"%2", ПапкаИсходников.ПолноеИмя); 287 | 288 | Лог.Отладка("Командная строка V8Reader: " + КоманднаяСтрокаV8Reader); 289 | 290 | Параметры.Добавить("/RunModeOrdinaryApplication"); 291 | Параметры.Добавить("/Execute """ + ПутьV8Reader + """"); 292 | Параметры.Добавить(КоманднаяСтрокаV8Reader); 293 | 294 | Конфигуратор.ВыполнитьКоманду(Параметры); 295 | Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды()); 296 | Лог.Отладка("Очищаем каталог временной ИБ"); 297 | 298 | КонецПроцедуры 299 | 300 | Процедура ОбеспечитьПустойКаталог(Знач ФайлОбъектКаталога) 301 | 302 | Если Не ФайлОбъектКаталога.Существует() Тогда 303 | Лог.Отладка("Создаем новый каталог " + ФайлОбъектКаталога.ПолноеИмя); 304 | СоздатьКаталог(ФайлОбъектКаталога.ПолноеИмя); 305 | ИначеЕсли ФайлОбъектКаталога.ЭтоКаталог() Тогда 306 | Лог.Отладка("Очищаем каталог " + ФайлОбъектКаталога.ПолноеИмя); 307 | УдалитьФайлы(ФайлОбъектКаталога.ПолноеИмя, ПолучитьМаскуВсеФайлы()); 308 | Иначе 309 | ВызватьИсключение "Путь " + ФайлОбъектКаталога.ПолноеИмя + " не является каталогом. Выгрузка невозможна"; 310 | КонецЕсли; 311 | 312 | КонецПроцедуры 313 | 314 | 315 | Процедура ВывестиСправку() 316 | Сообщить("Утилита сборки/разборки внешних файлов 1С"); 317 | Сообщить(Версия()); 318 | Сообщить(" "); 319 | Сообщить("Параметры командной строки:"); 320 | Сообщить(" --decompile inputPath outputPath"); 321 | Сообщить(" Разбор файлов на исходники"); 322 | 323 | Сообщить(" --help"); 324 | Сообщить(" Показ этого экрана"); 325 | Сообщить(" --git-precommit outputPath [--remove-orig-bin-files]"); 326 | Сообщить(" Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс"); 327 | Сообщить(" Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git"); 328 | Сообщить(" --compile inputPath outputPath [--recursive]"); 329 | Сообщить(" Собрать внешний файл/обработку."); 330 | Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога"); 331 | КонецПроцедуры 332 | 333 | 334 | Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог, Знач УдалятьФайлыИзИндексаГит) Экспорт 335 | 336 | Если ПустаяСтрока(ВыходнойКаталог) Тогда 337 | ВыходнойКаталог = "src"; 338 | КонецЕсли; 339 | КореньРепо = ТекущийКаталог(); 340 | Лог.Отладка("Текущий каталог " + КореньРепо); 341 | Лог.Отладка("Каталог выгрузки " + ВыходнойКаталог); 342 | 343 | ПроверитьНастройкиРепозитарияГит(); 344 | 345 | ЖурналИзмененийГитСтрокой = ПолучитьЖурналИзмененийГит(); 346 | ИменаФайлов = ПолучитьИменаИзЖурналаИзмененийГит(ЖурналИзмененийГитСтрокой); 347 | 348 | КаталогИсходников = ОбъединитьПути(КореньРепо, ВыходнойКаталог); 349 | СписокНовыхКаталогов = Новый Массив; 350 | Для Каждого ИмяФайла Из ИменаФайлов Цикл 351 | Лог.Отладка("Изучаю файл из журнала git " + ИмяФайла); 352 | ОбработанныйПуть = УбратьКавычкиВокругПути(ИмяФайла); 353 | ПолныйПуть = ОбъединитьПути(КореньРепо, ОбработанныйПуть); 354 | Файл = Новый Файл(ПолныйПуть); 355 | Если ТипФайлаПоддерживается(Файл) Тогда 356 | Лог.Отладка("Получен из журнала git файл " + Файл); 357 | СписокНовыхКаталогов.Добавить(РазобратьФайл(Файл, КаталогИсходников, КореньРепо)); 358 | Если УдалятьФайлыИзИндексаГит Тогда 359 | УдалитьФайлИзИндексаГит(ПолныйПуть); 360 | КонецЕсли; 361 | КонецЕсли; 362 | КонецЦикла; 363 | 364 | ДобавитьИсходникиВГит(СписокНовыхКаталогов); 365 | 366 | КонецПроцедуры 367 | 368 | Процедура УдалитьФайлИзИндексаГит(Знач ПолныйПуть) 369 | Лог.Отладка("Удаляю файл из индекса"); 370 | Вывод = ПолучитьВыводПроцесса("git rm --cached """ + ПолныйПуть + """", КодВозврата); 371 | Лог.Отладка("Вывод git rm --cached: " + Вывод); 372 | Если КодВозврата <> 0 Тогда 373 | ВызватьИсключение "Не удалось удалить файл из журнала изменений git"; 374 | КонецЕсли; 375 | КонецПроцедуры 376 | 377 | Процедура ПроверитьНастройкиРепозитарияГит() Экспорт 378 | Перем КодВозврата; 379 | 380 | КомандаПроверкаСостояния = "git config core.quotepath"; 381 | Лог.Отладка("Выполняю команду "+КомандаПроверкаСостояния); 382 | 383 | Вывод = ПолучитьВыводПроцесса(КомандаПроверкаСостояния, КодВозврата); 384 | Вывод = СокрЛП(Вывод); 385 | Лог.Отладка(" Код возврата " + КодВозврата); 386 | Лог.Отладка(" Вывод команды <" + Вывод + ">"); 387 | Если КодВозврата = 0 И Вывод = "false" Тогда 388 | Возврат; 389 | КонецЕсли; 390 | 391 | ВызватьИсключение "У текущего репозитария не заданы необходимые настройки! 392 | |Выполните команду git config --local core.quotepath false 393 | | 394 | |А еще лучше сделать глобальную настройку git config --global core.quotepath false"; 395 | 396 | КонецПроцедуры 397 | 398 | 399 | Функция ПолучитьЖурналИзмененийГит() 400 | 401 | Перем КодВозврата; 402 | 403 | Вывод = ВыполнитьКомандуГит("git diff-index --name-status --cached HEAD", КодВозврата, Ложь); 404 | Если КодВозврата <> 0 Тогда 405 | Вывод = ВыполнитьКомандуГит("git status --porcelain", КодВозврата, Ложь); 406 | 407 | Если КодВозврата <> 0 Тогда 408 | ВызватьИсключение "Не удалось собрать журнал изменений git"; 409 | КонецЕсли; 410 | 411 | КонецЕсли; 412 | 413 | Возврат Вывод; 414 | 415 | КонецФункции 416 | 417 | Функция ВыполнитьКомандуГит(КомандаГит, КодВозврата = Неопределено, ПроверятьНулевойКодВозврата = Истина) 418 | 419 | Лог.Отладка("Запускаю "+КомандаГит); 420 | Вывод = ПолучитьВыводПроцесса(КомандаГит, КодВозврата); 421 | Лог.Отладка(" Вывод команды гит: " + Вывод); 422 | Если ПроверятьНулевойКодВозврата Тогда 423 | Ожидаем.Что(КодВозврата, "Код возврата `"+КомандаГит+"` должен быть 0, а это не так").Равно(0); 424 | КонецЕсли; 425 | Возврат Вывод; 426 | КонецФункции 427 | 428 | Функция ПолучитьВыводПроцесса(Знач КоманднаяСтрока, КодВозврата) 429 | 430 | // // Это для dev версии 1.0.11 431 | // Процесс = СоздатьПроцесс(КоманднаяСтрока, , Истина,, КодировкаТекста.UTF8); 432 | // Процесс.Запустить(); 433 | // Вывод = ""; 434 | 435 | // Процесс.ОжидатьЗавершения(); 436 | 437 | // Вывод = Вывод + Процесс.ПотокВывода.Прочитать(); 438 | // Вывод = Вывод + Процесс.ПотокОшибок.Прочитать(); 439 | 440 | // КодВозврата = Процесс.КодВозврата; 441 | 442 | ЛогФайл = ВременныеФайлы.НовоеИмяФайла(); 443 | СтрокаЗапуска = "cmd /C """ + КоманднаяСтрока + " > """ + ЛогФайл + """ 2>&1"""; 444 | Лог.Отладка(СтрокаЗапуска); 445 | ЗапуститьПриложение(СтрокаЗапуска,, Истина, КодВозврата); 446 | Лог.Отладка("Код возврата: " + КодВозврата); 447 | ЧтениеТекста = Новый ЧтениеТекста(ЛогФайл, "utf-8"); 448 | Вывод = ЧтениеТекста.Прочитать(); 449 | ЧтениеТекста.Закрыть(); 450 | 451 | Возврат Вывод; 452 | 453 | КонецФункции 454 | 455 | Функция ПолучитьИменаИзЖурналаИзмененийГит(Знач ЖурналИзмененийГит) Экспорт 456 | Лог.Отладка("ЖурналИзмененийГит:"); 457 | МассивИмен = Новый Массив; 458 | // Если Найти(ЖурналИзмененийГит, Символы.ПС) > 0 Тогда 459 | МассивСтрокЖурнала = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ЖурналИзмененийГит, Символы.ПС); 460 | // Иначе 461 | // ЖурналИзмененийГит = СтрЗаменить(ЖурналИзмененийГит, "A"+Символ(0), "A"+" "); 462 | // ЖурналИзмененийГит = СтрЗаменить(ЖурналИзмененийГит, "M"+Символ(0), "M"+" "); 463 | // ЖурналИзмененийГит = СтрЗаменить(ЖурналИзмененийГит, Символ(0), Символы.ПС); 464 | // МассивСтрокЖурнала = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ЖурналИзмененийГит, Символы.ПС); //Символ(0)); 465 | // КонецЕсли; 466 | 467 | Для Каждого СтрокаЖурнала Из МассивСтрокЖурнала Цикл 468 | Лог.Отладка(" <"+СтрокаЖурнала +">"); 469 | СтрокаЖурнала = СокрЛ(СтрокаЖурнала); 470 | СимволИзменений = Лев(СтрокаЖурнала, 1); 471 | Если СимволИзменений = "A" или СимволИзменений = "M" Тогда 472 | ИмяФайла = СокрЛП(Сред(СтрокаЖурнала, 2)); 473 | // ИмяФайла = СтрЗаменить(ИмяФайла, Символ(0), ""); 474 | МассивИмен.Добавить(ИмяФайла); 475 | Лог.Отладка(" В журнале git найдено имя файла <"+ИмяФайла+">"); 476 | КонецЕсли; 477 | КонецЦикла; 478 | Возврат МассивИмен; 479 | КонецФункции 480 | 481 | Процедура ДобавитьИсходникиВГит(Знач СписокНовыхКаталогов) 482 | 483 | Перем КодВозврата; 484 | 485 | Для Каждого Каталог Из СписокНовыхКаталогов Цикл 486 | 487 | Лог.Отладка("Запуск git add для каталога " + Каталог); 488 | Вывод = ПолучитьВыводПроцесса("git add --all " + ОбернутьПутьВКавычки(Каталог), КодВозврата); 489 | Лог.Отладка("Вывод git add: " + Вывод); 490 | Если КодВозврата <> 0 Тогда 491 | Лог.Ошибка(Вывод); 492 | ЗавершитьРаботу(КодВозврата); 493 | КонецЕсли; 494 | 495 | КонецЦикла 496 | 497 | КонецПроцедуры 498 | 499 | Функция Компилировать(Знач Путь, Знач КаталогВыгрузки, Знач Рекурсивно = Ложь) Экспорт 500 | 501 | ПутьКИсходникам = ОбъединитьПути(ТекущийКаталог(), Путь); 502 | 503 | ПапкаИсходников = Новый Файл(ПутьКИсходникам); 504 | 505 | Ожидаем.Что(ПапкаИсходников.Существует(), "Папка " + ПутьКИсходникам + " должна существовать").ЭтоИстина(); 506 | Ожидаем.Что(ПапкаИсходников.ЭтоКаталог(), "Путь " + ПутьКИсходникам + "должен быть каталогом").ЭтоИстина(); 507 | 508 | Если Рекурсивно Тогда 509 | СобратьКаталог(ПутьКИсходникам, КаталогВыгрузки); 510 | Иначе 511 | СобратьФайл(ПутьКИсходникам, КаталогВыгрузки); 512 | КонецЕсли; 513 | 514 | КонецФункции 515 | 516 | Процедура СобратьКаталог(Знач ПутьКИсходникам, КаталогВыгрузки) 517 | 518 | СписокФайловВКаталоге = НайтиФайлы(ПутьКИсходникам, ПолучитьМаскуВсеФайлы()); 519 | 520 | Если НЕ Новый Файл(КаталогВыгрузки).Существует() Тогда 521 | СоздатьКаталог(КаталогВыгрузки); 522 | КонецЕсли; 523 | 524 | Для Каждого Файл Из СписокФайловВКаталоге Цикл 525 | 526 | Если НЕ Файл.ЭтоКаталог() Тогда 527 | Продолжить; 528 | КонецЕсли; 529 | 530 | Если ЭтоПутьКИсходнымКодамОбработок(Файл.ПолноеИмя) Тогда 531 | СобратьФайл(Файл.ПолноеИмя, КаталогВыгрузки); 532 | Иначе 533 | НовыйПутьВыгрузки = ОбъединитьПути(КаталогВыгрузки, Файл.Имя); 534 | СобратьКаталог(Файл.ПолноеИмя, НовыйПутьВыгрузки); 535 | КонецЕсли; 536 | 537 | КонецЦикла; 538 | 539 | КонецПроцедуры 540 | 541 | Функция СобратьФайл(Знач ПутьКИсходникам, Знач КаталогВыгрузки) 542 | 543 | Лог.Информация("Собираю исходники <"+ПутьКИсходникам+">"); 544 | 545 | ПапкаИсходников = Новый Файл(ПутьКИсходникам); 546 | 547 | Переименования = ПолучитьСоответствиеПереименований(ПутьКИсходникам); 548 | 549 | ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); 550 | Лог.Информация("Восстанавливаю структуру исходников в <" + ВременныйКаталог + ">"); 551 | 552 | Для Каждого Переименование Из Переименования Цикл 553 | 554 | НовыйПуть = ОбъединитьПути(ВременныйКаталог, Переименование.Ключ); 555 | НовыйКаталог = Новый Файл(НовыйПуть); 556 | ПутьДоНовогоКаталога = НовыйКаталог.Путь; 557 | Если НЕ Новый Файл(ПутьДоНовогоКаталога).Существует() Тогда 558 | СоздатьКаталог(ПутьДоНовогоКаталога); 559 | КонецЕсли; 560 | 561 | СтарыйПуть = ОбъединитьПути(ПутьКИсходникам, Переименование.Значение); 562 | СтарыйКаталог = Новый Файл(СтарыйПуть); 563 | Если СтарыйКаталог.ЭтоКаталог() Тогда 564 | КопироватьСодержимоеКаталога(СтарыйПуть, НовыйПуть); 565 | Если ЭтоПутьКТолстойФорме(НовыйПуть) Тогда 566 | ПереместитьФайл(ОбъединитьПути(НовыйПуть, "module.bsl"), ОбъединитьПути(НовыйПуть, "module")); 567 | КонецЕсли; 568 | Иначе 569 | КопироватьФайл(СтарыйПуть, НовыйПуть); 570 | КонецЕсли; 571 | 572 | КонецЦикла; 573 | 574 | ТипФайла = ПолучитьТипФайлаПоКаталогуИсходников(ВременныйКаталог); 575 | 576 | ИмяПапки = ПапкаИсходников.Имя; 577 | ИмяФайлаОбъекта = ОбъединитьПути(ТекущийКаталог(), КаталогВыгрузки, ИмяПапки + "." + ТипФайла); 578 | 579 | СобратьФайлИзИсходников(ВременныйКаталог, ИмяФайлаОбъекта); 580 | Лог.Информация("Успешно собран файл "+ИмяФайлаОбъекта); 581 | 582 | Возврат ИмяФайлаОбъекта; 583 | 584 | КонецФункции 585 | 586 | Функция ЭтоПутьКИсходнымКодамОбработок(ПутьКПапке) 587 | 588 | ФайлПереименования = Новый Файл(ОбъединитьПути(ПутьКПапке, "renames.txt")); 589 | Возврат ФайлПереименования.Существует(); 590 | 591 | КонецФункции 592 | 593 | Функция ЭтоПутьКТолстойФорме(ПутьКПапке) 594 | 595 | ФайлМодуля = Новый Файл(ОбъединитьПути(ПутьКПапке, "module.bsl")); 596 | ФайлФормы = Новый Файл(ОбъединитьПути(ПутьКПапке, "form")); 597 | 598 | Возврат ФайлМодуля.Существует() И ФайлФормы.Существует(); 599 | 600 | КонецФункции 601 | 602 | Функция ПолучитьТипФайлаПоКаталогуИсходников(Знач КаталогИсходников) 603 | 604 | ПутьКФайлуРут = ОбъединитьПути(КаталогИсходников, "root"); 605 | ФайлРут = Новый Файл(ПутьКФайлуРут); 606 | 607 | Ожидаем.Что(ФайлРут.Существует(), "Файл <" + ПутьКФайлуРут + "> должен существовать").ЭтоИстина(); 608 | Ожидаем.Что(ФайлРут.ЭтоКаталог(), "<" + ПутьКФайлуРут + "> должен быть файлом").ЭтоЛожь(); 609 | 610 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуРут); 611 | СодержаниеРут = ЧтениеТекста.Прочитать(); 612 | ЧтениеТекста.Закрыть(); 613 | МассивСтрокРут = СтрРазделить(СодержаниеРут, ","); 614 | Ожидаем.Что(МассивСтрокРут.Количество(), "Некорректный формат файла root").Больше(1); 615 | 616 | ПутьКФайлуКорневойКонтейнер = ОбъединитьПути(КаталогИсходников, МассивСтрокРут[1]); 617 | ФайлКорневойКонтейнер = Новый Файл(ПутьКФайлуКорневойКонтейнер); 618 | 619 | Ожидаем.Что(ФайлКорневойКонтейнер.Существует(), "Файл <" + ПутьКФайлуКорневойКонтейнер + "> должен существовать").ЭтоИстина(); 620 | Ожидаем.Что(ФайлКорневойКонтейнер.ЭтоКаталог(), "<" + ПутьКФайлуКорневойКонтейнер + "> должен быть файлом").ЭтоЛожь(); 621 | 622 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуКорневойКонтейнер); 623 | СодержаниеКорневойКонтейнер = ""; 624 | Для сч = 1 По 7 Цикл 625 | ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку(); 626 | Если ПрочитаннаяСтрока = Неопределено Тогда 627 | Прервать; 628 | КонецЕсли; 629 | 630 | СодержаниеКорневойКонтейнер = СодержаниеКорневойКонтейнер + ПрочитаннаяСтрока; 631 | КонецЦикла; 632 | ЧтениеТекста.Закрыть(); 633 | 634 | МассивСтрокКорневойКонтейнер = СтрРазделить(СодержаниеКорневойКонтейнер, ","); 635 | Ожидаем.Что(МассивСтрокКорневойКонтейнер.Количество(), "Некорректный формат файла корневого контейнера <" + ПутьКФайлуКорневойКонтейнер + ">").Больше(3); 636 | 637 | ИдентификаторТипаОбъекта = СокрЛП(МассивСтрокКорневойКонтейнер[3]); 638 | Если Лев(ИдентификаторТипаОбъекта, 1) = "{" Тогда 639 | ИдентификаторТипаОбъекта = Прав(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1); 640 | КонецЕсли; 641 | Если Прав(ИдентификаторТипаОбъекта, 1) = "}" Тогда 642 | ИдентификаторТипаОбъекта = Лев(ИдентификаторТипаОбъекта, СтрДлина(ИдентификаторТипаОбъекта) - 1); 643 | КонецЕсли; 644 | 645 | ИдентификаторТипаОбъекта = НРег(СокрЛП(ИдентификаторТипаОбъекта)); 646 | 647 | Если ИдентификаторТипаОбъекта = "c3831ec8-d8d5-4f93-8a22-f9bfae07327f" Тогда 648 | ТипФайла = "epf"; 649 | ИначеЕсли ИдентификаторТипаОбъекта = "e41aff26-25cf-4bb6-b6c1-3f478a75f374" Тогда 650 | ТипФайла = "erf"; 651 | Иначе 652 | ВызватьИсключение("Некорректный идентификатор типа собираемого объекта <" + ИдентификаторТипаОбъекта + ">"); 653 | КонецЕсли; 654 | 655 | Возврат ТипФайла; 656 | 657 | КонецФункции 658 | 659 | // Функция - Получает соответствие переименований файлов обработки на основе 660 | // файла renames.txt 661 | // 662 | // Параметры: 663 | // ПутьКИсходникам - Строка - Путь к папке с исходными кодами обработки 664 | // Возвращаемое значение: 665 | // Соответствие - Ключ: оригинальный путь файла после распаковки 666 | // Значение: преобразованный путь (например, при 667 | // раскладывании файлов по иерархии) 668 | // 669 | Функция ПолучитьСоответствиеПереименований(ПутьКИсходникам) 670 | 671 | Переименования = Новый Соответствие; 672 | 673 | ФайлПереименования = Новый Файл(ОбъединитьПути(ПутьКИсходникам, "renames.txt")); 674 | 675 | Ожидаем.Что(ФайлПереименования.Существует(), "Файл переименования " + ФайлПереименования.ПолноеИмя + " должен существовать").ЭтоИстина(); 676 | 677 | ЧтениеТекста = Новый ЧтениеТекста(ФайлПереименования.ПолноеИмя, КодировкаТекста.UTF8); 678 | СтрокаПереименования = ЧтениеТекста.ПрочитатьСтроку(); 679 | Пока СтрокаПереименования <> Неопределено Цикл 680 | 681 | СтрокаПереименованияВрем = СтрокаПереименования; 682 | СтрокаПереименования = ЧтениеТекста.ПрочитатьСтроку(); 683 | 684 | // Проверка на BOM? 685 | 686 | СписокСтрок = СтрРазделить(СтрокаПереименованияВрем, "-->"); 687 | Если СписокСтрок.Количество() < 2 Тогда 688 | Продолжить; 689 | КонецЕсли; 690 | 691 | Лог.Отладка(СтрокаПереименованияВрем); 692 | 693 | ИсходныйПуть = СписокСтрок[0]; 694 | ПреобразованныйПуть = СписокСтрок[1]; 695 | 696 | Переименования.Вставить(ИсходныйПуть, ПреобразованныйПуть); 697 | 698 | КонецЦикла; 699 | 700 | Возврат Переименования; 701 | 702 | КонецФункции 703 | 704 | Процедура СобратьФайлИзИсходников(ПапкаИсходников, ИмяФайлаОбъекта) 705 | Лог.Информация("Собираю файл из исходников <"+ПапкаИсходников+"> в файл "+ИмяФайлаОбъекта); 706 | 707 | ПутьЗапаковщика = ОбъединитьПути(КаталогПроекта(), "tools", "v8unpack"); 708 | Если ЭтоWindows Тогда 709 | ПутьЗапаковщика = ПутьЗапаковщика+".exe"; 710 | КонецЕсли; 711 | Ожидаем.Что(Новый Файл(ПутьЗапаковщика).Существует(), "Не найден путь к v8unpack").ЭтоИстина(); 712 | 713 | ВременныйФайл = ВременныеФайлы.СоздатьФайл(); 714 | 715 | КомандаЗапуска = """%1"" -B ""%2"" ""%3"""; 716 | КомандаЗапуска = СтрШаблон(КомандаЗапуска, ПутьЗапаковщика, ПапкаИсходников, ВременныйФайл); 717 | Лог.Отладка(КомандаЗапуска); 718 | 719 | Процесс = СоздатьПроцесс(КомандаЗапуска, , Истина, , КодировкаТекста.UTF8); 720 | Процесс.Запустить(); 721 | Процесс.ОжидатьЗавершения(); 722 | 723 | ВыводПроцесса = Процесс.ПотокВывода.Прочитать(); 724 | Ожидаем.Что(Процесс.КодВозврата, "Не удалось упаковать каталог " + ПапкаИсходников + Символы.ПС + ВыводПроцесса).Равно(0); 725 | Лог.Отладка(ВыводПроцесса); 726 | 727 | ФайлОбъекта = Новый Файл(ИмяФайлаОбъекта); 728 | Лог.Отладка(СтрШаблон("Перемещение из %1 в %2", ВременныйФайл, ИмяФайлаОбъекта)); 729 | Если ФайлОбъекта.Существует() Тогда 730 | Лог.Отладка(СтрШаблон("Удаляю старый файл %1 ", ИмяФайлаОбъекта)); 731 | УдалитьФайлы(ИмяФайлаОбъекта); 732 | КонецЕсли; 733 | 734 | ПереместитьФайл(ВременныйФайл, ИмяФайлаОбъекта); 735 | 736 | КонецПроцедуры 737 | 738 | Процедура КопироватьСодержимоеКаталога(Откуда, Куда) 739 | 740 | КаталогНазначения = Новый Файл(Куда); 741 | Если КаталогНазначения.Существует() Тогда 742 | Если КаталогНазначения.ЭтоФайл() Тогда 743 | УдалитьФайлы(КаталогНазначения.ПолноеИмя); 744 | СоздатьКаталог(Куда); 745 | КонецЕсли; 746 | Иначе 747 | СоздатьКаталог(Куда); 748 | КонецЕсли; 749 | 750 | Файлы = НайтиФайлы(Откуда, ПолучитьМаскуВсеФайлы()); 751 | Для Каждого Файл Из Файлы Цикл 752 | ПутьКопирования = ОбъединитьПути(Куда, Файл.Имя); 753 | Если Файл.ЭтоКаталог() Тогда 754 | КопироватьСодержимоеКаталога(Файл.ПолноеИмя, ПутьКопирования); 755 | Иначе 756 | КопироватьФайл(Файл.ПолноеИмя, ПутьКопирования); 757 | КонецЕсли; 758 | КонецЦикла; 759 | 760 | КонецПроцедуры 761 | 762 | Функция ПолучитьПутьПрограммыИзСистемныхПутейЗапускаPath(ИмяФайла) 763 | 764 | НайденныеФайлы = Новый Массив; 765 | Расширение = ""; 766 | 767 | Если ЭтоWindows Тогда 768 | Расширение = ".exe"; 769 | КонецЕсли; 770 | 771 | СистемнаяИнформация = Новый СистемнаяИнформация; 772 | ПапкаПоиска = СистемнаяИнформация.ПолучитьПеременнуюСреды("PATH"); 773 | РазделительПапок = ";"; 774 | СписокПапок = СтрРазделить(ПапкаПоиска, РазделительПапок); 775 | Для сч = 0 По СписокПапок.ВГраница() Цикл 776 | 777 | ПроверяемаяПапка = СписокПапок[сч]; 778 | 779 | // На Windows папка может быть обернута в кавычки, сбросим их 780 | Если ЭтоWindows 781 | И СтрДлина(ПроверяемаяПапка) >= 2 782 | И Лев(ПроверяемаяПапка, 1) = """" 783 | И Прав(ПроверяемаяПапка, 1) = """" Тогда 784 | ПроверяемаяПапка = Сред(ПроверяемаяПапка, 2, СтрДлина(ПроверяемаяПапка) - 2); 785 | КонецЕсли; 786 | 787 | ПутьПоиска = ОбъединитьПути(ПроверяемаяПапка, ИмяФайла + Расширение); 788 | ФайлПоиска = Новый Файл(ПутьПоиска); 789 | Если ФайлПоиска.Существует() И НайденныеФайлы.Найти(ПутьПоиска) = Неопределено Тогда 790 | НайденныеФайлы.Добавить(ПутьПоиска); 791 | КонецЕсли; 792 | 793 | КонецЦикла; 794 | 795 | НайденныйФайл = ""; 796 | Если НайденныеФайлы.Количество() > 0 Тогда 797 | НайденныйФайл = НайденныеФайлы[0]; 798 | КонецЕсли; 799 | 800 | Возврат НайденныйФайл; 801 | 802 | КонецФункции 803 | 804 | Функция ОбернутьПутьВКавычки(Знач Путь) 805 | 806 | Если Прав(Путь, 1) = "\" Тогда 807 | Путь = Лев(Путь, СтрДлина(Путь) - 1); 808 | КонецЕсли; 809 | 810 | Путь = """" + Путь + """"; 811 | 812 | Возврат Путь; 813 | 814 | КонецФункции 815 | 816 | Функция УбратьКавычкиВокругПути(Знач Путь) 817 | 818 | Если Лев(Путь, 1) = """" Тогда 819 | Путь = Прав(Путь, СтрДлина(Путь) - 1); 820 | КонецЕсли; 821 | Если Прав(Путь, 1) = """" Тогда 822 | Путь = Лев(Путь, СтрДлина(Путь) - 1); 823 | КонецЕсли; 824 | 825 | Возврат Путь; 826 | 827 | КонецФункции 828 | 829 | Функция КаталогПроекта() 830 | ФайлИсточника = Новый Файл(ТекущийСценарий().Источник); 831 | Возврат ФайлИсточника.Путь; 832 | КонецФункции 833 | 834 | Функция ИмяСкрипта() 835 | ФайлИсточника = Новый Файл(ТекущийСценарий().Источник); 836 | Возврат ФайлИсточника.ИмяБезРасширения; 837 | КонецФункции 838 | 839 | Инициализация(); 840 | 841 | Если ЗапускВКоманднойСтроке() Тогда 842 | ЗавершитьРаботу(КодВозврата); 843 | КонецЕсли; 844 | -------------------------------------------------------------------------------- /scripts/compile.cmd: -------------------------------------------------------------------------------- 1 | oscript .\..\precommit\v8files-extractor.os --compile .\..\src\ .\..\ --recursive -------------------------------------------------------------------------------- /scripts/decompile.cmd: -------------------------------------------------------------------------------- 1 | oscript .\..\precommit\v8files-extractor.os --decompile .\..\ .\..\src -------------------------------------------------------------------------------- /src/integration-1c-redmine/Form/ФормаЗадачи/module.bsl: -------------------------------------------------------------------------------- 1 | Перем СтруктураЗадачи Экспорт; 2 | Перем НоваяЗадача Экспорт; 3 | Перем СвойстваЗадачи Экспорт; 4 | 5 | Перем мРедактироватьОписание; 6 | Перем мНаблюдателиДоИзменения; 7 | 8 | //////////////////////////////////////////////////////////////////////////////// 9 | // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ ДЕЙСТВИЙ КОМАНДНЫХ ПАНЕЛЕЙ 10 | 11 | Процедура КоманднаяПанель1ПрикрепитьФайлы(Кнопка) 12 | 13 | ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 14 | ДиалогВыбора.МножественныйВыбор = Истина; 15 | ДиалогВыбора.Заголовок = "Выберите файлы которые хотите прикрепить к задаче."; 16 | Если ДиалогВыбора.Выбрать() Тогда 17 | мФайлов = ДиалогВыбора.ВыбранныеФайлы; 18 | 19 | Для Каждого Эл Из мФайлов Цикл 20 | Файл = Новый Файл(Эл); 21 | 22 | ФайлДобавлен = Вложения.Найти(Файл.ПолноеИмя, "ПолноеимяФайла"); 23 | Если ФайлДобавлен <> Неопределено Тогда 24 | Продолжить; 25 | КонецЕсли; 26 | 27 | Если Файл.Расширение = ".exe" Или Файл.Расширение = ".bat" Или Файл.Расширение = ".cmd" Тогда 28 | Сообщить("Файлы с расширением " + Файл.Расширение + " не могут быть привязаны к задаче."); 29 | Продолжить; 30 | КонецЕсли; 31 | 32 | нСтрока = ТаблицаВложений.Добавить(); 33 | нСтрока.ИмяФайла = Файл.Имя; 34 | нСтрока.ПолноеИмяФайла = Файл.ПолноеИмя; 35 | нСтрока.Расширение = Файл.Расширение; 36 | нСтрока.Пометка = Истина; 37 | КонецЦикла; 38 | 39 | ЗагрузитьВТаблицуЗначений(ТаблицаВложений, Вложения); 40 | 41 | КонецЕсли; 42 | 43 | КонецПроцедуры 44 | 45 | Процедура КоманднаяПанель1УдалитьФайл(Кнопка) 46 | 47 | ТекСтрока = ЭлементыФормы.Вложения.ТекущиеДанные; 48 | Вложения.Удалить(ТекСтрока); 49 | 50 | КонецПроцедуры 51 | 52 | 53 | Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка) 54 | 55 | ЗаполнитьРеквизитыЗадачиДаннымиИзФормы(); 56 | 57 | Если НЕ ВсеРеквизитыЗаполнены(Новый Структура("ЗадачаТрекер, ЗадачаСтатус, ЗадачаПриоритет, ЗадачаТема, ЗадачаПроект"), Кнопка.Пояснение) Тогда 58 | Возврат; 59 | КонецЕсли; 60 | 61 | Если НоваяЗадача Тогда 62 | Результат = СоздатьЗадачуВТрекере(); 63 | Иначе 64 | ОбновитьЗадачуВТрекере(); 65 | КонецЕсли; 66 | 67 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 68 | Сообщить(ОтчетОВыполнении.ТекстОшибки); 69 | Возврат; 70 | КонецЕсли; 71 | 72 | //Если НоваяЗадача Тогда 73 | // ЗадачаНомер = Результат.issue.id; 74 | // ЭтаФорма.Заголовок = ЗадачаПроект + ":" + ЗадачаТрекер + "#" + Формат(ЗадачаНомер , "ЧГ=0") + " - задача была успешно создана!"; 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 | ЭлементыФормы.ОписаниеЗадачиHTML.УстановитьТекст(ПолучитьТекстИнициализацииКовертераВПолеHTML()); 143 | 144 | ПодключитьОбработчикОжидания("КонвертироватьОписаниеЗадачиВHTML", 0.1, Истина); 145 | 146 | КонецПроцедуры 147 | 148 | Процедура ЗаполняемСвойстваЗадачи() 149 | 150 | // Заполняем переданные свойства 151 | Если СвойстваЗадачи <> Неопределено Тогда 152 | Для Каждого Свойство Из СвойстваЗадачи Цикл 153 | Если Свойство.Ключ = "НастраиваемыеПоля" Тогда 154 | мНастраиваемыеПоля = Свойство.Значение; 155 | Иначе 156 | ЭлементыФормы[Свойство.Ключ].Значение = Свойство.Значение; 157 | КонецЕсли; 158 | КонецЦикла; 159 | КонецЕсли; 160 | 161 | КонецПроцедуры 162 | 163 | Процедура КонвертироватьОписаниеЗадачиВHTML() 164 | 165 | Если Не мРедактироватьОписание Тогда 166 | Попытка 167 | ЭлементыФормы.ОписаниеЗадачиHTML.Документ.getElementById("txt").innerHTML = Описание; 168 | 169 | // Посылаем сообщение невидимой кнопке, чтобы выполнить команду JS 170 | лКоманда = ЭлементыФормы.ОписаниеЗадачиHTML.Документ.getElementById ("SendEvent"); 171 | лКоманда.click("onclick"); 172 | Исключение 173 | мРедактироватьОписание = Не мРедактироватьОписание; 174 | УстановитьВидимость(); 175 | КонецПопытки; 176 | КонецЕсли; 177 | 178 | КонецПроцедуры 179 | 180 | 181 | Процедура ЗаполнитьРеквизитыЗадачиДаннымиИзФормы() 182 | 183 | Для Каждого Реквизит Из Метаданные().Реквизиты Цикл 184 | Если Найти(Реквизит.Имя, "Задача") = 1 Тогда 185 | ЭтотОбъект[Реквизит.Имя] = ЭлементыФормы[Прав(Реквизит.Имя, СтрДлина(Реквизит.Имя) - 6)].Значение; 186 | КонецЕсли; 187 | КонецЦикла; 188 | 189 | Наблюдатели.Очистить(); 190 | Наблюдатели.Загрузить(ВыявитьИзмененныхНаблюдателей(мНаблюдатели, мНаблюдателиДоИзменения)); 191 | 192 | НастраиваемыеПоля.Очистить(); 193 | ПреобразоватьСсылочныеТипы1СвСтроку(); 194 | ЗагрузитьВТаблицуЗначений(мНастраиваемыеПоля, НастраиваемыеПоля); 195 | 196 | КонецПроцедуры 197 | 198 | Функция ВыявитьИзмененныхНаблюдателей(НаблюдателиПосле, НаблюдателиДо) 199 | Измененные = НаблюдателиПосле.СкопироватьКолонки(); 200 | 201 | Для каждого НаблюдательДо Из НаблюдателиДо Цикл 202 | НаблюдательПосле = НаблюдателиПосле.Найти(НаблюдательДо.Идентификатор); 203 | Если НаблюдателиПосле = Неопределено Тогда // Это ошибка удалять 204 | Сообщить("Список наблюдателей был изменен, их установка может быть неккоректной!"); 205 | Продолжить; 206 | КонецЕсли; 207 | 208 | Если НаблюдательПосле.Пометка <> НаблюдательДо.Пометка Тогда 209 | нНаблюдатель = Измененные.Добавить(); 210 | ЗаполнитьЗначенияСвойств(нНаблюдатель, НаблюдательПосле); 211 | КонецЕсли; 212 | КонецЦикла; 213 | 214 | Возврат Измененные; 215 | КонецФункции 216 | 217 | 218 | Процедура ЗаполнитьФормуИзСтруктуры() 219 | 220 | Номер = СтруктураЗадачи.id; 221 | Проект = СтруктураЗадачи.project.name; 222 | Приоритет = СтруктураЗадачи.priority.name; 223 | Статус = СтруктураЗадачи.status.name; 224 | Трекер = СтруктураЗадачи.tracker.name; 225 | НачалоВыполнения = ?(СтруктураЗадачи.Свойство("start_date"), Дата(СтрЗаменить(СтруктураЗадачи.start_date, "-", "")), '0001-01-01'); 226 | КонецВыполнения = ?(СтруктураЗадачи.Свойство("due_date"), Дата(СтрЗаменить(СтруктураЗадачи.due_date, "-", "")), '0001-01-01'); 227 | Описание = ?(СтруктураЗадачи.Свойство("description"), СтруктураЗадачи.description, ""); 228 | Тема = СтруктураЗадачи.subject; 229 | 230 | Если СтруктураЗадачи.Свойство("spent_hours") Тогда 231 | УжеЗатрачено = "Уже затрачено: "+Формат(СтруктураЗадачи.spent_hours, "ЧЦ=10; ЧДЦ=2; ЧГ=0")+" час(ов)"; 232 | КонецЕсли; 233 | Деятельность = "Development"; 234 | 235 | Если СтруктураЗадачи.Свойство("estimated_hours") Тогда 236 | ОценкаВремени = СтруктураЗадачи.estimated_hours; 237 | КонецЕсли; 238 | Если СтруктураЗадачи.Свойство("assigned_to") Тогда 239 | Исполнитель = СтруктураЗадачи.assigned_to.name; 240 | КонецЕсли; 241 | Если СтруктураЗадачи.Свойство("done_ratio") Тогда 242 | Индикатор = СтруктураЗадачи.done_ratio; 243 | КонецЕсли; 244 | Если СтруктураЗадачи.Свойство("parent") Тогда 245 | НомерРродительскойЗадачи = СтруктураЗадачи.parent.id; 246 | КонецЕсли; 247 | 248 | мНастраиваемыеПоля.Очистить(); 249 | Если СтруктураЗадачи.Свойство("custom_fields") Тогда 250 | Для Каждого Поле Из СтруктураЗадачи["custom_fields"] Цикл 251 | 252 | нСтрока = мНастраиваемыеПоля.Добавить(); 253 | нСтрока.Идентификатор = Поле.id; 254 | нСтрока.Имя = Поле.name; 255 | 256 | Если Поле.Свойство("value") Тогда 257 | нСтрока.Пометка = ЗначениеЗаполнено(Поле.value); 258 | нСтрока.Значение = ?(нСтрока.Имя = ПолеСсылкаНаОбъект1С, ПеобразоватьВСсылочныйТип1С(Поле["value"]), Поле["value"]); 259 | КонецЕсли; 260 | КонецЦикла; 261 | КонецЕсли; 262 | 263 | // Заполнить возможными наблюдателями по проекту 264 | ЗаполнитьСписокНаблюдателейПроекта(); 265 | 266 | // Отметим тех кто уже наблюдает за задачей 267 | Если СтруктураЗадачи.Свойство("watchers") Тогда 268 | Для Каждого Поле Из СтруктураЗадачи.watchers Цикл 269 | Стр = мНаблюдатели.Найти(Поле.id, "Идентификатор"); 270 | Если Стр <> Неопределено Тогда 271 | Стр.Пометка = Истина; 272 | КонецЕсли; 273 | КонецЦикла; 274 | КонецЕсли; 275 | 276 | Если СтруктураЗадачи.Свойство("attachments") Тогда 277 | Для Каждого Поле Из СтруктураЗадачи.attachments Цикл 278 | нСтрока = ТаблицаВложений.Добавить(); 279 | 280 | нСтрока.ИмяФайла = Поле.filename; 281 | 282 | Слеш = Найти(Поле.filename, "/"); 283 | нСтрока.Расширение = "." + Прав(Поле.filename, СтрДлина(Поле.filename) - Слеш); 284 | КонецЦикла; 285 | КонецЕсли; 286 | ЗагрузитьВТаблицуЗначений(ТаблицаВложений, Вложения); 287 | 288 | Если СтруктураЗадачи.Свойство("children") Тогда 289 | 290 | ЗаполнитьДеревоПодзадач(СтруктураЗадачи, ДеревоПодзадач.Строки); 291 | 292 | ЭлементыФормы.Приоритет.Доступность = Ложь; 293 | ЭлементыФормы.НачалоВыполнения.Доступность = Ложь; 294 | ЭлементыФормы.КонецВыполнения.Доступность = Ложь; 295 | ЭлементыФормы.ОценкаВремени.Доступность = Ложь; 296 | КонецЕсли; 297 | 298 | КонецПроцедуры 299 | 300 | Функция ПеобразоватьВСсылочныйТип1С(Значение) 301 | 302 | Попытка 303 | Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO); 304 | 305 | ЧтениеJSON = Новый ЧтениеJSON; 306 | ЧтениеJSON.УстановитьСтроку(Значение); 307 | 308 | Ссылка = Сериализатор.ПрочитатьJSON(ЧтениеJSON); 309 | Исключение 310 | Ссылка = Значение; 311 | КонецПопытки; 312 | 313 | Возврат Ссылка; 314 | КонецФункции 315 | 316 | Процедура ПреобразоватьСсылочныеТипы1СвСтроку() 317 | Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO); 318 | Для Каждого Поле Из мНастраиваемыеПоля Цикл 319 | Если Поле.Имя = ПолеСсылкаНаОбъект1С И Поле.Пометка Тогда 320 | 321 | Попытка 322 | ЗаписьJSON = Новый ЗаписьJSON; 323 | ЗаписьJSON.УстановитьСтроку(); 324 | 325 | Сериализатор.ЗаписатьJSON(ЗаписьJSON, Поле.Значение, НазначениеТипаXML.Явное); 326 | 327 | Поле.Значение = ЗаписьJSON.Закрыть(); 328 | Исключение 329 | Поле.Значение = "Не удалось сериализовать ссылку на объект"; 330 | КонецПопытки; 331 | КонецЕсли; 332 | КонецЦикла; 333 | КонецПроцедуры 334 | 335 | 336 | 337 | 338 | Процедура ЗаполнитьДеревоПодзадач(СтруктураЗадачи, СтрокиДерева) 339 | 340 | Для Каждого Подзадача Из СтруктураЗадачи.children Цикл 341 | 342 | нСтрока = СтрокиДерева.Добавить(); 343 | 344 | нСтрока.Идентификатор = Подзадача.id; 345 | нСтрока.Задача = Подзадача.tracker.name + " #" + Формат(Подзадача.id, "ЧГ=0") + ": " + Подзадача.subject; 346 | 347 | Если Подзадача.Свойство("children") Тогда 348 | ЗаполнитьДеревоПодзадач(Подзадача, нСтрока.Строки) 349 | КонецЕсли; 350 | 351 | КонецЦикла; 352 | 353 | КонецПроцедуры 354 | 355 | 356 | Процедура ПриЗакрытии() 357 | 358 | 359 | КонецПроцедуры 360 | 361 | Процедура ЗаполнитьСпискиВыбораПолей() 362 | 363 | ЗаполнитьСписокВыбораПроекта(); 364 | ЗаполнитьСписокВыбораИсполнителей(); 365 | 366 | КонецПроцедуры 367 | 368 | Процедура ЗаполнитьСписокВыбораПроекта() 369 | 370 | Если Не ВсеПоляЗаполнены(Новый Структура("APIkey")) Тогда 371 | Возврат; 372 | КонецЕсли; 373 | 374 | //: ЗагруженныеДанные = Новый Соответствие 375 | Данные = ЗагруженныеДанные.Получить("projects"); 376 | 377 | Если Данные = Неопределено Тогда 378 | Данные = ПолучитьДанныеРесурсаИзТрекера("projects"); 379 | 380 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 381 | Сообщить(ОтчетОВыполнении.ТекстОшибки); 382 | Возврат; 383 | КонецЕсли; 384 | 385 | ЗагруженныеДанные.Вставить("projects", Данные); 386 | КонецЕсли; 387 | 388 | мСписокПроектов = Новый СписокЗначений; 389 | Для Каждого ДанныеПроекта Из Данные["projects"] Цикл 390 | мСписокПроектов.Добавить(ДанныеПроекта.name); 391 | КонецЦикла; 392 | 393 | ЭлементыФормы.Проект.СписокВыбора = мСписокПроектов; 394 | 395 | КонецПроцедуры 396 | 397 | Процедура ЗаполнитьСписокВыбораИсполнителей() 398 | 399 | //: ЗагруженныеДанные = Новый Соответствие 400 | Если Не ВсеРеквизитыЗаполнены(Новый Структура("Проект"), "Сформировать список выбора исполнителей", Истина, ЭтаФорма) Тогда 401 | Возврат; 402 | КонецЕсли; 403 | 404 | мПроект = ПолучитьИдентификаторПараметра(Проект, "projects"); 405 | 406 | Ресурс = "projects/"+мПроект+"/memberships"; 407 | 408 | Данные = ЗагруженныеДанные.Получить(СтрЗаменить(Ресурс, "/", "-")); 409 | 410 | Если Данные = Неопределено Тогда 411 | Данные = ПолучитьДанныеРесурсаИзТрекера(Ресурс); 412 | 413 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 414 | Сообщить(ОтчетОВыполнении.ТекстОшибки); 415 | Возврат; 416 | КонецЕсли; 417 | 418 | ЗагруженныеДанные.Вставить(СтрЗаменить(Ресурс, "-", "/"), Данные); 419 | КонецЕсли; 420 | 421 | СписокИсполнителей = Новый СписокЗначений; 422 | СписокИсполнителей.Добавить("<>"); 423 | Для Каждого Структура Из Данные["memberships"] Цикл 424 | СписокИсполнителей.Добавить(Структура.user.name); 425 | КонецЦикла; 426 | 427 | ЭлементыФормы.Исполнитель.СписокВыбора = СписокИсполнителей; 428 | 429 | КонецПроцедуры 430 | 431 | Процедура ЗаполнитьСписокДопПолейЗадачи(ТекЗадача, ЗаполнятьЗначение = Ложь) 432 | 433 | НастраиваемыеПоля.Очистить(); 434 | 435 | Для Каждого ДопПоле Из ТекЗадача.ДополнительныеПоля Цикл 436 | нСтрока = НастраиваемыеПоля.Добавить(); 437 | 438 | нСтрока.Идентификатор = ДопПоле.id; 439 | нСтрока.Имя = ДопПоле.name; 440 | 441 | Если ЗаполнятьЗначение Тогда 442 | нСтрока.Значение = ДопПоле.value; 443 | нСтрока.Пометка = Истина; 444 | Иначе 445 | 446 | КонецЕсли; 447 | КонецЦикла; 448 | 449 | КонецПроцедуры 450 | 451 | Процедура ЗаполнитьСписокНаблюдателейПроекта() 452 | 453 | Если Не ВсеПоляЗаполнены(Новый Структура("APIkey", "Проект")) Тогда 454 | Возврат; 455 | КонецЕсли; 456 | 457 | мПроект = ПолучитьИдентификаторПараметра(Проект, "projects"); 458 | Если Не ЗначениеЗаполнено(мПроект) Тогда 459 | Возврат; 460 | КонецЕсли; 461 | 462 | //: ЗагруженныеДанные = Новый Соответствие 463 | Данные = ЗагруженныеДанные.Получить("memberships"); 464 | 465 | Если Данные = Неопределено Тогда 466 | 467 | Данные = ПолучитьДанныеРесурсаИзТрекера("projects/"+мПроект+"/memberships"); 468 | 469 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 470 | Сообщить(ОтчетОВыполнении.ТекстОшибки); 471 | Возврат; 472 | КонецЕсли; 473 | 474 | ЗагруженныеДанные.Вставить("memberships", Данные); 475 | КонецЕсли; 476 | 477 | мНаблюдатели.Очистить(); 478 | Для Каждого Структура Из Данные["memberships"] Цикл 479 | нСтрока = мНаблюдатели.Добавить(); 480 | 481 | нСтрока.Идентификатор = Структура.user.id; 482 | нСтрока.Имя = Структура.user.name; 483 | КонецЦикла; 484 | 485 | КонецПроцедуры 486 | 487 | Процедура ЗаполнитьСписокНастраиваемыхПолей() 488 | 489 | Если Не ВсеПоляЗаполнены(Новый Структура("APIkey", "Проект")) Тогда 490 | Возврат; 491 | КонецЕсли; 492 | 493 | мПроект = ПолучитьИдентификаторПараметра(Проект, "projects"); 494 | Если Не ЗначениеЗаполнено(мПроект) Тогда 495 | Возврат; 496 | КонецЕсли; 497 | 498 | //: ЗагруженныеДанные = Новый Соответствие 499 | Данные = ЗагруженныеДанные.Получить("custom_fields"); 500 | Если Данные = Неопределено Тогда 501 | Данные = ПолучитьДанныеРесурсаИзТрекера("custom_fields"); 502 | 503 | Если ОтчетоВыполнении.ЕстьОшибки Тогда 504 | Сообщить(ОтчетоВыполнении.ТекстОшибки); 505 | Возврат; 506 | КонецЕсли; 507 | 508 | ЗагруженныеДанные.Вставить("custom_fields", Данные); 509 | КонецЕсли; 510 | 511 | мНастраиваемыеПоля.Очистить(); 512 | Для Каждого Поле Из Данные["custom_fields"] Цикл 513 | Если Поле.customized_type = "issue" И Поле.Свойство("is_filter") И Поле.is_filter Тогда 514 | нСтрока = мНастраиваемыеПоля.Добавить(); 515 | 516 | нСтрока.Идентификатор = Поле.id; 517 | нСтрока.Имя = Поле.name; 518 | 519 | Если Поле.field_format = "string" Тогда 520 | нСтрока.Значение = ""; 521 | ИначеЕсли Поле.field_format = "bool" Тогда 522 | Если Поле.Свойство("default_value") Тогда 523 | нСтрока.Значение = Поле.default_value; 524 | Иначе 525 | нСтрока.Значение = 0; 526 | КонецЕсли; 527 | КонецЕсли; 528 | КонецЕсли; 529 | КонецЦикла; 530 | мНастраиваемыеПоля.Сортировать("Имя"); 531 | 532 | КонецПроцедуры 533 | 534 | 535 | //////////////////////////////////////////////////////////////////////////////// 536 | // ПОВТОРЯЮЩИЕСЯ ДЕЙСТВИЯ ПРИ ИЗМЕНЕНИИ РАЗНЫХ РЕКВИЗИТОВ 537 | 538 | Процедура УстановитьВидимость() 539 | 540 | ЭлементыФормы.ПанельСвойств.Страницы.ЗатраченноеВремя.Видимость = Не НоваяЗадача; 541 | ЭлементыФормы.ПанельСвойств.Страницы.Примечания.Видимость = Не НоваяЗадача; 542 | 543 | ЭлементыФормы.ОписаниеЗадачиHTML.Видимость = Не мРедактироватьОписание; 544 | ЭлементыФормы.Описание.Видимость = мРедактироватьОписание; 545 | 546 | КонецПроцедуры 547 | 548 | Процедура УстановитьЗаголовки() 549 | 550 | ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыВыполнить.Текст = ?(НоваяЗадача, "Создать", "Редактировать"); 551 | ЭтаФорма.Заголовок = ?(НоваяЗадача, "Новая задача", Проект + ": " + Трекер + " #" + Формат(Номер, "ЧГ=0")); 552 | 553 | КонецПроцедуры 554 | 555 | Процедура УстановитьДоступность() 556 | 557 | 558 | КонецПроцедуры 559 | 560 | Функция ФорматированиеСтроки(Знач Строка) 561 | Строка = СокрЛП(Строка); 562 | Строка = СтрЗаменить(Строка, "-", ""); 563 | 564 | Возврат ?(Строка="","00010101", Строка); 565 | КонецФункции 566 | 567 | //////////////////////////////////////////////////////////////////////////////// 568 | // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЧНЫХ ПОЛЕЙ 569 | 570 | Процедура ТаблицаВложенийПриПолученииДанных(Элемент, ОформленияСтрок) 571 | 572 | Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл 573 | 574 | ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; 575 | Ячейки = ОформлениеСтроки.Ячейки; 576 | 577 | ЯчейкаСКартинкой = Ячейки["Картинка"]; 578 | ЯчейкаСКартинкой.ОтображатьКартинку = Истина; 579 | 580 | Если ДанныеСтроки["Расширение"] = ".xls" Или ДанныеСтроки["Расширение"] = ".xlsx" Тогда 581 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_Excel; 582 | ИначеЕсли ДанныеСтроки["Расширение"] = ".epf" Тогда 583 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_EPF; 584 | ИначеЕсли ДанныеСтроки["Расширение"] = ".txt" Или ДанныеСтроки["Расширение"] = ".ini" Тогда 585 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_TXT; 586 | ИначеЕсли ДанныеСтроки["Расширение"] = ".cf" Или ДанныеСтроки["Расширение"] = ".dt" Тогда 587 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_1С; 588 | ИначеЕсли ДанныеСтроки["Расширение"] = ".doc" Тогда 589 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_Word; 590 | ИначеЕсли ДанныеСтроки["Расширение"] = ".xml" Тогда 591 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_XML; 592 | Иначе 593 | ЯчейкаСКартинкой.Картинка = БиблиотекаКартинок.ПиктограммаФайла_TXT; 594 | КонецЕсли; 595 | 596 | КонецЦикла; 597 | 598 | КонецПроцедуры 599 | 600 | Процедура ТаблицаВложенийПередНачаломДобавления(Элемент, Отказ, Копирование) 601 | Отказ = Истина; 602 | КонецПроцедуры 603 | 604 | 605 | Процедура ЗадачиПриПолученииДанных(Элемент, ОформленияСтрок) 606 | 607 | Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл 608 | Если ОформлениеСтроки.ДанныеСтроки.ИдентификаторПроекта > 0 Тогда 609 | ОформлениеСтроки.Шрифт = Новый Шрифт(,, Истина,); 610 | КонецЕсли; 611 | КонецЦикла; 612 | 613 | КонецПроцедуры 614 | 615 | Процедура ЗадачиПриАктивизацииСтроки(Элемент) 616 | 617 | ТекСтрокаДерева = ЭлементыФормы.СписокЗадач.ТекущиеДанные; 618 | Если ТекСтрокаДерева.Идентификатор > 0 Тогда 619 | //ЭлементыФормы.НадписьОписаниеЗадачи.Заголовок = ТекСтрокаДерева.Описание; 620 | //ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекСтрокаДерева.Описание); 621 | КонецЕсли; 622 | 623 | КонецПроцедуры 624 | 625 | 626 | Процедура мНаблюдателиПередНачаломДобавления(Элемент, Отказ, Копирование) 627 | Отказ = Истина; 628 | КонецПроцедуры 629 | 630 | Процедура мНаблюдателиПриИзмененииФлажка(Элемент, Колонка) 631 | мИзмененныеНаблюдатели = мНаблюдатели; 632 | КонецПроцедуры 633 | 634 | Процедура ДопПоляПередНачаломДобавления(Элемент, Отказ, Копирование) 635 | Отказ = Истина; 636 | КонецПроцедуры 637 | 638 | 639 | Процедура ДеревоПодзадачПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель) 640 | Отказ = Истина; 641 | КонецПроцедуры 642 | 643 | Процедура ДеревоПодзадачВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) 644 | 645 | СтандартнаяОбработка = Ложь; 646 | 647 | Если ВыбраннаяСтрока.Идентификатор <> 0 Тогда 648 | ЭтаФорма.ВладелецФормы.ОткрытьФормуЗадачиДляРедактирования(ВыбраннаяСтрока.Идентификатор); 649 | КонецЕсли; 650 | 651 | КонецПроцедуры 652 | 653 | 654 | //////////////////////////////////////////////////////////////////////////////// 655 | // ОБРАБОТЧИКИ СОБЫТИЙ ИЗМЕНЕНИЯ РЕКВИЗИТОВ 656 | 657 | Процедура ЗадачаПроектПриИзменении(Элемент) 658 | 659 | ЗаполнитьСписокВыбораИсполнителей(); 660 | 661 | УстановитьЗаголовки(); 662 | 663 | КонецПроцедуры 664 | 665 | 666 | Процедура ПроектНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 667 | ЗаполнитьСписокВыбораПроекта(); 668 | КонецПроцедуры 669 | 670 | Процедура ТрекерНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 671 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "trackers"); 672 | КонецПроцедуры 673 | 674 | Процедура СтатусНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 675 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "issue_statuses"); 676 | КонецПроцедуры 677 | 678 | Процедура ПриоритетНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 679 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "enumerations/issue_priorities", "issue_priorities"); 680 | КонецПроцедуры 681 | 682 | Процедура ИсполнительНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 683 | ЗаполнитьСписокВыбораИсполнителей(); 684 | КонецПроцедуры 685 | 686 | Процедура ДеятельностьИмяНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 687 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "enumerations/time_entry_activities", "time_entry_activities"); 688 | КонецПроцедуры 689 | 690 | 691 | Процедура ИзменитьОписаниеНажатие(Элемент) 692 | 693 | мРедактироватьОписание = Не мРедактироватьОписание; 694 | 695 | УстановитьВидимость(); 696 | 697 | КонвертироватьОписаниеЗадачиВHTML(); 698 | 699 | КонецПроцедуры 700 | 701 | Процедура ДопПоляЗначениеПриИзменении(Элемент) 702 | 703 | ТекСтрока = ЭлементыФормы.НастраиваемыеПоля.ТекущиеДанные; 704 | Если ТекСтрока <> Неопределено Тогда 705 | ТекСтрока.Пометка = ЗначениеЗаполнено(ТекСтрока.Значение); 706 | КонецЕсли; 707 | 708 | КонецПроцедуры 709 | 710 | Процедура ОсновныеДействияФормыДействие(Кнопка) 711 | ЗаполнитьРеквизитыЗадачиДаннымиИзФормы(); 712 | КонецПроцедуры 713 | 714 | Процедура ДеревоПодзадачПриПолученииДанных(Элемент, ОформленияСтрок) 715 | Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл 716 | НайденСтрока = СписокЗадач.Найти(ОформлениеСтроки.ДанныеСтроки.Идентификатор, "Идентификатор"); 717 | Если НайденСтрока <> Неопределено Тогда 718 | Если НайденСтрока.Статус = "Closed" Тогда 719 | ОформлениеСтроки.ДанныеСтроки.Закрыта = Истина; 720 | Иначе 721 | ОформлениеСтроки.Шрифт = Новый Шрифт("Авто",, Истина) 722 | КонецЕсли; 723 | Иначе 724 | ОформлениеСтроки.ДанныеСтроки.Закрыта = Истина; 725 | КонецЕсли; 726 | КонецЦикла; 727 | КонецПроцедуры 728 | 729 | Процедура ПроектПриИзменении(Элемент) 730 | ЗаполнитьСписокВыбораИсполнителей(); 731 | КонецПроцедуры 732 | 733 | 734 | 735 | 736 | мРедактироватьОписание = Ложь; 737 | НоваяЗадача = ?(НоваяЗадача=Неопределено, Ложь, Истина); -------------------------------------------------------------------------------- /src/integration-1c-redmine/Form/ФормаНастройкиПанелиПользователя/form: -------------------------------------------------------------------------------- 1 | {27, 2 | {18, 3 | { 4 | {1,2, 5 | {"ru","Параметры панели настроек"}, 6 | {"uk","Параметри панелі настройок"} 7 | },8,7}, 8 | {09ccdc77-ea1a-4a6d-ab1c-3435eada2433, 9 | {1, 10 | { 11 | {16,1, 12 | {3,4, 13 | {0} 14 | }, 15 | {3,4, 16 | {0} 17 | }, 18 | {7,3,0,1,100},0, 19 | {3,3, 20 | {-22} 21 | }, 22 | {3,4, 23 | {0} 24 | }, 25 | {3,4, 26 | {0} 27 | }, 28 | {3,3, 29 | {-7} 30 | }, 31 | {3,3, 32 | {-21} 33 | }, 34 | {3,0, 35 | {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, 36 | {1,0},0,0,100,0,0},26,0,5, 37 | {0,4,1}, 38 | {0,6,0}, 39 | {0,6,1}, 40 | {0,7,0}, 41 | {0,7,1},0,6, 42 | {0,4,3}, 43 | {0,5,3}, 44 | {0,6,2}, 45 | {0,6,3}, 46 | {0,7,2}, 47 | {0,7,3},0,0, 48 | {8,1, 49 | {4,0, 50 | {0},"",-1,-1,1,0,""}, 51 | {4,0, 52 | {0},"",-1,-1,1,0,""}, 53 | {4,0, 54 | {0},"",-1,-1,1,0,""},100,0,0,0},0,1, 55 | {1,1, 56 | {4, 57 | {1,2, 58 | {"ru","Страница1"}, 59 | {"uk","Сторінка1"} 60 | }, 61 | {8,0, 62 | {4,0, 63 | {0},"",-1,-1,1,0,""}, 64 | {4,0, 65 | {0},"",-1,-1,1,0,""}, 66 | {4,0, 67 | {0},"",-1,-1,1,0,""},100,2,0,0},-1,1,1,"Страница1",1, 68 | {3,4, 69 | {0} 70 | }, 71 | {3,4, 72 | {0} 73 | } 74 | } 75 | },1,1,0,4, 76 | {2,6,1,1,1,0,0,0,0}, 77 | {2,6,0,1,2,0,0,0,0}, 78 | {2,242,1,1,3,0,0,6,0}, 79 | {2,283,0,1,4,0,0,6,0},0,4294967295,5,64,0, 80 | {3,4, 81 | {0} 82 | },0,0,57,0,0}, 83 | {0} 84 | }, 85 | {5, 86 | {ea83fe3a-ac3c-4cce-8045-3dddf35b28b1,4, 87 | {5, 88 | {"Pattern", 89 | {"#",acf6192e-81ca-46ef-93a6-5a6968b78663} 90 | }, 91 | { 92 | {16,1, 93 | {3,4, 94 | {0} 95 | }, 96 | {3,4, 97 | {0} 98 | }, 99 | {7,3,0,1,100},0, 100 | {3,3, 101 | {-22} 102 | }, 103 | {3,4, 104 | {0} 105 | }, 106 | {3,4, 107 | {0} 108 | }, 109 | {3,3, 110 | {-7} 111 | }, 112 | {3,3, 113 | {-21} 114 | }, 115 | {3,1, 116 | {-18},0,0,0}, 117 | {1,0},0,0,100,2,0}, 118 | {19,50535436, 119 | {3,4, 120 | {0} 121 | }, 122 | {3,4, 123 | {0} 124 | }, 125 | {3,4, 126 | {0} 127 | }, 128 | {3,4, 129 | {0} 130 | }, 131 | {3,3, 132 | {-14} 133 | }, 134 | {3,3, 135 | {-15} 136 | }, 137 | {3,3, 138 | {-13} 139 | },2,2,0,0,0,0,0,1,1, 140 | {7,2,0, 141 | {-20},1,100}, 142 | {7,2,0, 143 | {-20},1,100},2,0,0, 144 | {3, 145 | {737535a4-21e6-4971-8513-3e3173a9fedd, 146 | {8, 147 | {8, 148 | {17, 149 | {1,0}, 150 | {1,0}, 151 | {1,0},21,0,-1,-1,-1,269824, 152 | {4,0, 153 | {0},"",-1,-1,1,0,""}, 154 | {4,0, 155 | {0},"",-1,-1,1,0,""}, 156 | {4,0, 157 | {0},"",-1,-1,1,0,""},16,16,d2314b5d-8da4-4e0f-822b-45e7500eae09, 158 | {3,4, 159 | {0} 160 | }, 161 | {3,4, 162 | {0} 163 | }, 164 | {3,4, 165 | {0} 166 | }, 167 | {3,4, 168 | {0} 169 | }, 170 | {3,4, 171 | {0} 172 | }, 173 | {3,4, 174 | {0} 175 | }, 176 | {7,3,0,1,100}, 177 | {7,3,0,1,100}, 178 | {7,3,0,1,100},0,0,0,4,0,"Использование", 179 | {},3,1, 180 | {1,0}, 181 | {"Pattern", 182 | {"S"} 183 | },0,1,381ed624-9217-4e63-85db-c4c3cb87daae, 184 | { 185 | {#base64:AgFTS2/0iI3BTqDV67a9oKcNfVAxDsIwDIS1Uj/hOZHspG2SXyAhHlCgKwPqVuVl 186 | DDyJB7CQ2KVACySRnDuf43Pu6xWv2+U6BFUWA2zavu/OJ2CwhVgWMV/lUKMoI6uq 187 | HPCZnWOnrMIkJcSYLqywOWhjftUssVS4OWHoxbAbTT53SZtZUigwdRfSomARqSWq 188 | xCTsIE4R4EOU6FGFnNOUT86DFP3JTi98MflmqHHOGarV9EU8XWhdU9mj0RS6oKu6 189 | M9r7YLXxuD8ECnUbnPSfT4AyA//o+CI3JTEjFuID},0},0,0,0}, 190 | {-1}, 191 | {-1}, 192 | {-1} 193 | },"","Использование","",0} 194 | }, 195 | {737535a4-21e6-4971-8513-3e3173a9fedd, 196 | {8, 197 | {8, 198 | {17, 199 | {1,2, 200 | {"ru","Страница"}, 201 | {"uk","Сторінка"} 202 | }, 203 | {1,0}, 204 | {1,0},206,1,-1,-1,-1,13639170, 205 | {4,0, 206 | {0},"",-1,-1,1,0,""}, 207 | {4,0, 208 | {0},"",-1,-1,1,0,""}, 209 | {4,0, 210 | {0},"",-1,-1,1,0,""},16,16,d2314b5d-8da4-4e0f-822b-45e7500eae09, 211 | {3,4, 212 | {0} 213 | }, 214 | {3,4, 215 | {0} 216 | }, 217 | {3,4, 218 | {0} 219 | }, 220 | {3,4, 221 | {0} 222 | }, 223 | {3,4, 224 | {0} 225 | }, 226 | {3,4, 227 | {0} 228 | }, 229 | {7,3,0,1,100}, 230 | {7,3,0,1,100}, 231 | {7,3,0,1,100},1,0,0,4,0,"Представление", 232 | {},30,0, 233 | {1,0}, 234 | {"Pattern", 235 | {"S"} 236 | },0,1,381ed624-9217-4e63-85db-c4c3cb87daae, 237 | { 238 | {#base64:AgFTS2/0iI3BTqDV67a9oKcNfVAxDsIwDIS1Uj/hOZHspG2SXyAhHlCgKwPqVuVl 239 | DDyJB7CQ2KVACySRnDuf43Pu6xWv2+U6BFUWA2zavu/OJ2CwhVgWMV/lUKMoI6uq 240 | HPCZnWOnrMIkJcSYLqywOWhjftUssVS4OWHoxbAbTT53SZtZUigwdRfSomARqSWq 241 | xCTsIE4R4EOU6FGFnNOUT86DFP3JTi98MflmqHHOGarV9EU8XWhdU9mj0RS6oKu6 242 | M9r7YLXxuD8ECnUbnPSfT4AyA//o+CI3JTEjFuID},0},0,0,0}, 243 | {-1}, 244 | {-1}, 245 | {-1} 246 | },"Представление","","",0} 247 | }, 248 | {737535a4-21e6-4971-8513-3e3173a9fedd, 249 | {8, 250 | {8, 251 | {17, 252 | {1,2, 253 | {"ru","Страница"}, 254 | {"uk","Сторінка"} 255 | }, 256 | {1,0}, 257 | {1,0},20.99999999999999,2,-1,-1,-1,268800, 258 | {4,0, 259 | {0},"",-1,-1,1,0,""}, 260 | {4,0, 261 | {0},"",-1,-1,1,0,""}, 262 | {4,0, 263 | {0},"",-1,-1,1,0,""},16,16,d2314b5d-8da4-4e0f-822b-45e7500eae09, 264 | {3,4, 265 | {0} 266 | }, 267 | {3,4, 268 | {0} 269 | }, 270 | {3,4, 271 | {0} 272 | }, 273 | {3,4, 274 | {0} 275 | }, 276 | {3,4, 277 | {0} 278 | }, 279 | {3,4, 280 | {0} 281 | }, 282 | {7,3,0,1,100}, 283 | {7,3,0,1,100}, 284 | {7,3,0,1,100},1,0,0,4,0,"Страница", 285 | {},3,0, 286 | {1,0}, 287 | {"Pattern", 288 | {"S"} 289 | },0,1,381ed624-9217-4e63-85db-c4c3cb87daae, 290 | { 291 | {#base64:AgFTS2/0iI3BTqDV67a9oKcNfVAxDsIwDIS1Uj/hOZHspG2SXyAhHlCgKwPqVuVl 292 | DDyJB7CQ2KVACySRnDuf43Pu6xWv2+U6BFUWA2zavu/OJ2CwhVgWMV/lUKMoI6uq 293 | HPCZnWOnrMIkJcSYLqywOWhjftUssVS4OWHoxbAbTT53SZtZUigwdRfSomARqSWq 294 | xCTsIE4R4EOU6FGFnNOUT86DFP3JTi98MflmqHHOGarV9EU8XWhdU9mj0RS6oKu6 295 | M9r7YLXxuD8ECnUbnPSfT4AyA//o+CI3JTEjFuID},0},0,0,0}, 296 | {-1}, 297 | {-1}, 298 | {-1} 299 | },"Страница","","",0} 300 | } 301 | },0,0,0,0,0,0,0,100,1,2} 302 | }, 303 | {342cf854-134c-42bb-8af9-a2103d5d9723, 304 | {5,0,0,1} 305 | }, 306 | {1, 307 | {47,e1692cc2-605b-4535-84dd-28440238746c, 308 | {3,"ТаблицаСтраницПриВыводеСтроки", 309 | {1,"ТаблицаСтраницПриВыводеСтроки", 310 | {1,1, 311 | {"ru","Таблица страниц при выводе строки"} 312 | }, 313 | {1,1, 314 | {"ru","Таблица страниц при выводе строки"} 315 | }, 316 | {1,1, 317 | {"ru","Таблица страниц при выводе строки"} 318 | }, 319 | {4,0, 320 | {0},"",-1,-1,1,0,""}, 321 | {0,0,0} 322 | } 323 | } 324 | } 325 | } 326 | }, 327 | {8,6,32,242,233,1, 328 | {0, 329 | {2,-1,6,0}, 330 | {2,-1,6,0} 331 | }, 332 | {0, 333 | {2,0,1,-56}, 334 | {2,-1,6,0} 335 | }, 336 | {0, 337 | {2,-1,6,0}, 338 | {2,-1,6,0} 339 | }, 340 | {0, 341 | {2,0,3,-6}, 342 | {2,-1,6,0} 343 | }, 344 | {0, 345 | {2,-1,6,0}, 346 | {2,-1,6,0} 347 | }, 348 | {0, 349 | {2,-1,6,0}, 350 | {2,-1,6,0} 351 | },0,1, 352 | {0,8,0},0,0,0,0,0,0,2,0,0}, 353 | {14,"ТаблицаСтраниц",4294967295,0,0,0}, 354 | {0} 355 | }, 356 | {e69bf21d-97b2-4f37-86db-675aea9ec2cb,5, 357 | {2, 358 | { 359 | {16,1, 360 | {3,4, 361 | {0} 362 | }, 363 | {3,4, 364 | {0} 365 | }, 366 | {7,3,0,1,100},0, 367 | {3,3, 368 | {-22} 369 | }, 370 | {3,4, 371 | {0} 372 | }, 373 | {3,4, 374 | {0} 375 | }, 376 | {3,4, 377 | {0} 378 | }, 379 | {3,3, 380 | {-21} 381 | }, 382 | {3,0, 383 | {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, 384 | {1,0},0,0,100,0,0},9,2,0,0,1,1, 385 | {5,fcf82488-b859-418f-b7d3-91e50d5382c1,14,1,5, 386 | {6,e86dcc75-a1b2-4560-b95f-2b59aa3919a7,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, 387 | {6,4294967295,00000000-0000-0000-0000-000000000000,85, 388 | {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0}, 389 | {6,478b40a3-5554-48ef-939f-3a692c538969,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, 390 | {6,4294967295,00000000-0000-0000-0000-000000000000,86, 391 | {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0}, 392 | {6,8c1bef7c-2434-42ff-a665-7e1ee9134e27,1,e1692cc2-605b-4535-84dd-28440238746c, 393 | {3,"КоманднаяПанель1СнятьФлажки", 394 | {1,"КоманднаяПанель1СнятьФлажки", 395 | {1,1, 396 | {"ru","Снять флажки"} 397 | }, 398 | {1,1, 399 | {"ru","Снять флажки"} 400 | }, 401 | {1,1, 402 | {"ru","Снять флажки"} 403 | }, 404 | {4,0, 405 | {0},"",-1,-1,1,0,""}, 406 | {0,0,0} 407 | } 408 | },7, 409 | {1,2, 410 | {"ru","Снять флажки"}, 411 | {"uk","Зняти прапорці"} 412 | }, 413 | {1,2, 414 | {"ru","Снять флажки"}, 415 | {"uk","Зняти прапорці"} 416 | }, 417 | {4,1, 418 | {-11},"",-1,-1,1,0,""} 419 | }, 420 | {6,3c8c0674-a5c0-4b57-84ee-ec53f2705ced,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, 421 | {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0}, 422 | {6,587b99e9-17c6-42c6-9a95-1ba335ea4018,1,e1692cc2-605b-4535-84dd-28440238746c, 423 | {3,"КоманднаяПанель1УстановитьФлажки", 424 | {1,"КоманднаяПанель1УстановитьФлажки", 425 | {1,1, 426 | {"ru","Установить флажки"} 427 | }, 428 | {1,1, 429 | {"ru","Установить флажки"} 430 | }, 431 | {1,1, 432 | {"ru","Установить флажки"} 433 | }, 434 | {4,0, 435 | {0},"",-1,-1,1,0,""}, 436 | {0,0,0} 437 | } 438 | },7, 439 | {1,2, 440 | {"ru","Установить флажки"}, 441 | {"uk","Встановити прапорці"} 442 | }, 443 | {1,2, 444 | {"ru","Установить флажки"}, 445 | {"uk","Встановити прапорці"} 446 | }, 447 | {4,1, 448 | {-10},"",-1,-1,1,0,""} 449 | },1, 450 | {5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,e86dcc75-a1b2-4560-b95f-2b59aa3919a7, 451 | {8,"Действие",0,1, 452 | {1,1, 453 | {"#","Действие"} 454 | },0,fcf82488-b859-418f-b7d3-91e50d5382c1,9,1e2,0,0,1,0,0,0,0},478b40a3-5554-48ef-939f-3a692c538969, 455 | {8,"Действие1",0,1, 456 | {1,1, 457 | {"#","Действие1"} 458 | },0,fcf82488-b859-418f-b7d3-91e50d5382c1,10,1e2,0,0,1,0,0,0,0},3c8c0674-a5c0-4b57-84ee-ec53f2705ced, 459 | {8,"Разделитель",0,1, 460 | {1,0},0,fcf82488-b859-418f-b7d3-91e50d5382c1,11,1e2,2,0,1,0,0,0,0},587b99e9-17c6-42c6-9a95-1ba335ea4018, 461 | {8,"УстановитьФлажки",0,1, 462 | {1,0},1,fcf82488-b859-418f-b7d3-91e50d5382c1,12,1e2,0,0,1,0,0,0,0},8c1bef7c-2434-42ff-a665-7e1ee9134e27, 463 | {8,"СнятьФлажки",0,1, 464 | {1,0},1,fcf82488-b859-418f-b7d3-91e50d5382c1,13,1e2,0,0,1,0,0,0,0}, 465 | {0,0, 466 | {0} 467 | } 468 | } 469 | },b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,9d0a2e40-b978-11d4-84b6-008048da06df,0,0,0} 470 | }, 471 | {8,6,6,242,30,1, 472 | {0, 473 | {2,-1,6,0}, 474 | {2,-1,6,0} 475 | }, 476 | {0, 477 | {2,5,0,24}, 478 | {2,-1,6,0} 479 | }, 480 | {0, 481 | {2,-1,6,0}, 482 | {2,-1,6,0} 483 | }, 484 | {0, 485 | {2,0,3,-6}, 486 | {2,-1,6,0} 487 | }, 488 | {0, 489 | {2,-1,6,0}, 490 | {2,-1,6,0} 491 | }, 492 | {0, 493 | {2,-1,6,0}, 494 | {2,-1,6,0} 495 | },1, 496 | {0,5,1},0,0,0,0,0,0,1,1,0,0}, 497 | {14,"КоманднаяПанель1",4,0,0,0}, 498 | {0} 499 | }, 500 | {6ff79819-710e-4145-97cd-1618da79e3e2,6, 501 | {1, 502 | { 503 | {16,1, 504 | {3,4, 505 | {0} 506 | }, 507 | {3,4, 508 | {0} 509 | }, 510 | {7,3,0,1,100},1, 511 | {3,3, 512 | {-22} 513 | }, 514 | {3,4, 515 | {0} 516 | }, 517 | {3,4, 518 | {0} 519 | }, 520 | {3,3, 521 | {-7} 522 | }, 523 | {3,3, 524 | {-21} 525 | }, 526 | {3,0, 527 | {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, 528 | {1,0},0,0,100,0,0},14, 529 | {1,2, 530 | {"ru","Отмена"}, 531 | {"uk","Відміна"} 532 | },1,1,0,0,0, 533 | {4,0, 534 | {0},"",-1,-1,1,0,""}, 535 | {0,0,0},0,0,0,0,0,2}, 536 | {1, 537 | {0,e1692cc2-605b-4535-84dd-28440238746c, 538 | {3,"КнопкаОтменаНажатие", 539 | {1,"КнопкаОтменаНажатие", 540 | {1,1, 541 | {"ru","Кнопка отмена нажатие"} 542 | }, 543 | {1,1, 544 | {"ru","Кнопка отмена нажатие"} 545 | }, 546 | {1,1, 547 | {"ru","Кнопка отмена нажатие"} 548 | }, 549 | {4,0, 550 | {0},"",-1,-1,1,0,""}, 551 | {0,0,0} 552 | } 553 | } 554 | } 555 | } 556 | }, 557 | {8,172,263,242,283,1, 558 | {0, 559 | {2,0,1,-26}, 560 | {2,-1,6,0} 561 | }, 562 | {0, 563 | {2,0,1,-6}, 564 | {2,-1,6,0} 565 | }, 566 | {0, 567 | {2,0,3,-76}, 568 | {2,-1,6,0} 569 | }, 570 | {0, 571 | {2,0,3,-6}, 572 | {2,-1,6,0} 573 | }, 574 | {0, 575 | {2,-1,6,0}, 576 | {2,-1,6,0} 577 | }, 578 | {0, 579 | {2,-1,6,0}, 580 | {2,-1,6,0} 581 | },0,0,0,0,0,0,0,2,5,1,1}, 582 | {14,"КнопкаОтмена",4294967295,0,0,0}, 583 | {0} 584 | }, 585 | {6ff79819-710e-4145-97cd-1618da79e3e2,7, 586 | {1, 587 | { 588 | {16,1, 589 | {3,4, 590 | {0} 591 | }, 592 | {3,4, 593 | {0} 594 | }, 595 | {7,3,0,1,100},1, 596 | {3,3, 597 | {-22} 598 | }, 599 | {3,4, 600 | {0} 601 | }, 602 | {3,4, 603 | {0} 604 | }, 605 | {3,3, 606 | {-7} 607 | }, 608 | {3,3, 609 | {-21} 610 | }, 611 | {3,0, 612 | {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, 613 | {1,0},0,0,100,0,0},14, 614 | {1,2, 615 | {"ru","ОК"}, 616 | {"uk","ОК"} 617 | },1,1,1,0,0, 618 | {4,0, 619 | {0},"",-1,-1,1,0,""}, 620 | {0,0,0},0,0,0,0,0,2}, 621 | {1, 622 | {0,e1692cc2-605b-4535-84dd-28440238746c, 623 | {3,"КнопкаОКНажатие", 624 | {1,"КнопкаОКНажатие", 625 | {1,1, 626 | {"ru","Кнопка ОКНажатие"} 627 | }, 628 | {1,1, 629 | {"ru","Кнопка ОКНажатие"} 630 | }, 631 | {1,1, 632 | {"ru","Кнопка ОКНажатие"} 633 | }, 634 | {4,0, 635 | {0},"",-1,-1,1,0,""}, 636 | {0,0,0} 637 | } 638 | } 639 | } 640 | } 641 | }, 642 | {8,94,263,164,283,1, 643 | {0, 644 | {2,0,1,-26}, 645 | {2,-1,6,0} 646 | }, 647 | {0, 648 | {2,0,1,-6}, 649 | {2,-1,6,0} 650 | }, 651 | {0, 652 | {2,0,3,-154}, 653 | {2,-1,6,0} 654 | }, 655 | {0, 656 | {2,0,3,-84}, 657 | {2,-1,6,0} 658 | }, 659 | {0, 660 | {2,-1,6,0}, 661 | {2,-1,6,0} 662 | }, 663 | {0, 664 | {2,-1,6,0}, 665 | {2,-1,6,0} 666 | },0,0,0,0,0,0,0,3,4,1,1}, 667 | {14,"КнопкаОК",4294967295,0,0,0}, 668 | {0} 669 | }, 670 | {35af3d93-d7c7-4a2e-a8eb-bac87a1a3f26,8, 671 | {1, 672 | { 673 | { 674 | {16,1, 675 | {3,4, 676 | {0} 677 | }, 678 | {3,4, 679 | {0} 680 | }, 681 | {7,3,0,1,100},0, 682 | {3,3, 683 | {-22} 684 | }, 685 | {3,4, 686 | {0} 687 | }, 688 | {3,4, 689 | {0} 690 | }, 691 | {3,3, 692 | {-7} 693 | }, 694 | {3,3, 695 | {-21} 696 | }, 697 | {3,0, 698 | {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, 699 | {1,2, 700 | {"ru","Закрывать панель настроек при формировании отчета"}, 701 | {"uk","Закривати панель настройок при формуванні звіту"} 702 | },0,0,100,0,0},6, 703 | {1,2, 704 | {"ru","Закрывать при формировании отчета"}, 705 | {"uk","Закривати при формуванні звіту"} 706 | },1,0,1,0,100,1},4,0,0,0,0,0}, 707 | {0} 708 | }, 709 | {8,6,238,242,258,1, 710 | {0, 711 | {2,4,1,5}, 712 | {2,-1,6,0} 713 | }, 714 | {0, 715 | {2,8,0,20}, 716 | {2,-1,6,0} 717 | }, 718 | {0, 719 | {2,-1,6,0}, 720 | {2,-1,6,0} 721 | }, 722 | {0, 723 | {2,8,2,236}, 724 | {2,-1,6,0} 725 | }, 726 | {0, 727 | {2,-1,6,0}, 728 | {2,-1,6,0} 729 | }, 730 | {0, 731 | {2,-1,6,0}, 732 | {2,-1,6,0} 733 | },1, 734 | {0,8,1},0,1, 735 | {0,8,3},0,0,0,0,4,3,0,0}, 736 | {14,"ЗакрыватьПриФормированииОтчета",4294967295,0,0,0}, 737 | {0} 738 | } 739 | } 740 | },248,289,1,0,1,4,4,120,248,289,96}, 741 | { 742 | {-1},3, 743 | {2, 744 | { 745 | {1},1,0,1,"ТаблицаСтраниц", 746 | {"Pattern", 747 | {"#",acf6192e-81ca-46ef-93a6-5a6968b78663} 748 | } 749 | }, 750 | { 751 | {2},1,0,1,"ЗакрыватьПанельПриФормированииОтчета", 752 | {"Pattern", 753 | {"B"} 754 | } 755 | } 756 | }, 757 | {2, 758 | {4, 759 | {1, 760 | {1} 761 | } 762 | }, 763 | {8, 764 | {1, 765 | {2} 766 | } 767 | } 768 | } 769 | }, 770 | {00000000-0000-0000-0000-000000000000,0}, 771 | {0},1,4,1,0,0,0, 772 | {1,4,4294967295,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0}, 773 | {0}, 774 | {8,0, 775 | {4,0, 776 | {0},"",-1,-1,1,0,""}, 777 | {4,0, 778 | {0},"",-1,-1,1,0,""}, 779 | {4,0, 780 | {0},"",-1,-1,1,0,""},100,0,0,0},1,2,0,0,1,1} -------------------------------------------------------------------------------- /src/integration-1c-redmine/Form/ФормаНастройкиПанелиПользователя/module.bsl: -------------------------------------------------------------------------------- 1 |  2 | Процедура КнопкаОКНажатие(Элемент) 3 | 4 | Закрыть(КодВозвратаДиалога.ОК); 5 | 6 | КонецПроцедуры 7 | 8 | Процедура КнопкаОтменаНажатие(Элемент) 9 | 10 | Закрыть(); 11 | 12 | КонецПроцедуры 13 | 14 | Процедура КоманднаяПанель1УстановитьФлажки(Кнопка) 15 | 16 | Для Каждого СтрокаТаблицы Из ТаблицаСтраниц Цикл 17 | Если СтрокаТаблицы.Страница <> "Диаграмма" Тогда 18 | СтрокаТаблицы.Использование = Истина; 19 | КонецЕсли; 20 | КонецЦикла; 21 | 22 | КонецПроцедуры 23 | 24 | Процедура КоманднаяПанель1СнятьФлажки(Кнопка) 25 | 26 | Для Каждого СтрокаТаблицы Из ТаблицаСтраниц Цикл 27 | Если СтрокаТаблицы.Страница <> "Диаграмма" Тогда 28 | СтрокаТаблицы.Использование = Ложь; 29 | КонецЕсли; 30 | КонецЦикла; 31 | 32 | КонецПроцедуры 33 | 34 | Процедура ТаблицаСтраницПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) 35 | 36 | Если ДанныеСтроки.Страница = "Диаграмма" Тогда 37 | ОформлениеСтроки.Ячейки.Использование.ТолькоПросмотр = Истина; 38 | ОформлениеСтроки.ЦветТекста = Новый Цвет(117, 117, 117); 39 | КонецЕсли; 40 | 41 | КонецПроцедуры 42 | -------------------------------------------------------------------------------- /src/integration-1c-redmine/Form/ФормаРедактирования/module.bsl: -------------------------------------------------------------------------------- 1 |  2 | Перем мСброситьРодителя; 3 | 4 | Процедура КнопкаВыполнитьНажатие(Кнопка) 5 | 6 | Свойства = Новый Структура("Проект, Трекер, Статус, Приоритет, Исполнитель, НомерРодителя, ДатаНачала, ДатаВыполнения, Комментарий"); 7 | 8 | ИзмененныеСвойства = Новый Структура; 9 | Для Каждого КиЗ Из Свойства Цикл 10 | Если ЭлементыФормы[КиЗ.Ключ].Значение = "Нет изменений" Или (ЭлементыФормы[КиЗ.Ключ].Значение = 0 И Не мСброситьРодителя) Или ЭлементыФормы[КиЗ.Ключ].Значение = '0001-01-01' Тогда 11 | Продолжить; 12 | Иначе 13 | ИзмененныеСвойства.Вставить(КиЗ.Ключ, ЭлементыФормы[КиЗ.Ключ].Значение); 14 | КонецЕсли; 15 | КонецЦикла; 16 | 17 | Закрыть(ИзмененныеСвойства); 18 | 19 | КонецПроцедуры 20 | 21 | 22 | Процедура ПроектНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 23 | ЗаполнитьСписокВыбораПроекта(); 24 | КонецПроцедуры 25 | 26 | Процедура ТрекерНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 27 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "trackers"); 28 | КонецПроцедуры 29 | 30 | Процедура СтатусНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 31 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "issue_statuses"); 32 | КонецПроцедуры 33 | 34 | Процедура ПриоритетНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 35 | ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "enumerations/issue_priorities", "issue_priorities"); 36 | КонецПроцедуры 37 | 38 | Процедура ИсполнительНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 39 | ЗаполнитьСписокВыбораИсполнителей(); 40 | КонецПроцедуры 41 | 42 | 43 | Процедура ЗаполнитьСписокВыбораПроекта() 44 | 45 | Если Не ВсеПоляЗаполнены(Новый Структура("APIkey")) Тогда 46 | Возврат; 47 | КонецЕсли; 48 | 49 | //: ЗагруженныеДанные = Новый Соответствие 50 | Данные = ЗагруженныеДанные.Получить("projects"); 51 | 52 | Если Данные = Неопределено Тогда 53 | Данные = ПолучитьДанныеРесурсаИзТрекера("projects", ОтчетОВыполнении); 54 | 55 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 56 | Сообщить(ОтчетОВыполнении.ТекстОшибки); 57 | Возврат; 58 | КонецЕсли; 59 | 60 | ЗагруженныеДанные.Вставить("projects", Данные); 61 | КонецЕсли; 62 | 63 | мСписокПроектов = Новый СписокЗначений; 64 | Для Каждого ДанныеПроекта Из Данные["projects"] Цикл 65 | мСписокПроектов.Добавить(ДанныеПроекта.name); 66 | КонецЦикла; 67 | 68 | ЭлементыФормы.Проект.СписокВыбора = мСписокПроектов; 69 | 70 | КонецПроцедуры 71 | 72 | Процедура ЗаполнитьСписокВыбораИсполнителей() 73 | 74 | Если Не ВсеПоляЗаполнены(Новый Структура("APIkey", "ЗадачаПроект")) Тогда 75 | Возврат; 76 | КонецЕсли; 77 | 78 | Данные = ЗагруженныеДанные.Получить("projects"); 79 | Если Данные <> Неопределено Тогда 80 | Для Каждого ДанныеПроекта Из Данные["projects"] Цикл 81 | Если ЗадачаПроект = ДанныеПроекта.name Тогда 82 | Проект = ДанныеПроекта.id; 83 | КонецЕсли; 84 | КонецЦикла; 85 | КонецЕсли; 86 | 87 | //: ЗагруженныеДанные = Новый Соответствие 88 | Данные = ЗагруженныеДанные.Получить("memberships"); 89 | 90 | Если Данные = Неопределено Тогда 91 | Данные = ПолучитьДанныеРесурсаИзТрекера("projects/"+Проект+"/memberships", ОтчетОВыполнении); 92 | 93 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 94 | Сообщить(ОтчетОВыполнении.ТекстОшибки); 95 | Возврат; 96 | КонецЕсли; 97 | 98 | ЗагруженныеДанные.Вставить("memberships", Данные); 99 | КонецЕсли; 100 | 101 | СписокИсполнителей = Новый СписокЗначений; 102 | Для Каждого Структура Из Данные["memberships"] Цикл 103 | СписокИсполнителей.Добавить(Структура.user.name); 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 | // TODO Стоит ли переделать на Вопрос ? 145 | Сообщить("Для выбранного списка задач будет ""сброшен"" родитель!"); 146 | КонецЕсли; 147 | 148 | УстановитьДоступность(); 149 | КонецПроцедуры 150 | 151 | Процедура УстановитьДоступность() 152 | ЭлементыФормы.НомерРодителя.Доступность = Не мСброситьРодителя; 153 | КонецПроцедуры 154 | 155 | 156 | мСброситьРодителя = Ложь -------------------------------------------------------------------------------- /src/integration-1c-redmine/Form/ФормаУправляемая/Форма.bsl: -------------------------------------------------------------------------------- 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 | #КонецЕсли 36 | КонецЕсли; 37 | ВсеЗаполнены = Ложь; 38 | КонецЕсли; 39 | КонецЦикла; 40 | 41 | Возврат ВсеЗаполнены; 42 | КонецФункции 43 | 44 | &НаКлиенте 45 | Функция ОбязательныеПоля() 46 | Возврат "Сервер, Порт," + ?(Объект.БазоваяАутентификация, "Пользователь, Пароль", "APIkey"); 47 | КонецФункции 48 | 49 | 50 | &НаКлиенте 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 | Элементы.СписокЗадач.ОтборСтрок = Новый ФиксированнаяСтруктура("ПолеОтбора", Формат(ТекСтрокаДерева.Идентификатор, "ЧГ=0")); 78 | 79 | Объект.СписокЗадач.Сортировать("ПолеСортировки Возр"); 80 | 81 | КонецПроцедуры 82 | 83 | &НаКлиенте 84 | Процедура УстановитьОписаниеЗадачи(ТекстОписания); 85 | 86 | //TODO: Проверить конвертер Textile в HTML с IE ниже 9-го 87 | Попытка 88 | Элементы.ОписаниеЗадачиHTML.Документ.getElementById ("txt").innerHTML = ТекстОписания; 89 | 90 | // Посылаем сообщение невидимой кнопке, чтобы выполнить команду JS 91 | Команда = Элементы.ОписаниеЗадачиHTML.Документ.getElementById ("SendEvent"); 92 | Команда.click("onclick"); 93 | 94 | // получаем результат из контейнера DIV 95 | //лРез = Элементы.ОписаниеЗадачиHTML.Документ.getElementById ("BufferData").innerHTML; 96 | Исключение 97 | КонецПопытки; 98 | 99 | КонецПроцедуры 100 | 101 | &НаКлиенте 102 | Процедура УстановитьИнфоОЗатраченномВремениПоЗадаче(ТекСтрока) 103 | 104 | УжеЗатрачено = ?(ТекСтрока.ЗатраченоВремени = 0, "Нет данных о затраченом времени", "Уже затрачено: "+Формат(ТекСтрока.ЗатраченоВремени, "ЧЦ=10; ЧДЦ=2; ЧГ=0")+" час(ов)"); 105 | 106 | КонецПроцедуры 107 | 108 | //////////////////////////////////////////////////////////////////////////////// 109 | // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ 110 | 111 | &НаСервере 112 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 113 | 114 | ДобавитьКнопкуПерезапуска(); 115 | 116 | КонецПроцедуры 117 | 118 | 119 | &НаКлиенте 120 | Процедура ПриОткрытии(Отказ) 121 | 122 | ОбработатьВыборПользователя(КодВозвратаДиалога.Да, Неопределено); // Выполнить инициализацию основных параметров обработки 123 | 124 | УстановитьВидимость(); 125 | УстановитьЗаголовок(); 126 | 127 | // Поля по умолчанию 128 | Деятельность = "Development"; 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 | КонецПроцедуры 157 | 158 | &НаКлиенте 159 | Процедура ПолеСсылкаНаОбъект1СНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 160 | ЗаполнитьСписокВыбораПолеСсылкаНаОбъект1С(); 161 | КонецПроцедуры 162 | 163 | &НаКлиенте 164 | Процедура ФорматированиеТекстаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 165 | 166 | Элементы.ФорматированиеТекста.СписокВыбора.Очистить(); 167 | 168 | Элементы.ФорматированиеТекста.СписокВыбора.Добавить("none"); 169 | Элементы.ФорматированиеТекста.СписокВыбора.Добавить("Textile"); 170 | Элементы.ФорматированиеТекста.СписокВыбора.Добавить("Markdown"); 171 | 172 | КонецПроцедуры 173 | 174 | &НаКлиенте 175 | Процедура ФорматированиеТекстаПриИзменении(Элемент) 176 | 177 | УстановитьОписаниеЗадачиHTML(Истина); 178 | 179 | КонецПроцедуры 180 | 181 | &НаСервере 182 | Процедура УстановитьОписаниеЗадачиHTML(ИзменитьКонвертер = Ложь) 183 | 184 | ОписаниеЗадачиHTML = ОбъектЭтойОбработки().ПолучитьТекстИнициализацииКовертераВПолеHTML(ИзменитьКонвертер); 185 | 186 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 187 | 188 | КонецПроцедуры 189 | 190 | 191 | 192 | &НаКлиенте 193 | Процедура СтатусНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) 194 | ДопВариантыПолей = Новый Массив; 195 | ДопВариантыПолей.Добавить("open"); 196 | ДопВариантыПолей.Добавить("closed"); 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 | 228 | УстановитьОтборСпискаПоДереву(ТекСтрокаДерева); 229 | 230 | // Снимаем флажки 231 | СнятьФлажки(Неопределено); 232 | 233 | мТекПозицияВДереве = ТекСтрокаДерева.ПолучитьИдентификатор(); 234 | 235 | КонецПроцедуры 236 | 237 | 238 | // Список задач 239 | 240 | &НаКлиенте 241 | Процедура СписокЗадачПриАктивизацииСтроки(Элемент) 242 | 243 | ТекСтрокаСписка = Элементы.СписокЗадач.ТекущиеДанные; 244 | Если ТекСтрокаСписка = Неопределено Тогда 245 | Возврат; 246 | КонецЕсли; 247 | 248 | мНомерЗадачи = Формат(ТекСтрокаСписка.Идентификатор,"ЧГ=0"); 249 | 250 | Если ПоказатьДополнительнуюПанель Тогда 251 | УстановитьОписаниеЗадачи(ТекСтрокаСписка.Описание); 252 | КонецЕсли; 253 | 254 | //Если ЭлементыФормы.ДополнительнаяПанель.Страницы.История.Раскрыта Тогда 255 | // ВывестиИсториюИзмененийЗадачи(мНомерЗадачи); 256 | //КонецЕсли; 257 | 258 | УстановитьИнфоОЗатраченномВремениПоЗадаче(ТекСтрокаСписка); 259 | 260 | Если мТекПозицияВСписке <> ТекСтрокаСписка.ПолучитьИдентификатор() Тогда 261 | мТекПозицияВСписке = ТекСтрокаСписка.ПолучитьИдентификатор(); 262 | КонецЕсли; 263 | 264 | КонецПроцедуры 265 | 266 | &НаСервере 267 | Функция ПолучитьДанныеОЗатраченномВремениПоЗадаче(НомерЗадачи) 268 | 269 | мПараметры = "&issue_id="+НомерЗадачи; 270 | ДанныеОВремени = ОбъектЭтойОбработки().ПолучитьДанныеРесурсаИзТрекера("time_entries", мПараметры, Ложь); 271 | 272 | Если ОбъектЭтойОбработки().ОтчетоВыполнении.ЕстьОшибки Тогда 273 | Возврат Новый Массив; 274 | КонецЕсли; 275 | 276 | Возврат ДанныеОВремени["time_entries"]; 277 | КонецФункции 278 | 279 | 280 | &НаКлиенте 281 | Процедура ЗаполнитьСписокВыбораПроекта() 282 | 283 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля()), "Заполнение списка проектов") Тогда 284 | Возврат; 285 | КонецЕсли; 286 | 287 | СписокПроектов = ПолучитьСписокПроектовИзТрекера(); 288 | 289 | Если Объект.ОтчетОвыполнении.ЕстьОшибки Тогда 290 | ПоказатьСообщениеПользователю("Проект", ЭтаФорма, Объект.ОтчетОВыполнении.ТекстОшибки); 291 | КонецЕсли; 292 | 293 | Элементы.Проект.СписокВыбора.Очистить(); 294 | Для Каждого ДанныеПроекта Из СписокПроектов Цикл 295 | Если ДанныеПроекта["STATUS"] = 1 Тогда // открытые проекты 296 | Элементы.Проект.СписокВыбора.Добавить(ДанныеПроекта["name"]); 297 | КонецЕсли; 298 | КонецЦикла; 299 | 300 | КонецПроцедуры 301 | 302 | &НаКлиенте 303 | Процедура ПерезаполнитьСписокЗапросов() 304 | 305 | Данные = Объект.ЗагруженныеДанные.Получить("queries"); 306 | Если Данные = Неопределено Тогда 307 | Возврат; 308 | КонецЕсли; 309 | 310 | Если ЗначениеЗаполнено(Проект) Тогда 311 | мПроект = ПолучитьИдентификаторПараметра(Проект, "projects"); 312 | КонецЕсли; 313 | 314 | Если мПользовательскиеЗапросы = Неопределено Тогда 315 | мПользовательскиеЗапросы = Новый СписокЗначений; 316 | Иначе 317 | Для Каждого Кнопка Из мПользовательскиеЗапросы Цикл 318 | УдалитьКнопкуИзФормы(Кнопка.Значение); 319 | КонецЦикла; 320 | КонецЕсли; 321 | 322 | Для Каждого Запрос Из Данные["queries"] Цикл 323 | Если НЕ Запрос.Свойство("project_id") Тогда 324 | мПользовательскиеЗапросы.Добавить("Запрос_"+Формат(Запрос.id, "ЧГ=0"), Запрос.name); 325 | КонецЕсли; 326 | Если мПроект <> Неопределено И Запрос.Свойство("project_id") И Запрос.project_id = мПроект Тогда 327 | мПользовательскиеЗапросы.Добавить("Запрос_"+Формат(Запрос.id, "ЧГ=0"), Запрос.name); 328 | КонецЕсли; 329 | КонецЦикла; 330 | 331 | Для Каждого Кнопка Из мПользовательскиеЗапросы Цикл 332 | ДобавитьКнопкуНаФорму(Кнопка.Значение, Кнопка.Представление, "ОбновитьСписокЗадачПоЗапросу", "Запросы",, БиблиотекаКартинок.СтартБизнесПроцесса); 333 | КонецЦикла; 334 | 335 | КонецПроцедуры 336 | 337 | &НаКлиенте 338 | Процедура ОбновитьСписокЗадачПоЗапросу(Кнопка) 339 | 340 | ИдЗапроса = Число(Прав(Кнопка.Имя, СтрДлина(Кнопка.Имя) - 14)); 341 | 342 | ОбновитьСписокЗадач(Неопределено); 343 | 344 | КонецПроцедуры 345 | 346 | &НаСервере 347 | Функция ПолучитьИдентификаторПараметра(Параметр, Ресурс) 348 | Возврат ОбъектЭтойОбработки().ПолучитьИдентификаторПараметра(Параметр, Ресурс); 349 | КонецФункции 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | &НаСервере 358 | // Параметры: 359 | // Элементы - ВсеЭлементыФормы 360 | // Команды - КомандыФормы 361 | // ИмяКнопки - Строка 362 | // Синоним - Строка 363 | // ИмяДействия - Строка 364 | // ГруппаРодитель - ГруппаФормы (По умолчанию = Неопределено) 365 | // ТолькоВоВсехДействиях - Булево (По умолчанию = Ложь) 366 | // Картинка - Картинка (По умолчанию = Неопределено) 367 | // Пометка - Булево (По умолчанию = Ложь) 368 | // 369 | Процедура ДобавитьКнопкуНаФорму(ИмяКнопки, Синоним, ИмяДействия, Подменю, ТолькоВоВсехДействиях = Ложь, Картинка = Неопределено, Пометка = Ложь) 370 | 371 | ИмяКоманды = "Команда" + ИмяКнопки; 372 | 373 | // Добавляем новую команду обработки выбора вида операции. 374 | Команда = Команды.Добавить(ИмяКоманды); 375 | Команда.Действие = ИмяДействия; 376 | Если Картинка <> Неопределено Тогда 377 | Команда.Картинка = Картинка; 378 | КонецЕсли; 379 | 380 | НоваяКнопка = Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"), Элементы[Подменю]); 381 | 382 | НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; 383 | НоваяКнопка.ИмяКоманды = ИмяКоманды; 384 | НоваяКнопка.Заголовок = Синоним; 385 | НоваяКнопка.ТолькоВоВсехДействиях = ТолькоВоВсехДействиях; 386 | НоваяКнопка.Пометка = Пометка; 387 | 388 | КонецПроцедуры // ДобавитьКнопкуНаФорму() 389 | 390 | &НаСервере 391 | Процедура УдалитьКнопкуИзФормы(ИмяКнопки) 392 | 393 | Команда = Команды.Найти(ИмяКнопки); 394 | Команды.Удалить(Команда); 395 | 396 | Элемент = Элементы.Найти(ИмяКнопки); 397 | Элементы.Удалить(Элемент); 398 | 399 | КонецПроцедуры 400 | 401 | 402 | 403 | &НаКлиенте 404 | Процедура ПоказатьСообщениеПользователю(Поле, Данные, ТекстОшибки) 405 | 406 | Сообщение = Новый СообщениеПользователю; 407 | Сообщение.Текст = ТекстОшибки; 408 | Сообщение.Поле = Поле; 409 | Сообщение.УстановитьДанные(Данные); 410 | Сообщение.Сообщить(); 411 | 412 | КонецПроцедуры 413 | 414 | 415 | 416 | &НаКлиенте 417 | Процедура ЗаполнитьСписокВыбораИсполнителейПроекта() 418 | 419 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля()), "Сформировать список выбора исполнителей", Истина) Тогда 420 | Возврат; 421 | КонецЕсли; 422 | Если Не ВсеРеквизитыЗаполнены(Новый Структура("Проект"), "Сформировать список выбора исполнителей", Истина, ЭтаФорма) Тогда 423 | Возврат; 424 | КонецЕсли; 425 | 426 | мИсполнителейПроекта = ПолучитьСписокИсполнителейПроектаИзТрекера(); 427 | 428 | Элементы.Исполнитель.СписокВыбора.Очистить(); 429 | Элементы.Исполнитель.СписокВыбора.Добавить("<>"); 430 | Для Каждого Структура Из мИсполнителейПроекта Цикл 431 | Элементы.Исполнитель.СписокВыбора.Добавить(Структура.user.name); 432 | КонецЦикла; 433 | 434 | КонецПроцедуры 435 | 436 | &НаКлиенте 437 | Процедура ЗаполнитьТаблицуНастраиваемыхПолей() 438 | 439 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля()), "Сформировать список выбора исполнителей", Истина) Тогда 440 | Возврат; 441 | КонецЕсли; 442 | 443 | мНастраиваемыхПолей = ПолучитьСписокНастраиваемыхПолейИзТрекера(); 444 | 445 | тНастраиваемыеПоля.Очистить(); 446 | Для Каждого Поле Из мНастраиваемыхПолей Цикл 447 | Если Поле.customized_type = "issue" И Поле.Свойство("is_filter") И Поле.is_filter Тогда 448 | нСтрока = тНастраиваемыеПоля.Добавить(); 449 | 450 | нСтрока.Идентификатор = Поле.id; 451 | нСтрока.Имя = Поле.name; 452 | 453 | Если Поле.field_format = "string" Тогда 454 | нСтрока.Значение = ""; 455 | ИначеЕсли Поле.field_format = "bool" Тогда 456 | Если Поле.Свойство("default_value") Тогда 457 | нСтрока.Значение = Поле.default_value; 458 | Иначе 459 | нСтрока.Значение = 0; 460 | КонецЕсли; 461 | КонецЕсли; 462 | КонецЕсли; 463 | КонецЦикла; 464 | 465 | КонецПроцедуры 466 | 467 | &НаКлиенте 468 | Процедура ЗаполнитьСписокВыбораПравДоступа() 469 | 470 | //Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля() + ", Проект"), "Сформировать список выбора прав доступа",, ЭтаФорма) Тогда 471 | // Возврат; 472 | //КонецЕсли; 473 | 474 | //мПроект = ПолучитьИдентификаторПараметра(Проект, "projects"); 475 | // 476 | ////: ЗагруженныеДанные = Новый Соответствие 477 | //Данные = ЗагруженныеДанные.Получить("projects/"+мПроект+"/memberships"); 478 | // 479 | //Если Данные = Неопределено Тогда 480 | // Данные = ПолучитьДанныеРесурсаИзТрекера("projects/"+мПроект+"/memberships"); 481 | // 482 | // Если ОтчетОВыполнении.ЕстьОшибки Тогда 483 | // Сообщить(ОтчетОВыполнении.ТекстОшибки); 484 | // Возврат; 485 | // КонецЕсли; 486 | // 487 | // ЗагруженныеДанные.Вставить("projects/"+мПроект+"/memberships", Данные); 488 | //КонецЕсли; 489 | // 490 | //СписокПрав = Новый СписокЗначений; 491 | //СписокПрав.Добавить(0, "<>"); 492 | //Для Каждого Структура Из Данные["memberships"] Цикл 493 | // Для Каждого Право Из Структура["roles"] Цикл 494 | // Если СписокПрав.НайтиПоЗначению(Право.id) =Неопределено Тогда 495 | // СписокПрав.Добавить(Право.name); 496 | // КонецЕсли; 497 | // КонецЦикла; 498 | //КонецЦикла; 499 | // 500 | //ЭлементыФормы.ПравоДоступа.СписокВыбора = СписокПрав; 501 | 502 | КонецПроцедуры 503 | 504 | &НаКлиенте 505 | Процедура ЗаполнитьСписокВыбораПолеСсылкаНаОбъект1С() 506 | 507 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля()), "Сформировать список выбора исполнителей", Истина) Тогда 508 | Возврат; 509 | КонецЕсли; 510 | 511 | мНастраиваемыхПолей = ПолучитьСписокНастраиваемыхПолейИзТрекера(); 512 | 513 | Для Каждого Поле Из мНастраиваемыхПолей Цикл 514 | Если Поле.customized_type = "issue" Тогда 515 | Элементы.ПолеСсылкаНаОбъект1С.СписокВыбора.Добавить(Поле["name"]); 516 | КонецЕсли; 517 | КонецЦикла; 518 | 519 | КонецПроцедуры 520 | 521 | 522 | &НаКлиенте 523 | // Заполнение списков выбора полей 524 | // 525 | Процедура ЗаполнитьСписокВыбораЭлементаФормы(ИмяПоля, ДопМассив=Неопределено) Экспорт 526 | Ключ = ""; 527 | 528 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля()), "Сформировать список выбора исполнителей", Истина) Тогда 529 | Возврат; 530 | КонецЕсли; 531 | 532 | Если ИмяПоля = "Статус" Тогда 533 | Ресурс = "issue_statuses"; 534 | 535 | ИначеЕсли ИмяПоля = "Приоритет" Тогда 536 | Ключ = "issue_priorities"; 537 | Ресурс = "enumerations/issue_priorities"; 538 | 539 | ИначеЕсли ИмяПоля = "Трекер" Тогда 540 | Ресурс = "trackers"; 541 | 542 | ИначеЕсли ИмяПоля = "Деятельность" Тогда 543 | Ресурс = "enumerations/time_entry_activities"; 544 | Ключ = "time_entry_activities"; 545 | 546 | КонецЕсли; 547 | 548 | Если Ключ = "" Тогда 549 | Ключ = Ресурс; 550 | КонецЕсли; 551 | 552 | Данные = ПолучитьДанныеРесурсаПоКлючуИзТрекера(Ключ, Ресурс); 553 | 554 | Элементы[ИмяПоля].СписокВыбора.Очистить(); 555 | Если ДопМассив <> Неопределено Тогда 556 | Для Каждого Эл Из ДопМассив Цикл 557 | Элементы[ИмяПоля].СписокВыбора.Добавить(Эл); 558 | КонецЦикла; 559 | КонецЕсли; 560 | 561 | Для Каждого Вариант Из Данные Цикл 562 | Элементы[ИмяПоля].СписокВыбора.Добавить(Вариант.name); 563 | КонецЦикла; 564 | 565 | КонецПроцедуры 566 | 567 | &НаСервере 568 | Функция ПолучитьДанныеРесурсаПоКлючуИзТрекера(Ключ, Ресурс) 569 | 570 | //: ЗагруженныеДанные = Новый Соответствие 571 | Данные = Объект.ЗагруженныеДанные.Получить(Ресурс); 572 | Если Данные = Неопределено Тогда 573 | Данные = ОбъектЭтойОбработки().ПолучитьДанныеРесурсаИзТрекера(Ресурс,,,, Ключ); 574 | 575 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 576 | 577 | Если ОбъектЭтойОбработки().ОтчетОВыполнении.ЕстьОшибки Тогда 578 | Возврат Новый Массив; 579 | КонецЕсли; 580 | КонецЕсли; 581 | 582 | Возврат Данные[Ключ]; 583 | 584 | КонецФункции 585 | 586 | 587 | //////////////////////////////////////////////////////////////////////////////// 588 | // ПОВТОРЯЮЩИЕСЯ ДЕЙСТВИЯ ПРИ ИЗМЕНЕНИИ РАЗНЫХ РЕКВИЗИТОВ 589 | 590 | &НаКлиенте 591 | Процедура УстановитьВидимость() 592 | 593 | Элементы.Пароль.Видимость = Объект.БазоваяАутентификация; 594 | Элементы.Пользователь.Видимость = Объект.БазоваяАутентификация; 595 | Элементы.APIkey.Видимость = Не Объект.БазоваяАутентификация; 596 | Элементы.ДекорацияAPIKey.Видимость = Не Объект.БазоваяАутентификация; 597 | 598 | Элементы.ГруппаНастройки.Видимость = ПоказатьНастройки; 599 | Элементы.ПоказатьНастройки.Пометка = ПоказатьНастройки; 600 | 601 | Элементы.ДополнительнаяПанель.Видимость = ПоказатьДополнительнуюПанель; 602 | Элементы.ПоказатьДополнительнуюПанель.Пометка = ПоказатьДополнительнуюПанель; 603 | Элементы.СписокЗадачОписание.Видимость = Не ПоказатьДополнительнуюПанель; 604 | 605 | Элементы.СписокЗадачЗатраченоВремени.Видимость = Объект.ПолучатьДанныеОЗатраченномВремениПоЗадачам; 606 | 607 | КонецПроцедуры 608 | 609 | &НаКлиенте 610 | Процедура УстановитьДоступность() 611 | 612 | Элементы.СписокЗадачДобавитьЗадачу.Доступность = УспешнаяИнициализация; 613 | Элементы.Изменить.Доступность = УспешнаяИнициализация; 614 | Элементы.СписокЗадачОбновитьСписокЗадач.Доступность = УспешнаяИнициализация; 615 | 616 | КонецПроцедуры 617 | 618 | &НаКлиенте 619 | Процедура УстановитьЗаголовок() 620 | Заголовок = Заголовок + " v" + ПолучитьВерсиюОбработки(); 621 | КонецПроцедуры 622 | 623 | 624 | //////////////////////////////////////////////////////////////////////////////// 625 | // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ КНОПОК КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ 626 | 627 | 628 | &НаКлиенте 629 | Процедура РазвернутьВсе(Команда) 630 | Для Каждого СтрокаДерева Из ДеревоПроектовЗадач.ПолучитьЭлементы() Цикл 631 | Элементы.ДеревоПроектовЗадач.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина); 632 | КонецЦикла; 633 | КонецПроцедуры 634 | 635 | &НаКлиенте 636 | Процедура СвернутьВсе(Команда) 637 | Для Каждого СтрокаДерева Из ДеревоПроектовЗадач.ПолучитьЭлементы() Цикл 638 | Элементы.ДеревоПроектовЗадач.Свернуть(СтрокаДерева.ПолучитьИдентификатор()); 639 | КонецЦикла; 640 | КонецПроцедуры 641 | 642 | 643 | &НаКлиенте 644 | Процедура ИнициализацияПриСтартеПриИзменении(Элемент) 645 | Перем Параметр; 646 | 647 | Если НЕ Объект.ИнициализацияПриСтарте Тогда 648 | Возврат; 649 | КонецЕсли; 650 | 651 | Оповещение = Новый ОписаниеОповещения("ОбработатьВыборПользователя", ЭтаФорма, Параметр); 652 | ПоказатьВопрос(Оповещение, "Выполнить инициализацию параметров обработки из трекера?", РежимДиалогаВопрос.ДаНет); 653 | 654 | КонецПроцедуры 655 | 656 | &НаКлиенте 657 | Процедура ПолучатьДанныеОЗатраченномВремениПоЗадачамПриИзменении(Элемент) 658 | УстановитьВидимость(); 659 | КонецПроцедуры 660 | 661 | 662 | &НаКлиенте 663 | Процедура ПоказатьНастройки(Команда) 664 | 665 | ПоказатьНастройки = Не ПоказатьНастройки; 666 | 667 | Элементы[Команда.Имя].Пометка = ПоказатьНастройки; 668 | 669 | УстановитьВидимость(); 670 | 671 | КонецПроцедуры 672 | 673 | &НаКлиенте 674 | Процедура ПоказатьДополнительнуюПанель(Команда) 675 | 676 | ПоказатьДополнительнуюПанель = Не ПоказатьДополнительнуюПанель; 677 | 678 | Элементы[Команда.Имя].Пометка = ПоказатьДополнительнуюПанель; 679 | 680 | УстановитьВидимость(); 681 | 682 | КонецПроцедуры 683 | 684 | 685 | &НаКлиенте 686 | Процедура ДобавитьЗадачу(Команда) 687 | Сообщить("Данная опция еще не реализована!"); 688 | КонецПроцедуры 689 | 690 | &НаКлиенте 691 | Процедура УстановитьФлажки(Команда) 692 | Для Каждого СтрокаСписка Из Объект.СписокЗадач Цикл 693 | СтрокаСписка.Пометка = Истина; 694 | КонецЦикла; 695 | КонецПроцедуры 696 | 697 | &НаКлиенте 698 | Процедура СнятьФлажки(Команда) 699 | Для Каждого СтрокаСписка Из Объект.СписокЗадач Цикл 700 | СтрокаСписка.Пометка = Ложь; 701 | КонецЦикла; 702 | КонецПроцедуры 703 | 704 | &НаКлиенте 705 | Процедура Редактировать(Команда) 706 | Сообщить("Данная опция еще не реализована!"); 707 | КонецПроцедуры 708 | 709 | &НаКлиенте 710 | Процедура УдалитьЗадачу(Команда) 711 | Сообщить("Данная опция еще не реализована!"); 712 | КонецПроцедуры 713 | 714 | &НаКлиенте 715 | Процедура ОбновитьСписокЗадач(Команда) 716 | 717 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля())) Тогда 718 | Возврат; 719 | КонецЕсли; 720 | 721 | ВыполнитьДействияДляОбновленияДереваИСпискаЗадач(); 722 | 723 | Если Объект.ОтчетоВыполнении.ЕстьОшибки Тогда 724 | ПоказатьСообщениеПользователю("Объект.СписокЗадач", Объект, Объект.ОтчетоВыполнении.ТекстОшибки); 725 | Возврат; 726 | КонецЕсли; 727 | 728 | // Развернуть дерево задач 729 | РазвернутьВсе(Неопределено); 730 | 731 | // Установить фокус на задачу которая редактировалась 732 | УстановитьФокус(); 733 | 734 | //Инициализация(); // параметров для редактирования задач 735 | //ПерезаполнитьКнопкиВариантовРедактированияЗадач(); 736 | КонецПроцедуры 737 | 738 | &НаСервере 739 | Процедура ВыполнитьДействияДляОбновленияДереваИСпискаЗадач() 740 | 741 | ДанныеРесурса = ПолучитьСписокЗадачИзТрекера(); 742 | 743 | Если ОбъектЭтойОбработки().ОтчетОВыполнении.ЕстьОшибки Тогда 744 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 745 | Возврат; 746 | КонецЕсли; 747 | 748 | Дерево = ДанныеФормыВЗначение(ДеревоПроектовЗадач, Тип("ДеревоЗначений")); 749 | 750 | // Заполняем дерево проектов/задач 751 | Дерево = ОбъектЭтойОбработки().ЗаполнитьДеревоПоДаннымРесурсаИзТрекера(ДанныеРесурса, Дерево, "issues", "ДеревоПроектовЗадач" , Истина); 752 | 753 | // Заполнить таблицу задач 754 | //ЗаполнитьСписокЗадач_(ДанныеРесурса); 755 | ОбъектЭтойОбработки().ЗаполнитьСписокЗадач(ДанныеРесурса); 756 | 757 | Если Объект.ПолучатьДанныеОЗатраченномВремениПоЗадачам Тогда 758 | Для Каждого СтрокаСписка Из ОбъектЭтойОбработки().СписокЗадач Цикл 759 | Время = ПолучитьДанныеОЗатраченномВремениПоЗадаче(Формат(СтрокаСписка.Идентификатор, "ЧГ=0")); 760 | Для Каждого Эл Из Время Цикл 761 | СтрокаСписка.ЗатраченоВремени=СтрокаСписка.ЗатраченоВремени+Эл["hours"]; 762 | КонецЦикла; 763 | КонецЦикла; 764 | КонецЕсли; 765 | 766 | ЗначениеВДанныеФормы(Дерево, ДеревоПроектовЗадач); 767 | 768 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 769 | 770 | КонецПроцедуры 771 | 772 | &НаСервере 773 | Функция ПолучитьСписокЗадачИзТрекера() 774 | 775 | Отборы = ОбъектЭтойОбработки().СформироватьПараметрыЗапросаПолученияДанныхСТрекера(ЭтаФорма, Истина); 776 | Отборы = Отборы + "&include=journals,changesets"; 777 | ДанныеРесурса = ОбъектЭтойОбработки().ПолучитьДанныеРесурсаИзТрекера("issues", Отборы, Ложь); 778 | 779 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 780 | 781 | Возврат ДанныеРесурса; 782 | 783 | КонецФункции 784 | 785 | &НаКлиенте 786 | Процедура ПроверкаСоединения(Команда) 787 | Перем Параметр; 788 | 789 | ОтчетОВыполнении = ВыполнитьПроверкуСоединенияИнициализациюНаСервере(); 790 | 791 | Если ОтчетОВыполнении.ЕстьОшибки Тогда 792 | ПоказатьПредупреждение(, ОтчетОВыполнении.ТекстОшибки); 793 | Иначе 794 | Оповещение = Новый ОписаниеОповещения("ОбработатьВыборПользователя", ЭтаФорма, Параметр); 795 | ПоказатьВопрос(Оповещение, "Подключение к серверу выполнено успешно! 796 | |Выполнить инициализацию основных параметров обработки?", РежимДиалогаВопрос.ДаНет); 797 | КонецЕсли; 798 | 799 | УстановитьВидимость(); 800 | 801 | КонецПроцедуры 802 | 803 | &НаКлиенте 804 | Процедура НастройкаПериода(Команда) 805 | 806 | СтандартныйПериод = Новый СтандартныйПериод(ВариантСтандартногоПериода.ПроизвольныйПериод); 807 | 808 | Диалог = Новый ДиалогРедактированияСтандартногоПериода; 809 | Диалог.Период = СтандартныйПериод; 810 | 811 | Если Диалог.Редактировать() Тогда 812 | 813 | СтандартныйПериод = Диалог.Период; 814 | 815 | ДатаНач = СтандартныйПериод.ДатаНачала; 816 | ДатаКон = СтандартныйПериод.ДатаОкончания; 817 | 818 | КонецЕсли; 819 | КонецПроцедуры 820 | 821 | &НаКлиенте 822 | Процедура ОбработатьВыборПользователя(Результат, Параметр) Экспорт // "Выполнить инициализацию параметров обработки из трекера?" 823 | 824 | Если Результат = КодВозвратаДиалога.Да Тогда 825 | 826 | Если Не ВсеРеквизитыЗаполнены(Новый Структура(ОбязательныеПоля())) Тогда 827 | Возврат; 828 | КонецЕсли; 829 | 830 | ВыполнитьИнициализациюОсновныхПараметровОбработки(); 831 | 832 | Если Объект.ОтчетОВыполнении.ЕстьОшибки Тогда 833 | ПоказатьПредупреждение(, Объект.ОтчетОВыполнении.ТекстОшибки); 834 | Иначе 835 | УспешнаяИнициализация = Истина; 836 | Если Не Объект.ИнициализацияПриСтарте Тогда 837 | Объект.ИнициализацияПриСтарте = Истина; 838 | КонецЕсли; 839 | КонецЕсли; 840 | КонецЕсли; 841 | 842 | Если УспешнаяИнициализация Тогда 843 | ЗаполнитьСписокВыбораПроекта(); 844 | ПерезаполнитьСписокЗапросов(); 845 | ЗаполнитьТаблицуНастраиваемыхПолей(); 846 | КонецЕсли; 847 | 848 | УстановитьОписаниеЗадачиHTML(); 849 | 850 | УстановитьДоступность(); 851 | 852 | КонецПроцедуры 853 | 854 | &НаКлиенте 855 | Процедура ОставитьКомментарийКЗадаче(Команда) 856 | 857 | ТекущаяЗадача = Элементы.СписокЗадач.ТекущиеДанные; 858 | Если ТекущаяЗадача = Неопределено Тогда 859 | ПоказатьСообщениеПользователю("СписокЗадач", Объект, "Необходимо выбрать задачу в списке!"); 860 | Возврат; 861 | КонецЕсли; 862 | 863 | Объект.ЗадачаНомер = ТекущаяЗадача.Идентификатор; 864 | Объект.ЗадачаНомерРродительскойЗадачи = ТекущаяЗадача.НомерРодителя; 865 | Объект.ЗадачаПримечание = Примечание; 866 | 867 | Если НЕ ВсеРеквизитыЗаполнены(Новый Структура("ЗадачаНомер, ЗадачаПримечание"), Элементы[Команда.Имя].Заголовок) Тогда 868 | Возврат; 869 | КонецЕсли; 870 | 871 | ВыполнитьОбновлениеЗадачиВТрекере(); 872 | 873 | Если Объект.ОтчетоВыполнении.ЕстьОшибки Тогда 874 | ПоказатьСообщениеПользователю("СписокЗадач", Объект, Объект.ОтчетОВыполнении.ТекстОшибки); 875 | Возврат; 876 | КонецЕсли; 877 | 878 | Примечание = ""; 879 | 880 | КонецПроцедуры 881 | 882 | &НаКлиенте 883 | Процедура ДобавитьЗаписьОЗатраченомВремени(Команда) 884 | 885 | ТекущаяЗадача = Элементы.СписокЗадач.ТекущиеДанные; 886 | Если ТекущаяЗадача = Неопределено Тогда 887 | ПоказатьСообщениеПользователю("СписокЗадач", Объект, "Необходимо выбрать задачу в списке!"); 888 | Возврат; 889 | КонецЕсли; 890 | 891 | Объект.ЗадачаНомер = ТекущаяЗадача.Идентификатор; 892 | Объект.ЗадачаКомментарии = Комментарий; 893 | Объект.ЗадачаДеятельность = Деятельность; 894 | Объект.ЗадачаЗатраченноеВремя = ЗатраченноеВремя; 895 | 896 | Если НЕ ВсеРеквизитыЗаполнены(Новый Структура("ЗадачаНомер, ЗадачаДеятельность, ЗадачаЗатраченноеВремя"), Элементы[Команда.Имя].Заголовок) Тогда 897 | Возврат; 898 | КонецЕсли; 899 | 900 | ВыполнитьОбновлениеДанныхОЗатраченномВремениПоЗадаче(); 901 | 902 | Если Объект.ОтчетоВыполнении.ЕстьОшибки Тогда 903 | ПоказатьСообщениеПользователю("СписокЗадач", Объект, Объект.ОтчетОВыполнении.ТекстОшибки); 904 | Возврат; 905 | КонецЕсли; 906 | 907 | Комментарий = ""; 908 | ЗатраченноеВремя = 0; 909 | 910 | //мТекПозицияВСписке = ТекущаяЗадача.Идентификатор; 911 | //КоманднаяПанельСписокЗадачОбновитьСписок(Неопределено); 912 | 913 | КонецПроцедуры 914 | 915 | 916 | 917 | &НаСервере 918 | Процедура ВыполнитьОбновлениеДанныхОЗатраченномВремениПоЗадаче() 919 | 920 | ОбъектЭтойОбработки().ОбновитьДанныеОЗатраченномВремениПоЗадаче(); 921 | 922 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 923 | 924 | КонецПроцедуры 925 | 926 | &НаСервере 927 | Процедура ВыполнитьОбновлениеЗадачиВТрекере() 928 | 929 | ОбъектЭтойОбработки().ОбновитьЗадачуВТрекере(); 930 | 931 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 932 | 933 | КонецПроцедуры 934 | 935 | 936 | &НаСервере 937 | Процедура ВыполнитьИнициализациюОсновныхПараметровОбработки() 938 | 939 | ОбъектЭтойОбработки().Инициализация(Истина, ?(Проект<>"", Проект, Неопределено)); 940 | 941 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 942 | 943 | КонецПроцедуры 944 | 945 | 946 | &НаСервере 947 | Функция ВыполнитьПроверкуСоединенияИнициализациюНаСервере() 948 | 949 | Данные = ОбъектЭтойОбработки().ПолучитьДанныеРесурсаИзТрекера("projects"); 950 | 951 | ОтчетОВыполнении = ОбъектЭтойОбработки().ОтчетОВыполнении; 952 | 953 | Если НЕ ОтчетОВыполнении.ЕстьОшибки Тогда 954 | 955 | Если Данные["projects"].Количество() = 0 Тогда 956 | ОтчетОВыполнении.ТекстОшибки = "Список проектов, полученный из трекера, пуст, добавьте проект или обратитесь к администратору для проверки прав доступа в системе Redmine для текущего пользователя."; 957 | ОтчетОВыполнении.ЕстьОшибки = Истина; 958 | КонецЕсли; 959 | ОбъектЭтойОбработки().Инициализация(Истина, ?(Проект<>"", Проект, Неопределено)); 960 | КонецЕсли; 961 | 962 | Возврат ОтчетОВыполнении; 963 | 964 | КонецФункции 965 | 966 | 967 | 968 | 969 | #Область СлужебныеПроцедурыИФункции 970 | 971 | &НаСервере 972 | Функция ОбъектЭтойОбработки() 973 | 974 | Если ОбъектЭтойОбработки = Неопределено Тогда 975 | ОбъектЭтойОбработки = РеквизитФормыВЗначение("Объект"); 976 | КонецЕсли; 977 | 978 | Возврат ОбъектЭтойОбработки; 979 | 980 | КонецФункции 981 | 982 | &Насервере 983 | Функция ПолучитьВерсиюОбработки() 984 | Возврат ОбъектЭтойОбработки().Метаданные().Комментарий; 985 | КонецФункции 986 | 987 | &НаСервере 988 | Функция ПолучитьСписокПроектовИзТрекера() 989 | 990 | СписокПроектов = ОбъектЭтойОбработки().ПолучитьСписокПроектовИзТрекера(); 991 | 992 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 993 | 994 | Возврат СписокПроектов; 995 | КонецФункции 996 | 997 | &НаСервере 998 | Функция ПолучитьСписокИсполнителейПроектаИзТрекера() 999 | 1000 | мИсполнителейПроекта = ОбъектЭтойОбработки().ПолучитьСписокИсполнителейПроектаИзТрекера(Проект); 1001 | 1002 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 1003 | 1004 | Возврат мИсполнителейПроекта; 1005 | КонецФункции 1006 | 1007 | &НаСервере 1008 | Функция ПолучитьСписокНастраиваемыхПолейИзТрекера() 1009 | мНастраиваемыхПолей = ОбъектЭтойОбработки().ПолучитьСписокНастраиваемыхПолейИзТрекера(); 1010 | 1011 | ЗначениеВРеквизитФормы(ОбъектЭтойОбработки(), "Объект"); 1012 | 1013 | Возврат мНастраиваемыхПолей; 1014 | КонецФункции 1015 | 1016 | 1017 | 1018 | &НаСервере 1019 | Процедура ДобавитьКнопкуПерезапуска() 1020 | НоваяКоманда = ЭтаФорма.Команды.Добавить("кфПерезапуск"); 1021 | НоваяКоманда.Действие= "кфПерезапустить"; 1022 | НовыйЭлемент = Элементы.Добавить("кфПерезапустить", Тип("КнопкаФормы"),Элементы.ФормаКоманднаяПанель); 1023 | НовыйЭлемент.ИмяКоманды = "кфПерезапуск"; 1024 | НовыйЭлемент.Картинка = БиблиотекаКартинок.Перечитать; 1025 | НовыйЭлемент.Отображение = ОтображениеКнопки.КартинкаИТекст; 1026 | НовыйЭлемент.Заголовок = "Перезапустить ["+ТекущаяУниверсальнаяДата()+"]"; 1027 | КонецПроцедуры 1028 | 1029 | &НаКлиенте 1030 | Процедура кфПерезапустить(Команда) 1031 | 1032 | СтруктураПереоткрыть = Новый Структура(); 1033 | ПереоткрытьНаСервере("Поместить", СтруктураПереоткрыть); 1034 | Если СтруктураПереоткрыть.ФункцияПомещения = "НачатьПомещениеФайла" Тогда 1035 | НачатьПомещениеФайла(,,СтруктураПереоткрыть.ИспользуемоеИмяФайла,Ложь,); 1036 | Иначе 1037 | ПоместитьФайл(,СтруктураПереоткрыть.ИспользуемоеИмяФайла,,Ложь,); 1038 | КонецЕсли; 1039 | 1040 | ЭтаФорма.Закрыть(); 1041 | ПереоткрытьНаСервере("Создать", СтруктураПереоткрыть); 1042 | ОткрытьФорму(СтруктураПереоткрыть.ПолныйПутьИмениФормы); 1043 | 1044 | КонецПроцедуры 1045 | 1046 | &НаСервере 1047 | Процедура ПереоткрытьНаСервере(Режим, СтруктураПереоткрыть) 1048 | 1049 | Если Режим = "Поместить" Тогда 1050 | СтруктураПереоткрыть.Очистить(); 1051 | СтруктураПереоткрыть.Вставить("ФункцияПомещения", ?(СокрЛП(Метаданные.РежимИспользованияМодальности) = "НеИспользовать", "НачатьПомещениеФайла", "ПоместитьФайл")); 1052 | СтруктураПереоткрыть.Вставить("ИспользуемоеИмяФайла", СокрЛП(РеквизитформыВЗначение("Объект").ИспользуемоеИмяФайла)); 1053 | СтруктураПереоткрыть.Вставить("ПолныйПутьИмениФормы", СокрЛП(ЭтаФорма.ИмяФормы)); 1054 | ИначеЕсли Режим = "Создать" Тогда 1055 | ВнешниеОбработки.Создать(СтруктураПереоткрыть.ИспользуемоеИмяФайла, Ложь); 1056 | КонецЕсли; 1057 | 1058 | КонецПроцедуры 1059 | 1060 | &НаКлиенте 1061 | Процедура ПерейтиВТрекерПоКоманде(Команда) 1062 | СтрокаПорт = ?(Объект.Порт = 80, "", ":" + Формат(Объект.Порт, "ЧГ=0")); 1063 | 1064 | Если Найти(Команда.Имя, "СписокЗадач") Тогда 1065 | ИдПроекта = ПолучитьИдентификаторПараметра(Проект, "projects"); 1066 | ЗапуститьПриложение("http://" + Объект.Сервер + СтрокаПорт + "/projects/p"+Формат(ИдПроекта-1, "ЧЦ=3; ЧВН=; ЧГ=0") + "/issues"); 1067 | Иначе 1068 | ТекСтрока = Элементы.СписокЗадач.ТекущиеДанные; 1069 | Если Не ТекСтрока = Неопределено Тогда 1070 | ЗапуститьПриложение("http://" + Объект.Сервер + СтрокаПорт + "/issues/"+Формат(ТекСтрока.Идентификатор, "ЧГ=0")); 1071 | КонецЕсли; 1072 | КонецЕсли; 1073 | КонецПроцедуры 1074 | 1075 | &НаКлиенте 1076 | Функция ВернутьПервогоРодителяСтроки(СтрокаДерева) 1077 | 1078 | Если СтрокаДерева.Родитель = Неопределено Тогда 1079 | Возврат СтрокаДерева; 1080 | Иначе 1081 | Возврат ВернутьПервогоРодителяСтроки(СтрокаДерева.Родитель); 1082 | КонецЕсли; 1083 | 1084 | КонецФункции 1085 | 1086 | 1087 | 1088 | #КонецОбласти 1089 | 1090 | УспешнаяИнициализация = Ложь; 1091 | 1092 | -------------------------------------------------------------------------------- /src/integration-1c-redmine/maps.txt: -------------------------------------------------------------------------------- 1 | Form\ФормаУправляемая\Форма.bsl-->6a652304-4c72-4f42-b961-b4d4c0dac3bd.0 (8 301, 9 392) 2 | Макеты\redmine_32x32_png.txt-->c0af406c-58c2-4d78-9d7b-80c451ca5647.0 3 | Макеты\showdown_min_js.txt-->60101dac-fdfa-42a6-9bfc-b08a18a5c615.0 4 | Макеты\textile_js.txt-->c41d4d58-338d-475e-9fee-433707457d2c.0 5 | Макеты\ИнтегрироватьВирПортативные.mxl-->37e2d88c-1b48-4718-9cdc-bf2072e0cd1e.0 6 | -------------------------------------------------------------------------------- /src/integration-1c-redmine/renames.txt: -------------------------------------------------------------------------------- 1 | 15593028-0724-4d87-ad5a-987baebb04f3-->und\15593028-0724-4d87-ad5a-987baebb04f3 2 | 15593028-0724-4d87-ad5a-987baebb04f3.0-->Form\ФормаНастройкиПанелиПользователя 3 | 37e2d88c-1b48-4718-9cdc-bf2072e0cd1e-->und\37e2d88c-1b48-4718-9cdc-bf2072e0cd1e 4 | 37e2d88c-1b48-4718-9cdc-bf2072e0cd1e.0-->und\37e2d88c-1b48-4718-9cdc-bf2072e0cd1e.0 5 | 60101dac-fdfa-42a6-9bfc-b08a18a5c615-->und\60101dac-fdfa-42a6-9bfc-b08a18a5c615 6 | 60101dac-fdfa-42a6-9bfc-b08a18a5c615.0-->und\60101dac-fdfa-42a6-9bfc-b08a18a5c615.0 7 | 691846bc-b4a1-4fb1-a914-470f4dee8df8-->und\691846bc-b4a1-4fb1-a914-470f4dee8df8 8 | 691846bc-b4a1-4fb1-a914-470f4dee8df8.0-->Form\Форма 9 | 6a652304-4c72-4f42-b961-b4d4c0dac3bd-->und\6a652304-4c72-4f42-b961-b4d4c0dac3bd 10 | 6a652304-4c72-4f42-b961-b4d4c0dac3bd.0-->und\6a652304-4c72-4f42-b961-b4d4c0dac3bd.0 11 | b1f79ef2-4d8e-4108-a233-00bb25b18666-->und\b1f79ef2-4d8e-4108-a233-00bb25b18666 12 | c0af406c-58c2-4d78-9d7b-80c451ca5647-->und\c0af406c-58c2-4d78-9d7b-80c451ca5647 13 | c0af406c-58c2-4d78-9d7b-80c451ca5647.0-->und\c0af406c-58c2-4d78-9d7b-80c451ca5647.0 14 | c41d4d58-338d-475e-9fee-433707457d2c-->und\c41d4d58-338d-475e-9fee-433707457d2c 15 | c41d4d58-338d-475e-9fee-433707457d2c.0-->und\c41d4d58-338d-475e-9fee-433707457d2c.0 16 | ceaee0d2-5bce-4169-b6ad-905fc83870ef-->und\ceaee0d2-5bce-4169-b6ad-905fc83870ef 17 | ceaee0d2-5bce-4169-b6ad-905fc83870ef.0-->Form\ФормаЗадачи 18 | copyinfo-->und\copyinfo 19 | d8966fa6-1f9f-4801-9127-a4dfcc3c7b72-->und\d8966fa6-1f9f-4801-9127-a4dfcc3c7b72 20 | d8966fa6-1f9f-4801-9127-a4dfcc3c7b72.0-->Form\ФормаРедактирования 21 | fb4f8a6b-158a-4798-a08a-cc7cf6f09f01.0\info-->und\fb4f8a6b-158a-4798-a08a-cc7cf6f09f01.0\info 22 | fb4f8a6b-158a-4798-a08a-cc7cf6f09f01.0\text-->ObjectModule.bsl 23 | root-->und\root 24 | version-->und\version 25 | versions-->und\versions 26 | -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/15593028-0724-4d87-ad5a-987baebb04f3: -------------------------------------------------------------------------------- 1 | {1, 2 | {1, 3 | {0, 4 | {12, 5 | {1, 6 | {0,0,15593028-0724-4d87-ad5a-987baebb04f3},"ФормаНастройкиПанелиПользователя", 7 | {2,"ru","Форма настройки панели пользователя","uk","Форма настройки панелі користувача"},"",0,1,32e087ab-1491-49b6-aba7-43571b41ac2b,3},0,0, 8 | {2, 9 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,1}, 10 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,2} 11 | } 12 | }, 13 | {0} 14 | } 15 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/37e2d88c-1b48-4718-9cdc-bf2072e0cd1e: -------------------------------------------------------------------------------- 1 | {1, 2 | {2,0, 3 | {1, 4 | {0,0,37e2d88c-1b48-4718-9cdc-bf2072e0cd1e},"ИнтегрироватьВирПортативные", 5 | {1,"ru","Интегрировать в ирПортативные"},"",0,0} 6 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/37e2d88c-1b48-4718-9cdc-bf2072e0cd1e.0: -------------------------------------------------------------------------------- 1 | MOXCEL {8,1,9, 2 | {"ru","ru",1,1,"ru","Русский","Русский",1}, 3 | {128,72}, 4 | {1,1, 5 | {4,0, 6 | {0},1,1,0,f527dc88-1d39-40b3-bcbb-d98b690ead68,0},0},0, 7 | {0,0}, 8 | {0,0}, 9 | {0,0}, 10 | {0,0}, 11 | {0,0}, 12 | {0,0},1,2,9,0,0,6,0, 13 | {16,1, 14 | {1,1, 15 | {"ru","Для того чтобы добавить текущую обработку в панель инструментов ирПортативные необходимо:"} 16 | } 17 | },1, 18 | {0,2},2, 19 | {0,2},3, 20 | {0,2},4, 21 | {0,2},5, 22 | {0,2},1,0,4,0, 23 | {16,3, 24 | {1,1, 25 | {"ru","1. Добавить нашу обработку в список инструментов, которые загружает ирПлатформа при старте. В макет ""СписокИнструментов"" обработки ""ирПлатформа"" скопировать данные из строки 8."} 26 | } 27 | },2, 28 | {0,4},3, 29 | {0,4},5, 30 | {0,5},2,0,6,0, 31 | {16,3, 32 | {1,1, 33 | {"ru","2. Добавить картинку которая будет отображаться на панели инструментов. В макет ""ОбщиеКартинки"" обработки ""ирПортативные"" скопировать данные из строки 10."} 34 | } 35 | },1, 36 | {0,4},2, 37 | {0,4},3, 38 | {0,4},4, 39 | {0,5},5, 40 | {0,5},3,0,6,0, 41 | {16,3, 42 | {1,1, 43 | {"ru","3. Добавить обработку integration-1c-redmine.epf в каталог /Модули."} 44 | } 45 | },1, 46 | {0,4},2, 47 | {0,4},3, 48 | {0,4},4, 49 | {0,5},5, 50 | {0,5},4,0,6,0, 51 | {0,6},1, 52 | {0,4},2, 53 | {0,4},3, 54 | {0,4},4, 55 | {0,5},5, 56 | {0,5},5,0,6,0, 57 | {16,6, 58 | {1,1, 59 | {"ru","ПолноеИмя"} 60 | } 61 | },1, 62 | {16,4, 63 | {1,1, 64 | {"ru","Синоним"} 65 | } 66 | },2, 67 | {16,4, 68 | {1,1, 69 | {"ru","ИмяКартинки"} 70 | } 71 | },3, 72 | {16,4, 73 | {1,1, 74 | {"ru","Видимость"} 75 | } 76 | },4, 77 | {16,5, 78 | {1,1, 79 | {"ru","Портативный"} 80 | } 81 | },5, 82 | {16,5, 83 | {1,1, 84 | {"ru","Описание"} 85 | } 86 | },6,0,6,0, 87 | {16,6, 88 | {1,0} 89 | },1, 90 | {16,4, 91 | {1,0} 92 | },2, 93 | {16,4, 94 | {1,0} 95 | },3, 96 | {16,4, 97 | {1,1, 98 | {"ru","Булево"} 99 | } 100 | },4, 101 | {16,4, 102 | {1,1, 103 | {"ru","Булево"} 104 | } 105 | },5, 106 | {16,4, 107 | {1,0} 108 | },7,0,6,0, 109 | {16,7, 110 | {1,1, 111 | {"ru","Обработка.integration-1c-redmine"} 112 | } 113 | },1, 114 | {16,8, 115 | {1,1, 116 | {"ru","1С клиент для Redmine"} 117 | } 118 | },2, 119 | {16,8, 120 | {1,1, 121 | {"ru","Redmine"} 122 | } 123 | },3, 124 | {16,8, 125 | {1,1, 126 | {"ru","1"} 127 | } 128 | },4, 129 | {16,8, 130 | {1,1, 131 | {"ru","1"} 132 | } 133 | },5, 134 | {16,8, 135 | {1,0} 136 | },9,0,2,0, 137 | {16,0, 138 | {1,1, 139 | {"ru","integration-1c-redmine"} 140 | } 141 | },1, 142 | {16,0, 143 | {1,0} 144 | }, 145 | {8,0,00000000-0000-0000-0000-000000000000,5,0,9,1,10,2,11,3,12,5,13},10,0,0,3,1, 146 | { 147 | {0,14},5,1,9,0,0,1,10,186,0,3,1,0,0},0,0,0,0, 148 | {0}, 149 | {0}, 150 | {0}, 151 | {1,"Redmine", 152 | {2,3,0} 153 | },"", 154 | { 155 | {0,6,6, 156 | {"N",1000},7, 157 | {"N",1000},8, 158 | {"N",1000},9, 159 | {"N",1000},10, 160 | {"N",1000},11, 161 | {"N",1000} 162 | } 163 | }, 164 | {0,-1,-1,-1,-1,00000000-0000-0000-0000-000000000000},0,0,0,0,0,0,0,1,0,1,14, 165 | {17793,0,286,0,2,0}, 166 | {16641,1,6,3}, 167 | {1409,0,286,0,2}, 168 | {385,1,274,6}, 169 | {1,1}, 170 | {385,1,286,6}, 171 | {4031,2,0,0,0,0,3,294,0,0,4,5}, 172 | {4031,2,0,0,0,0,3,296,0,0,4,5}, 173 | {128,433}, 174 | {128,313}, 175 | {128,232}, 176 | {128,79}, 177 | {128,237}, 178 | {2048,6},3, 179 | {7,0,63,100,0,0,0,700,0,0,0,0,0,0,0,0,"Arial",1,100}, 180 | {7,0,63,80,0,0,0,700,0,0,0,0,0,0,0,0,"Arial",1,100}, 181 | {7,3,0,1,100},0,0,0,7, 182 | {3,3, 183 | {-1} 184 | }, 185 | {3,3, 186 | {-3} 187 | }, 188 | {3,0, 189 | {6723891} 190 | }, 191 | {3,3, 192 | {-22} 193 | }, 194 | {3,0, 195 | {0} 196 | }, 197 | {3,0, 198 | {16777215} 199 | }, 200 | {3,3, 201 | {-10} 202 | },1, 203 | {4,3, 204 | {0},"",-1,-1,0, 205 | { 206 | {#base64:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAGXRFWHRTb2Z0d2Fy 207 | ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAA 208 | AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U 209 | Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 210 | eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w 211 | Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw 212 | Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE 213 | ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv 214 | YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv 215 | bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v 216 | eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv 217 | YmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAu 218 | aWlkOjExRDQ0QjM0NjM5NjExRTZCQzNBQzZGMDkzNzU2NUJEIiB4bXBNTTpEb2N1 219 | bWVudElEPSJ4bXAuZGlkOjExRDQ0QjM1NjM5NjExRTZCQzNBQzZGMDkzNzU2NUJE 220 | Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6 221 | MTFENDRCMzI2Mzk2MTFFNkJDM0FDNkYwOTM3NTY1QkQiIHN0UmVmOmRvY3VtZW50 222 | SUQ9InhtcC5kaWQ6MTFENDRCMzM2Mzk2MTFFNkJDM0FDNkYwOTM3NTY1QkQiLz4g 223 | PC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh 224 | Y2tldCBlbmQ9InIiPz5UGBfcAAADT0lEQVR42mJ88uQJw7dv3xiYYuPi4r5///4f 225 | IIAYb926xQAGh+MC/h6X5vkHEAAiAN3/AE5OTl7AaGD92Tsq/9/c3P8E6evr/v5q 226 | aQLnWGAA+LGtAAIIoQcKmHj5+P7/uXD6z/MJHf+EhIT+Mx4rzfrLHZPOxMTNy/D7 227 | 62cGlq9icky/3r9nYPz4keHz+dMMAAEEsiXw58+f/3/++vX/x+/f/z98/Pj/F5D+ 228 | 8ePH/79///5n+fXrF++VA3sZmO7f/cvn4cvMwMzC8HDO1L8f+IQYFb39mFi+MzIx 229 | 3HD3YhBdupjpx/PnEJfYuzPf9bf7/2zHRgbG2NhYBqApDLgAQAAx3r59m+H///9Y 230 | Jbm4uBgYQA4EOQjksA+fPv3//us32MEg8fDw8Gimj0DvvHzxguFIctT/Fz7WDPdX 231 | Lvp7NDnq37v3Hxj+/fvHw/Lt5y+G+9s3/xNW1/zP2trPzPj/P7Pgu/d/H588+h/k 232 | NpY3798xcLbXMjLuPcv05d1bsN1fb19hZLp9GWQVA9Pt3ta/1759Z/j++SM46kD4 233 | p7Mf44MpC5n+sLIxsHAZmTML6how/PjyheH/v38Qr3HzMIp2dzD82rztHyPQpTjD 234 | gI2NjQEgQONk85JAEMbhd95dXFdMQjCSSPSUGGXYrUjKix7SCPIQ1SXoEl2CLhJE 235 | /0NEl6h7dOiQYUGEUNGlY0WXkj4k+qBas51t19lmhSKDoLkMDPzel+fhNyQUCjmT 236 | yWRclmU398FqJCFW76/J3++EINegZLPZnBgMBocymcyqRYSCADozgREC9xtrZnlz 237 | HQgPSH0J8I6ME8IqYBNFYIYBkiRBoVCYtCaxt1IJdA5UPDpgV50BKLY1gSGIzDsz 238 | xxqnZxl6m82bSABuwz643tlius0OZc5sZdHarHwYcDaRhrtUCp+6o8xxeA51XVFB 239 | c3sEzdMoyO0d6No/hcf+wcrD2CiepGPmi0qrHRENXoPLgzzTIr0g9ySYy+dH+voC 240 | pqHXclMKroFhVFo7DUoNvMjvEp13SNQ48/PyAjgPj7FkA8SlFZPwyUyjtZ+FI6oq 241 | NZX5GUEqA1HCLUDrfZZo9Mfi8SlHnauBd6cCPPjb+g/9QOx2vgWRvqvPe9u5RfJX 242 | lf97PgHu46XgNa2ARAAAAABJRU5ErkJggg==} 243 | },0,""},0,0,"",0, 244 | {3,0,0,100,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,"",0,0,0,0,0,0,0}, 245 | {0},0,0,0,1} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/60101dac-fdfa-42a6-9bfc-b08a18a5c615: -------------------------------------------------------------------------------- 1 | {1, 2 | {2,1, 3 | {1, 4 | {0,0,60101dac-fdfa-42a6-9bfc-b08a18a5c615},"showdown_min_js", 5 | {1,"ru","showdown.min.js"},"Showdown is a Javascript Markdown to HTML converter - https://github.com/showdownjs/showdown",0,0} 6 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/691846bc-b4a1-4fb1-a914-470f4dee8df8: -------------------------------------------------------------------------------- 1 | {1, 2 | {1, 3 | {0, 4 | {12, 5 | {1, 6 | {0,0,691846bc-b4a1-4fb1-a914-470f4dee8df8},"Форма", 7 | {1,"ru","Форма"},"",0,1,32e087ab-1491-49b6-aba7-43571b41ac2b,3},0,0, 8 | {2, 9 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,1}, 10 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,2} 11 | } 12 | }, 13 | {0} 14 | } 15 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/6a652304-4c72-4f42-b961-b4d4c0dac3bd: -------------------------------------------------------------------------------- 1 | {1, 2 | {1, 3 | {0, 4 | {12, 5 | {1, 6 | {0,0,6a652304-4c72-4f42-b961-b4d4c0dac3bd},"ФормаУправляемая", 7 | {1,"ru","Форма управляемая"},"",0,1,32e087ab-1491-49b6-aba7-43571b41ac2b,3},0,1, 8 | {2, 9 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,1}, 10 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,2} 11 | } 12 | }, 13 | {0} 14 | } 15 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/c0af406c-58c2-4d78-9d7b-80c451ca5647: -------------------------------------------------------------------------------- 1 | {1, 2 | {2,1, 3 | {1, 4 | {0,0,c0af406c-58c2-4d78-9d7b-80c451ca5647},"redmine_32x32_png", 5 | {1,"ru","Redmine 32x32 png"},"",0,0} 6 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/c0af406c-58c2-4d78-9d7b-80c451ca5647.0: -------------------------------------------------------------------------------- 1 | {1, 2 | {#base64:iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAAAGXRFWHRTb2Z0d2Fy 3 | ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAA 4 | AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U 5 | Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 6 | eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w 7 | Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw 8 | Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE 9 | ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv 10 | YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv 11 | bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v 12 | eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv 13 | YmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAu 14 | aWlkOjgwNEY3QkYwRTYwMTExRTVBNjYyOTc5NkY3N0NBMzE1IiB4bXBNTTpEb2N1 15 | bWVudElEPSJ4bXAuZGlkOjgwNEY3QkYxRTYwMTExRTVBNjYyOTc5NkY3N0NBMzE1 16 | Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6 17 | ODA0RjdCRUVFNjAxMTFFNUE2NjI5Nzk2Rjc3Q0EzMTUiIHN0UmVmOmRvY3VtZW50 18 | SUQ9InhtcC5kaWQ6ODA0RjdCRUZFNjAxMTFFNUE2NjI5Nzk2Rjc3Q0EzMTUiLz4g 19 | PC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh 20 | Y2tldCBlbmQ9InIiPz60pnIiAAAGe0lEQVR42mL8//8/AzJgAhGMjIxs/73M/x88 21 | epSBAaTCiJkhDSTRycV4juH2ikURIEEQ/v72jRBAADGimwEGS7TlDzMzMPAcBZnx 22 | QYoRrmSvEOMnprsfIfpBmP/nf16AAMJuBjKAKfisIfLfm42lCMR+pir8/7eW2H+4 23 | AitmBhd0jbXsjPOBvmJmeH1wn9WHPdudYfbC8O/fvxlB4gABRNANTAwEAAsw4BAO 24 | 9jT7z8DMxCC966zh6v0HLrCxsUEkXgBd/UtTDG7XJ6CPPNlY8sTExMB8risijBgO 25 | eSnB+J9fRAzshm8iLAx/0RXs+cqw4x9I9hw3w//93Ax/0b15jo3h/x5mhv8sShu3 26 | u/xmZvmNboLylu0uSkD3AwQQ4bggFAwgYseOHRgSP/7+Z1DgZDPgZWEWevT958Uf 27 | //69ZWVlZXBxccEe2SDAzsioCIr0PTJ8H8Fyflb//3tb/j9urnGbjZFR9gcwKNdK 28 | cL2EqRcREUEYoMrEEAmi10hyb4tkZ0nF5lyQ4QrMTBogNgcjgxo4HkAGNDEzHAOF 29 | +wsgBqYsH3x+vifO+PcZUN0XYEoXERNjZ/zy9SvzZn7uP9sZGDau+MPQunH79tP4 30 | DLh17x7D3Nzs3BBmhnxVUU5hhgM+djvOAuPyDBDvkWR9jx6f6Pjjx48sZ9gg6k+w 31 | MvynOBoBAohiA5gYKAQUG8By7Ngxhk+fPqEmLnBOZeBX5OQw+vb37+d7336d4WBm 32 | ZHBycmKAZ1JYGBgYGDBcuHABLsDLxGj65d//8/98LH7///uPAZTf97/+cN/pzC2l 33 | HZs38/MKCX2EqTU3N2dgABkAA3NFOW+CyisRJkajdXpKB0HJ+L+v1X9Q8bRKkvvR 34 | Vw3h/0JMjCYw9R8+fEAYYMjCFPhXW/Q/qLgAYWRnmrIwhf0BGgwS/4IkBzeAlYFB 35 | EpSXBJgYJX5piWGNV1tWZs99cnynQGxFJoYguAE6QANW8DE+fCXJ+H8KN+NNfCGu 36 | AtR4Dlh+gUp8YDkgBTKA6RcwnPx4GOT+AO0N5mVQw2cAsGC7Jw107o9/DAxz2BmO 37 | g2MLWIz+53r2n3EWD+NqoIAoPgPu/2O4ACqBIt4wBO7+w7ABFPks9X/eXrvPysAz 38 | +9v/yR71Td3bzUzxJhxJT0/9YGaG6iUsDOv//vwhyLiDheG/CDswnoDWK567psGv 39 | rok3HA7Lcr7hfv9DGMRmbWgpZ+KFSvz7w8DAJiT8jlDS/cTK8Q4WTS9XLYpk0d6+ 40 | 3QWU3BiBAcPGL/CBkAGmC9bFsf/+yQ1iyzIx/aY4OwMEaL/qXpoKw/jznrMzd3aW 41 | evLYjk1zpq1NhlhTUPRCizAqYRdFWngbCV132YX9AV2EfdLHXQVFEFSEVEQRGpnY 42 | GLk+KCU1mow53Cdnnp5nUxo6MN1FBL3wwPue8z4fvB+/3+8tOMBfh4N/voAMszqd 43 | TggEAn8y39IrCYNdqry3xmyySQKflQ/aIkzGEsEXc+HXV8LJkyRJgOMgFAqBXFKy 44 | 9gqIopj3p8CgckA2PkOmTrt4rhs/LXzS4FpPbbWtvVKFhnIF3Ggtti1wzFFdHmSG 45 | u5RcRUx9oIqxG1XKuIkxN6molSbLMjFclphzMZUaygDbZUX0RV2KHl2CwBj276jS 46 | pJmx2mZR6Hzb4nr/tMnxasiz4+VYa/24Vxb7cDmVQcX0bsGV9SHfOPbvVUgziJT1 47 | uTlIFWTQMF8B1DoFfr9/uzy1iPBKmmRuZ1nqSJGhj62xRx3oN1W3OUySMI2+2A8d 48 | NhqOr5yXtwCvgZ0huD0nMZ8nK9KFpaCH1nu42g38AaRBnvouDnrOimx4FGP3G9nN 49 | VQXUNjQCKqajX6xMJ400i/YTLYK4j46PNnrCMdmFMPIMcQ3pLoo9jbaPg9NCmQIR 50 | 4pPMIeSAVXBgmkjCCC2xxNE5ABhPQHAgrvdutIBLKf3U8zj4iygHyygFCKTAV8wg 51 | JfOcMb2sT71NjXssAG2k2Jed7Rw4apBJC73nVoDduAW7ci8X3jlP21brwXmUMyz4 52 | we8YbWsYUxNps44VanSvsbSPqOq7R960Wj3Nw4UUEJudtt+uq/pco+n8JiELPLTs 53 | sxjf/WSog/t2/eKJokjanF5KTk1CerCX8guSWjFVMNRZin9sU0u/L9Mm5aAXi4Ts 54 | 9/Xq+X7DzP1bXhkH8WSOE44TKZRTwurXzXqbpuvafDSqi1o27m8WRD5+/LDrPxv+ 55 | AkJNreBcKFeUAAAAAElFTkSuQmCC} 56 | } -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/c41d4d58-338d-475e-9fee-433707457d2c: -------------------------------------------------------------------------------- 1 | {1, 2 | {2,1, 3 | {1, 4 | {0,0,c41d4d58-338d-475e-9fee-433707457d2c},"textile_js", 5 | {1,"ru","textile-js"},"",0,0} 6 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/ceaee0d2-5bce-4169-b6ad-905fc83870ef: -------------------------------------------------------------------------------- 1 | {1, 2 | {1, 3 | {0, 4 | {12, 5 | {1, 6 | {0,0,ceaee0d2-5bce-4169-b6ad-905fc83870ef},"ФормаЗадачи", 7 | {1,"ru","Форма задачи"},"",0,1,32e087ab-1491-49b6-aba7-43571b41ac2b,3},0,0, 8 | {2, 9 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,1}, 10 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,2} 11 | } 12 | }, 13 | {0} 14 | } 15 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/copyinfo: -------------------------------------------------------------------------------- 1 | {4, 2 | {41, 3 | {048db5db-cda0-4ef0-a717-291e5c6070a5,048db5db-cda0-4ef0-a717-291e5c6070a5,2, 4 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 5 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Приоритет"} 6 | }, 7 | {0ec1a22a-8cc0-45a6-abef-711552230a5c,0ec1a22a-8cc0-45a6-abef-711552230a5c,1, 8 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"Пользователь"} 9 | }, 10 | {15c0b91e-dc14-409c-a88a-bfc579c87aba,15c0b91e-dc14-409c-a88a-bfc579c87aba,1, 11 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"Порт"} 12 | }, 13 | {16f87d4b-22f9-4973-8cef-6b0038394d50,16f87d4b-22f9-4973-8cef-6b0038394d50,2, 14 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 15 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ЗатраченоВремени"} 16 | }, 17 | {1dbce544-0bfa-447c-a8bf-9bdf91947091,1dbce544-0bfa-447c-a8bf-9bdf91947091,1, 18 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"ПределПолучаемыхДанных"} 19 | }, 20 | {1f555bf7-c074-48ae-a0f2-c1399af51a8a,1f555bf7-c074-48ae-a0f2-c1399af51a8a,1, 21 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"Сервер"} 22 | }, 23 | {20956096-4915-462c-adea-c75156ef38ce,20956096-4915-462c-adea-c75156ef38ce,2, 24 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 25 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Идентификатор"} 26 | }, 27 | {24c90795-bddd-4e86-94e1-89700bb04143,24c90795-bddd-4e86-94e1-89700bb04143,2, 28 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 29 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ПолеОтбора"} 30 | }, 31 | {2ae4f957-00f9-4129-a13c-6a1b712ee8cb,2ae4f957-00f9-4129-a13c-6a1b712ee8cb,1, 32 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"ИнициализацияПриСтарте"} 33 | }, 34 | {2c577724-418b-4555-af0b-f77dcdf4f6d6,2c577724-418b-4555-af0b-f77dcdf4f6d6,2, 35 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 36 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Автор"} 37 | }, 38 | {30a5d4d3-80d1-45c9-be95-f6ee6e646fc3,30a5d4d3-80d1-45c9-be95-f6ee6e646fc3,2, 39 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 40 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Статус"} 41 | }, 42 | {313dbf0f-41e9-4a59-b735-8aca225268ee,313dbf0f-41e9-4a59-b735-8aca225268ee,2, 43 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"НастраиваемыеПоля"}, 44 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Имя"} 45 | }, 46 | {33d8c745-cce5-41f2-81d5-623942a0110c,33d8c745-cce5-41f2-81d5-623942a0110c,2, 47 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"НастраиваемыеПоля"}, 48 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Значение"} 49 | }, 50 | {34e62b08-4121-4576-9855-83b5a8394ea4,34e62b08-4121-4576-9855-83b5a8394ea4,1, 51 | {9cd510cd-abfc-11d4-9434-004095e12fc7,"УправлениеПроизводственнымПредприятиемДляУкраины"} 52 | }, 53 | {3a61887a-6a54-463d-a8b7-bf17e85a6242,3a61887a-6a54-463d-a8b7-bf17e85a6242,2, 54 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 55 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ПроцентВыполнения"} 56 | }, 57 | {40c9aa50-040a-4ed5-ab51-1b8f8a06d948,40c9aa50-040a-4ed5-ab51-1b8f8a06d948,2, 58 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 59 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Тема"} 60 | }, 61 | {48b8d0bd-1831-4b38-ac2a-23b91fd82118,48b8d0bd-1831-4b38-ac2a-23b91fd82118,1, 62 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"БазоваяАутентификация"} 63 | }, 64 | {5697a195-8e48-4c67-bf91-16e6f9191d4c,5697a195-8e48-4c67-bf91-16e6f9191d4c,1, 65 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"ПолучатьДанныеОЗатраченномВремениПоЗадачам"} 66 | }, 67 | {5df152d7-2afa-48e7-955c-8e9d4c019990,5df152d7-2afa-48e7-955c-8e9d4c019990,2, 68 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 69 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ДатаВыполнения"} 70 | }, 71 | {622e9a3a-c1a5-42e8-97dc-7fd3207aaa65,622e9a3a-c1a5-42e8-97dc-7fd3207aaa65,2, 72 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 73 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Трекер"} 74 | }, 75 | {691846bc-b4a1-4fb1-a914-470f4dee8df8,691846bc-b4a1-4fb1-a914-470f4dee8df8,1, 76 | {d5b0e5ed-256d-401c-9c36-f630cafd8a62,"Форма"} 77 | }, 78 | {6a652304-4c72-4f42-b961-b4d4c0dac3bd,6a652304-4c72-4f42-b961-b4d4c0dac3bd,1, 79 | {d5b0e5ed-256d-401c-9c36-f630cafd8a62,"ФормаУправляемая"} 80 | }, 81 | {6e9e26e0-7b1e-42d2-99e0-970178750edd,6e9e26e0-7b1e-42d2-99e0-970178750edd,2, 82 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"НастраиваемыеПоля"}, 83 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Идентификатор"} 84 | }, 85 | {76eac660-32e6-4ccf-9b85-112ecc2d168d,76eac660-32e6-4ccf-9b85-112ecc2d168d,2, 86 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"НастраиваемыеПоля"}, 87 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Пометка"} 88 | }, 89 | {7d051757-2864-4179-ac42-405bb4b53502,7d051757-2864-4179-ac42-405bb4b53502,1, 90 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"НастраиваемыеПоля"} 91 | }, 92 | {802b8199-6ddf-4a23-8f58-10353727a8cc,802b8199-6ddf-4a23-8f58-10353727a8cc,1, 93 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"APIkey"} 94 | }, 95 | {92e16899-fb1e-43e1-b16e-000ba2d635a7,92e16899-fb1e-43e1-b16e-000ba2d635a7,2, 96 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 97 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ПолеСортировки"} 98 | }, 99 | {b49b8b67-d307-4309-a33c-9ff22faa285f,b49b8b67-d307-4309-a33c-9ff22faa285f,2, 100 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 101 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Пометка"} 102 | }, 103 | {b9ae6129-3ce9-4baf-8445-be417fa5e675,b9ae6129-3ce9-4baf-8445-be417fa5e675,2, 104 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 105 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Исполнитель"} 106 | }, 107 | {bc86fd76-54ca-4b90-9947-768b914af1ce,bc86fd76-54ca-4b90-9947-768b914af1ce,1, 108 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"ФорматированиеТекста"} 109 | }, 110 | {c0fb59e8-b3b7-4159-a58f-5220db7e81bc,c0fb59e8-b3b7-4159-a58f-5220db7e81bc,2, 111 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 112 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ДатаНачала"} 113 | }, 114 | {c2ababd6-7860-40bc-a4e7-fbd337ccd7fd,c2ababd6-7860-40bc-a4e7-fbd337ccd7fd,1, 115 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"Пароль"} 116 | }, 117 | {d3da995b-a421-40a7-87e5-a65adeac257d,d3da995b-a421-40a7-87e5-a65adeac257d,2, 118 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 119 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Описание"} 120 | }, 121 | {d4470e71-059e-43e7-9e1d-5385fbb525d1,d4470e71-059e-43e7-9e1d-5385fbb525d1,2, 122 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 123 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"НомерРодителя"} 124 | }, 125 | {d99f00af-942f-47ca-8708-177052789892,d99f00af-942f-47ca-8708-177052789892,1, 126 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"ЗащищенноеСоединение"} 127 | }, 128 | {e2305535-26b4-4a18-aa4d-7f66e79453a1,e2305535-26b4-4a18-aa4d-7f66e79453a1,2, 129 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 130 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ДатаСоздания"} 131 | }, 132 | {edcb69f4-91a2-41b0-8af1-66b811256ece,edcb69f4-91a2-41b0-8af1-66b811256ece,1, 133 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,"ПолеСсылкаНаОбъект1С"} 134 | }, 135 | {f0416051-df70-4b5b-bf35-d18c7591cebd,f0416051-df70-4b5b-bf35-d18c7591cebd,1, 136 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"} 137 | }, 138 | {f616df11-1fca-4144-8b19-02c6e2ba2060,f616df11-1fca-4144-8b19-02c6e2ba2060,2, 139 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 140 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"ОценкаВремени"} 141 | }, 142 | {fb4f8a6b-158a-4798-a08a-cc7cf6f09f01,fb4f8a6b-158a-4798-a08a-cc7cf6f09f01,1, 143 | {c3831ec8-d8d5-4f93-8a22-f9bfae07327f,"асИнтеграцияССистемамойУправленияПроектамиRedmine"} 144 | }, 145 | {fe479569-4326-476c-a564-4547f56b4468,fe479569-4326-476c-a564-4547f56b4468,2, 146 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,"СписокЗадач"}, 147 | {5d24a9d1-098e-11d6-b9b8-0050bae0a95d,"Уровень"} 148 | } 149 | }, 150 | {4, 151 | {280f5f0e-9c8a-49cc-bf6d-4d296cc17a63,34e62b08-4121-4576-9855-83b5a8394ea4,0}, 152 | {3320811f-10f2-4efb-a422-3c13fd285392,f0416051-df70-4b5b-bf35-d18c7591cebd,0}, 153 | {ce45b09d-ad48-4696-bc73-efdb4693bb14,7d051757-2864-4179-ac42-405bb4b53502,0}, 154 | {d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50,fb4f8a6b-158a-4798-a08a-cc7cf6f09f01,0} 155 | }, 156 | {42, 157 | { 158 | {-2},3320811f-10f2-4efb-a422-3c13fd285392, 159 | {-2} 160 | }, 161 | { 162 | {0,048db5db-cda0-4ef0-a717-291e5c6070a5},3320811f-10f2-4efb-a422-3c13fd285392, 163 | {-1} 164 | }, 165 | { 166 | {0,0ec1a22a-8cc0-45a6-abef-711552230a5c},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 167 | {-1} 168 | }, 169 | { 170 | {0,15c0b91e-dc14-409c-a88a-bfc579c87aba},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 171 | {-1} 172 | }, 173 | { 174 | {0,16f87d4b-22f9-4973-8cef-6b0038394d50},3320811f-10f2-4efb-a422-3c13fd285392, 175 | {-1} 176 | }, 177 | { 178 | {0,1dbce544-0bfa-447c-a8bf-9bdf91947091},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 179 | {-1} 180 | }, 181 | { 182 | {0,1f555bf7-c074-48ae-a0f2-c1399af51a8a},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 183 | {-1} 184 | }, 185 | { 186 | {0,20956096-4915-462c-adea-c75156ef38ce},3320811f-10f2-4efb-a422-3c13fd285392, 187 | {-1} 188 | }, 189 | { 190 | {0,24c90795-bddd-4e86-94e1-89700bb04143},3320811f-10f2-4efb-a422-3c13fd285392, 191 | {-1} 192 | }, 193 | { 194 | {0,2ae4f957-00f9-4129-a13c-6a1b712ee8cb},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 195 | {-1} 196 | }, 197 | { 198 | {0,2c577724-418b-4555-af0b-f77dcdf4f6d6},3320811f-10f2-4efb-a422-3c13fd285392, 199 | {-1} 200 | }, 201 | { 202 | {0,30a5d4d3-80d1-45c9-be95-f6ee6e646fc3},3320811f-10f2-4efb-a422-3c13fd285392, 203 | {-1} 204 | }, 205 | { 206 | {0,3a61887a-6a54-463d-a8b7-bf17e85a6242},3320811f-10f2-4efb-a422-3c13fd285392, 207 | {-1} 208 | }, 209 | { 210 | {0,40c9aa50-040a-4ed5-ab51-1b8f8a06d948},3320811f-10f2-4efb-a422-3c13fd285392, 211 | {-1} 212 | }, 213 | { 214 | {0,48b8d0bd-1831-4b38-ac2a-23b91fd82118},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 215 | {-1} 216 | }, 217 | { 218 | {0,5697a195-8e48-4c67-bf91-16e6f9191d4c},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 219 | {-1} 220 | }, 221 | { 222 | {0,5df152d7-2afa-48e7-955c-8e9d4c019990},3320811f-10f2-4efb-a422-3c13fd285392, 223 | {-1} 224 | }, 225 | { 226 | {0,622e9a3a-c1a5-42e8-97dc-7fd3207aaa65},3320811f-10f2-4efb-a422-3c13fd285392, 227 | {-1} 228 | }, 229 | { 230 | {0,7d051757-2864-4179-ac42-405bb4b53502},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 231 | {-1} 232 | }, 233 | { 234 | {0,802b8199-6ddf-4a23-8f58-10353727a8cc},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 235 | {-1} 236 | }, 237 | { 238 | {0,92e16899-fb1e-43e1-b16e-000ba2d635a7},3320811f-10f2-4efb-a422-3c13fd285392, 239 | {-1} 240 | }, 241 | { 242 | {0,b49b8b67-d307-4309-a33c-9ff22faa285f},3320811f-10f2-4efb-a422-3c13fd285392, 243 | {-1} 244 | }, 245 | { 246 | {0,b9ae6129-3ce9-4baf-8445-be417fa5e675},3320811f-10f2-4efb-a422-3c13fd285392, 247 | {-1} 248 | }, 249 | { 250 | {0,bc86fd76-54ca-4b90-9947-768b914af1ce},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 251 | {-1} 252 | }, 253 | { 254 | {0,c0fb59e8-b3b7-4159-a58f-5220db7e81bc},3320811f-10f2-4efb-a422-3c13fd285392, 255 | {-1} 256 | }, 257 | { 258 | {0,c2ababd6-7860-40bc-a4e7-fbd337ccd7fd},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 259 | {-1} 260 | }, 261 | { 262 | {0,d3da995b-a421-40a7-87e5-a65adeac257d},3320811f-10f2-4efb-a422-3c13fd285392, 263 | {-1} 264 | }, 265 | { 266 | {0,d4470e71-059e-43e7-9e1d-5385fbb525d1},3320811f-10f2-4efb-a422-3c13fd285392, 267 | {-1} 268 | }, 269 | { 270 | {0,d99f00af-942f-47ca-8708-177052789892},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 271 | {-1} 272 | }, 273 | { 274 | {0,e2305535-26b4-4a18-aa4d-7f66e79453a1},3320811f-10f2-4efb-a422-3c13fd285392, 275 | {-1} 276 | }, 277 | { 278 | {0,edcb69f4-91a2-41b0-8af1-66b811256ece},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 279 | {-1} 280 | }, 281 | { 282 | {0,f0416051-df70-4b5b-bf35-d18c7591cebd},d50a7e3c-08e9-4a33-a0c2-2a1ef16caa50, 283 | {-1} 284 | }, 285 | { 286 | {0,f616df11-1fca-4144-8b19-02c6e2ba2060},3320811f-10f2-4efb-a422-3c13fd285392, 287 | {-1} 288 | }, 289 | { 290 | {0,fe479569-4326-476c-a564-4547f56b4468},3320811f-10f2-4efb-a422-3c13fd285392, 291 | {-1} 292 | }, 293 | { 294 | {1},acf6192e-81ca-46ef-93a6-5a6968b78663, 295 | {1} 296 | }, 297 | { 298 | {1},e603c0f2-92fb-4d47-8f38-a44a381cf235, 299 | {1} 300 | }, 301 | { 302 | {2},acf6192e-81ca-46ef-93a6-5a6968b78663, 303 | {2} 304 | }, 305 | { 306 | {2},e603c0f2-92fb-4d47-8f38-a44a381cf235, 307 | {2} 308 | }, 309 | { 310 | {3},acf6192e-81ca-46ef-93a6-5a6968b78663, 311 | {3} 312 | }, 313 | { 314 | {3},e603c0f2-92fb-4d47-8f38-a44a381cf235, 315 | {3} 316 | }, 317 | { 318 | {4},acf6192e-81ca-46ef-93a6-5a6968b78663, 319 | {4} 320 | }, 321 | { 322 | {4},e603c0f2-92fb-4d47-8f38-a44a381cf235, 323 | {4} 324 | } 325 | }, 326 | {0,0}, 327 | {0} 328 | } -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/d8966fa6-1f9f-4801-9127-a4dfcc3c7b72: -------------------------------------------------------------------------------- 1 | {1, 2 | {1, 3 | {0, 4 | {12, 5 | {1, 6 | {0,0,d8966fa6-1f9f-4801-9127-a4dfcc3c7b72},"ФормаРедактирования", 7 | {1,"ru","Форма редактирования"},"",0,1,32e087ab-1491-49b6-aba7-43571b41ac2b,3},0,0, 8 | {2, 9 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,1}, 10 | {"#",1708fdaa-cbce-4289-b373-07a5a74bee91,2} 11 | } 12 | }, 13 | {0} 14 | } 15 | },0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/fb4f8a6b-158a-4798-a08a-cc7cf6f09f01.0/info: -------------------------------------------------------------------------------- 1 | {3,1,0,"",0} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/root: -------------------------------------------------------------------------------- 1 | {2,b1f79ef2-4d8e-4108-a233-00bb25b18666,} -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/version: -------------------------------------------------------------------------------- 1 | { 2 | {216,0, 3 | {80214,0} 4 | } 5 | } -------------------------------------------------------------------------------- /src/integration-1c-redmine/und/versions: -------------------------------------------------------------------------------- 1 | {1,29,"",ffedfd8e-4939-4356-a27b-45c81a59e6ef,"15593028-0724-4d87-ad5a-987baebb04f3",e0d12977-bad7-43cb-830f-7c87a6215175,"15593028-0724-4d87-ad5a-987baebb04f3.0",42b7b6de-da33-48c2-818f-0f63eccee244,"15593028-0724-4d87-ad5a-987baebb04f3.1",86e0292b-16ed-4d8f-8be1-c06c176dd2f5,"1a2914b9-a891-46aa-a16d-b855b71b5086",8b27f566-ec26-43d0-9abb-d5bbece5dbe8,"37e2d88c-1b48-4718-9cdc-bf2072e0cd1e",d7a21460-e19e-494b-9457-d868eb7dc9c7,"37e2d88c-1b48-4718-9cdc-bf2072e0cd1e.0",a183c4cc-cb34-4677-8d52-4408572ee68a,"60101dac-fdfa-42a6-9bfc-b08a18a5c615",4933792f-a9fa-4cad-b54f-92665a20ab4c,"60101dac-fdfa-42a6-9bfc-b08a18a5c615.0",40e18d45-848f-4791-9724-51866a961d6a,"691846bc-b4a1-4fb1-a914-470f4dee8df8",d7d7855f-c46e-4180-95ca-f3560c2b4253,"691846bc-b4a1-4fb1-a914-470f4dee8df8.0",297bbe10-9c89-4cf5-a4c4-8bae32c890ef,"6a652304-4c72-4f42-b961-b4d4c0dac3bd",11773cdd-c629-4b7d-b634-8fed2f184221,"6a652304-4c72-4f42-b961-b4d4c0dac3bd.0",4f711647-9a54-4a94-8a2a-9306fc4a17b5,"a8dec8ff-e343-4b07-b8b3-616556501aac",8ac4ec49-9332-43e9-8065-fbcba5e6ef3f,"b1f79ef2-4d8e-4108-a233-00bb25b18666",447af99c-991a-4c4b-bd3d-ac4b19c6558f,"c0af406c-58c2-4d78-9d7b-80c451ca5647",0c5f7209-84ea-4aa5-8492-3e90ae890bff,"c0af406c-58c2-4d78-9d7b-80c451ca5647.0",6834d000-2938-44c7-a6c9-88b36da967b8,"c41d4d58-338d-475e-9fee-433707457d2c",053cfb06-1ac5-405d-aaea-1695176d103e,"c41d4d58-338d-475e-9fee-433707457d2c.0",45918437-9b97-4375-8326-ea2a6e0b2b99,"ceaee0d2-5bce-4169-b6ad-905fc83870ef",a0aca295-9d57-4033-abc4-b8316c4ac17b,"ceaee0d2-5bce-4169-b6ad-905fc83870ef.0",eedb7194-5f3a-49de-8d6c-a25f3c3da3e0,"copyinfo",f5fce483-df65-40f5-88b9-fea2f8b2f65b,"d75dcfa4-a75d-42df-9565-282d26410ef1",9739337c-42db-45e1-a124-047a032fc70d,"d8966fa6-1f9f-4801-9127-a4dfcc3c7b72",2e3ee45a-8b42-4d4c-be2b-d949ffed3865,"d8966fa6-1f9f-4801-9127-a4dfcc3c7b72.0",220bcda2-4a0c-4b9b-bcaa-f06a4dfc6216,"fb4f8a6b-158a-4798-a08a-cc7cf6f09f01.0",082f63cd-f8b6-4f44-8942-d229011d5aa8,"root",8e7bf550-fc2a-4caa-9ec8-26d8e42d799c,"version",27289063-fe5b-4a6c-8d92-4bc5ae86f140,"versions",923ad4b2-14b0-42ad-b9b2-f10da3894c44} -------------------------------------------------------------------------------- /src/integration-1c-redmine/Макеты/redmine_32x32_png.txt: -------------------------------------------------------------------------------- 1 | {1, 2 | {#base64:iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAAAGXRFWHRTb2Z0d2Fy 3 | ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAA 4 | AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U 5 | Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 6 | eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w 7 | Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw 8 | Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE 9 | ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv 10 | YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv 11 | bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v 12 | eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv 13 | YmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAu 14 | aWlkOjgwNEY3QkYwRTYwMTExRTVBNjYyOTc5NkY3N0NBMzE1IiB4bXBNTTpEb2N1 15 | bWVudElEPSJ4bXAuZGlkOjgwNEY3QkYxRTYwMTExRTVBNjYyOTc5NkY3N0NBMzE1 16 | Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6 17 | ODA0RjdCRUVFNjAxMTFFNUE2NjI5Nzk2Rjc3Q0EzMTUiIHN0UmVmOmRvY3VtZW50 18 | SUQ9InhtcC5kaWQ6ODA0RjdCRUZFNjAxMTFFNUE2NjI5Nzk2Rjc3Q0EzMTUiLz4g 19 | PC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh 20 | Y2tldCBlbmQ9InIiPz60pnIiAAAGe0lEQVR42mL8//8/AzJgAhGMjIxs/73M/x88 21 | epSBAaTCiJkhDSTRycV4juH2ikURIEEQ/v72jRBAADGimwEGS7TlDzMzMPAcBZnx 22 | QYoRrmSvEOMnprsfIfpBmP/nf16AAMJuBjKAKfisIfLfm42lCMR+pir8/7eW2H+4 23 | AitmBhd0jbXsjPOBvmJmeH1wn9WHPdudYfbC8O/fvxlB4gABRNANTAwEAAsw4BAO 24 | 9jT7z8DMxCC966zh6v0HLrCxsUEkXgBd/UtTDG7XJ6CPPNlY8sTExMB8risijBgO 25 | eSnB+J9fRAzshm8iLAx/0RXs+cqw4x9I9hw3w//93Ax/0b15jo3h/x5mhv8sShu3 26 | u/xmZvmNboLylu0uSkD3AwQQ4bggFAwgYseOHRgSP/7+Z1DgZDPgZWEWevT958Uf 27 | //69ZWVlZXBxccEe2SDAzsioCIr0PTJ8H8Fyflb//3tb/j9urnGbjZFR9gcwKNdK 28 | cL2EqRcREUEYoMrEEAmi10hyb4tkZ0nF5lyQ4QrMTBogNgcjgxo4HkAGNDEzHAOF 29 | +wsgBqYsH3x+vifO+PcZUN0XYEoXERNjZ/zy9SvzZn7uP9sZGDau+MPQunH79tP4 30 | DLh17x7D3Nzs3BBmhnxVUU5hhgM+djvOAuPyDBDvkWR9jx6f6Pjjx48sZ9gg6k+w 31 | MvynOBoBAohiA5gYKAQUG8By7Ngxhk+fPqEmLnBOZeBX5OQw+vb37+d7336d4WBm 32 | ZHBycmKAZ1JYGBgYGDBcuHABLsDLxGj65d//8/98LH7///uPAZTf97/+cN/pzC2l 33 | HZs38/MKCX2EqTU3N2dgABkAA3NFOW+CyisRJkajdXpKB0HJ+L+v1X9Q8bRKkvvR 34 | Vw3h/0JMjCYw9R8+fEAYYMjCFPhXW/Q/qLgAYWRnmrIwhf0BGgwS/4IkBzeAlYFB 35 | EpSXBJgYJX5piWGNV1tWZs99cnynQGxFJoYguAE6QANW8DE+fCXJ+H8KN+NNfCGu 36 | AtR4Dlh+gUp8YDkgBTKA6RcwnPx4GOT+AO0N5mVQw2cAsGC7Jw107o9/DAxz2BmO 37 | g2MLWIz+53r2n3EWD+NqoIAoPgPu/2O4ACqBIt4wBO7+w7ABFPks9X/eXrvPysAz 38 | +9v/yR71Td3bzUzxJhxJT0/9YGaG6iUsDOv//vwhyLiDheG/CDswnoDWK567psGv 39 | rok3HA7Lcr7hfv9DGMRmbWgpZ+KFSvz7w8DAJiT8jlDS/cTK8Q4WTS9XLYpk0d6+ 40 | 3QWU3BiBAcPGL/CBkAGmC9bFsf/+yQ1iyzIx/aY4OwMEaL/qXpoKw/jznrMzd3aW 41 | evLYjk1zpq1NhlhTUPRCizAqYRdFWngbCV132YX9AV2EfdLHXQVFEFSEVEQRGpnY 42 | GLk+KCU1mow53Cdnnp5nUxo6MN1FBL3wwPue8z4fvB+/3+8tOMBfh4N/voAMszqd 43 | TggEAn8y39IrCYNdqry3xmyySQKflQ/aIkzGEsEXc+HXV8LJkyRJgOMgFAqBXFKy 44 | 9gqIopj3p8CgckA2PkOmTrt4rhs/LXzS4FpPbbWtvVKFhnIF3Ggtti1wzFFdHmSG 45 | u5RcRUx9oIqxG1XKuIkxN6molSbLMjFclphzMZUaygDbZUX0RV2KHl2CwBj276jS 46 | pJmx2mZR6Hzb4nr/tMnxasiz4+VYa/24Vxb7cDmVQcX0bsGV9SHfOPbvVUgziJT1 47 | uTlIFWTQMF8B1DoFfr9/uzy1iPBKmmRuZ1nqSJGhj62xRx3oN1W3OUySMI2+2A8d 48 | NhqOr5yXtwCvgZ0huD0nMZ8nK9KFpaCH1nu42g38AaRBnvouDnrOimx4FGP3G9nN 49 | VQXUNjQCKqajX6xMJ400i/YTLYK4j46PNnrCMdmFMPIMcQ3pLoo9jbaPg9NCmQIR 50 | 4pPMIeSAVXBgmkjCCC2xxNE5ABhPQHAgrvdutIBLKf3U8zj4iygHyygFCKTAV8wg 51 | JfOcMb2sT71NjXssAG2k2Jed7Rw4apBJC73nVoDduAW7ci8X3jlP21brwXmUMyz4 52 | we8YbWsYUxNps44VanSvsbSPqOq7R960Wj3Nw4UUEJudtt+uq/pco+n8JiELPLTs 53 | sxjf/WSog/t2/eKJokjanF5KTk1CerCX8guSWjFVMNRZin9sU0u/L9Mm5aAXi4Ts 54 | 9/Xq+X7DzP1bXhkH8WSOE44TKZRTwurXzXqbpuvafDSqi1o27m8WRD5+/LDrPxv+ 55 | AkJNreBcKFeUAAAAAElFTkSuQmCC} 56 | } -------------------------------------------------------------------------------- /src/integration-1c-redmine/Макеты/ИнтегрироватьВирПортативные.mxl: -------------------------------------------------------------------------------- 1 | MOXCEL {8,1,9, 2 | {"ru","ru",1,1,"ru","Русский","Русский",1}, 3 | {128,72}, 4 | {1,1, 5 | {4,0, 6 | {0},1,1,0,f527dc88-1d39-40b3-bcbb-d98b690ead68,0},0},0, 7 | {0,0}, 8 | {0,0}, 9 | {0,0}, 10 | {0,0}, 11 | {0,0}, 12 | {0,0},1,2,9,0,0,6,0, 13 | {16,1, 14 | {1,1, 15 | {"ru","Для того чтобы добавить текущую обработку в панель инструментов ирПортативные необходимо:"} 16 | } 17 | },1, 18 | {0,2},2, 19 | {0,2},3, 20 | {0,2},4, 21 | {0,2},5, 22 | {0,2},1,0,4,0, 23 | {16,3, 24 | {1,1, 25 | {"ru","1. Добавить нашу обработку в список инструментов, которые загружает ирПлатформа при старте. В макет ""СписокИнструментов"" обработки ""ирПлатформа"" скопировать данные из строки 8."} 26 | } 27 | },2, 28 | {0,4},3, 29 | {0,4},5, 30 | {0,5},2,0,6,0, 31 | {16,3, 32 | {1,1, 33 | {"ru","2. Добавить картинку которая будет отображаться на панели инструментов. В макет ""ОбщиеКартинки"" обработки ""ирПортативные"" скопировать данные из строки 10."} 34 | } 35 | },1, 36 | {0,4},2, 37 | {0,4},3, 38 | {0,4},4, 39 | {0,5},5, 40 | {0,5},3,0,6,0, 41 | {16,3, 42 | {1,1, 43 | {"ru","3. Добавить обработку integration-1c-redmine.epf в каталог /Модули."} 44 | } 45 | },1, 46 | {0,4},2, 47 | {0,4},3, 48 | {0,4},4, 49 | {0,5},5, 50 | {0,5},4,0,6,0, 51 | {0,6},1, 52 | {0,4},2, 53 | {0,4},3, 54 | {0,4},4, 55 | {0,5},5, 56 | {0,5},5,0,6,0, 57 | {16,6, 58 | {1,1, 59 | {"ru","ПолноеИмя"} 60 | } 61 | },1, 62 | {16,4, 63 | {1,1, 64 | {"ru","Синоним"} 65 | } 66 | },2, 67 | {16,4, 68 | {1,1, 69 | {"ru","ИмяКартинки"} 70 | } 71 | },3, 72 | {16,4, 73 | {1,1, 74 | {"ru","Видимость"} 75 | } 76 | },4, 77 | {16,5, 78 | {1,1, 79 | {"ru","Портативный"} 80 | } 81 | },5, 82 | {16,5, 83 | {1,1, 84 | {"ru","Описание"} 85 | } 86 | },6,0,6,0, 87 | {16,6, 88 | {1,0} 89 | },1, 90 | {16,4, 91 | {1,0} 92 | },2, 93 | {16,4, 94 | {1,0} 95 | },3, 96 | {16,4, 97 | {1,1, 98 | {"ru","Булево"} 99 | } 100 | },4, 101 | {16,4, 102 | {1,1, 103 | {"ru","Булево"} 104 | } 105 | },5, 106 | {16,4, 107 | {1,0} 108 | },7,0,6,0, 109 | {16,7, 110 | {1,1, 111 | {"ru","Обработка.integration-1c-redmine"} 112 | } 113 | },1, 114 | {16,8, 115 | {1,1, 116 | {"ru","1С клиент для Redmine"} 117 | } 118 | },2, 119 | {16,8, 120 | {1,1, 121 | {"ru","Redmine"} 122 | } 123 | },3, 124 | {16,8, 125 | {1,1, 126 | {"ru","1"} 127 | } 128 | },4, 129 | {16,8, 130 | {1,1, 131 | {"ru","1"} 132 | } 133 | },5, 134 | {16,8, 135 | {1,0} 136 | },9,0,2,0, 137 | {16,0, 138 | {1,1, 139 | {"ru","integration-1c-redmine"} 140 | } 141 | },1, 142 | {16,0, 143 | {1,0} 144 | }, 145 | {8,0,00000000-0000-0000-0000-000000000000,5,0,9,1,10,2,11,3,12,5,13},10,0,0,3,1, 146 | { 147 | {0,14},5,1,9,0,0,1,10,186,0,3,1,0,0},0,0,0,0, 148 | {0}, 149 | {0}, 150 | {0}, 151 | {1,"Redmine", 152 | {2,3,0} 153 | },"", 154 | { 155 | {0,6,6, 156 | {"N",1000},7, 157 | {"N",1000},8, 158 | {"N",1000},9, 159 | {"N",1000},10, 160 | {"N",1000},11, 161 | {"N",1000} 162 | } 163 | }, 164 | {0,-1,-1,-1,-1,00000000-0000-0000-0000-000000000000},0,0,0,0,0,0,0,1,0,1,14, 165 | {17793,0,286,0,2,0}, 166 | {16641,1,6,3}, 167 | {1409,0,286,0,2}, 168 | {385,1,274,6}, 169 | {1,1}, 170 | {385,1,286,6}, 171 | {4031,2,0,0,0,0,3,294,0,0,4,5}, 172 | {4031,2,0,0,0,0,3,296,0,0,4,5}, 173 | {128,433}, 174 | {128,313}, 175 | {128,232}, 176 | {128,79}, 177 | {128,237}, 178 | {2048,6},3, 179 | {7,0,63,100,0,0,0,700,0,0,0,0,0,0,0,0,"Arial",1,100}, 180 | {7,0,63,80,0,0,0,700,0,0,0,0,0,0,0,0,"Arial",1,100}, 181 | {7,3,0,1,100},0,0,0,7, 182 | {3,3, 183 | {-1} 184 | }, 185 | {3,3, 186 | {-3} 187 | }, 188 | {3,0, 189 | {6723891} 190 | }, 191 | {3,3, 192 | {-22} 193 | }, 194 | {3,0, 195 | {0} 196 | }, 197 | {3,0, 198 | {16777215} 199 | }, 200 | {3,3, 201 | {-10} 202 | },1, 203 | {4,3, 204 | {0},"",-1,-1,0, 205 | { 206 | {#base64:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAGXRFWHRTb2Z0d2Fy 207 | ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAA 208 | AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U 209 | Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 210 | eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w 211 | Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw 212 | Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE 213 | ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv 214 | YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv 215 | bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v 216 | eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv 217 | YmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAu 218 | aWlkOjExRDQ0QjM0NjM5NjExRTZCQzNBQzZGMDkzNzU2NUJEIiB4bXBNTTpEb2N1 219 | bWVudElEPSJ4bXAuZGlkOjExRDQ0QjM1NjM5NjExRTZCQzNBQzZGMDkzNzU2NUJE 220 | Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6 221 | MTFENDRCMzI2Mzk2MTFFNkJDM0FDNkYwOTM3NTY1QkQiIHN0UmVmOmRvY3VtZW50 222 | SUQ9InhtcC5kaWQ6MTFENDRCMzM2Mzk2MTFFNkJDM0FDNkYwOTM3NTY1QkQiLz4g 223 | PC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh 224 | Y2tldCBlbmQ9InIiPz5UGBfcAAADT0lEQVR42mJ88uQJw7dv3xiYYuPi4r5///4f 225 | IIAYb926xQAGh+MC/h6X5vkHEAAiAN3/AE5OTl7AaGD92Tsq/9/c3P8E6evr/v5q 226 | aQLnWGAA+LGtAAIIoQcKmHj5+P7/uXD6z/MJHf+EhIT+Mx4rzfrLHZPOxMTNy/D7 227 | 62cGlq9icky/3r9nYPz4keHz+dMMAAEEsiXw58+f/3/++vX/x+/f/z98/Pj/F5D+ 228 | 8ePH/79///5n+fXrF++VA3sZmO7f/cvn4cvMwMzC8HDO1L8f+IQYFb39mFi+MzIx 229 | 3HD3YhBdupjpx/PnEJfYuzPf9bf7/2zHRgbG2NhYBqApDLgAQAAx3r59m+H///9Y 230 | Jbm4uBgYQA4EOQjksA+fPv3//us32MEg8fDw8Gimj0DvvHzxguFIctT/Fz7WDPdX 231 | Lvp7NDnq37v3Hxj+/fvHw/Lt5y+G+9s3/xNW1/zP2trPzPj/P7Pgu/d/H588+h/k 232 | NpY3798xcLbXMjLuPcv05d1bsN1fb19hZLp9GWQVA9Pt3ta/1759Z/j++SM46kD4 233 | p7Mf44MpC5n+sLIxsHAZmTML6how/PjyheH/v38Qr3HzMIp2dzD82rztHyPQpTjD 234 | gI2NjQEgQONk85JAEMbhd95dXFdMQjCSSPSUGGXYrUjKix7SCPIQ1SXoEl2CLhJE 235 | /0NEl6h7dOiQYUGEUNGlY0WXkj4k+qBas51t19lmhSKDoLkMDPzel+fhNyQUCjmT 236 | yWRclmU398FqJCFW76/J3++EINegZLPZnBgMBocymcyqRYSCADozgREC9xtrZnlz 237 | HQgPSH0J8I6ME8IqYBNFYIYBkiRBoVCYtCaxt1IJdA5UPDpgV50BKLY1gSGIzDsz 238 | xxqnZxl6m82bSABuwz643tlius0OZc5sZdHarHwYcDaRhrtUCp+6o8xxeA51XVFB 239 | c3sEzdMoyO0d6No/hcf+wcrD2CiepGPmi0qrHRENXoPLgzzTIr0g9ySYy+dH+voC 240 | pqHXclMKroFhVFo7DUoNvMjvEp13SNQ48/PyAjgPj7FkA8SlFZPwyUyjtZ+FI6oq 241 | NZX5GUEqA1HCLUDrfZZo9Mfi8SlHnauBd6cCPPjb+g/9QOx2vgWRvqvPe9u5RfJX 242 | lf97PgHu46XgNa2ARAAAAABJRU5ErkJggg==} 243 | },0,""},0,0,"",0, 244 | {3,0,0,100,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,"",0,0,0,0,0,0,0}, 245 | {0},0,0,0,1} -------------------------------------------------------------------------------- /src/integration-1c-redmine/Макеты/ИнтегрироватьВирПортативные_mxl.txt: -------------------------------------------------------------------------------- 1 | Для того чтобы добавить текущую обработку в панель инструментов ирПортативные необходимо: 2 | 1. Добавить нашу обработку в список инструментов, которые загружает ирПлатформа при старте. В макет "СписокИнструментов" обработки "ирПлатформа" скопировать данные из строки 8. 3 | 2. Добавить картинку которая будет отображаться на панели инструментов. В макет "ОбщиеКартинки" обработки "ирПортативные" скопировать данные из строки 10. 4 | 3. Добавить обработку integration-1c-redmine.epf в каталог /Модули. 5 | 6 | ПолноеИмя Синоним ИмяКартинки Видимость Портативный Описание 7 | Булево Булево 8 | Обработка.integration-1c-redmine 1С клиент для Redmine Redmine 1 1 9 | 10 | integration-1c-redmine -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | Перем КонтекстЯдра; 2 | Перем Утверждения; 3 | Перем Ожидаем; 4 | 5 | Перем мНастройки; 6 | Перем ОбработкаОбъект; 7 | 8 | 9 | //{ основная процедура для юнит-тестирования xUnitFor1C 10 | Процедура Инициализация(КонтекстЯдраПараметр) Экспорт 11 | КонтекстЯдра = КонтекстЯдраПараметр; 12 | Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения"); 13 | Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); 14 | КонецПроцедуры 15 | 16 | Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт 17 | 18 | НаборТестов.Добавить("ТестДолжен_ПроверитьЭкспортныеПеременные"); 19 | 20 | НаборТестов.НачатьГруппу("Подключение к трекеру и проверка методов Rest API", Истина); 21 | 22 | НаборТестов.Добавить("ТестДолжен_ПроверитьНастройкиПодключения"); 23 | НаборТестов.Добавить("ТестДолжен_ЗаполнитьНастройкиПодключенияКТрекеруТестовымиЗначениями"); 24 | НаборТестов.Добавить("ТестДолжен_ПройтиИнициализациюПараметровОбработки"); 25 | НаборТестов.Добавить("ТестДолжен_ПолучитьИзТрекераСписокНастраиваемыхПолей"); 26 | НаборТестов.Добавить("ТестДолжен_ПолучитьИзТрекераСписокПроектов"); 27 | НаборТестов.Добавить("ТестДолжен_ПолучитьИзТрекераСписокИсполнителей"); 28 | НаборТестов.Добавить("ТестДолжен_СоздатьЗадачуВТрекере"); 29 | НаборТестов.Добавить("ТестДолжен_ПолучитьСписокЗадач"); 30 | НаборТестов.Добавить("ТестДолжен_УдалитьЗадачуИзТрекера"); 31 | 32 | //НаборТестов.Добавить("ТестДолжен_СложитьДваИДва"); 33 | КонецПроцедуры 34 | 35 | //} 36 | 37 | //{ Блок юнит-тестов 38 | 39 | Процедура ПередЗапускомТеста() Экспорт 40 | //НачатьТранзакцию(); 41 | 42 | ПутьКОбработке = СтрЗаменить(ЭтотОбъект.ИспользуемоеИмяФайла, "tests\tests_", ""); 43 | ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКОбработке); 44 | 45 | ИмяФайлаНастроек = СтрЗаменить(ЭтотОбъект.ИспользуемоеИмяФайла, "tests_integration-1c-redmine.epf", "settings.json"); 46 | ФайлНастроек = Новый Файл(ИмяФайлаНастроек); 47 | Утверждения.ПроверитьИстину(ФайлНастроек.Существует(), "В каталоге ./test не обнаружен файл с настройками settings.json!"); 48 | 49 | СтрокаJSON = Новый ТекстовыйДокумент; 50 | СтрокаJSON.Прочитать(ИмяФайлаНастроек); 51 | 52 | Параметры = Новый Массив; 53 | Параметры.Добавить(СтрокаJSON.ПолучитьТекст()); 54 | Утверждения.ПроверитьМетодВыполнился(ОбработкаОбъект, "асПрочитатьJSON", Параметры, "Не удалось прочитать файл с настройками!"); 55 | 56 | мНастройки = ОбработкаОбъект.асПрочитатьJSON(СтрокаJSON.ПолучитьТекст()); 57 | 58 | КонецПроцедуры 59 | 60 | Процедура ПослеЗапускаТеста() Экспорт 61 | //Если ТранзакцияАктивна() Тогда 62 | // ОтменитьТранзакцию(); 63 | //КонецЕсли; 64 | КонецПроцедуры 65 | 66 | // Пример написания тестов 67 | // 68 | //Процедура ТестДолжен_СложитьДваИДва() Экспорт 69 | // Утверждения.ПроверитьРавенство(2 + 2, 4, "2 + 2, 4"); 70 | //КонецПроцедуры 71 | 72 | Процедура ТестДолжен_ПроверитьЭкспортныеПеременные() Экспорт 73 | 74 | Ожидаем.Что(ОбработкаОбъект.ЗагруженныеДанные).ИмеетТип("Соответствие"); 75 | //Утверждения.ПроверитьВхождение(ОбработкаОбъект.мКонвертерTextileToHTML, ".js", "У файла конвертера Textile в HTML некорректное расширение (!'.js')"); 76 | //Утверждения.Проверить(ОбработкаОбъект.мHTTPСоединение, "Не найдено переменная мHTTPСоединение") 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 | Утверждения.ПроверитьБольше(ОбработкаОбъект.ЗагруженныеДанные.Количество(), 0, "Количество загруженных данных с трекера равно 0!"); 126 | Утверждения.ПроверитьБольше(ОбработкаОбъект.ЗагруженныеДанные["trackers"].trackers.Количество(), 0, "Ожидается, хотябы один вид ""трекера"" для задач! Добавление из панели ""Администрирование/Трекеры"""); 127 | Утверждения.ПроверитьБольше(ОбработкаОбъект.ЗагруженныеДанные["issue_statuses"].issue_statuses.Количество(), 0, "Ожидается, хотябы один вид ""статуса"" для задач! Добавление из панели ""Администрирование/Статусы задач"""); 128 | Утверждения.ПроверитьБольше(ОбработкаОбъект.ЗагруженныеДанные["issue_priorities"].issue_priorities.Количество(), 0, "Ожидается, хотябы один вид ""приоритета"" для задач! Добавление из панели ""Администрирование/Списки значений"""); 129 | Утверждения.ПроверитьБольше(ОбработкаОбъект.ЗагруженныеДанные["time_entry_activities"].time_entry_activities.Количество(), 0, "Ожидается, хотябы один вид ""приоритета"" для задач! Добавление из панели ""Администрирование/Списки значений"""); 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 | Утверждения.ПроверитьБольше(Данные.Количество(), 0, "Список полученных проектов с трекера пуст! Ожидается как минимм один проект в трекере"); 156 | 157 | КонецПроцедуры 158 | 159 | Процедура ТестДолжен_ПолучитьИзТрекераСписокИсполнителей() Экспорт 160 | 161 | ЗаполнитьНастройкиПодключения(); 162 | 163 | ОбработкаОбъект.Инициализация(); 164 | 165 | Проекты = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("projects")["projects"]; 166 | 167 | Проект = ПроверитьЭлементМассиваПоЗначениюПоля(1, "status", Проекты); 168 | 169 | Данные = ОбработкаОбъект.ПолучитьСписокИсполнителейПроектаИзТрекера(Проект["name"]); 170 | 171 | Утверждения.ПроверитьЛожь(ОбработкаОбъект.ОтчетОВыполнении.ЕстьОшибки, ОбработкаОбъект.ОтчетОВыполнении.ТекстОшибки); 172 | 173 | Ожидаем.Что(Данные).Существует().ИмеетТип("Массив"); 174 | 175 | КонецПроцедуры 176 | 177 | 178 | Процедура ТестДолжен_СоздатьЗадачуВТрекере() Экспорт 179 | 180 | ЗаполнитьНастройкиПодключения(); 181 | 182 | ОбработкаОбъект.Инициализация(); 183 | 184 | Проекты = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("projects")["projects"]; 185 | 186 | Проект = ПроверитьЭлементМассиваПоЗначениюПоля(1, "status", Проекты); 187 | 188 | ЗагруженныеДанные = ОбработкаОбъект.ЗагруженныеДанные; 189 | 190 | ОбработкаОбъект.ЗадачаПроект = Проект["name"]; //Сообщить("Проект: " + ОбработкаОбъект.ЗадачаПроект); 191 | ОбработкаОбъект.ЗадачаТрекер = ЗагруженныеДанные["trackers"].trackers[0].name; 192 | ОбработкаОбъект.ЗадачаСтатус = ЗагруженныеДанные["issue_statuses"].issue_statuses[0].name; 193 | ОбработкаОбъект.ЗадачаПриоритет = ЗагруженныеДанные["issue_priorities"].issue_priorities[0].name; 194 | ОбработкаОбъект.ЗадачаТема = Метаданные().Синоним; 195 | 196 | ОбработкаОбъект.СоздатьЗадачуВТрекере(); 197 | 198 | Утверждения.ПроверитьЛожь(ОбработкаОбъект.ОтчетОВыполнении.ЕстьОшибки, "Не удалось создать задачу в трекере!" + Символы.ПС + ОбработкаОбъект.ОтчетОВыполнении.ТекстОшибки); 199 | 200 | КонецПроцедуры 201 | 202 | Процедура ТестДолжен_ПолучитьСписокЗадач() Экспорт 203 | 204 | ЗаполнитьНастройкиПодключения(); 205 | 206 | Проекты = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("projects")["projects"]; 207 | Проект = ПроверитьЭлементМассиваПоЗначениюПоля(1, "status", Проекты); 208 | 209 | Форма = ОбработкаОбъект.ПолучитьФорму("Форма"); 210 | Форма.ЭлементыФормы.Проект.Значение = Проект.name; 211 | 212 | Отборы = ОбработкаОбъект.СформироватьПараметрыЗапросаПолученияДанныхСТрекера(Форма.ЭлементыФормы); 213 | 214 | ИдентификаторПроекта = ОбработкаОбъект.ПолучитьИдентификаторПараметра(Проект.name, "projects"); 215 | 216 | Утверждения.ПроверитьВхождение(Отборы, "project_id="+ИдентификаторПроекта, "Отбор по проекту установлен некорректно!"); 217 | 218 | Данные = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("issues", Отборы); 219 | 220 | Утверждения.ПроверитьЛожь(ОбработкаОбъект.ОтчетОВыполнении.ЕстьОшибки, "Не удалось получить список задач из трекера!" + Символы.ПС + ОбработкаОбъект.ОтчетОВыполнении.ТекстОшибки); 221 | 222 | Ожидаем.Что(Данные).ИмеетТип("Структура"); 223 | Ожидаем.Что(Данные.Свойство("issues")).ЭтоИстина(); 224 | Утверждения.ПроверитьБольше(Данные["issues"].Количество(), 0, "Ожидаем что как миниму есть одна задача, созданная нами, предыдущим тестом"); 225 | 226 | ПроверитьЭлементМассиваПоЗначениюПоля(Метаданные().Синоним, "subject", Данные["issues"]) 227 | 228 | КонецПроцедуры 229 | 230 | Функция ПроверитьЭлементМассиваПоЗначениюПоля(ИскомоеЗначение, ИмяПоляЭлемента, Массив) 231 | ПолеНайдено = Ложь; 232 | Для Каждого ЭлМассива Из Массив Цикл 233 | Если ЭлМассива[ИмяПоляЭлемента] = ИскомоеЗначение Тогда 234 | ПолеНайдено = Истина; 235 | Если ЭлМассива.Свойство("id") Тогда 236 | Возврат ЭлМассива; 237 | КонецЕсли; 238 | КонецЕсли; 239 | КонецЦикла; 240 | 241 | Если Не ПолеНайдено Тогда 242 | ВызватьИсключение "Не удалось найти значение - " + ИскомоеЗначение + " в массиве данных"; 243 | КонецЕсли; 244 | КонецФункции 245 | 246 | Процедура ТестДолжен_УдалитьЗадачуИзТрекера() Экспорт 247 | 248 | ЗаполнитьНастройкиПодключения(); 249 | 250 | Проекты = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("projects")["projects"]; 251 | Проект = ПроверитьЭлементМассиваПоЗначениюПоля(1, "status", Проекты); 252 | 253 | Форма = ОбработкаОбъект.ПолучитьФорму("Форма"); 254 | Форма.ЭлементыФормы.Проект.Значение = Проект.name; 255 | Форма.ЭлементыФормы.Тема.Значение = Метаданные().Синоним; 256 | 257 | Отборы = ОбработкаОбъект.СформироватьПараметрыЗапросаПолученияДанныхСТрекера(Форма.ЭлементыФормы); 258 | мЗадач = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("issues", Отборы)["issues"]; 259 | 260 | НомерЗадачи = ПроверитьЭлементМассиваПоЗначениюПоля(Метаданные().Синоним, "subject", мЗадач).id; 261 | 262 | ОбработкаОбъект.УдалитьЗадачуИзТрекера(НомерЗадачи); 263 | Утверждения.ПроверитьЛожь(ОбработкаОбъект.ОтчетОВыполнении.ЕстьОшибки, "Не удалось удалить задачу из трекера!" + Символы.ПС + ОбработкаОбъект.ОтчетОВыполнении.ТекстОшибки); 264 | 265 | КонецПроцедуры 266 | 267 | //} -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/maps.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/renames.txt: -------------------------------------------------------------------------------- 1 | 3aa77920-2f32-4f97-9c57-fd85a281aa0a-->und\3aa77920-2f32-4f97-9c57-fd85a281aa0a 2 | copyinfo-->und\copyinfo 3 | d8de7525-5865-455d-98c1-87352900fec1.0\info-->und\d8de7525-5865-455d-98c1-87352900fec1.0\info 4 | d8de7525-5865-455d-98c1-87352900fec1.0\text-->ObjectModule.bsl 5 | root-->und\root 6 | version-->und\version 7 | versions-->und\versions 8 | -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/und/3aa77920-2f32-4f97-9c57-fd85a281aa0a: -------------------------------------------------------------------------------- 1 | {1, 2 | {3aa77920-2f32-4f97-9c57-fd85a281aa0a},1, 3 | {c3831ec8-d8d5-4f93-8a22-f9bfae07327f, 4 | {1, 5 | {4,a7ab94a8-42f0-4743-a38f-ddd8dae39ca7,1e628ca1-41cf-40e9-9bb1-59b66d38b11f, 6 | {0, 7 | {1, 8 | {0,0,d8de7525-5865-455d-98c1-87352900fec1},"Тесты_асИнтеграцияССистемамойУправленияПроектамиRedmine", 9 | {1,"ru","Тесты для обработки ""Интеграция с системой управления проектами Redmine"""},"",0,0} 10 | },00000000-0000-0000-0000-000000000000,"",00000000-0000-0000-0000-000000000000},4, 11 | {2bcef0d1-0981-11d6-b9b8-0050bae0a95d,0}, 12 | {3daea016-69b7-4ed4-9453-127911372fe6,0}, 13 | {d5b0e5ed-256d-401c-9c36-f630cafd8a62,0}, 14 | {ec6bb5e5-b7a8-4d75-bec9-658107a699cf,0} 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/und/copyinfo: -------------------------------------------------------------------------------- 1 | {4, 2 | {0}, 3 | {0}, 4 | {0}, 5 | {0,0}, 6 | {0} 7 | } -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/und/d8de7525-5865-455d-98c1-87352900fec1.0/info: -------------------------------------------------------------------------------- 1 | {3,1,0,"",0} -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/und/root: -------------------------------------------------------------------------------- 1 | {2,3aa77920-2f32-4f97-9c57-fd85a281aa0a,} -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/und/version: -------------------------------------------------------------------------------- 1 | { 2 | {216,0} 3 | } -------------------------------------------------------------------------------- /src/tests/tests_integration-1c-redmine/und/versions: -------------------------------------------------------------------------------- 1 | {1,7,"",5a573a9a-127d-42f7-8e60-094c0805a74f,"3aa77920-2f32-4f97-9c57-fd85a281aa0a",0906e211-c51e-4576-821a-1dbc39bbfa6e,"copyinfo",49c08b80-9561-443c-ae77-fb4e2bff4368,"d8de7525-5865-455d-98c1-87352900fec1.0",4f8ce713-ff4d-443b-890f-85fab8cbc571,"root",39069a65-3567-4c67-848c-181963c761da,"version",c2900c28-e962-41a2-88e0-15129101b829,"versions",32178ef8-a2e7-4fef-aa65-3438f4244623} -------------------------------------------------------------------------------- /tests/settings_.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andranik-ss/integration-1c-redmine/e2d523f07539277159c864aa1bb565de5bc1c462/tests/settings_.json --------------------------------------------------------------------------------