├── 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 |
4 |
5 | VA_1cWinCtrl
6 |
7 |
8 | ru
9 | 1cWinCtrl
10 |
11 |
12 |
13 | AddIn
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Config1C/DataProcessors/VA_1ChromeDev/Templates/VA_JavaScript.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | VA_JavaScript
6 |
7 |
8 | ru
9 | V a java script
10 |
11 |
12 |
13 | TextDocument
14 |
15 |
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 |
21 |
--------------------------------------------------------------------------------
/Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаЭлемента.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/Config1C/DataProcessors/VA_1ChromeDev/Forms/VA_1ChromeDev.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
102 |
--------------------------------------------------------------------------------
/Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаЭлемента/Ext/Form.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Config1C/Catalogs/VA_ПримерДанных/Forms/ФормаСписка/Ext/Form.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
299 | VA_1cWinCtrl
300 | VA_JavaScript
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------