├── Config1C ├── Ext │ ├── MainSectionPicture │ │ └── Picture.png │ ├── ManagedApplicationModule.bsl │ ├── HomePageWorkArea.xml │ └── MainSectionPicture.xml ├── CommonPictures │ ├── VA_Подсистема │ │ └── Ext │ │ │ ├── Picture │ │ │ └── Picture.zip │ │ │ └── Picture.xml │ └── VA_Подсистема.xml ├── DataProcessors │ ├── VA_1ChromeDev │ │ ├── Templates │ │ │ ├── VA_1cWinCtrl │ │ │ │ └── Ext │ │ │ │ │ └── Template.bin │ │ │ ├── VA_JavaScript │ │ │ │ └── Ext │ │ │ │ │ └── Template.txt │ │ │ ├── VA_1cWinCtrl.xml │ │ │ └── VA_JavaScript.xml │ │ └── Forms │ │ │ ├── VA_1ChromeDev.xml │ │ │ └── VA_1ChromeDev │ │ │ └── Ext │ │ │ └── Form │ │ │ └── Module.bsl │ ├── ОткрытьТестируемуОбработку │ │ ├── Commands │ │ │ └── ОткрытьТестируемуОбработку │ │ │ │ └── Ext │ │ │ │ └── CommandModule.bsl │ │ └── Forms │ │ │ ├── Форма │ │ │ └── Ext │ │ │ │ ├── Form.xml │ │ │ │ └── Form │ │ │ │ └── Module.bsl │ │ │ └── Форма.xml │ ├── ОткрытьТестируемуОбработку.xml │ └── VA_1ChromeDev.xml ├── CommonCommands │ ├── VA_УправлениеБраузером │ │ └── Ext │ │ │ └── CommandModule.bsl │ ├── VA_ОписаниеПротокола │ │ └── Ext │ │ │ └── CommandModule.bsl │ ├── VA_ОписаниеПротокола.xml │ └── VA_УправлениеБраузером.xml ├── Roles │ ├── Администратор │ │ └── Ext │ │ │ └── Rights.xml │ └── Администратор.xml ├── CommonForms │ ├── НастройкаЗапуска │ │ └── Ext │ │ │ ├── Form │ │ │ └── Module.bsl │ │ │ └── Form.xml │ ├── VA_Управление.xml │ ├── НастройкаЗапуска.xml │ └── VA_Управление │ │ └── Ext │ │ ├── Form │ │ └── Module.bsl │ │ └── Form.xml ├── Languages │ └── Русский.xml ├── CommonTemplates │ ├── VA_Library.xml │ ├── VA_jQuery.xml │ └── VA_Library │ │ └── Ext │ │ └── Template.bin ├── Catalogs │ ├── VA_ПримерДанных │ │ └── Forms │ │ │ ├── ФормаСписка.xml │ │ │ ├── ФормаЭлемента.xml │ │ │ ├── ФормаЭлемента │ │ │ └── Ext │ │ │ │ └── Form.xml │ │ │ └── ФормаСписка │ │ │ └── Ext │ │ │ └── Form.xml │ └── VA_ПримерДанных.xml ├── Subsystems │ └── VA_Подсистема.xml ├── Constants │ ├── ТестируемаяБиблиотека.xml │ └── ТестируемаяОбработка.xml ├── ConfigDumpInfo.xml └── Configuration.xml ├── .gitignore ├── tools └── SetCurrent1CVersion.cmd ├── wwwroot ├── test │ ├── default.vrd │ └── web.config └── vanessa │ ├── enjoyhint.css │ └── library.js ├── readme.md └── LICENSE /Config1C/Ext/MainSectionPicture/Picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lintest/1ChromeVA/HEAD/Config1C/Ext/MainSectionPicture/Picture.png -------------------------------------------------------------------------------- /Config1C/CommonPictures/VA_Подсистема/Ext/Picture/Picture.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lintest/1ChromeVA/HEAD/Config1C/CommonPictures/VA_Подсистема/Ext/Picture/Picture.zip -------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev/Templates/VA_1cWinCtrl/Ext/Template.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lintest/1ChromeVA/HEAD/Config1C/DataProcessors/VA_1ChromeDev/Templates/VA_1cWinCtrl/Ext/Template.bin -------------------------------------------------------------------------------- /Config1C/Ext/ManagedApplicationModule.bsl: -------------------------------------------------------------------------------- 1 | Перем глСчётчик Экспорт; 2 | 3 | #Если ТонкийКлиент Тогда 4 | Процедура ПриНачалеРаботыСистемы() 5 | 6 | глСчётчик = 0; 7 | ОткрытьФорму("Обработка.ОткрытьТестируемуОбработку.Форма"); 8 | 9 | КонецПроцедуры 10 | #КонецЕсли 11 | 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Данный GITIGNORE-файл был автоматически создан Microsoft(R) Visual Studio. 3 | ################################################################################ 4 | 5 | /.vc 6 | /.vs 7 | /*/fileversion 8 | AddIn.zip 9 | *.epf 10 | *.o 11 | *.d 12 | *.so 13 | -------------------------------------------------------------------------------- /Config1C/CommonCommands/VA_УправлениеБраузером/Ext/CommandModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) 4 | ОткрытьФорму("ОбщаяФорма.VA_Управление", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); 5 | КонецПроцедуры 6 | -------------------------------------------------------------------------------- /Config1C/CommonCommands/VA_ОписаниеПротокола/Ext/CommandModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) 4 | ОткрытьФорму("Обработка.VA_1ChromeDev.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); 5 | КонецПроцедуры 6 | -------------------------------------------------------------------------------- /Config1C/Ext/HomePageWorkArea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | TwoColumnsEqualWidth 4 | 5 | 6 | -------------------------------------------------------------------------------- /Config1C/Ext/MainSectionPicture.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Picture.png 5 | false 6 | 7 | -------------------------------------------------------------------------------- /Config1C/CommonPictures/VA_Подсистема/Ext/Picture.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Picture.zip 5 | false 6 | 7 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/ОткрытьТестируемуОбработку/Commands/ОткрытьТестируемуОбработку/Ext/CommandModule.bsl: -------------------------------------------------------------------------------- 1 | &НаКлиенте 2 | Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) 3 | ОткрытьФорму("Обработка.ОткрытьТестируемуОбработку.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); 4 | КонецПроцедуры 5 | -------------------------------------------------------------------------------- /Config1C/Roles/Администратор/Ext/Rights.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | true 5 | false 6 | -------------------------------------------------------------------------------- /tools/SetCurrent1CVersion.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | if /%1 == / goto help 3 | pushd "C:\Program Files\1cv8" 4 | if exist current\ rmdir current 5 | mklink /j current %1 6 | cd "C:\Program Files (x86)\1cv8" 7 | if exist current\ rmdir current 8 | mklink /j current %1 9 | popd 10 | goto end 11 | :help 12 | echo SetCurrent1CVersion - Makes symbolic links pointing to current 1C-Enterprise version's folders 13 | echo Parameter: 1C-Enterprise version number 14 | echo Example: SetCurrent1CVersion 8.3.5.1248 15 | :end 16 | -------------------------------------------------------------------------------- /wwwroot/test/default.vrd: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 12 | 17 | 18 | 25 | 26 | -------------------------------------------------------------------------------- /wwwroot/test/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev/Templates/VA_JavaScript/Ext/Template.txt: -------------------------------------------------------------------------------- 1 | { 2 | let node = document.createElement('div'); 3 | node.innerHTML = 'Пример взаимодействия с браузером
посредством\ 4 | \ 5 | Chrome DevTools Protocol'; 6 | node.style.fontSize = '150%'; 7 | node.style.position = 'fixed'; 8 | node.style.zIndex = 999999; 9 | node.style.left = '3em'; 10 | node.style.top = '3em'; 11 | node.style.borderWidth = '0.3em'; 12 | node.style.borderStyle = 'solid'; 13 | node.style.borderColor = 'red'; 14 | node.style.boxShadow = '0 0 1em #333333'; 15 | node.style.backgroundColor = 'white'; 16 | node.style.padding = '1em'; 17 | node.style.borderRadius = '1em'; 18 | window.top.document.body.appendChild(node); 19 | setTimeout(() => { if (node) node.remove() }, 10000); 20 | }; -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | Представленная конфигурация на платформе **«1С:Предприятие»** демонстрирует 2 | взаимодействие с браузером **Google Chrome** посредством протокола 3 | [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). 4 | Используется для отладки функций автодокументирования и создания видеоинструкций 5 | [Vanessa-Automation](https://pr-mex.github.io/vanessa-automation/). 6 | 7 | ### Порядок развёртывания решения 8 | 1. Создайте новую пустую информационную базу 1С. 9 | 10 | 2. В режиме конфигуратора загрузите конфигурацию из файлов XML, 11 | находящихся в папке **Config1C**, воспользовавшись коммандой меню 12 | "Конфигурация" => "Загрузить конфигурацию из файлов…". 13 | 14 | 15 | 3. Опубликуйте конфигурацию на локальном веб-сервисе, при помощи 16 | команды меню "Администрирование" => "Публикация на web-сервисе…", 17 | используйте имя публикации "test". 18 | 19 | 4. В корневой папке локального веб-сервера разместите папку **wwwroot/vanessa**. 20 | 21 | 5. Запустите информационную базу 1С в режиме тонкого клиента с 22 | дополнительным параметром запуска: **/TESTMANAGER**. 23 | 24 | ### Демонстрация возможностей решения 25 | 26 | https://youtu.be/FvDkKj0gC54 27 | -------------------------------------------------------------------------------- /Config1C/CommonForms/НастройкаЗапуска/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ТестируемаяОбработкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 4 | 5 | ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаВыбораФайла", ЭтаФорма, "ТестируемаяОбработка"); 6 | ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 7 | ДиалогВыбораФайла.Фильтр = "Внешняя обработка (*.epf)|*.epf"; 8 | ДиалогВыбораФайла.Показать(ОписаниеОповещения); 9 | 10 | КонецПроцедуры 11 | 12 | &НаКлиенте 13 | Процедура ТестируемаяБиблиотекаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 14 | 15 | ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаВыбораФайла", ЭтаФорма, "ТестируемаяБиблиотека"); 16 | ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 17 | ДиалогВыбораФайла.Фильтр = "Библиотека (*.dll)|*.dll"; 18 | ДиалогВыбораФайла.Показать(ОписаниеОповещения); 19 | 20 | КонецПроцедуры 21 | 22 | &НаКлиенте 23 | Процедура ОбработкаВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт 24 | 25 | Если ВыбранныеФайлы <> Неопределено Тогда 26 | НаборКонстант[ДополнительныеПараметры] = ВыбранныеФайлы[0]; 27 | КонецЕсли; 28 | 29 | КонецПроцедуры 30 | -------------------------------------------------------------------------------- /Config1C/Roles/Администратор.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Администратор 6 | 7 | 8 | ru 9 | Администратор 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Config1C/Languages/Русский.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Русский 6 | 7 | 8 | ru 9 | Русский 10 | 11 | 12 | 13 | ru 14 | 15 | 16 | -------------------------------------------------------------------------------- /Config1C/CommonTemplates/VA_Library.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_Library 6 | 7 | 8 | ru 9 | V a library 10 | 11 | 12 | 13 | BinaryData 14 | 15 | 16 | -------------------------------------------------------------------------------- /Config1C/CommonTemplates/VA_jQuery.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_jQuery 6 | 7 | 8 | ru 9 | V a j query 10 | 11 | 12 | 13 | BinaryData 14 | 15 | 16 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev/Templates/VA_1cWinCtrl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev/Templates/VA_JavaScript.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /Config1C/CommonPictures/VA_Подсистема.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_Подсистема 6 | 7 | 8 | ru 9 | Подсистема 10 | 11 | 12 | 13 | false 14 | false 15 | 16 | 17 | -------------------------------------------------------------------------------- /Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаСписка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаСписка 6 | 7 | 8 | ru 9 | Форма списка 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаЭлемента.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаЭлемента 6 | 7 | 8 | ru 9 | Форма элемента 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev/Forms/VA_1ChromeDev.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | VA_1ChromeDev 6 | 7 | 8 | ru 9 | Управление 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 | 21 |
22 |
-------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2019, Denis Kandrashin 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /Config1C/CommonForms/VA_Управление.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_Управление 6 | 7 | 8 | ru 9 | Управление браузером 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | false 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Config1C/CommonForms/НастройкаЗапуска.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | НастройкаЗапуска 6 | 7 | 8 | ru 9 | Настройка запуска 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | true 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Config1C/CommonCommands/VA_ОписаниеПротокола.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_ОписаниеПротокола 6 | 7 | 8 | ru 9 | Описание протокола 10 | 11 | 12 | 13 | NavigationPanelOrdinary 14 | Auto 15 | 16 | 17 | 18 | false 19 | 20 | Single 21 | false 22 | Auto 23 | 24 | 25 | -------------------------------------------------------------------------------- /Config1C/CommonCommands/VA_УправлениеБраузером.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_УправлениеБраузером 6 | 7 | 8 | ru 9 | Управление браузером 10 | 11 | 12 | 13 | NavigationPanelImportant 14 | Auto 15 | 16 | 17 | 18 | false 19 | 20 | Single 21 | false 22 | Auto 23 | 24 | 25 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/ОткрытьТестируемуОбработку/Forms/Форма/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | ПриОткрытии 6 | ПриСозданииНаСервере 7 | 8 | 9 | 10 | 11 | cfg:DataProcessorObject.ОткрытьТестируемуОбработку 12 | 13 | true 14 | 15 | 16 | 17 | xs:boolean 18 | 19 | 20 | 21 | 22 | xs:boolean 23 | 24 | 25 | 26 | 27 | xs:boolean 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Config1C/Subsystems/VA_Подсистема.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VA_Подсистема 6 | 7 | 8 | ru 9 | Vanessa Automation 10 | 11 | 12 | 13 | true 14 | true 15 | 16 | 17 | CommonPicture.VA_Подсистема 18 | true 19 | 20 | 21 | Catalog.VA_ПримерДанных 22 | CommonForm.VA_Управление 23 | Role.Администратор 24 | CommonCommand.VA_УправлениеБраузером 25 | DataProcessor.VA_1ChromeDev 26 | CommonCommand.VA_ОписаниеПротокола 27 | DataProcessor.ОткрытьТестируемуОбработку 28 | Constant.ТестируемаяОбработка 29 | 768e2e69-5708-48d3-bc5e-886a5bada79c 30 | Constant.ТестируемаяБиблиотека 31 | CommonForm.НастройкаЗапуска 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Config1C/CommonForms/НастройкаЗапуска/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | LockOwnerWindow 4 | 5 | 6 | 7 | НаборКонстант.ТестируемаяОбработка 8 | 9 | <v8:item> 10 | <v8:lang>ru</v8:lang> 11 | <v8:content>Обработка</v8:content> 12 | </v8:item> 13 | 14 | EnterOnInput 15 | 40 16 | true 17 | 18 | 19 | 20 | ТестируемаяОбработкаНачалоВыбора 21 | 22 | 23 | 24 | НаборКонстант.ТестируемаяБиблиотека 25 | 26 | <v8:item> 27 | <v8:lang>ru</v8:lang> 28 | <v8:content>Библиотека</v8:content> 29 | </v8:item> 30 | 31 | EnterOnInput 32 | 40 33 | true 34 | 35 | 36 | 37 | ТестируемаяБиблиотекаНачалоВыбора 38 | 39 | 40 | 41 | 42 | 43 | 44 | cfg:ConstantsSet 45 | 46 | true 47 | true 48 | 49 | 50 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/ОткрытьТестируемуОбработку.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c0638c69-563a-4d6e-a875-0b0daad05ee8 7 | 0430ff7d-4c34-471f-8d08-194d6180cea5 8 | 9 | 10 | 0eda8d96-7b3f-469d-97a5-69c005d2ea26 11 | 5cffd51e-c4de-4040-a388-649c841ef317 12 | 13 | 14 | 15 | ОткрытьТестируемуОбработку 16 | 17 | 18 | en 19 | Open vanessa automation 20 | 21 | 22 | ru 23 | Открыть тестируему обработку 24 | 25 | 26 | 27 | false 28 | DataProcessor.ОткрытьТестируемуОбработку.Form.Форма 29 | 30 | false 31 | 32 | 33 | 34 | 35 |
Форма
36 | 37 | 38 | ОткрытьТестируемуОбработку 39 | 40 | 41 | ru 42 | Открыть тестируему обработку 43 | 44 | 45 | 46 | NavigationPanelImportant 47 | 48 | Single 49 | false 50 | Auto 51 | 52 | 53 | 54 | Auto 55 | 56 | 57 |
58 |
59 |
-------------------------------------------------------------------------------- /Config1C/Constants/ТестируемаяБиблиотека.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 1b64a2ef-13c5-4c5e-86da-da9fd5dbaba1 7 | e7cc013c-731b-4ea5-8166-afc4bd1ffa15 8 | 9 | 10 | 7436b23f-5108-4c45-94e9-54ad25b174ff 11 | b78ded0f-b4d7-46d8-94f8-90c29bd17132 12 | 13 | 14 | 0dbc8ef6-c23e-4ab4-bb08-4c0c60092c9a 15 | 0fe860f8-02b2-4791-9baa-db45af17a852 16 | 17 | 18 | 19 | ТестируемаяБиблиотека 20 | 21 | 22 | ru 23 | Тестируемая библиотека 24 | 25 | 26 | 27 | 28 | xs:string 29 | 30 | 0 31 | Variable 32 | 33 | 34 | false 35 | 36 | 37 | 38 | false 39 | 40 | 41 | 42 | false 43 | 44 | false 45 | false 46 | 47 | 48 | DontCheck 49 | Items 50 | 51 | 52 | Auto 53 | 54 | 55 | Auto 56 | Managed 57 | DontUse 58 | false 59 | false 60 | 61 | 62 | -------------------------------------------------------------------------------- /Config1C/Constants/ТестируемаяОбработка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | f23cf812-9a69-42a6-8eab-668c87439066 7 | 3d82db49-d927-4d58-a51f-10cd0413a256 8 | 9 | 10 | 7dfd2c9d-7615-4e8b-b0a0-ac85fee49749 11 | 72400898-094b-4238-896e-ab54efffc439 12 | 13 | 14 | 17d713b9-5bd9-4053-95ff-4a5ef2d03bf3 15 | e3aca119-8c0f-43ad-978b-c89f00511bc1 16 | 17 | 18 | 19 | ТестируемаяОбработка 20 | 21 | 22 | ru 23 | Тестируемая обработка 24 | 25 | 26 | en 27 | Vanessa automation path 28 | 29 | 30 | 31 | 32 | xs:string 33 | 34 | 0 35 | Variable 36 | 37 | 38 | false 39 | 40 | 41 | 42 | false 43 | 44 | 45 | 46 | false 47 | 48 | false 49 | false 50 | 51 | 52 | DontCheck 53 | Items 54 | 55 | 56 | Auto 57 | 58 | 59 | Auto 60 | Managed 61 | DontUse 62 | false 63 | false 64 | 65 | 66 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/ОткрытьТестируемуОбработку/Forms/Форма.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | Форма 6 | 7 | 8 | ru 9 | Форма 10 | 11 | 12 | en 13 | Form 14 | 15 | 16 | am 17 | ቅጽ 18 | 19 | 20 | az 21 | Forması 22 | 23 | 24 | bg 25 | Форма 26 | 27 | 28 | et 29 | Vorm 30 | 31 | 32 | fr 33 | La forme 34 | 35 | 36 | ka 37 | ფორმა 38 | 39 | 40 | de 41 | Form 42 | 43 | 44 | hu 45 | Formában 46 | 47 | 48 | it 49 | La forma 50 | 51 | 52 | lv 53 | Forma 54 | 55 | 56 | lt 57 | Forma 58 | 59 | 60 | mn 61 | Маягт 62 | 63 | 64 | pl 65 | Kształt 66 | 67 | 68 | ro 69 | Forma 70 | 71 | 72 | sl 73 | Obrazec 74 | 75 | 76 | es 77 | La forma de 78 | 79 | 80 | sv 81 | Form 82 | 83 | 84 | tr 85 | Formu 86 | 87 | 88 | vi 89 | Biểu mẫu 90 | 91 | 92 | 93 | Managed 94 | false 95 | 96 | PlatformApplication 97 | MobilePlatformApplication 98 | 99 | 100 | 101 |
102 |
-------------------------------------------------------------------------------- /Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаЭлемента/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | LockOwnerWindow 4 | Items 5 | 6 | 7 | 8 | Объект.Code 9 | EnterOnInput 10 | 11 | 12 | 13 | 14 | Объект.Description 15 | EnterOnInput 16 | 17 | 18 | 19 | 20 | Объект.Комментарий 21 | EnterOnInput 22 | 23 | 24 | 25 | 26 | Объект.Флажок 27 | Auto 28 | 29 | 30 | 31 | 32 | Объект.Переключатель 33 | Auto 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | ru 42 | Единица 43 | 44 | 45 | 1 46 | 47 | 48 | 49 | 50 | 0 51 | 52 | 53 | 54 | ru 55 | Двойка 56 | 57 | 58 | 2 59 | 60 | 61 | 62 | 63 | 0 64 | 65 | 66 | 67 | ru 68 | Тройка 69 | 70 | 71 | 3 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | Объект.Текст 80 | true 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | cfg:CatalogObject.VA_ПримерДанных 89 | 90 | true 91 | true 92 | 93 | 94 | -------------------------------------------------------------------------------- /Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаСписка/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | <v8:item> 8 | <v8:lang>ru</v8:lang> 9 | <v8:content>Группа пользовательских настроек</v8:content> 10 | </v8:item> 11 | 12 | false 13 | Vertical 14 | false 15 | 16 | 17 | 18 | List 19 | None 20 | true 21 | true 22 | ExpandTopLevel 23 | true 24 | Список 25 | Список.DefaultPicture 26 | false 27 | 60 28 | 29 | Custom 30 | 0001-01-01T00:00:00 31 | 0001-01-01T00:00:00 32 | 33 | Items 34 | false 35 | 36 | true 37 | false 38 | Auto 39 | СписокКомпоновщикНастроекПользовательскиеНастройки 40 | 41 | 42 | false 43 | 44 | 45 | 46 | 47 | Список 48 | SearchStringRepresentation 49 | 50 | 51 | 52 | 53 | 54 | 55 | Список 56 | ViewStatusRepresentation 57 | 58 | 59 | 60 | 61 | 62 | 63 | Список 64 | SearchControl 65 | 66 | 67 | 68 | 69 | 70 | 71 | Список.Description 72 | true 73 | 10 74 | 75 | 76 | 77 | 78 | Список.Code 79 | 80 | 81 | 82 | 83 | Список.Комментарий 84 | 16 85 | 86 | 87 | 88 | 89 |
90 |
91 | 92 | 93 | 94 | cfg:DynamicList 95 | 96 | true 97 | 98 | false 99 | true 100 | Catalog.VA_ПримерДанных 101 | 102 | 103 | Normal 104 | dfcece9d-5077-440b-b6b3-45a5cb4538eb 105 | 106 | 107 | Normal 108 | 88619765-ccb3-46c6-ac52-38e9c992ebd4 109 | 110 | 111 | Normal 112 | b75fecce-942b-4aed-abc9-e6a02e460fb3 113 | 114 | Normal 115 | 911b6018-f537-43e8-a417-da56b22f9aec 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /wwwroot/vanessa/enjoyhint.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:casino_handregular;src:url(Casino_Hand/casino_hand-webfont.eot);src:url(Casino_Hand/casino_hand-webfont.eot?#iefix) format('embedded-opentype'),url(Casino_Hand/casino_hand-webfont.woff) format('woff'),url(Casino_Hand/casino_hand-webfont.ttf) format('truetype'),url(Casino_Hand/casino_hand-webfont.svg#casino_handregular) format('svg');font-weight:400;font-style:normal}.enjoyhint{position:fixed;width:100%;height:100%;top:0;left:0;z-index:1010;pointer-events:none;overflow:hidden}.enjoyhint_hide{display:none}.enjoyhint_disable_events{position:absolute;width:2000px;height:1500px;z-index:1011;pointer-events:all}.enjoyhint_next_btn,.enjoyhint_skip_btn{-webkit-box-sizing:content-box;width:100px;height:40px;font:normal normal normal 17px/40px "Advent Pro",Helvetica,sans-serif;cursor:pointer;margin:0 auto;letter-spacing:1px;text-align:center}.enjoyhint_close_btn,.enjoyhint_next_btn,.enjoyhint_skip_btn{z-index:1012;pointer-events:all;-o-text-overflow:clip;text-overflow:clip;-moz-box-sizing:content-box}.enjoyhint_next_btn{position:absolute;box-sizing:content-box;border:2px solid #1ecd97;-webkit-border-radius:40px;border-radius:40px;color:#1ecd97;background:rgba(0,0,0,0);-webkit-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);-moz-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);-o-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0)}.enjoyhint_next_btn:hover{color:rgba(255,255,255,1);background:#1ecd97}.enjoyhint_next_btn:active{border:2px solid rgba(33,224,163,1);background:rgba(33,224,163,1);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.enjoyhint_skip_btn{box-sizing:content-box;border:2px solid #1ecd97;-webkit-border-radius:40px;border-radius:40px;color:#1ecd97;background:rgba(0,0,0,0);-webkit-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);-moz-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);-o-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0)}.enjoyhint_skip_btn:hover{color:rgba(255,255,255,1);background:#1ecd97}.enjoyhint_skip_btn:active{border:2px solid rgba(33,224,163,1);background:rgba(33,224,163,1);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.enjoyhint_close_btn{display:inline-block;position:absolute;-webkit-box-sizing:content-box;box-sizing:content-box;width:.3em;height:.3em;border:none;-webkit-border-radius:1em;border-radius:1em;font:400 8em/normal Arial,Helvetica,sans-serif;color:rgba(0,0,0,1);background:rgba(0,0,0,0);border:2px solid rgba(33,224,163,1)}.enjoyhint_close_btn::after,.enjoyhint_close_btn::before{-webkit-box-sizing:content-box;width:73%;height:2px;position:absolute;content:"";border:none;font:400 100%/normal Arial,Helvetica,sans-serif;color:rgba(0,0,0,1);background:#fff;text-shadow:none;-o-text-overflow:clip;text-overflow:clip;display:inline-block}.enjoyhint_close_btn::before{-moz-box-sizing:content-box;box-sizing:content-box;top:48%;left:14%;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg)}.enjoyhint_close_btn::after{-moz-box-sizing:content-box;box-sizing:content-box;top:46%;left:15%;-webkit-transform:rotateZ(-45deg);transform:rotateZ(-45deg)}.enjoyhint_close_btn:hover{color:rgba(255,255,255,1);background:#1ecd97;cursor:pointer}.enjoyhint_close_btn:active{border:2px solid rgba(33,224,163,1);background:rgba(33,224,163,1);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.enjoyhint_btn{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;width:150px;height:40px;cursor:pointer;margin:0 auto;border:2px solid #1ecd97;-webkit-border-radius:40px;border-radius:40px;font:normal normal normal 17px/40px "Advent Pro",Helvetica,sans-serif;color:#1ecd97;text-align:center;-o-text-overflow:clip;text-overflow:clip;letter-spacing:1px;background:rgba(0,0,0,0);-webkit-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);-moz-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);-o-transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0);transition:background-color .3s cubic-bezier(0,0,0,0),color .3s cubic-bezier(0,0,0,0),width .3s cubic-bezier(0,0,0,0),border-width .3s cubic-bezier(0,0,0,0),border-color .3s cubic-bezier(0,0,0,0)}#kinetic_container,.enjoyhint_canvas,.enjoyhint_svg_wrapper,.enjoyhint_svg_wrapper svg{width:100%;height:100%;position:absolute}.enjoyhint_btn:hover{color:rgba(255,255,255,1);background:#1ecd97}.enjoyhint_btn:active{border:2px solid rgba(33,224,163,1);background:rgba(33,224,163,1);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.enjoyhint div.canvas-container{position:absolute}.enjoyhint_canvas{z-index:100;pointer-events:none}#kinetic_container{pointer-events:none;top:0;left:0}.enjoyhint_svg_wrapper{top:0;left:0;z-index:100;-webkit-transition:opacity .4s cubic-bezier(.42,0,.58,1);-moz-transition:opacity .4s cubic-bezier(.42,0,.58,1);transition:opacity .4s cubic-bezier(.42,0,.58,1)}.enjoyhint_svg_wrapper svg{top:0;left:0}.enjoyhint_svg_transparent .enjoy_hint_label,.enjoyhint_svg_transparent .enjoyhint_svg_wrapper{opacity:0}.enjoy_hint_label{position:absolute;color:#fff;z-index:107;font-size:22px;font-family:casino_handregular,Arial;-webkit-transition:opacity .4s cubic-bezier(.42,0,.58,1);-moz-transition:opacity .4s cubic-bezier(.42,0,.58,1);transition:opacity .4s cubic-bezier(.42,0,.58,1);display:inline-block;min-width:200px;text-align:center;max-width:80%}div.kineticjs-content{position:absolute!important}.enjoyhint_skip_btn{position:fixed} -------------------------------------------------------------------------------- /wwwroot/vanessa/library.js: -------------------------------------------------------------------------------- 1 | var customDrawElements = []; 2 | 3 | function getActiveElement() { 4 | let activeElement = document.activeElement; 5 | let selectedField = undefined; 6 | 7 | if (activeElement.classList.contains('gridBody')) { 8 | selectedField = activeElement.querySelector('.select.focus'); 9 | } else if (activeElement.classList.contains('frameCommand')) { 10 | selectedField = activeElement.querySelector('.focus'); 11 | } else if (activeElement.classList.contains('cloud' && 'panelsShadow')) { 12 | selectedField = activeElement.querySelector('.select'); 13 | } else if (activeElement.classList.contains('cloud' && 'cloudBorder')) { 14 | selectedField = activeElement.querySelector('.select'); 15 | } 16 | 17 | return selectedField ? selectedField : activeElement; 18 | } 19 | 20 | function selected() { 21 | return getActiveElement(); 22 | } 23 | 24 | function theme(title) { 25 | return $('.themeBoxName:visible').filter((i, e) => $(e).text() == title)[0]; 26 | } 27 | 28 | function command(title) { 29 | return $('.funcCmdTxt:visible,.functionItemBox:visible').filter((i, e) => $(e).text() == title)[0]; 30 | } 31 | 32 | function navigationItem(title) { 33 | return $('.navigationItem:visible').filter((i, e) => $(e).text() == title).last()[0]; 34 | } 35 | 36 | function getActiveFormPrefix() { 37 | function prefix(e) { 38 | return e.id.substr(0, e.id.indexOf('mainGroup')) 39 | } 40 | var e = document.activeElement; 41 | while (e) { 42 | if ($(e).hasClass('mainGroup')) return prefix(e); 43 | e = e.parentElement; 44 | } 45 | e = $('.mainGroup').last()[0]; 46 | if (e) return prefix(e); 47 | } 48 | 49 | function isElementVisible(e) { 50 | return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length); 51 | } 52 | 53 | function getFormElement(id) { 54 | function Z(s) { 55 | return $(s).filter((i, e) => isElementVisible(e)).last()[0]; 56 | } 57 | let e, prefix = getActiveFormPrefix(); 58 | if (e = Z('#' + prefix + id)) return e; 59 | if (e = Z('#thpage_' + prefix + id)) return e; 60 | if (e = Z('#' + prefix + 'popup_' + id)) return e; 61 | if (e = Z('#' + prefix + id + '\\#title_text')) return e.firstChild; 62 | } 63 | 64 | function buttonMore(id) { 65 | return getFormElement('allActions' + id); 66 | } 67 | 68 | function elem(id, n = 0) { 69 | if (n == 0) return getFormElement(id); 70 | return getFormElement(id + '\\#' + n + '\\#radio') 71 | } 72 | 73 | function label(id) { 74 | return $('#' + elem(id).id + '\\#title_text')[0]; 75 | } 76 | 77 | function border(id, timeout = 3000, options = undefined) { 78 | let px = value => (typeof value == 'number' ? value + 'px' : value); 79 | let style = { 80 | color: "red", 81 | style: "solid", 82 | size: 2, 83 | margin: 4, 84 | }; 85 | Object.assign(style, options); 86 | let coordinates = id; 87 | if (typeof id == "string") { 88 | id = elem(id); 89 | if (!id) return; 90 | } 91 | if (id instanceof Element) { 92 | let rect = id.getBoundingClientRect(); 93 | coordinates = { 94 | left: rect.left - (style.margin + style.size), 95 | top: rect.top - (style.margin + style.size), 96 | width: rect.width + style.margin * 2, 97 | height: rect.height + style.margin * 2, 98 | } 99 | } else if (id instanceof Array) { 100 | coordinates = { left: [], top: [], right: [], bottom: [] }; 101 | id.forEach(e => { 102 | if (typeof e == "string") e = elem(e); 103 | if (e instanceof Element) { 104 | let rect = e.getBoundingClientRect(); 105 | for (let prop in coordinates) 106 | coordinates[prop].push(rect[prop]); 107 | } 108 | }); 109 | coordinates.left = Math.min.apply(null, coordinates.left) - (style.margin + style.size); 110 | coordinates.top = Math.min.apply(null, coordinates.top) - (style.margin + style.size); 111 | coordinates.right = Math.max.apply(null, coordinates.right) + style.margin - style.size; 112 | coordinates.bottom = Math.max.apply(null, coordinates.bottom) + style.margin - style.size; 113 | coordinates.width = coordinates.right - coordinates.left; 114 | coordinates.height = coordinates.bottom - coordinates.top; 115 | } 116 | let node = document.createElement('div'); 117 | node.style.position = 'fixed'; 118 | node.style.zIndex = 999999; 119 | node.style.left = px(coordinates.left); 120 | node.style.top = px(coordinates.top); 121 | node.style.width = px(coordinates.width); 122 | node.style.height = px(coordinates.height); 123 | node.style.borderWidth = px(style.size); 124 | node.style.borderStyle = style.style; 125 | node.style.borderColor = style.color; 126 | window.top.document.body.appendChild(node); 127 | if (timeout) setTimeout(() => { if (node) node.remove() }, timeout); 128 | customDrawElements.push(node); 129 | return node; 130 | } 131 | 132 | function rect(text, timeout = 3000, options = undefined) { 133 | let px = value => (typeof value == 'number' ? value + 'px' : value); 134 | let node = document.createElement('div'); 135 | node.innerHTML = text; 136 | node.style.fontSize = '140%'; 137 | node.style.position = 'fixed'; 138 | node.style.zIndex = 999999; 139 | node.style.top = '3em'; 140 | node.style.right = '3em'; 141 | node.style.borderWidth = '0.2em'; 142 | node.style.borderStyle = 'solid'; 143 | node.style.borderColor = 'red'; 144 | node.style.boxShadow = '0 0 1em #333333'; 145 | node.style.backgroundColor = 'white'; 146 | node.style.padding = '1em'; 147 | node.style.borderRadius = '1em'; 148 | window.top.document.body.appendChild(node); 149 | if (timeout) setTimeout(() => { if (node) node.remove() }, timeout); 150 | customDrawElements.push(node); 151 | return node; 152 | }; 153 | 154 | function arrow(start, end, timeout = 3000, options = undefined) { 155 | function point(id) { 156 | if ((id) instanceof Element) return id; 157 | if (typeof id == "string") return elem(id); 158 | if (typeof id == "object") return LeaderLine.pointAnchor(document.body, id); 159 | } 160 | let node = new LeaderLine(point(start), point(end), options); 161 | if (timeout) setTimeout(() => { if (node) node.remove() }, timeout); 162 | customDrawElements.push(node); 163 | $('.leader-line').css('z-index', 9999); 164 | return node; 165 | } 166 | 167 | function clear() { 168 | while (customDrawElements.length) { 169 | let node = customDrawElements.pop().remove(); 170 | if (node) node.remove(); 171 | } 172 | } 173 | 174 | function center() { 175 | return LeaderLine.pointAnchor(document.body, { x: "50%", y: "50%" }); 176 | } 177 | -------------------------------------------------------------------------------- /Config1C/CommonTemplates/VA_Library/Ext/Template.bin: -------------------------------------------------------------------------------- 1 | var customDrawElements = []; 2 | 3 | function getActiveElement() { 4 | let activeElement = document.activeElement; 5 | let selectedField = undefined; 6 | 7 | if (activeElement.classList.contains('gridBody')) { 8 | selectedField = activeElement.querySelector('.select.focus'); 9 | } else if (activeElement.classList.contains('frameCommand')) { 10 | selectedField = activeElement.querySelector('.focus'); 11 | } else if (activeElement.classList.contains('cloud' && 'panelsShadow')) { 12 | selectedField = activeElement.querySelector('.select'); 13 | } else if (activeElement.classList.contains('cloud' && 'cloudBorder')) { 14 | selectedField = activeElement.querySelector('.select'); 15 | } 16 | 17 | return selectedField ? selectedField : activeElement; 18 | } 19 | 20 | function selected() { 21 | return getActiveElement(); 22 | } 23 | 24 | function theme(title) { 25 | return $('.themeBoxName:visible').filter((i, e) => $(e).text() == title)[0]; 26 | } 27 | 28 | function command(title) { 29 | return $('.funcCmdTxt:visible,.functionItemBox:visible').filter((i, e) => $(e).text() == title)[0]; 30 | } 31 | 32 | function navigationItem(title) { 33 | return $('.navigationItem:visible').filter((i, e) => $(e).text() == title).last()[0]; 34 | } 35 | 36 | function getActiveFormPrefix() { 37 | function prefix(e) { 38 | return e.id.substr(0, e.id.indexOf('mainGroup')) 39 | } 40 | var e = document.activeElement; 41 | while (e) { 42 | if ($(e).hasClass('mainGroup')) return prefix(e); 43 | e = e.parentElement; 44 | } 45 | e = $('.mainGroup').last()[0]; 46 | if (e) return prefix(e); 47 | } 48 | 49 | function isElementVisible(e) { 50 | return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length); 51 | } 52 | 53 | function getFormElement(id) { 54 | function Z(s) { 55 | return $(s).filter((i, e) => isElementVisible(e)).last()[0]; 56 | } 57 | let e, prefix = getActiveFormPrefix(); 58 | if (e = Z('#' + prefix + id)) return e; 59 | if (e = Z('#thpage_' + prefix + id)) return e; 60 | if (e = Z('#' + prefix + 'popup_' + id)) return e; 61 | if (e = Z('#' + prefix + id + '\\#title_text')) return e.firstChild; 62 | } 63 | 64 | function buttonMore(id) { 65 | return getFormElement('allActions' + id); 66 | } 67 | 68 | function elem(id, n = 0) { 69 | if (n == 0) return getFormElement(id); 70 | return getFormElement(id + '\\#' + n + '\\#radio') 71 | } 72 | 73 | function label(id) { 74 | return $('#' + elem(id).id + '\\#title_text')[0]; 75 | } 76 | 77 | function border(id, timeout = 3000, options = undefined) { 78 | let px = value => (typeof value == 'number' ? value + 'px' : value); 79 | let style = { 80 | color: "red", 81 | style: "solid", 82 | size: 2, 83 | margin: 4, 84 | }; 85 | Object.assign(style, options); 86 | let coordinates = id; 87 | if (typeof id == "string") { 88 | id = elem(id); 89 | if (!id) return; 90 | } 91 | if (id instanceof Element) { 92 | let rect = id.getBoundingClientRect(); 93 | coordinates = { 94 | left: rect.left - (style.margin + style.size), 95 | top: rect.top - (style.margin + style.size), 96 | width: rect.width + style.margin * 2, 97 | height: rect.height + style.margin * 2, 98 | } 99 | } else if (id instanceof Array) { 100 | coordinates = { left: [], top: [], right: [], bottom: [] }; 101 | id.forEach(e => { 102 | if (typeof e == "string") e = elem(e); 103 | if (e instanceof Element) { 104 | let rect = e.getBoundingClientRect(); 105 | for (let prop in coordinates) 106 | coordinates[prop].push(rect[prop]); 107 | } 108 | }); 109 | coordinates.left = Math.min.apply(null, coordinates.left) - (style.margin + style.size); 110 | coordinates.top = Math.min.apply(null, coordinates.top) - (style.margin + style.size); 111 | coordinates.right = Math.max.apply(null, coordinates.right) + style.margin - style.size; 112 | coordinates.bottom = Math.max.apply(null, coordinates.bottom) + style.margin - style.size; 113 | coordinates.width = coordinates.right - coordinates.left; 114 | coordinates.height = coordinates.bottom - coordinates.top; 115 | } 116 | let node = document.createElement('div'); 117 | node.style.position = 'fixed'; 118 | node.style.zIndex = 999999; 119 | node.style.left = px(coordinates.left); 120 | node.style.top = px(coordinates.top); 121 | node.style.width = px(coordinates.width); 122 | node.style.height = px(coordinates.height); 123 | node.style.borderWidth = px(style.size); 124 | node.style.borderStyle = style.style; 125 | node.style.borderColor = style.color; 126 | window.top.document.body.appendChild(node); 127 | if (timeout) setTimeout(() => { if (node) node.remove() }, timeout); 128 | customDrawElements.push(node); 129 | return node; 130 | } 131 | 132 | function rect(text, timeout = 3000, options = undefined) { 133 | let px = value => (typeof value == 'number' ? value + 'px' : value); 134 | let node = document.createElement('div'); 135 | node.innerHTML = text; 136 | node.style.fontSize = '140%'; 137 | node.style.position = 'fixed'; 138 | node.style.zIndex = 999999; 139 | node.style.top = '3em'; 140 | node.style.right = '3em'; 141 | node.style.borderWidth = '0.2em'; 142 | node.style.borderStyle = 'solid'; 143 | node.style.borderColor = 'red'; 144 | node.style.boxShadow = '0 0 1em #333333'; 145 | node.style.backgroundColor = 'white'; 146 | node.style.padding = '1em'; 147 | node.style.borderRadius = '1em'; 148 | window.top.document.body.appendChild(node); 149 | if (timeout) setTimeout(() => { if (node) node.remove() }, timeout); 150 | customDrawElements.push(node); 151 | return node; 152 | }; 153 | 154 | function arrow(start, end, timeout = 3000, options = undefined) { 155 | function point(id) { 156 | if ((id) instanceof Element) return id; 157 | if (typeof id == "string") return elem(id); 158 | if (typeof id == "object") return LeaderLine.pointAnchor(document.body, id); 159 | } 160 | let node = new LeaderLine(point(start), point(end), options); 161 | if (timeout) setTimeout(() => { if (node) node.remove() }, timeout); 162 | customDrawElements.push(node); 163 | $('.leader-line').css('z-index', 9999); 164 | return node; 165 | } 166 | 167 | function clear() { 168 | while (customDrawElements.length) { 169 | let node = customDrawElements.pop().remove(); 170 | if (node) node.remove(); 171 | } 172 | } 173 | 174 | function center() { 175 | return LeaderLine.pointAnchor(document.body, { x: "50%", y: "50%" }); 176 | } 177 | -------------------------------------------------------------------------------- /Config1C/ConfigDumpInfo.xml: -------------------------------------------------------------------------------- 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 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Config1C/Configuration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9cd510cd-abfc-11d4-9434-004095e12fc7 7 | 5124725e-0d6b-4ab4-ac29-339a0533862c 8 | 9 | 10 | 9fcd25a0-4822-11d4-9414-008048da11f9 11 | 0b0b8c1d-6060-4b3c-bb5e-2ed380fb630d 12 | 13 | 14 | e3687481-0a87-462c-a166-9f34594f9bba 15 | c333191a-e372-4597-b929-760e80dd8337 16 | 17 | 18 | 9de14907-ec23-4a07-96f0-85521cb6b53b 19 | daf0815f-a9ff-4231-a70b-74b9fd3a3352 20 | 21 | 22 | 51f2d5d8-ea4d-4064-8892-82951750031e 23 | 27b07081-e483-417d-a9a4-59091c2eaf16 24 | 25 | 26 | e68182ea-4237-4383-967f-90c1e3370bc7 27 | 6f73e80f-a03e-4631-9dc4-4c3e70309cef 28 | 29 | 30 | fb282519-d103-4dd3-bc12-cb271d631dfc 31 | 0855eb16-d887-4a8b-8115-e8732cd01427 32 | 33 | 34 | 35 | VA_1Chrome 36 | 37 | 38 | ru 39 | 1ChromeVA 40 | 41 | 42 | 43 | 44 | Version8_3_17 45 | ManagedApplication 46 | 47 | PlatformApplication 48 | 49 | Russian 50 | 51 | 52 | 53 | 54 | false 55 | false 56 | false 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | Location 76 | false 77 | 78 | 79 | Contacts 80 | false 81 | 82 | 83 | Calendars 84 | false 85 | 86 | 87 | PushNotification 88 | false 89 | 90 | 91 | LocalNotification 92 | false 93 | 94 | 95 | Print 96 | false 97 | 98 | 99 | InAppPurchases 100 | false 101 | 102 | 103 | Ads 104 | false 105 | 106 | 107 | BackgroundLocation 108 | false 109 | 110 | 111 | BackgroundAudioPlayback 112 | false 113 | 114 | 115 | FileExchangeWithPersonalComputer 116 | false 117 | 118 | 119 | CallPhone 120 | false 121 | 122 | 123 | CallLog 124 | false 125 | 126 | 127 | HandlePhoneCalls 128 | false 129 | 130 | 131 | SendSMS 132 | false 133 | 134 | 135 | ReceiveSMS 136 | false 137 | 138 | 139 | SMSLog 140 | false 141 | 142 | 143 | Camera 144 | false 145 | 146 | 147 | Microphone 148 | false 149 | 150 | 151 | MusicLibrary 152 | false 153 | 154 | 155 | PicturesAndVideoLibraries 156 | false 157 | 158 | 159 | AudioAndVibrationPlayback 160 | false 161 | 162 | 163 | InstallPackages 164 | false 165 | 166 | 167 | AllowOSBackup 168 | true 169 | 170 | 171 | 172 | Normal 173 | 174 | 175 | Language.Русский 176 | 177 | 178 | 179 | 180 | 181 | Managed 182 | NotAutoFree 183 | DontUse 184 | Use 185 | Taxi 186 | Version8_3_12 187 | 188 | 189 | 190 | Русский 191 | VA_Подсистема 192 | VA_Подсистема 193 | Администратор 194 | VA_jQuery 195 | VA_Library 196 | VA_УправлениеБраузером 197 | VA_ОписаниеПротокола 198 | ТестируемаяОбработка 199 | ТестируемаяБиблиотека 200 | VA_Управление 201 | НастройкаЗапуска 202 | VA_ПримерДанных 203 | ОткрытьТестируемуОбработку 204 | VA_1ChromeDev 205 | 206 | 207 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 27ea9909-cb91-4e67-ab00-a9609b366461 7 | f0ccb80f-be67-425b-851c-1692478a2ad3 8 | 9 | 10 | 8b97fdbc-72c6-48b1-8bb1-52e052587fee 11 | 27466835-a0e6-4d17-a8ff-62e1bdd8fa69 12 | 13 | 14 | 15 | VA_1ChromeDev 16 | 17 | 18 | ru 19 | Chrome DevTools protocol 20 | 21 | 22 | 23 | false 24 | DataProcessor.VA_1ChromeDev.Form.VA_1ChromeDev 25 | 26 | false 27 | 28 | 29 | 30 | 31 | 32 | 33 | browser 34 | 35 | 36 | ru 37 | Browser 38 | 39 | 40 | 41 | 42 | xs:string 43 | 44 | 0 45 | Variable 46 | 47 | 48 | false 49 | 50 | 51 | 52 | false 53 | 54 | false 55 | false 56 | 57 | 58 | DontCheck 59 | Items 60 | 61 | 62 | Auto 63 | Auto 64 | 65 | 66 | Auto 67 | 68 | 69 | 70 | 71 | URL 72 | 73 | 74 | ru 75 | URL 76 | 77 | 78 | 79 | 80 | xs:string 81 | 82 | 0 83 | Variable 84 | 85 | 86 | false 87 | 88 | 89 | 90 | false 91 | 92 | false 93 | false 94 | 95 | 96 | DontCheck 97 | Items 98 | 99 | 100 | Auto 101 | Auto 102 | 103 | 104 | Auto 105 | 106 | 107 | 108 | 109 | WS 110 | 111 | 112 | ru 113 | WS 114 | 115 | 116 | 117 | 118 | xs:string 119 | 120 | 0 121 | Variable 122 | 123 | 124 | false 125 | 126 | 127 | 128 | false 129 | 130 | false 131 | false 132 | 133 | 134 | DontCheck 135 | Items 136 | 137 | 138 | Auto 139 | Auto 140 | 141 | 142 | Auto 143 | 144 | 145 | 146 | 147 | domain 148 | 149 | 150 | ru 151 | Domain 152 | 153 | 154 | 155 | 156 | xs:string 157 | 158 | 0 159 | Variable 160 | 161 | 162 | false 163 | 164 | 165 | 166 | false 167 | 168 | false 169 | false 170 | 171 | 172 | DontCheck 173 | Items 174 | 175 | 176 | Auto 177 | Auto 178 | 179 | 180 | Auto 181 | 182 | 183 | 184 | 185 | component 186 | 187 | 188 | ru 189 | Component 190 | 191 | 192 | 193 | 194 | xs:string 195 | 196 | 0 197 | Variable 198 | 199 | 200 | false 201 | 202 | 203 | 204 | false 205 | 206 | false 207 | false 208 | 209 | 210 | DontCheck 211 | Items 212 | 213 | 214 | Auto 215 | Auto 216 | 217 | 218 | Auto 219 | 220 | 221 | 222 | 223 | javascript 224 | 225 | 226 | ru 227 | Javascript 228 | 229 | 230 | 231 | 232 | xs:string 233 | 234 | 0 235 | Variable 236 | 237 | 238 | false 239 | 240 | 241 | 242 | false 243 | 244 | false 245 | false 246 | 247 | 248 | DontCheck 249 | Items 250 | 251 | 252 | Auto 253 | Auto 254 | 255 | 256 | Auto 257 | 258 | 259 | 260 | 261 | port 262 | 263 | 264 | ru 265 | Port 266 | 267 | 268 | 269 | 270 | xs:decimal 271 | 272 | 10 273 | 0 274 | Any 275 | 276 | 277 | false 278 | 279 | 280 | 281 | false 282 | 283 | false 284 | false 285 | 286 | 287 | DontCheck 288 | Items 289 | 290 | 291 | Auto 292 | Auto 293 | 294 | 295 | Auto 296 | 297 | 298 |
VA_1ChromeDev
299 | 300 | 301 |
302 |
303 |
-------------------------------------------------------------------------------- /Config1C/DataProcessors/ОткрытьТестируемуОбработку/Forms/Форма/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | &НаСервереБезКонтекста 2 | Процедура ПроверитьОбработкуНаВозможностьПодключения(ИмяОбработки) 3 | Обработка = ВнешниеОбработки.Создать(ИмяОбработки,Ложь); 4 | Попытка 5 | ПараметрыОбработки = Обработка.ПараметрыОбработки(); 6 | Исключение 7 | // значит параметры не указаны 8 | Возврат; 9 | КонецПопытки; 10 | 11 | IgnoreOn82 = Ложь; 12 | ПараметрыОбработки.Свойство("IgnoreOn82",IgnoreOn82); 13 | 14 | Если IgnoreOn82 Тогда 15 | СистемнаяИнформация = Новый СистемнаяИнформация; 16 | Если Лев(СистемнаяИнформация.ВерсияПриложения,4) = "8.2." Тогда 17 | ИмяОбработки = Неопределено; 18 | Иначе 19 | Попытка 20 | ТекущийРежимСовместимости = Вычислить("Метаданные.РежимСовместимости"); 21 | РежимыСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости; 22 | Исключение 23 | Возврат; 24 | КонецПопытки; 25 | 26 | Если ТекущийРежимСовместимости = РежимыСовместимости.Версия8_1 Тогда 27 | ИмяОбработки = Неопределено; 28 | ИначеЕсли ТекущийРежимСовместимости = РежимыСовместимости.Версия8_2_13 Тогда 29 | ИмяОбработки = Неопределено; 30 | ИначеЕсли ТекущийРежимСовместимости = РежимыСовместимости.Версия8_2_16 Тогда 31 | ИмяОбработки = Неопределено; 32 | КонецЕсли; 33 | 34 | КонецЕсли; 35 | КонецЕсли; 36 | КонецПроцедуры 37 | 38 | &НаСервереБезКонтекста 39 | Функция ПолучитьОбработкуИзФайлаЧерезМетодСоздать(ДополнительныеПараметры,ИмяОбработки) 40 | Обработка = Неопределено; 41 | Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда 42 | Если ДополнительныеПараметры.Свойство("ИмяФайла") Тогда 43 | Файл = Новый Файл(ДополнительныеПараметры.ИмяФайла); 44 | Если Файл.Существует() Тогда 45 | Обработка = ВнешниеОбработки.Создать(ДополнительныеПараметры.ИмяФайла, Ложь); 46 | ИмяОбработки = Обработка.Метаданные().Имя; 47 | КонецЕсли; 48 | КонецЕсли; 49 | КонецЕсли; 50 | 51 | Возврат Обработка; 52 | КонецФункции 53 | 54 | &НаСервереБезКонтекста 55 | Функция ЕстьЗащитаОтОпасныхДействий() 56 | СистемнаяИнформация = Новый СистемнаяИнформация; 57 | Массив1 = РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); 58 | Массив2 = РазложитьСтрокуВМассивПодстрок("8.3.9.2033", "."); 59 | 60 | Версия1БольшеИлиРавно = Истина; 61 | Для Ккк = 0 По Массив1.Количество() - 1 Цикл 62 | Элем1 = Массив1.Получить(Ккк); 63 | Элем2 = Массив2.Получить(Ккк); 64 | 65 | Если Число(Элем2) > Число(Элем1) Тогда 66 | Версия1БольшеИлиРавно = Ложь; 67 | КонецЕсли; 68 | КонецЦикла; 69 | 70 | Возврат Версия1БольшеИлиРавно; 71 | КонецФункции 72 | 73 | &НаСервереБезКонтекста 74 | Функция ПодключитьВнешнююОбработкуСервер(Знач АдресХранилища,ИспользуетсяЗащитаОтОпасныхДействий,ДополнительныеПараметры = Неопределено) Экспорт 75 | ИмяОбработки = Неопределено; 76 | Если ИспользуетсяЗащитаОтОпасныхДействий Тогда 77 | ОписаниеЗащитыОтОпасныхДействий = Вычислить("Новый ОписаниеЗащитыОтОпасныхДействий"); 78 | ОписаниеЗащитыОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь; 79 | 80 | Обработка = ПолучитьОбработкуИзФайлаЧерезМетодСоздать(ДополнительныеПараметры,ИмяОбработки); 81 | Если Обработка = Неопределено Тогда 82 | Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда 83 | Если ДополнительныеПараметры.Свойство("АдресХранилища") Тогда 84 | ИмяОбработки = ВнешниеОбработки.Подключить(ДополнительныеПараметры.АдресХранилища, , Ложь, ОписаниеЗащитыОтОпасныхДействий); 85 | Иначе 86 | ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища, , Ложь, ОписаниеЗащитыОтОпасныхДействий); 87 | КонецЕсли; 88 | КонецЕсли; 89 | КонецЕсли; 90 | ПроверитьОбработкуНаВозможностьПодключения(ИмяОбработки); 91 | 92 | Возврат ИмяОбработки; 93 | Иначе 94 | Обработка = ПолучитьОбработкуИзФайлаЧерезМетодСоздать(ДополнительныеПараметры,ИмяОбработки); 95 | Если Обработка = Неопределено Тогда 96 | Если ДополнительныеПараметры.Свойство("АдресХранилища") Тогда 97 | ИмяОбработки = ВнешниеОбработки.Подключить(ДополнительныеПараметры.АдресХранилища, , Ложь); 98 | Иначе 99 | ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища, , Ложь); 100 | КонецЕсли; 101 | ПроверитьОбработкуНаВозможностьПодключения(ИмяОбработки); 102 | КонецЕсли; 103 | Возврат ИмяОбработки; 104 | КонецЕсли; 105 | КонецФункции 106 | 107 | &НаСервереБезКонтекста 108 | Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт 109 | 110 | Результат = Новый Массив; 111 | 112 | // для обеспечения обратной совместимости 113 | Если ПропускатьПустыеСтроки = Неопределено Тогда 114 | ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); 115 | Если ПустаяСтрока(Строка) Тогда 116 | Если Разделитель = " " Тогда 117 | Результат.Добавить(""); 118 | КонецЕсли; 119 | Возврат Результат; 120 | КонецЕсли; 121 | КонецЕсли; 122 | 123 | Позиция = Найти(Строка, Разделитель); 124 | Пока Позиция > 0 Цикл 125 | Подстрока = Лев(Строка, Позиция - 1); 126 | Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда 127 | Результат.Добавить(Подстрока); 128 | КонецЕсли; 129 | Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); 130 | Позиция = Найти(Строка, Разделитель); 131 | КонецЦикла; 132 | 133 | Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда 134 | Результат.Добавить(Строка); 135 | КонецЕсли; 136 | 137 | Возврат Результат; 138 | 139 | КонецФункции 140 | 141 | &НаКлиенте 142 | Процедура ОбработкаПослеПомещенияФайла(Результат,АдресХранилища,ВыбранноеИмяФайла,ДополнительныеПараметры) Экспорт 143 | ЕстьЗащитаОтОпасныхДействий = ЕстьЗащитаОтОпасныхДействий(); 144 | 145 | ДополнительныеПараметры = Новый Структура; 146 | ДополнительныеПараметры.Вставить("ИмяФайла",ВыбранноеИмяФайла); 147 | 148 | ИмяОбработки = ПодключитьВнешнююОбработкуСервер(АдресХранилища,ЕстьЗащитаОтОпасныхДействий,ДополнительныеПараметры); 149 | ДополнительныеПараметры.Вставить("ИмяОбработки",ИмяОбработки); 150 | ПодключениеОбработкиПродолжение(ИмяОбработки); 151 | КонецПроцедуры 152 | 153 | &НаКлиенте 154 | Функция ПодключитьВнешнююОбработкуКлиент(ИмяФайла, ПараметрыПодключения = Неопределено) Экспорт 155 | Попытка 156 | ДополнительныеПараметры = Новый Структура; 157 | Если ТипЗнч(ПараметрыПодключения) = Тип("Структура") Тогда 158 | Для Каждого Элем Из ПараметрыПодключения Цикл 159 | ДополнительныеПараметры.Вставить(Элем.Ключ,Элем.Значение); 160 | КонецЦикла; 161 | КонецЕсли; 162 | Если ЕстьПоддержкаНемодальныхФорм Тогда 163 | Оповещение = Новый ОписаниеОповещения("ОбработкаПослеПомещенияФайла", ЭтаФорма, ДополнительныеПараметры); 164 | НачатьПомещениеФайла(Оповещение, , ИмяФайла, Ложь, УникальныйИдентификатор); 165 | Иначе 166 | АдресХранилища = ""; 167 | ФайлДляПомещения = Новый Массив; 168 | ФайлДляПомещения.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла)); 169 | ПомещенныеФайлы = Новый Массив; 170 | ПоместитьФайлы(ФайлДляПомещения, ПомещенныеФайлы, , Ложь, ЭтаФорма.УникальныйИдентификатор); 171 | 172 | Если ПомещенныеФайлы.Количество() = 0 Тогда 173 | Возврат Неопределено; 174 | КонецЕсли; 175 | 176 | АдресХранилища = ПомещенныеФайлы[0].Хранение; 177 | ДополнительныеПараметры.Вставить("ИмяФайла",ИмяФайла); 178 | ИмяОбработки = ПодключитьВнешнююОбработкуСервер(АдресХранилища,ЕстьЗащитаОтОпасныхДействий,ДополнительныеПараметры); 179 | Возврат ИмяОбработки; 180 | КонецЕсли; 181 | Исключение 182 | Возврат Неопределено; 183 | КонецПопытки; 184 | КонецФункции 185 | 186 | &НаСервереБезКонтекста 187 | Функция ПолучитьЗначениеКонстантыСервер(ИмяКонстанты) 188 | Возврат Константы[ИмяКонстанты].Получить(); 189 | КонецФункции 190 | 191 | &НаКлиенте 192 | Процедура ПодключениеОбработкиПродолжение(ИмяОбработки) 193 | ТестируемаяБиблиотека = ПолучитьЗначениеКонстантыСервер("ТестируемаяБиблиотека"); 194 | ПараметрыФормы = Новый Структура("AddInURL", ТестируемаяБиблиотека); 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 | Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл 221 | ДополнительныеПараметрыПодключения = Новый Структура; 222 | ДополнительныеПараметрыПодключения.Вставить("АдресХранилища",ПомещенныйФайл.Хранение); 223 | ДополнительныеПараметрыПодключения.Вставить("ИмяФайла",ДополнительныеПараметры.ИменаФайлов["ИмяФайла"]); 224 | ИмяОбработки = ПодключитьВнешнююОбработкуСервер(ПомещенныйФайл.Хранение,ЕстьЗащитаОтОпасныхДействий,ДополнительныеПараметрыПодключения); 225 | ПодключениеОбработкиПродолжение(ИмяОбработки); 226 | КонецЦикла; 227 | КонецПроцедуры 228 | 229 | &НаСервереБезКонтекста 230 | Функция УзнатьЕстьПоддержкаНемодальныхФорм() 231 | СистемнаяИнформация = Новый СистемнаяИнформация; 232 | Массив1 = РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); 233 | Массив2 = РазложитьСтрокуВМассивПодстрок("8.3.3.641", "."); 234 | 235 | Версия1БольшеИлиРавно = Истина; 236 | Для Ккк = 0 По Массив1.Количество() - 1 Цикл 237 | Элем1 = Массив1.Получить(Ккк); 238 | Элем2 = Массив2.Получить(Ккк); 239 | 240 | Если Число(Элем2) > Число(Элем1) Тогда 241 | Версия1БольшеИлиРавно = Ложь; 242 | ИначеЕсли Число(Элем2) < Число(Элем1) Тогда 243 | Прервать; 244 | КонецЕсли; 245 | КонецЦикла; 246 | 247 | Возврат Версия1БольшеИлиРавно; 248 | КонецФункции 249 | 250 | &НаСервере 251 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 252 | ЕстьПоддержкаНемодальныхФорм = ЕстьПоддержкаНемодальныхФорм(); 253 | ЕстьПоддержкаАсинхронныхВызовов = ЕстьПоддержкаАсинхронныхВызовов(); 254 | ЕстьЗащитаОтОпасныхДействий = ЕстьЗащитаОтОпасныхДействий(); 255 | КонецПроцедуры 256 | 257 | &НаСервереБезКонтекста 258 | Функция ЕстьПоддержкаНемодальныхФорм() 259 | СистемнаяИнформация = Новый СистемнаяИнформация; 260 | Массив1 = РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); 261 | Массив2 = РазложитьСтрокуВМассивПодстрок("8.3.3.641", "."); 262 | 263 | Версия1БольшеИлиРавно = Истина; 264 | Для Ккк = 0 По Массив1.Количество() - 1 Цикл 265 | Элем1 = Массив1.Получить(Ккк); 266 | Элем2 = Массив2.Получить(Ккк); 267 | 268 | Если Число(Элем2) > Число(Элем1) Тогда 269 | Версия1БольшеИлиРавно = Ложь; 270 | ИначеЕсли Число(Элем2) < Число(Элем1) Тогда 271 | Прервать; 272 | КонецЕсли; 273 | КонецЦикла; 274 | 275 | Возврат Версия1БольшеИлиРавно; 276 | КонецФункции 277 | 278 | &НаСервереБезКонтекста 279 | Функция ЕстьПоддержкаАсинхронныхВызовов() 280 | СистемнаяИнформация = Новый СистемнаяИнформация; 281 | 282 | Версия1БольшеИлиРавно = ВерсияПриложенияБольшеИлиРавнаЧемЗаданная(СистемнаяИнформация.ВерсияПриложения,"8.3.5.1383"); 283 | 284 | Рез = Версия1БольшеИлиРавно И Вычислить("Метаданные.РежимИспользованияСинхронныхВызововРасширенийИВнешнихКомпонент <> Метаданные.СвойстваОбъектов.РежимИспользованияСинхронныхВызововРасширенийИВнешнихКомпонент.Использовать"); 285 | 286 | Возврат Рез; 287 | КонецФункции 288 | 289 | &НаКлиентеНаСервереБезКонтекста 290 | Функция ВерсияПриложенияБольшеИлиРавнаЧемЗаданная(Версия1, Версия2) Экспорт 291 | Массив1 = РазложитьСтрокуВМассивПодстрок(Версия1, "."); 292 | Массив2 = РазложитьСтрокуВМассивПодстрок(Версия2, "."); 293 | 294 | Версия1БольшеИлиРавно = Истина; 295 | Для Ккк = 0 По Массив1.Количество() - 1 Цикл 296 | Элем1 = Массив1.Получить(Ккк); 297 | Элем2 = Массив2.Получить(Ккк); 298 | 299 | Если Число(Элем2) > Число(Элем1) Тогда 300 | Версия1БольшеИлиРавно = Ложь; 301 | ИначеЕсли Число(Элем2) < Число(Элем1) Тогда 302 | Прервать; 303 | КонецЕсли; 304 | КонецЦикла; 305 | 306 | Возврат Версия1БольшеИлиРавно; 307 | КонецФункции 308 | -------------------------------------------------------------------------------- /Config1C/DataProcessors/VA_1ChromeDev/Forms/VA_1ChromeDev/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | &НаКлиенте 2 | Перем Протокол, ИдентификаторКомпоненты, ВнешняяКомпонента; 3 | 4 | &НаСервереБезКонтекста 5 | Функция ПрочитатьСтрокуJSON(ТекстJSON, ПрочитатьВСоответствие = Ложь) 6 | 7 | Если ПустаяСтрока(ТекстJSON) Тогда 8 | Возврат Новый Структура; 9 | КонецЕсли; 10 | 11 | ЧтениеJSON = Новый ЧтениеJSON(); 12 | ЧтениеJSON.УстановитьСтроку(ТекстJSON); 13 | Возврат ПрочитатьJSON(ЧтениеJSON, ПрочитатьВСоответствие); 14 | 15 | КонецФункции 16 | 17 | &НаСервереБезКонтекста 18 | Функция ЗаписатьСтрокуJSON(ДанныеJSON) 19 | 20 | ЗаписьJSON = новый ЗаписьJSON; 21 | ЗаписьJSON.УстановитьСтроку(); 22 | ЗаписатьJSON(ЗаписьJSON, ДанныеJSON); 23 | Возврат ЗаписьJSON.Закрыть(); 24 | 25 | КонецФункции 26 | 27 | &НаСервере 28 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 29 | 30 | ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); 31 | МакетКомпоненты = ОбработкаОбъект.ПолучитьМакет("VA_1cWinCtrl"); 32 | Объект.component = ПоместитьВоВременноеХранилище(МакетКомпоненты, УникальныйИдентификатор); 33 | Объект.javascript = ОбработкаОбъект.ПолучитьМакет("VA_JavaScript").ПолучитьТекст(); 34 | 35 | Объект.URL = "http://infostart.ru"; 36 | Объект.port = 9222; 37 | Объект.domain = "Runtime"; 38 | 39 | ТекстJavaScript = "$('#journal-header .journal-info').text()"; 40 | 41 | КонецПроцедуры 42 | 43 | &НаКлиенте 44 | Процедура ВыполнитьПодключениеВнешнейКомпоненты(ДополнительныеПараметры) Экспорт 45 | 46 | ОписаниеОповещения = Новый ОписаниеОповещения("ПодключениеВнешнейКомпонентыЗавершение", ЭтотОбъект, ДополнительныеПараметры); 47 | НачатьПодключениеВнешнейКомпоненты(ОписаниеОповещения, Объект.component, ИдентификаторКомпоненты, ТипВнешнейКомпоненты.Native); 48 | 49 | КонецПроцедуры 50 | 51 | &НаКлиенте 52 | Процедура ПодключениеВнешнейКомпонентыЗавершение(Подключение, ДополнительныеПараметры) Экспорт 53 | 54 | Если Подключение Тогда 55 | ВнешняяКомпонента = Новый("AddIn." + ИдентификаторКомпоненты + ".WindowsControl"); 56 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученаВерсияКомпоненты", ЭтотОбъект); 57 | ВнешняяКомпонента.НачатьПолучениеВерсия(ОписаниеОповещения); 58 | ИначеЕсли ДополнительныеПараметры = Истина Тогда 59 | ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьПодключениеВнешнейКомпоненты", ЭтотОбъект, Ложь); 60 | НачатьУстановкуВнешнейКомпоненты(ОписаниеОповещения, Объект.component); 61 | КонецЕсли; 62 | 63 | КонецПроцедуры 64 | 65 | &НаКлиенте 66 | Процедура ПолученаВерсияКомпоненты(Значение, ДополнительныеПараметры) Экспорт 67 | 68 | Заголовок = "Chrome DevTools protocol, version " + Значение; 69 | 70 | КонецПроцедуры 71 | 72 | #Если ВебКлиент Тогда 73 | 74 | &НаКлиенте 75 | Процедура ПриОткрытии(Отказ) 76 | 77 | ЗаполнитьКоманды(Команды.ЗаполнитьОписание); 78 | 79 | КонецПроцедуры 80 | 81 | #Иначе 82 | 83 | &НаКлиенте 84 | Процедура ПриОткрытии(Отказ) 85 | 86 | ИдентификаторКомпоненты = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); 87 | ВыполнитьПодключениеВнешнейКомпоненты(Истина); 88 | 89 | #Если ТонкийКлиент Тогда 90 | СисИнфо = Новый СистемнаяИнформация; 91 | Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 92 | ИЛИ СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда 93 | Shell = Новый COMОбъект("WScript.Shell"); 94 | ProgramFiles = Shell.ExpandEnvironmentStrings("%ProgramFiles%"); 95 | ИмяФайла = "\Google\Chrome\Application\chrome.exe"; 96 | Файл = Новый Файл(ProgramFiles + ИмяФайла); 97 | ДополнительныеПараметры = новый Структура("ПолноеИмя,Продолжать", Файл.ПолноеИмя, Истина); 98 | ОписаниеОповещения = Новый ОписаниеОповещения("ПроверкаСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); 99 | Файл.НачатьПроверкуСуществования(ОписаниеОповещения); 100 | КонецЕсли; 101 | #КонецЕсли 102 | 103 | КонецПроцедуры 104 | 105 | #КонецЕсли 106 | 107 | &НаКлиенте 108 | Процедура ПроверкаСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт 109 | 110 | Если Существует Тогда 111 | Объект.browser = ДополнительныеПараметры.ПолноеИмя; 112 | ИначеЕсли ДополнительныеПараметры.Свойство("Продолжать") Тогда 113 | Shell = Новый COMОбъект("WScript.Shell"); 114 | ProgramFiles = Shell.ExpandEnvironmentStrings("%ProgramFiles(x86)%"); 115 | ИмяФайла = "\Google\Chrome\Application\chrome.exe"; 116 | Файл = Новый Файл(ProgramFiles + ИмяФайла); 117 | ДополнительныеПараметры = новый Структура("ПолноеИмя", Файл.ПолноеИмя); 118 | ОписаниеОповещения = Новый ОписаниеОповещения("ПроверкаСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); 119 | Файл.НачатьПроверкуСуществования(ОписаниеОповещения); 120 | Иначе 121 | Сообщить("Не найден исполняемый файл Google Chrome"); 122 | КонецЕсли; 123 | 124 | КонецПроцедуры 125 | 126 | &НаСервере 127 | Функция ЗаголовокКоманды(ИмяКоманды) 128 | 129 | Возврат Команды.Найти(ИмяКоманды).Заголовок; 130 | 131 | КонецФункции 132 | 133 | &НаКлиенте 134 | Процедура ОшибкаБраузера(Команда) 135 | 136 | ИнформационныйТекст = 137 | "Перед вызовом команды «" + ЗаголовокКоманды(Команда.Имя) + "» 138 | |закройте все открытые окна Google Chrome 139 | |и запустите снова кнопкой «Запустить браузер»."; 140 | ПоказатьПредупреждение(, ИнформационныйТекст, 10); 141 | 142 | КонецПроцедуры 143 | 144 | &НаКлиенте 145 | Процедура ЗапуститьБраузер(Команда) 146 | 147 | СтрокаКоманды = """" + Объект.browser + """ about:blank --remote-debugging-port=" + Формат(Объект.port, "ЧГ="); 148 | ОписаниеОповещения = Новый ОписаниеОповещения("ЗапущенБраузер", ЭтотОбъект); 149 | НачатьЗапускПриложения(ОписаниеОповещения, СтрокаКоманды); 150 | 151 | КонецПроцедуры 152 | 153 | &НаКлиенте 154 | Процедура ЗапущенБраузер(КодВозврата, ДополнительныеПараметры) Экспорт 155 | 156 | // Ничего не делаем 157 | 158 | КонецПроцедуры 159 | 160 | &НаСервере 161 | Функция ПолучитьОписаниеПротокола() 162 | 163 | HTTPЗапрос = Новый HTTPЗапрос("/json/protocol"); 164 | HTTPСоединение = Новый HTTPСоединение("localhost", 9222, , , , 10); 165 | HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); 166 | 167 | ТекстJSON = HTTPОтвет.ПолучитьТелоКакСтроку(); 168 | Возврат ПрочитатьСтрокуJSON(ТекстJSON, Истина); 169 | 170 | КонецФункции 171 | 172 | &НаКлиенте 173 | Процедура ЗаполнитьКоманды(Команда) 174 | 175 | Попытка 176 | Протокол = ПолучитьОписаниеПротокола(); 177 | Исключение 178 | ОшибкаБраузера(Команда); 179 | Возврат; 180 | КонецПопытки; 181 | 182 | СписокВыбора = Элементы.Домен.СписокВыбора; 183 | СписокВыбора.Очистить(); 184 | Для каждого Элемент из Протокол.Получить("domains") Цикл 185 | СписокВыбора.Добавить(Элемент.Получить("domain")); 186 | КонецЦикла; 187 | СписокВыбора.СортироватьПоЗначению(); 188 | ДоменПриИзменении(Элемент); 189 | 190 | КонецПроцедуры 191 | 192 | &НаКлиенте 193 | Процедура ОткрытьURL(Команда) 194 | 195 | HTTPЗапрос = Новый HTTPЗапрос("/json/new?" + Объект.URL); 196 | 197 | HTTPСоединение = Новый HTTPСоединение("localhost", 9222, , , , 10); 198 | 199 | Попытка 200 | HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); 201 | Исключение 202 | ОшибкаБраузера(Команда); 203 | Возврат; 204 | КонецПопытки; 205 | 206 | ТекстJSON = HTTPОтвет.ПолучитьТелоКакСтроку(); 207 | ДанныеJSON = ПрочитатьСтрокуJSON(ТекстJSON, Ложь); 208 | Объект.WS = ДанныеJSON.webSocketDebuggerUrl; 209 | 210 | HTTPЗапрос = Новый HTTPЗапрос("/json/protocol"); 211 | HTTPСоединение = Новый HTTPСоединение("localhost", 9222, , , , 10); 212 | HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); 213 | ТекстJSON = HTTPОтвет.ПолучитьТелоКакСтроку(); 214 | Протокол = ПрочитатьСтрокуJSON(ТекстJSON, Истина); 215 | 216 | СписокВыбора = Элементы.Домен.СписокВыбора; 217 | СписокВыбора.Очистить(); 218 | Для каждого Элемент из Протокол.Получить("domains") Цикл 219 | СписокВыбора.Добавить(Элемент.Получить("domain")); 220 | КонецЦикла; 221 | СписокВыбора.СортироватьПоЗначению(); 222 | ДоменПриИзменении(Элемент); 223 | 224 | КонецПроцедуры 225 | 226 | &НаКлиенте 227 | Процедура НачатьВызовВебСокет(ОписаниеОповещения, ИмяМетода, ПараметрыМетода = Неопределено); 228 | 229 | Если ПустаяСтрока(Объект.WS) Тогда 230 | ИнформационныйТекст = 231 | "Перед вызовом команды Chrome DevTools Protocol 232 | |установите соединение с браузером и откройте 233 | |интернет-страницу кнопкой «Открыть URL»."; 234 | ПоказатьПредупреждение(, ИнформационныйТекст, 10); 235 | КонецЕсли; 236 | 237 | ДанныеJSON = Новый Структура("id,method,params", 1, ИмяМетода, ПараметрыМетода); 238 | ВнешняяКомпонента.НачатьВызовВебСокет(ОписаниеОповещения, Объект.WS, ЗаписатьСтрокуJSON(ДанныеJSON)); 239 | 240 | КонецПроцедуры 241 | 242 | &НаКлиенте 243 | Процедура ПолучитьСнимокЭкрана(Команда) 244 | 245 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученСнимокЭкрана", ЭтотОбъект); 246 | НачатьВызовВебСокет(ОписаниеОповещения, "Page.captureScreenshot"); 247 | 248 | КонецПроцедуры 249 | 250 | &НаКлиенте 251 | Процедура ПолученСнимокЭкрана(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 252 | 253 | ДанныеJSON = ПрочитатьСтрокуJSON(РезультатВызова); 254 | Если ДанныеJSON.Свойство("result") Тогда 255 | ДвоичныеДанные = Base64Значение(ДанныеJSON.result.data); 256 | СнимокЭкрана = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); 257 | Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаСнимокЭкрана; 258 | КонецЕсли; 259 | 260 | КонецПроцедуры 261 | 262 | &НаКлиенте 263 | Процедура ФайлПриложенияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 264 | 265 | ОписаниеОповещения = Новый ОписаниеОповещения("ВыбранФайлБраузера", ЭтотОбъект); 266 | ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 267 | ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; 268 | ДиалогВыбораФайла.МножественныйВыбор = Ложь; 269 | ДиалогВыбораФайла.Показать(ОписаниеОповещения); 270 | 271 | КонецПроцедуры 272 | 273 | &НаКлиенте 274 | Процедура ВыбранФайлБраузера(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт 275 | 276 | Если ТипЗнч(ВыбранныеФайлы) = Тип("Массив") Тогда 277 | Для каждого ЭлементМассива из ВыбранныеФайлы Цикл 278 | Объект.browser = ЭлементМассива; 279 | Прервать; 280 | КонецЦикла; 281 | КонецЕсли; 282 | 283 | КонецПроцедуры 284 | 285 | &НаКлиенте 286 | Процедура ДоменПриИзменении(Элемент) 287 | 288 | КомандыБраузера.Очистить(); 289 | Для каждого Элемент из Протокол.Получить("domains") Цикл 290 | Если Элемент.Получить("domain") = Объект.domain Тогда 291 | Для каждого ЭлементКоманда из Элемент.Получить("commands") Цикл 292 | Стр = КомандыБраузера.Добавить(); 293 | Стр.name = ЭлементКоманда.Получить("name"); 294 | Стр.description = ЭлементКоманда.Получить("description"); 295 | КонецЦикла; 296 | КонецЕсли; 297 | КонецЦикла; 298 | КомандыБраузера.Сортировать("name"); 299 | 300 | КонецПроцедуры 301 | 302 | &НаКлиенте 303 | Процедура ВыполнитьТест(Команда) 304 | 305 | ПараметрыМетода = Новый Структура("expression", Объект.javascript); 306 | ОписаниеОповещения = Новый ОписаниеОповещения("ВыполненТест", ЭтотОбъект); 307 | НачатьВызовВебСокет(ОписаниеОповещения, "Runtime.evaluate", ПараметрыМетода); 308 | 309 | КонецПроцедуры 310 | 311 | &НаКлиенте 312 | Процедура ВыполненТест(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 313 | 314 | // Ничего не делаем 315 | 316 | КонецПроцедуры 317 | 318 | &НаКлиенте 319 | Процедура КомандыБраузераПриАктивизацииСтроки(Элемент) 320 | 321 | ПараметрыКоманды.Очистить(); 322 | РезультатКоманды.Очистить(); 323 | 324 | Если Элемент.ТекущиеДанные = Неопределено Тогда 325 | Возврат; 326 | КонецЕсли; 327 | 328 | Для каждого ЭлементДомен из Протокол.Получить("domains") Цикл 329 | Если ЭлементДомен.Получить("domain") = Объект.domain Тогда 330 | Для каждого ЭлементКоманда из ЭлементДомен.Получить("commands") Цикл 331 | Если ЭлементКоманда.Получить("name") = Элемент.ТекущиеДанные.name Тогда 332 | МасивПараметров = ЭлементКоманда.Получить("parameters") ; 333 | Если МасивПараметров <> Неопределено Тогда 334 | Для каждого ЭлементПараметр из МасивПараметров Цикл 335 | Стр = ПараметрыКоманды.Добавить(); 336 | Стр.name = ЭлементПараметр.Получить("name"); 337 | Стр.description = ЭлементПараметр.Получить("description"); 338 | Стр.optional = ЭлементПараметр.Получить("optional"); 339 | Стр.type = ЭлементПараметр.Получить("type"); 340 | Если ПустаяСтрока(Стр.type) Тогда 341 | Стр.type = ЭлементПараметр.Получить("$ref"); 342 | КонецЕсли 343 | КонецЦикла; 344 | КонецЕсли; 345 | МасивПараметров = ЭлементКоманда.Получить("returns") ; 346 | Если МасивПараметров <> Неопределено Тогда 347 | Для каждого ЭлементПараметр из МасивПараметров Цикл 348 | Стр = РезультатКоманды.Добавить(); 349 | Стр.name = ЭлементПараметр.Получить("name"); 350 | Стр.description = ЭлементПараметр.Получить("description"); 351 | Стр.type = ЭлементПараметр.Получить("type"); 352 | Если ПустаяСтрока(Стр.type) Тогда 353 | Стр.type = ЭлементПараметр.Получить("$ref"); 354 | КонецЕсли 355 | КонецЦикла; 356 | КонецЕсли; 357 | КонецЕсли; 358 | КонецЦикла; 359 | КонецЕсли; 360 | КонецЦикла; 361 | 362 | ПараметрыКоманды.Сортировать("name"); 363 | РезультатКоманды.Сортировать("name"); 364 | 365 | КонецПроцедуры 366 | 367 | &НаКлиенте 368 | Процедура СкопироватьВБуферОбмена(Команда) 369 | 370 | Если ПустаяСтрока(СнимокЭкрана) Тогда Возврат КонецЕсли; 371 | ДвоичныеДанные = ПолучитьИзВременногоХранилища(СнимокЭкрана); 372 | ВнешняяКомпонента.НачатьУстановкуКартинкаБуфераОбмена(, ДвоичныеДанные); 373 | 374 | КонецПроцедуры 375 | 376 | &НаКлиенте 377 | Процедура ПолучитьТекстHTML(Команда) 378 | 379 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученДокументHTML", ЭтотОбъект); 380 | НачатьВызовВебСокет(ОписаниеОповещения, "DOM.getDocument"); 381 | 382 | КонецПроцедуры 383 | 384 | &НаКлиенте 385 | Процедура ПолученДокументHTML(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 386 | 387 | ДанныеJSON = ПрочитатьСтрокуJSON(РезультатВызова); 388 | Если ДанныеJSON.Свойство("result") Тогда 389 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученТекстHTML", ЭтотОбъект); 390 | ПараметрыМетода = Новый Структура("backendNodeId", ДанныеJSON.result.root.backendNodeId); 391 | НачатьВызовВебСокет(ОписаниеОповещения, "DOM.getOuterHTML", ПараметрыМетода); 392 | КонецЕсли; 393 | 394 | КонецПроцедуры 395 | 396 | &НаКлиенте 397 | Процедура ПолученТекстHTML(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 398 | 399 | ДанныеJSON = ПрочитатьСтрокуJSON(РезультатВызова); 400 | Если ДанныеJSON.Свойство("result") Тогда 401 | ТекстHTML = ДанныеJSON.result.outerHTML; 402 | КонецЕсли; 403 | 404 | КонецПроцедуры 405 | 406 | &НаКлиенте 407 | Процедура ВыполнитьJavaScript(Команда) 408 | 409 | ПараметрыМетода = Новый Структура("expression", ТекстJavaScript); 410 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученРезультатJavaScript", ЭтотОбъект); 411 | НачатьВызовВебСокет(ОписаниеОповещения, "Runtime.evaluate", ПараметрыМетода); 412 | 413 | КонецПроцедуры 414 | 415 | &НаКлиенте 416 | Процедура ПолученРезультатJavaScript(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 417 | 418 | РезультатJavaScript.Очистить(); 419 | 420 | ДанныеJSON = ПрочитатьСтрокуJSON(РезультатВызова); 421 | 422 | Если ДанныеJSON.Свойство("result") Тогда 423 | Для каждого КлючЗначение из ДанныеJSON.result.result Цикл 424 | Стр = РезультатJavaScript.Добавить(); 425 | ЗаполнитьЗначенияСвойств(Стр, КлючЗначение); 426 | КонецЦикла; 427 | КонецЕсли; 428 | 429 | НаборЗначений = Неопределено; 430 | Если ДанныеJSON.Свойство("error", НаборЗначений) Тогда 431 | Для каждого КлючЗначение из НаборЗначений Цикл 432 | Стр = РезультатJavaScript.Добавить(); 433 | ЗаполнитьЗначенияСвойств(Стр, КлючЗначение); 434 | КонецЦикла; 435 | КонецЕсли; 436 | 437 | КонецПроцедуры 438 | -------------------------------------------------------------------------------- /Config1C/Catalogs/VA_ПримерДанных.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 68c23cc5-32e6-42f2-bc2d-5bc22d1c6c3b 7 | 29e00490-8254-43b6-9693-c7b26c36224d 8 | 9 | 10 | f9fd8a34-f3a3-4231-850f-5f7ac1c34057 11 | 4524ef96-fbf4-4a0e-84e4-2e8bbd800848 12 | 13 | 14 | cad634a5-0992-497a-bc3c-e4e04006a0e7 15 | 7f4de78a-6414-427b-91e4-04b1999d894a 16 | 17 | 18 | ba2c8263-e820-460f-aa8d-5649fa311321 19 | 54dc7998-3d47-45f0-a4b6-e5f2b114fa22 20 | 21 | 22 | 2c596dd8-9a50-45f8-bdf0-5edbbd4e35ae 23 | bcc3872e-e993-4f94-8148-384c58be2ad2 24 | 25 | 26 | 27 | VA_ПримерДанных 28 | 29 | 30 | ru 31 | Пример данных 32 | 33 | 34 | 35 | false 36 | HierarchyFoldersAndItems 37 | false 38 | 2 39 | true 40 | true 41 | 42 | ToItems 43 | 9 44 | 50 45 | String 46 | Variable 47 | WholeCatalog 48 | true 49 | true 50 | AsDescription 51 | 52 | 53 | 54 | DontCheck 55 | false 56 | false 57 | Auto 58 | 59 | 60 | false 61 | 62 | 63 | Auto 64 | Auto 65 | 66 | false 67 | Use 68 | false 69 | 70 | 71 | 72 | Use 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | DontCheck 81 | false 82 | false 83 | Auto 84 | 85 | 86 | false 87 | 88 | 89 | Auto 90 | Auto 91 | 92 | false 93 | Use 94 | false 95 | 96 | 97 | 98 | Use 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | DontCheck 107 | false 108 | false 109 | Auto 110 | 111 | 112 | false 113 | 114 | 115 | Auto 116 | Auto 117 | 118 | false 119 | Use 120 | false 121 | 122 | 123 | 124 | Use 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | DontCheck 133 | false 134 | false 135 | Auto 136 | 137 | 138 | false 139 | 140 | 141 | Auto 142 | Auto 143 | 144 | false 145 | Use 146 | false 147 | 148 | 149 | 150 | Use 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | DontCheck 159 | false 160 | false 161 | Auto 162 | 163 | 164 | false 165 | 166 | 167 | Auto 168 | Auto 169 | 170 | false 171 | Use 172 | false 173 | 174 | 175 | 176 | Use 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | ShowError 185 | false 186 | true 187 | Auto 188 | 189 | 190 | false 191 | 192 | 193 | Auto 194 | Auto 195 | 196 | false 197 | Use 198 | false 199 | 200 | 201 | 202 | Use 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | DontCheck 211 | false 212 | true 213 | Auto 214 | 215 | 216 | false 217 | 218 | 219 | Auto 220 | Auto 221 | 222 | false 223 | Use 224 | false 225 | 226 | 227 | 228 | Use 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | ShowError 237 | false 238 | false 239 | Auto 240 | 241 | 242 | false 243 | 244 | 245 | Auto 246 | Auto 247 | 248 | false 249 | Use 250 | false 251 | 252 | 253 | 254 | Use 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | DontCheck 263 | false 264 | false 265 | Auto 266 | 267 | 268 | false 269 | 270 | 271 | Auto 272 | Auto 273 | 274 | false 275 | Use 276 | false 277 | 278 | 279 | 280 | Use 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | Auto 289 | InDialog 290 | false 291 | BothWays 292 | 293 | Catalog.VA_ПримерДанных.StandardAttribute.Description 294 | Catalog.VA_ПримерДанных.StandardAttribute.Code 295 | 296 | Begin 297 | DontUse 298 | Directly 299 | Catalog.VA_ПримерДанных.Form.ФормаЭлемента 300 | 301 | Catalog.VA_ПримерДанных.Form.ФормаСписка 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | false 310 | 311 | 312 | Managed 313 | Use 314 | 315 | 316 | 317 | 318 | 319 | Use 320 | Auto 321 | DontUse 322 | false 323 | false 324 | 325 | 326 | 327 | 328 | Комментарий 329 | 330 | 331 | ru 332 | Комментарий 333 | 334 | 335 | 336 | 337 | xs:string 338 | 339 | 100 340 | Variable 341 | 342 | 343 | false 344 | 345 | 346 | 347 | false 348 | 349 | false 350 | false 351 | 352 | 353 | false 354 | 355 | DontCheck 356 | Items 357 | 358 | 359 | Auto 360 | Auto 361 | 362 | 363 | Auto 364 | ForItem 365 | DontIndex 366 | Use 367 | Use 368 | 369 | 370 | 371 | 372 | Переключатель 373 | 374 | 375 | ru 376 | Переключатель 377 | 378 | 379 | 380 | 381 | xs:decimal 382 | 383 | 10 384 | 0 385 | Any 386 | 387 | 388 | false 389 | 390 | 391 | 392 | false 393 | 394 | false 395 | false 396 | 397 | 398 | false 399 | 400 | DontCheck 401 | Items 402 | 403 | 404 | Auto 405 | Auto 406 | 407 | 408 | Auto 409 | ForItem 410 | DontIndex 411 | Use 412 | Use 413 | 414 | 415 | 416 | 417 | Флажок 418 | 419 | 420 | ru 421 | Флажок 422 | 423 | 424 | 425 | 426 | xs:boolean 427 | 428 | false 429 | 430 | 431 | 432 | false 433 | 434 | false 435 | false 436 | 437 | 438 | false 439 | 440 | DontCheck 441 | Items 442 | 443 | 444 | Auto 445 | Auto 446 | 447 | 448 | Auto 449 | ForItem 450 | DontIndex 451 | Use 452 | Use 453 | 454 | 455 | 456 | 457 | Текст 458 | 459 | 460 | ru 461 | Текст 462 | 463 | 464 | 465 | 466 | xs:string 467 | 468 | 0 469 | Variable 470 | 471 | 472 | false 473 | 474 | 475 | 476 | false 477 | 478 | false 479 | false 480 | 481 | 482 | false 483 | 484 | DontCheck 485 | Items 486 | 487 | 488 | Auto 489 | Auto 490 | 491 | 492 | Auto 493 | ForItem 494 | DontIndex 495 | Use 496 | Use 497 | 498 | 499 |
ФормаЭлемента
500 |
ФормаСписка
501 |
502 |
503 |
-------------------------------------------------------------------------------- /Config1C/CommonForms/VA_Управление/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | &НаКлиенте 2 | Перем ТестКлиент, ГлавноеОкноТестКлиента, ФормаНовогоТовара, МассивОбъектов; 3 | 4 | &НаКлиенте 5 | Перем ВводимыйТекст, ТекстКомментария, ИмяВнешнейКомпоненты, КонтекстJavaScript; 6 | 7 | &НаКлиенте 8 | Перем ИдентификаторКомпоненты, ВнешняяКомпонента; 9 | 10 | Процедура ПолучитьНовыйИдентификатор() 11 | 12 | ИдентификаторКлиента = "X" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); 13 | Элементы.ИдентификаторКлиента.СписокВыбора.Добавить(ИдентификаторКлиента); 14 | АдресURL = ПолучитьСтрокуЗапуска(АдресПубликации, ИдентификаторКлиента); 15 | 16 | КонецПроцедуры 17 | 18 | &НаСервере 19 | Процедура СоздатьПользователей() 20 | 21 | Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей(); 22 | Если Пользователи.Количество() > 0 Тогда Возврат КонецЕсли; 23 | НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя(); 24 | НовыйПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь; 25 | НовыйПользователь.Роли.Добавить(Метаданные.Роли.Администратор); 26 | НовыйПользователь.АутентификацияСтандартная = Истина; 27 | НовыйПользователь.ПолноеИмя = "Администратор"; 28 | НовыйПользователь.Имя = "Администратор"; 29 | НовыйПользователь.Записать(); 30 | 31 | КонецПроцедуры 32 | 33 | &НаСервере 34 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 35 | 36 | ПортБраузера = 9222; 37 | АдресПубликации = "http://localhost/test/"; 38 | ПолучитьНовыйИдентификатор(); 39 | СоздатьПользователей(); 40 | 41 | МакетКомпоненты = Обработки.VA_1ChromeDev.ПолучитьМакет("VA_1cWinCtrl"); 42 | МестоположениеКомпоненты = ПоместитьВоВременноеХранилище(МакетКомпоненты, УникальныйИдентификатор); 43 | 44 | КонецПроцедуры 45 | 46 | &НаКлиентеНаСервереБезКонтекста 47 | Функция ПолучитьСтрокуЗапуска(АдресПубликации, ИдентификаторКлиента) 48 | 49 | Возврат АдресПубликации + "?N=Администратор&P=&L=ru&VL=ru&DisableStartupMessages&DisplayAllFunctions&EnableCheckModal&O=Normal&TESTCLIENT&TESTCLIENTID=" + ИдентификаторКлиента; 50 | 51 | КонецФункции 52 | 53 | &НаКлиенте 54 | Процедура ВыполнитьПодключениеВнешнейКомпоненты(ДополнительныеПараметры) Экспорт 55 | 56 | ОписаниеОповещения = Новый ОписаниеОповещения("ПодключениеВнешнейКомпонентыЗавершение", ЭтотОбъект, ДополнительныеПараметры); 57 | НачатьПодключениеВнешнейКомпоненты(ОписаниеОповещения, МестоположениеКомпоненты, ИдентификаторКомпоненты, ТипВнешнейКомпоненты.Native); 58 | 59 | КонецПроцедуры 60 | 61 | &НаКлиенте 62 | Процедура ПодключениеВнешнейКомпонентыЗавершение(Подключение, ДополнительныеПараметры) Экспорт 63 | 64 | Если Подключение Тогда 65 | ВнешняяКомпонента = Новый("AddIn." + ИдентификаторКомпоненты + ".WindowsControl"); 66 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученаВерсияКомпоненты", ЭтотОбъект); 67 | ВнешняяКомпонента.НачатьПолучениеВерсия(ОписаниеОповещения); 68 | ИначеЕсли ДополнительныеПараметры = Истина Тогда 69 | ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьПодключениеВнешнейКомпоненты", ЭтотОбъект, Ложь); 70 | НачатьУстановкуВнешнейКомпоненты(ОписаниеОповещения, МестоположениеКомпоненты); 71 | КонецЕсли; 72 | 73 | КонецПроцедуры 74 | 75 | &НаКлиенте 76 | Процедура ПолученаВерсияКомпоненты(Значение, ДополнительныеПараметры) Экспорт 77 | 78 | Заголовок = "Управление браузером, версия " + Значение; 79 | 80 | КонецПроцедуры 81 | 82 | &НаКлиенте 83 | Процедура ПриОткрытии(Отказ) 84 | 85 | #Если ВебКлиент Тогда 86 | Отказ = Истина; 87 | Возврат; 88 | #КонецЕсли 89 | 90 | ИдентификаторКомпоненты = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); 91 | ВыполнитьПодключениеВнешнейКомпоненты(Истина); 92 | 93 | СисИнфо = Новый СистемнаяИнформация; 94 | 95 | Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 96 | ИЛИ СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда 97 | 98 | Shell = Новый COMОбъект("WScript.Shell"); 99 | ProgramFiles = Shell.ExpandEnvironmentStrings("%ProgramFiles%"); 100 | 101 | ИмяФайла = "\Google\Chrome\Application\chrome.exe"; 102 | Файл = Новый Файл(ProgramFiles + ИмяФайла); 103 | Если Файл.Существует() Тогда 104 | ФайлПриложения = Файл.ПолноеИмя; 105 | Иначе 106 | ProgramFiles = Shell.ExpandEnvironmentStrings("%ProgramFiles(x86)%"); 107 | Файл = Новый Файл(ProgramFiles + ИмяФайла); 108 | Если Файл.Существует() Тогда 109 | ФайлПриложения = Файл.ПолноеИмя; 110 | Иначе 111 | Сообщить("Не найден исполняемый файл Google Chrome"); 112 | КонецЕсли; 113 | КонецЕсли; 114 | КонецЕсли; 115 | 116 | КонецПроцедуры 117 | 118 | &НаКлиенте 119 | Процедура НовыйИдентификатор(Команда) 120 | 121 | ПолучитьНовыйИдентификатор(); 122 | 123 | КонецПроцедуры 124 | 125 | &НаКлиенте 126 | Процедура АдресПубликацииПриИзменении(Элемент) 127 | 128 | АдресURL = ПолучитьСтрокуЗапуска(АдресПубликации, ИдентификаторКлиента); 129 | 130 | КонецПроцедуры 131 | 132 | &НаКлиенте 133 | Процедура ПодключитьБиблиотекуJavaScript(ИмяМакета) 134 | 135 | АдресХранилища = ПолучитьМакетНаСервере(ИмяМакета); 136 | ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); 137 | УдалитьИзВременногоХранилища(АдресХранилища); 138 | 139 | СтрокаBase64 = Base64Строка(ДвоичныеДанные); 140 | СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ПС, ""); 141 | СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ВК, ""); 142 | ДлинаСтроки = СтрДлина(СтрокаBase64); 143 | РазмерБуфера = 3000; 144 | Позиция = 1; 145 | Пока Позиция <= ДлинаСтроки Цикл 146 | Буфер = Сред(СтрокаBase64, Позиция, РазмерБуфера); 147 | Буфер = "window.base64vanessa" + ?(Позиция=1,"","+") + "='" + Буфер + "';"; 148 | Позиция = Позиция + РазмерБуфера; 149 | ВыполнитьJavaScript(Буфер); 150 | КонецЦикла; 151 | 152 | ВыполнитьJavaScript( 153 | "eval.apply(null,[decodeURIComponent(atob(window.base64vanessa).split('').map( 154 | |c => '%'+('00'+c.charCodeAt(0).toString(16)).slice(-2)).join(''))]);"); 155 | 156 | КонецПроцедуры 157 | 158 | &НаКлиенте 159 | Процедура ВыполнитьТест(Команда) 160 | 161 | ТестКлиент = Неопределено; 162 | ГлавноеОкноТестКлиента = Неопределено; 163 | ФормаНовогоТовара = Неопределено; 164 | 165 | // Установить соединение с клиентом тестирования. 166 | ТестКлиент = Вычислить("Новый ТестируемоеПриложение(ИмяСервера, ПортСервера, ИдентификаторКлиента)"); 167 | 168 | // 5 раз повторить попытку установить соединение, так как приложение может запускаться медленно. 169 | МаксИтераций = 5; 170 | Для Счетчик = 1 По МаксИтераций Цикл 171 | 172 | Попытка 173 | ТестКлиент.УстановитьСоединение(); 174 | Прервать; 175 | 176 | Исключение 177 | 178 | // Вывести только последнее сообщение. 179 | Если Счетчик = МаксИтераций Тогда 180 | Сообщить(ОписаниеОшибки()); 181 | Возврат; 182 | 183 | КонецЕсли; 184 | 185 | КонецПопытки; 186 | 187 | КонецЦикла; // установка соединения с клиентом тестирования 188 | 189 | Для каждого ТекущееОкно из ТестКлиент.ПолучитьПодчиненныеОбъекты() Цикл 190 | Если Не ТекущееОкно.Основное Тогда 191 | ТекущееОкно.Закрыть(); 192 | КонецЕсли; 193 | КонецЦикла; 194 | 195 | Для каждого ДочернееОкно из ТестКлиент.ПолучитьПодчиненныеОбъекты() Цикл 196 | Если Не ДочернееОкно.Основное Тогда 197 | ДочернееОкно.Закрыть(); 198 | КонецЕсли; 199 | КонецЦикла; 200 | 201 | ГлавноеОкноТестКлиента = ТестКлиент.ПолучитьАктивноеОкно(); 202 | ГлавноеОкноТестКлиента.ВыполнитьКоманду("e1cib/navigationpoint/VA_Подсистема"); 203 | ГлавноеОкноТестКлиента.ВыполнитьКоманду("e1cib/navigationpoint/VA_Подсистема/Справочник.VA_ПримерДанных.Команда.ОткрытьСписок"); 204 | 205 | Скрипт = 206 | "{ 207 | | 208 | |let enjoyhint = new EnjoyHint(); 209 | |let button = elem('ФормаСоздать'); 210 | |let text = 'Нажмите кнопку «Создать» для ввода нового элемента!'; 211 | |let array_enjoy = [{selector:button, description: text, showSkip:false, shape:'circle'}]; 212 | |enjoyhint.set(array_enjoy); 213 | |enjoyhint.run(); 214 | |$('.enjoyhint_close_btn').hide(); 215 | |setTimeout(() => (enjoyhint.stop()), 5000); 216 | | 217 | |}"; 218 | ВыполнитьJavaScript(Скрипт); 219 | 220 | ПодключитьОбработчикОжидания("ВыполнитьТест_Шаг2", 5, Истина); 221 | 222 | КонецПроцедуры 223 | 224 | &НаКлиенте 225 | Процедура ВыполнитьТест_Шаг2() 226 | 227 | ИмяТестируемойФормы = "Справочник.VA_ПримерДанных.Форма.ФормаСписка"; 228 | Если НЕ ТестКлиент.ОжидатьОтображениеОбъекта(Тип("ТестируемаяФорма"), , ИмяТестируемойФормы, 10) Тогда 229 | Сообщить("Не удалось открыть форму списка справочника в течение 10 секунд."); 230 | Возврат; 231 | КонецЕсли; 232 | 233 | ГлавноеОкноТестКлиента.ВыполнитьКоманду("e1cib/command/Справочник.VA_ПримерДанных.Команда.Создать"); 234 | 235 | ИмяТестируемойФормы = "Справочник.VA_ПримерДанных.Форма.ФормаЭлемента"; 236 | Если НЕ ТестКлиент.ОжидатьОтображениеОбъекта(Тип("ТестируемаяФорма"), , "Справочник.VA_ПримерДанных.Форма.ФормаЭлемента", 10) Тогда 237 | Сообщить("Не удалось открыть форму нового элемента справочника в течение 10 секунд."); 238 | Возврат; 239 | 240 | КонецЕсли; 241 | 242 | Скрипт = "arrow(border('ФормаСоздать', 5000), 'Наименование', 5000, {color:'red', size: 5});"; 243 | ВыполнитьJavaScript(Скрипт); 244 | 245 | ПодключитьОбработчикОжидания("ВыполнитьТест_Шаг3", 5, Истина); 246 | 247 | КонецПроцедуры 248 | 249 | &НаКлиенте 250 | Процедура ВыполнитьТест_Шаг3() 251 | 252 | ДатаВремя = ТекущаяДата(); 253 | ВводимыйТекст = Формат(ДатаВремя, "ДЛФ=DDT"); 254 | ДатаВремя = Час(ДатаВремя) + Минута(ДатаВремя) / 100; 255 | ФормСтрока = "Л = ru_RU; ДП = Истина"; 256 | ПарПредмета="час,часа,часов,м,минуте,минуты,минут,ж,2"; 257 | ТекстКомментария = ЧислоПрописью(ДатаВремя, ФормСтрока, ПарПредмета); 258 | 259 | ИмяТестируемойФормы = "Справочник.VA_ПримерДанных.Форма.ФормаЭлемента"; 260 | ФормаНовогоТовара = ТестКлиент.НайтиОбъект(Тип("ТестируемаяФорма"), , ИмяТестируемойФормы); 261 | ПолеНаименование = ФормаНовогоТовара.НайтиОбъект(Тип("ТестируемоеПолеФормы"), , "Наименование"); 262 | ПолеНаименование.ВвестиТекст(ВводимыйТекст); 263 | 264 | Скрипт = "arrow(rect('Заполните поле «Комментарий»', 5000), border('Комментарий', 5000), 5000, {color:'red', size: 3});"; 265 | ВыполнитьJavaScript(Скрипт); 266 | 267 | ПодключитьОбработчикОжидания("ВыполнитьТест_Шаг4", 5, Истина); 268 | 269 | КонецПроцедуры 270 | 271 | &НаКлиенте 272 | Процедура ВыполнитьТест_Шаг4() 273 | 274 | // Заполнить поле "Артикул". 275 | // Оно неактивно, поэтому перед заполнением нужно его активизировать. 276 | ПолеАртикул = ФормаНовогоТовара.НайтиОбъект(Тип("ТестируемоеПолеФормы"), , "Комментарий"); 277 | ПолеАртикул.Активизировать(); 278 | 279 | 280 | ВнешняяКомпонента.ЭмуляцияВводаТекста(ТекстКомментария, 100); 281 | 282 | Скрипт = 283 | "{ 284 | | 285 | |let find_btn = elem('ФормаЗаписатьИЗакрыть'); 286 | |let enjoyhint = new EnjoyHint(); 287 | |let text = 'Для записи нового элмента нажмите кнопку «Записать и закрыть»!'; 288 | |let array_enjoy = [{selector:find_btn,description: text, showSkip:false,}]; 289 | |enjoyhint.set(array_enjoy); 290 | |enjoyhint.run(); 291 | |$('.enjoyhint_close_btn').hide(); 292 | |setTimeout(() => (enjoyhint.stop()), 5000); 293 | | 294 | |}"; 295 | 296 | ВыполнитьJavaScript(Скрипт); 297 | 298 | ПодключитьОбработчикОжидания("ВыполнитьТест_Шаг5", 5, Истина); 299 | 300 | КонецПроцедуры 301 | 302 | &НаКлиенте 303 | Процедура ВыполнитьТест_Шаг5() 304 | 305 | // Записать и закрыть новый товар, нажав на кнопку "Записать и закрыть". 306 | КнопкаЗаписатьИЗакрыть = ФормаНовогоТовара.НайтиОбъект(Тип("ТестируемаяКнопкаФормы"), , "ФормаЗаписатьИЗакрыть"); 307 | КнопкаЗаписатьИЗакрыть.Нажать(); 308 | 309 | 310 | /////////////////////////////////////////////////////////////////////////////////////////////// 311 | // *** Проверить выполнение теста - найти записанный новый товар в списке и прочитать его поля. 312 | 313 | // Получить таблицу товаров из формы списка товаров. 314 | ИмяТестируемойФормы = "Справочник.VA_ПримерДанных.Форма.ФормаСписка"; 315 | ФормаТоваров = ТестКлиент.НайтиОбъект(Тип("ТестируемаяФорма"), , ИмяТестируемойФормы); 316 | СписокТоваров = ФормаТоваров.НайтиОбъект(Тип("ТестируемаяТаблицаФормы"), , "Список"); 317 | 318 | // Встать в начало таблицы. 319 | СписокТоваров.ПерейтиКПервойСтроке(); 320 | 321 | // Найти в таблице строку с тестируемым товаром по наименованию товара. 322 | ТестируемыйТоварНайден = Ложь; 323 | Пока Истина Цикл 324 | НаименованиеТовара = СписокТоваров.ПолучитьТекстЯчейки("Наименование"); 325 | 326 | // Это искомый товар - выходим из цикла. 327 | Если НаименованиеТовара = ВводимыйТекст Тогда 328 | ТестируемыйТоварНайден = Истина; 329 | Прервать; 330 | 331 | КонецЕсли; 332 | 333 | // Это не тот товар - переходим к следующей строке, если она есть. 334 | Попытка 335 | // Если следующей строки нет, будет исключение и мы выйдем из цикла 336 | СписокТоваров.ПерейтиКСледующейСтроке(); 337 | Исключение 338 | Прервать; 339 | КонецПопытки; 340 | КонецЦикла; 341 | 342 | Скрипт = "arrow(selected(), 'ФормаКоманднаяПанельСписокСтрокаПоиска', 5000, {color:'red', size: 3});"; 343 | ВыполнитьJavaScript(Скрипт); 344 | 345 | ТестКлиент = Неопределено; 346 | ГлавноеОкноТестКлиента = Неопределено; 347 | ФормаНовогоТовара = Неопределено; 348 | 349 | КонецПроцедуры 350 | 351 | &НаКлиенте 352 | Процедура ЗапуститьБраузер(Команда) 353 | 354 | СтрокаКоманды = """" + ФайлПриложения + """ about:blank --remote-debugging-port=" + Формат(ПортБраузера, "ЧГ="); 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 | |закройте все открытые окна Google Chrome 380 | |и запустите снова кнопкой «Запустить браузер»."; 381 | ПоказатьПредупреждение(, ИнформационныйТекст, 10); 382 | 383 | КонецПроцедуры 384 | 385 | &НаСервере 386 | Функция ПолучитьМакетНаСервере(ИмяМакета) 387 | 388 | Возврат ПоместитьВоВременноеХранилище(ПолучитьОбщийМакет(ИмяМакета), УникальныйИдентификатор); 389 | 390 | КонецФункции 391 | 392 | &НаКлиенте 393 | Процедура ЗапуститьКлиентТестирования(Команда) 394 | 395 | HTTPСоединение = Новый HTTPСоединение("localhost", 9222, , , , 10); 396 | АдресДляЗапуска = ПолучитьСтрокуЗапуска(АдресПубликации, ИдентификаторКлиента); 397 | 398 | HTTPЗапрос = Новый HTTPЗапрос("/json/new?" + АдресДляЗапуска); 399 | HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); 400 | ТекстJSON = HTTPОтвет.ПолучитьТелоКакСтроку(); 401 | ДанныеJSON = ПрочитатьСтрокуJSON(ТекстJSON); 402 | АдресВебСокет = ДанныеJSON.webSocketDebuggerUrl; 403 | ИдентификаторФрейма = ДанныеJSON.id; 404 | 405 | ОшибкаВебСокет = ВнешняяКомпонента.ОткрытьВебСокет(АдресВебСокет); 406 | Если НЕ ПустаяСтрока(ОшибкаВебСокет) Тогда 407 | Сообщить("Ошибка подключения WebSocket: " + ОшибкаВебСокет); 408 | Возврат; 409 | КонецЕсли; 410 | 411 | ПараметрыКоманды = Новый Структура("frameId", ИдентификаторФрейма); 412 | ДанныеJSON = ВыполнитьКомандуХрома("Page.createIsolatedWorld", ПараметрыКоманды); 413 | КонтекстJavaScript = ДанныеJSON.result.executionContextId; 414 | Постфикс = Формат(ТекущаяУниверсальнаяДатаВМиллисекундах(), "ЧГ="); 415 | 416 | ПодключитьБиблиотекуJavaScript("VA_jQuery"); 417 | ПодключитьБиблиотекуJavaScript("VA_Library"); 418 | 419 | //ВыполнитьJavaScript(" 420 | //| 421 | //|(function (base, files) { 422 | //| files.forEach(file => fetch(base + file) 423 | //| .then(response => response.text()) 424 | //| .then(text => eval.apply(null, [text])) 425 | //| ) 426 | //| let node = document.createElement('link'); 427 | //| node.href = '/vanessa/enjoyhint.css'; 428 | //| node.rel = 'stylesheet'; 429 | //| window.top.document.body.appendChild(node); 430 | //|}('http://localhost/vanessa/', [ 431 | //| 'jquery.min.js', 432 | //| 'enjoyhint.min.js', 433 | //| 'leader-line.min.js', 434 | //| 'library.js?" + Постфикс +"', 435 | //|])); 436 | //| 437 | //|"); 438 | // 439 | 440 | КонецПроцедуры 441 | 442 | &НаКлиенте 443 | Функция ПрочитатьСтрокуJSON(ТекстJSON) 444 | 445 | Если ПустаяСтрока(ТекстJSON) Тогда 446 | Возврат Новый Структура; 447 | КонецЕсли; 448 | 449 | ЧтениеJSON = Новый ЧтениеJSON(); 450 | ЧтениеJSON.УстановитьСтроку(ТекстJSON); 451 | Возврат ПрочитатьJSON(ЧтениеJSON); 452 | 453 | КонецФункции 454 | 455 | &НаКлиенте 456 | Функция ЗаписатьОбъектJSON(ДанныеJSON) 457 | 458 | ЗаписьJSON = Новый ЗаписьJSON; 459 | ЗаписьJSON.УстановитьСтроку(); 460 | ЗаписатьJSON(ЗаписьJSON, ДанныеJSON); 461 | Возврат ЗаписьJSON.Закрыть(); 462 | 463 | КонецФункции 464 | 465 | &НаКлиенте 466 | Функция ВыполнитьКомандуХрома(ИмяКоманды, Параметры) 467 | 468 | ДанныеJSON = Новый Структура("id,method,params", 1, ИмяКоманды, Параметры); 469 | ТекстJSON = ВнешняяКомпонента.ПослатьВебСокет(ЗаписатьОбъектJSON(ДанныеJSON)); 470 | Возврат ПрочитатьСтрокуJSON(ТекстJSON); 471 | 472 | КонецФункции 473 | 474 | &НаКлиенте 475 | Функция ВыполнитьJavaScript(ТекстJavaScript) 476 | 477 | ПараметрыКоманды = Новый Структура("expression, contextId", ТекстJavaScript, КонтекстJavaScript); 478 | Возврат ВыполнитьКомандуХрома("Runtime.evaluate", ПараметрыКоманды); 479 | 480 | КонецФункции 481 | 482 | &НаКлиенте 483 | Процедура ВыполненJavaScript(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 484 | 485 | // Сообщить(РезультатВызова); 486 | 487 | КонецПроцедуры 488 | 489 | &НаКлиенте 490 | Процедура НачатьВызовВебСокет(ОписаниеОповещения, Команда, Параметры) 491 | 492 | ДанныеJSON = Новый Структура("id,method,params", 1, Команда, Параметры); 493 | КомандаJSON = ЗаписатьОбъектJSON(ДанныеJSON); 494 | ВнешняяКомпонента.НачатьВызовПослатьВебСокет(ОписаниеОповещения, КомандаJSON); 495 | 496 | КонецПроцедуры 497 | 498 | &НаКлиенте 499 | Процедура ПолучитьСнимокЭкрана(Команда) 500 | 501 | ПараметрыМетода = Новый Структура("format,quality,fromSurface", "png", 85, Ложь); 502 | ДанныеJSON = Новый Структура("id,method,params", 1, "Page.captureScreenshot", ПараметрыМетода); 503 | ОписаниеОповещения = Новый ОписаниеОповещения("ПолученСнимокЭкрана", ЭтотОбъект); 504 | НачатьВызовВебСокет(ОписаниеОповещения, "Page.captureScreenshot", ПараметрыМетода); 505 | 506 | КонецПроцедуры 507 | 508 | &НаКлиенте 509 | Процедура ПолученСнимокЭкрана(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт 510 | 511 | ЧтениеJSON = Новый ЧтениеJSON; 512 | ЧтениеJSON.УстановитьСтроку(РезультатВызова); 513 | ДанныеJSON = ПрочитатьJSON(ЧтениеJSON); 514 | Если ДанныеJSON.Свойство("result") Тогда 515 | ДвоичныеДанные = Base64Значение(ДанныеJSON.result.data); 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 | ВнешняяКомпонента.НачатьВызовЭмуляцияНажатияКлавиши(Новый ОписаниеОповещения, 122, 0); 565 | 566 | КонецПроцедуры 567 | 568 | &НаКлиенте 569 | Процедура КомандаJavaScript(Команда) 570 | 571 | ПараметрыКоманды = Новый Структура("expression, contextId", ТекстJavaScript, КонтекстJavaScript); 572 | ДанныеJSON = ВыполнитьКомандуХрома("Runtime.evaluate", ПараметрыКоманды); 573 | 574 | РезультатJavaScript.Очистить(); 575 | 576 | Если ДанныеJSON.Свойство("result") Тогда 577 | Для каждого КлючЗначение из ДанныеJSON.result.result Цикл 578 | Стр = РезультатJavaScript.Добавить(); 579 | ЗаполнитьЗначенияСвойств(Стр, КлючЗначение); 580 | КонецЦикла; 581 | КонецЕсли; 582 | 583 | НаборЗначений = Неопределено; 584 | Если ДанныеJSON.Свойство("error", НаборЗначений) Тогда 585 | Для каждого КлючЗначение из НаборЗначений Цикл 586 | Стр = РезультатJavaScript.Добавить(); 587 | ЗаполнитьЗначенияСвойств(Стр, КлючЗначение); 588 | КонецЦикла; 589 | КонецЕсли; 590 | 591 | КонецПроцедуры 592 | 593 | &НаКлиенте 594 | Функция ДобавитьОбъект(ТекущийОбъект, РодительскийУзел) 595 | 596 | ТипОбъекта = ТипЗнч(ТекущийОбъект); 597 | НоваяСтр = РодительскийУзел.ПолучитьЭлементы().Добавить(); 598 | НоваяСтр.Тип = ТипОбъекта; 599 | НоваяСтр.Объект = МассивОбъектов.Количество(); 600 | МассивОбъектов.Добавить(ТекущийОбъект); 601 | ЗаполнитьЗначенияСвойств(НоваяСтр, ТекущийОбъект); 602 | Если ТипОбъекта = Тип("ТестируемоеОкноКлиентскогоПриложения") Тогда 603 | НоваяСтр.ТекстЗаголовка = ТекущийОбъект.Заголовок; 604 | Попытка 605 | КомандныйИнтерфейс = ТекущийОбъект.ПолучитьКомандныйИнтерфейс(); 606 | СтрокаИнтерфейса = ДобавитьОбъект(КомандныйИнтерфейс, НоваяСтр); 607 | Исключение 608 | КонецПопытки; 609 | ИначеЕсли ТипОбъекта = Тип("ТестируемыйКомандныйИнтерфейсОкна") Тогда 610 | 611 | ИначеЕсли ТипОбъекта = Тип("ТестируемаяФорма") Тогда 612 | НоваяСтр.Имя = ТекущийОбъект.ИмяФормы; 613 | Иначе 614 | НоваяСтр.Имя = ТекущийОбъект.Имя; 615 | КонецЕсли; 616 | 617 | Для каждого ДочернийОбъект из ТекущийОбъект.ПолучитьПодчиненныеОбъекты() Цикл 618 | ДобавитьОбъект(ДочернийОбъект, НоваяСтр); 619 | КонецЦикла; 620 | 621 | Возврат НоваяСтр; 622 | 623 | КонецФункции 624 | 625 | &НаКлиенте 626 | Процедура ЗаполнитьЭлементыФормы(Команда) 627 | 628 | МассивОбъектов = Новый Массив; 629 | ИерархияЭлементов.ПолучитьЭлементы().Очистить(); 630 | Для каждого ДочернийОбъект из ТестКлиент.ПолучитьПодчиненныеОбъекты() Цикл 631 | НоваяСтр = ДобавитьОбъект(ДочернийОбъект, ИерархияЭлементов); 632 | КонецЦикла; 633 | 634 | КонецПроцедуры 635 | 636 | &НаКлиенте 637 | Процедура ИерархияЭлементовПриАктивизацииСтроки(Элемент) 638 | 639 | ТекущиеДанные = Элементы.ИерархияЭлементов.ТекущиеДанные; 640 | Если ТекущиеДанные = Неопределено Тогда Возврат КонецЕсли; 641 | ТекущийОбъект = МассивОбъектов[ТекущиеДанные.Объект]; 642 | 643 | Текст = " 644 | |border('" + ТекущиеДанные.Имя + "', 3000); 645 | |border(label('" + ТекущиеДанные.Имя + "'), 3000, {color: 'green'}); 646 | |"; 647 | 648 | ПараметрыКоманды = Новый Структура("expression, contextId", Текст, КонтекстJavaScript); 649 | ДанныеJSON = Новый Структура("id,method,params", 1, "Runtime.evaluate", ПараметрыКоманды); 650 | ТекстJSON = ЗаписатьОбъектJSON(ДанныеJSON); 651 | ВнешняяКомпонента.НачатьВызовПослатьВебСокет(Новый ОписаниеОповещения, ТекстJSON); 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 | -------------------------------------------------------------------------------- /Config1C/CommonForms/VA_Управление/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | UseList 4 | false 5 | useIfNecessary 6 | 7 | 8 | 13 | 18 | 23 | 28 | 34 | 35 | 36 | 37 | ПриОткрытии 38 | ПередЗакрытием 39 | ПриСозданииНаСервере 40 | 41 | 42 | 43 | 44 | <v8:item> 45 | <v8:lang>ru</v8:lang> 46 | <v8:content>Группа подвал</v8:content> 47 | </v8:item> 48 | 49 | 50 | 51 | ru 52 | Группа подвал 53 | 54 | 55 | None 56 | false 57 | 58 | 59 | 60 | 61 | <v8:item> 62 | <v8:lang>ru</v8:lang> 63 | <v8:content>Страницы формы</v8:content> 64 | </v8:item> 65 | 66 | 67 | 68 | ru 69 | Страницы формы 70 | 71 | 72 | 73 | 74 | 75 | 76 | <v8:item> 77 | <v8:lang>ru</v8:lang> 78 | <v8:content>Подключение</v8:content> 79 | </v8:item> 80 | 81 | 82 | 83 | ru 84 | Страница подключение 85 | 86 | 87 | 88 | 89 | 90 | ФайлПриложения 91 | false 92 | true 93 | true 94 | 95 | 96 | 97 | ФайлПриложенияНачалоВыбора 98 | 99 | 100 | 101 | 102 | <v8:item> 103 | <v8:lang>ru</v8:lang> 104 | <v8:content>Группа публикация</v8:content> 105 | </v8:item> 106 | 107 | 108 | 109 | ru 110 | Группа публикация 111 | 112 | 113 | None 114 | false 115 | 116 | 117 | 118 | АдресПубликации 119 | 120 | 121 | 122 | АдресПубликацииПриИзменении 123 | 124 | 125 | 126 | ПортБраузера 127 | 128 | 129 | ru 130 | ЧГ=0 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | <v8:item> 141 | <v8:lang>ru</v8:lang> 142 | <v8:content>Группа соединение</v8:content> 143 | </v8:item> 144 | 145 | 146 | 147 | ru 148 | Группа соединение 149 | 150 | 151 | None 152 | false 153 | 154 | 155 | 156 | ИмяСервера 157 | 158 | 159 | 160 | 161 | ПортСервера 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | <v8:item> 170 | <v8:lang>ru</v8:lang> 171 | <v8:content>Группа идентификатор</v8:content> 172 | </v8:item> 173 | 174 | 175 | 176 | ru 177 | Группа идентификатор 178 | 179 | 180 | Horizontal 181 | None 182 | false 183 | 184 | 185 | 186 | ИдентификаторКлиента 187 | true 188 | true 189 | false 190 | 191 | 192 | 193 | АдресПубликацииПриИзменении 194 | 195 | 196 | 201 | 202 | 203 | 204 | 205 | <v8:item> 206 | <v8:lang>ru</v8:lang> 207 | <v8:content>Группа адрес</v8:content> 208 | </v8:item> 209 | 210 | 211 | 212 | ru 213 | Группа адрес 214 | 215 | 216 | Vertical 217 | None 218 | false 219 | DontUse 220 | 221 | 222 | 223 | 224 | <v8:item> 225 | <v8:lang>ru</v8:lang> 226 | <v8:content>Группа URL</v8:content> 227 | </v8:item> 228 | 229 | 230 | 231 | ru 232 | Группа URL 233 | 234 | 235 | AlwaysHorizontal 236 | None 237 | false 238 | 239 | 240 | 241 | АдресURL 242 | true 243 | false 244 | 245 | 246 | 247 | 252 | 253 | 254 | 255 | АдресВебСокет 256 | true 257 | false 258 | 259 | 260 | 261 | 262 | 263 | 264 | СнимокЭкрана 265 | true 266 | 50 267 | AsFile 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | <v8:item> 276 | <v8:lang>ru</v8:lang> 277 | <v8:content>JavaScript</v8:content> 278 | </v8:item> 279 | 280 | 281 | 282 | ru 283 | Страница java script 284 | 285 | 286 | HorizontalIfPossible 287 | 288 | 289 | 290 | 291 | <v8:item> 292 | <v8:lang>ru</v8:lang> 293 | <v8:content>Группа java script</v8:content> 294 | </v8:item> 295 | 296 | 297 | 298 | ru 299 | Группа java script 300 | 301 | 302 | Vertical 303 | None 304 | false 305 | 306 | 307 | 308 | 309 | <v8:item> 310 | <v8:lang>ru</v8:lang> 311 | <v8:content>Команды java scritp</v8:content> 312 | </v8:item> 313 | 314 | 315 | 316 | ru 317 | Команды java scritp 318 | 319 | 320 | 321 | 322 | 327 | 328 | 329 | 330 | ТекстJavaScript 331 | 332 | <v8:item> 333 | <v8:lang>ru</v8:lang> 334 | <v8:content>Текст JavaScript</v8:content> 335 | </v8:item> 336 | 337 | None 338 | false 339 | true 340 | 341 | 342 | 343 | 344 | List 345 | None 346 | true 347 | 6 348 |
false
349 | true 350 | false 351 | true 352 | true 353 | РезультатJavaScript 354 | None 355 | None 356 | None 357 | 358 | 359 | 360 | 361 | 362 | 363 | РезультатJavaScript 364 | SearchStringRepresentation 365 | 366 | 367 | 368 | 369 | 370 | 371 | РезультатJavaScript 372 | ViewStatusRepresentation 373 | 374 | 375 | 376 | 377 | 378 | 379 | РезультатJavaScript 380 | SearchControl 381 | 382 | 383 | 384 | 385 | 386 | 387 | РезультатJavaScript.Ключ 388 | EnterOnInput 389 | 5 390 | 391 | 392 | 393 | 394 | РезультатJavaScript.Значение 395 | EnterOnInput 396 | 15 397 | 398 | 399 | 400 | 401 |
402 |
403 |
404 | 405 | 406 | <v8:item> 407 | <v8:lang>ru</v8:lang> 408 | <v8:content>Группа снимок экрана</v8:content> 409 | </v8:item> 410 | 411 | 412 | 413 | ru 414 | Группа снимок экрана 415 | 416 | 417 | Vertical 418 | None 419 | false 420 | 421 | 422 | 423 | 424 | <v8:item> 425 | <v8:lang>ru</v8:lang> 426 | <v8:content>Команды снимок экрана</v8:content> 427 | </v8:item> 428 | 429 | 430 | 431 | ru 432 | Команды снимок экрана 433 | 434 | 435 | 436 | 437 | 438 | 439 |
440 |
441 | 442 | 443 | <v8:item> 444 | <v8:lang>ru</v8:lang> 445 | <v8:content>Иерархия элементов</v8:content> 446 | </v8:item> 447 | 448 | 449 | 450 | ru 451 | Страница иерархия элементов 452 | 453 | 454 | 455 | 456 | 457 | Tree 458 | true 459 | true 460 | true 461 | true 462 | ИерархияЭлементов 463 | 464 | 465 | 466 | 467 | 468 | ИерархияЭлементов 469 | SearchStringRepresentation 470 | 471 | 472 | 473 | 474 | 475 | 476 | ИерархияЭлементов 477 | ViewStatusRepresentation 478 | 479 | 480 | 481 | 482 | 483 | 484 | ИерархияЭлементов 485 | SearchControl 486 | 487 | 488 | 489 | 490 | 491 | ИерархияЭлементовВыбор 492 | ИерархияЭлементовПриАктивизацииСтроки 493 | 494 | 495 | 496 | ИерархияЭлементов.ТекстЗаголовка 497 | EnterOnInput 498 | 499 | 500 | 501 | 502 | ИерархияЭлементов.Имя 503 | EnterOnInput 504 | 505 | 506 | 507 | 508 | ИерархияЭлементов.Тип 509 | EnterOnInput 510 | 511 | 512 | 513 | 514 | ИерархияЭлементов.Вид 515 | EnterOnInput 516 | 517 | 518 | 519 | 520 |
521 |
522 |
523 |
524 |
525 |
526 | 527 | 528 | 529 | xs:string 530 | 531 | 0 532 | Variable 533 | 534 | 535 | true 536 | 537 | 538 | 539 | <v8:item> 540 | <v8:lang>ru</v8:lang> 541 | <v8:content>Идентификатор клиента</v8:content> 542 | </v8:item> 543 | 544 | 545 | xs:string 546 | 547 | 36 548 | Variable 549 | 550 | 551 | 552 | 553 | 554 | <v8:item> 555 | <v8:lang>ru</v8:lang> 556 | <v8:content>URL</v8:content> 557 | </v8:item> 558 | 559 | 560 | xs:string 561 | 562 | 0 563 | Variable 564 | 565 | 566 | 567 | 568 | 569 | <v8:item> 570 | <v8:lang>ru</v8:lang> 571 | <v8:content>Текст JSON</v8:content> 572 | </v8:item> 573 | 574 | 575 | xs:string 576 | 577 | 0 578 | Variable 579 | 580 | 581 | 582 | 583 | 584 | <v8:item> 585 | <v8:lang>ru</v8:lang> 586 | <v8:content>Местоположение компоненты</v8:content> 587 | </v8:item> 588 | 589 | 590 | xs:string 591 | 592 | 0 593 | Variable 594 | 595 | 596 | 597 | 598 | 599 | <v8:item> 600 | <v8:lang>ru</v8:lang> 601 | <v8:content>Снимок экрана</v8:content> 602 | </v8:item> 603 | 604 | 605 | xs:string 606 | 607 | 0 608 | Variable 609 | 610 | 611 | 612 | 613 | 614 | <v8:item> 615 | <v8:lang>ru</v8:lang> 616 | <v8:content>Интернет браузер</v8:content> 617 | </v8:item> 618 | 619 | 620 | xs:string 621 | 622 | 0 623 | Variable 624 | 625 | 626 | 627 | 628 | 629 | <v8:item> 630 | <v8:lang>ru</v8:lang> 631 | <v8:content>Имя сервера 1С</v8:content> 632 | </v8:item> 633 | 634 | 635 | xs:string 636 | 637 | 0 638 | Variable 639 | 640 | 641 | 642 | 643 | 644 | <v8:item> 645 | <v8:lang>ru</v8:lang> 646 | <v8:content>Порт сервера</v8:content> 647 | </v8:item> 648 | 649 | 650 | xs:decimal 651 | 652 | 10 653 | 0 654 | Any 655 | 656 | 657 | 658 | 659 | 660 | <v8:item> 661 | <v8:lang>ru</v8:lang> 662 | <v8:content>Адрес веб-публикации</v8:content> 663 | </v8:item> 664 | 665 | 666 | xs:string 667 | 668 | 0 669 | Variable 670 | 671 | 672 | 673 | АдресПубликации 674 | 675 | 676 | 677 | 678 | <v8:item> 679 | <v8:lang>ru</v8:lang> 680 | <v8:content>Порт браузера</v8:content> 681 | </v8:item> 682 | 683 | 684 | xs:decimal 685 | 686 | 10 687 | 0 688 | Any 689 | 690 | 691 | 692 | 693 | 694 | <v8:item> 695 | <v8:lang>ru</v8:lang> 696 | <v8:content>Текст java script</v8:content> 697 | </v8:item> 698 | 699 | 700 | xs:string 701 | 702 | 0 703 | Variable 704 | 705 | 706 | 707 | 708 | 709 | <v8:item> 710 | <v8:lang>ru</v8:lang> 711 | <v8:content>Результат java script</v8:content> 712 | </v8:item> 713 | 714 | 715 | v8:ValueTable 716 | 717 | 718 | 719 | 720 | <v8:item> 721 | <v8:lang>ru</v8:lang> 722 | <v8:content>Ключ</v8:content> 723 | </v8:item> 724 | 725 | 726 | xs:string 727 | 728 | 0 729 | Variable 730 | 731 | 732 | 733 | 734 | 735 | <v8:item> 736 | <v8:lang>ru</v8:lang> 737 | <v8:content>Значение</v8:content> 738 | </v8:item> 739 | 740 | 741 | xs:string 742 | 743 | 0 744 | Variable 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | <v8:item> 753 | <v8:lang>ru</v8:lang> 754 | <v8:content>WS</v8:content> 755 | </v8:item> 756 | 757 | 758 | xs:string 759 | 760 | 0 761 | Variable 762 | 763 | 764 | 765 | 766 | 767 | <v8:item> 768 | <v8:lang>ru</v8:lang> 769 | <v8:content>Иерархия элементов</v8:content> 770 | </v8:item> 771 | 772 | 773 | v8:ValueTree 774 | 775 | 776 | 777 | 778 | <v8:item> 779 | <v8:lang>ru</v8:lang> 780 | <v8:content>Текст заголовка</v8:content> 781 | </v8:item> 782 | 783 | 784 | xs:string 785 | 786 | 0 787 | Variable 788 | 789 | 790 | 791 | 792 | 793 | <v8:item> 794 | <v8:lang>ru</v8:lang> 795 | <v8:content>Тип</v8:content> 796 | </v8:item> 797 | 798 | 799 | 800 | 801 | 802 | <v8:item> 803 | <v8:lang>ru</v8:lang> 804 | <v8:content>Имя</v8:content> 805 | </v8:item> 806 | 807 | 808 | xs:string 809 | 810 | 0 811 | Variable 812 | 813 | 814 | 815 | 816 | 817 | <v8:item> 818 | <v8:lang>ru</v8:lang> 819 | <v8:content>Вид</v8:content> 820 | </v8:item> 821 | 822 | 823 | xs:string 824 | 825 | 0 826 | Variable 827 | 828 | 829 | 830 | 831 | 832 | <v8:item> 833 | <v8:lang>ru</v8:lang> 834 | <v8:content>Объект</v8:content> 835 | </v8:item> 836 | 837 | 838 | xs:decimal 839 | 840 | 0 841 | 0 842 | Any 843 | 844 | 845 | 846 | 847 | 848 | <v8:item> 849 | <v8:lang>ru</v8:lang> 850 | <v8:content>Видимость</v8:content> 851 | </v8:item> 852 | 853 | 854 | xs:boolean 855 | 856 | 857 | 858 | 859 | <v8:item> 860 | <v8:lang>ru</v8:lang> 861 | <v8:content>Доступность</v8:content> 862 | </v8:item> 863 | 864 | 865 | xs:boolean 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | <v8:item> 875 | <v8:lang>ru</v8:lang> 876 | <v8:content>Демонстрация</v8:content> 877 | </v8:item> 878 | 879 | 880 | 881 | ru 882 | Демонстрация 883 | 884 | 885 | 886 | StdPicture.GenerateReport 887 | true 888 | 889 | ВыполнитьТест 890 | TextPicture 891 | DontUse 892 | 893 | 894 | 895 | <v8:item> 896 | <v8:lang>ru</v8:lang> 897 | <v8:content>Запустить клиент тестирования</v8:content> 898 | </v8:item> 899 | 900 | 901 | 902 | ru 903 | Запустить клиент тестирования 904 | 905 | 906 | ЗапуститьКлиентТестирования 907 | DontUse 908 | 909 | 910 | 911 | <v8:item> 912 | <v8:lang>ru</v8:lang> 913 | <v8:content>Новый идентификатор</v8:content> 914 | </v8:item> 915 | 916 | 917 | 918 | ru 919 | Новый идентификатор 920 | 921 | 922 | НовыйИдентификатор 923 | DontUse 924 | 925 | 926 | 927 | <v8:item> 928 | <v8:lang>ru</v8:lang> 929 | <v8:content>Управление браузером</v8:content> 930 | </v8:item> 931 | 932 | 933 | 934 | ru 935 | Управление браузером 936 | 937 | 938 | УправлениеБраузером 939 | DontUse 940 | 941 | 942 | 943 | <v8:item> 944 | <v8:lang>ru</v8:lang> 945 | <v8:content>Запустить браузер</v8:content> 946 | </v8:item> 947 | 948 | 949 | 950 | ru 951 | Запустить браузер 952 | 953 | 954 | ЗапуститьБраузер 955 | DontUse 956 | 957 | 958 | 959 | <v8:item> 960 | <v8:lang>ru</v8:lang> 961 | <v8:content>Снимок экрана</v8:content> 962 | </v8:item> 963 | 964 | 965 | 966 | ru 967 | Снимок экрана 968 | 969 | 970 | 971 | StdPicture.Form 972 | true 973 | 974 | ПолучитьСнимокЭкрана 975 | TextPicture 976 | DontUse 977 | 978 | 979 | 980 | <v8:item> 981 | <v8:lang>ru</v8:lang> 982 | <v8:content>Очистить картинку</v8:content> 983 | </v8:item> 984 | 985 | 986 | 987 | ru 988 | Очистить картинку 989 | 990 | 991 | ОчиститьКартинку 992 | 993 | 994 | 995 | <v8:item> 996 | <v8:lang>ru</v8:lang> 997 | <v8:content>Полный экран</v8:content> 998 | </v8:item> 999 | 1000 | 1001 | 1002 | ru 1003 | Полный экран 1004 | 1005 | 1006 | ПолныйЭкран 1007 | 1008 | 1009 | 1010 | <v8:item> 1011 | <v8:lang>ru</v8:lang> 1012 | <v8:content>Выполнить JavaScript</v8:content> 1013 | </v8:item> 1014 | 1015 | 1016 | 1017 | ru 1018 | Команда java script 1019 | 1020 | 1021 | КомандаJavaScript 1022 | 1023 | 1024 | 1025 | <v8:item> 1026 | <v8:lang>ru</v8:lang> 1027 | <v8:content>Заполнить объкты</v8:content> 1028 | </v8:item> 1029 | 1030 | 1031 | 1032 | ru 1033 | Заполнить объкты 1034 | 1035 | 1036 | ЗаполнитьОбъкты 1037 | 1038 | 1039 |
--------------------------------------------------------------------------------