mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-19 00:59:40 +03:00
Compare commits
2 Commits
e56a932ee2
...
974e8ff5e4
| Author | SHA1 | Date | |
|---|---|---|---|
| 974e8ff5e4 | |||
| 47c2e5d48f |
@@ -1,4 +1,4 @@
|
||||
# meta-compile v1.4 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.5 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -2827,8 +2827,8 @@ if (-not (Test-Path $typeDir)) {
|
||||
New-Item -ItemType Directory -Path $typeDir -Force | Out-Null
|
||||
}
|
||||
if ($objType -notin $typesNoSubDir) {
|
||||
if (-not (Test-Path $extDir)) {
|
||||
New-Item -ItemType Directory -Path $extDir -Force | Out-Null
|
||||
if (-not (Test-Path $objSubDir)) {
|
||||
New-Item -ItemType Directory -Path $objSubDir -Force | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2838,6 +2838,13 @@ $enc = New-Object System.Text.UTF8Encoding($true)
|
||||
# Module files
|
||||
$modulesCreated = @()
|
||||
|
||||
# Helper: create Ext/ only when needed (avoids empty Ext/ for Constant, Enum, etc.)
|
||||
function Ensure-ExtDir {
|
||||
if (-not (Test-Path $extDir)) {
|
||||
New-Item -ItemType Directory -Path $extDir -Force | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
# Types with ObjectModule.bsl
|
||||
$typesWithObjectModule = @("Catalog","Document","Report","DataProcessor","ExchangePlan",
|
||||
"ChartOfAccounts","ChartOfCharacteristicTypes","ChartOfCalculationTypes",
|
||||
@@ -2845,13 +2852,16 @@ $typesWithObjectModule = @("Catalog","Document","Report","DataProcessor","Exchan
|
||||
# Types with RecordSetModule.bsl
|
||||
$typesWithRecordSetModule = @("InformationRegister","AccumulationRegister","AccountingRegister","CalculationRegister")
|
||||
# Types with ManagerModule.bsl
|
||||
$typesWithManagerModule = @("Report","DataProcessor")
|
||||
$typesWithManagerModule = @("Report","DataProcessor","Constant","Enum")
|
||||
# Types with ValueManagerModule.bsl
|
||||
$typesWithValueManagerModule = @("Constant")
|
||||
# Types with Module.bsl (general)
|
||||
$typesWithModule = @("CommonModule","HTTPService","WebService")
|
||||
|
||||
if ($objType -in $typesWithObjectModule) {
|
||||
$modulePath = Join-Path $extDir "ObjectModule.bsl"
|
||||
if (-not (Test-Path $modulePath)) {
|
||||
Ensure-ExtDir
|
||||
[System.IO.File]::WriteAllText($modulePath, "", $enc)
|
||||
$modulesCreated += $modulePath
|
||||
}
|
||||
@@ -2859,6 +2869,15 @@ if ($objType -in $typesWithObjectModule) {
|
||||
if ($objType -in $typesWithManagerModule) {
|
||||
$modulePath = Join-Path $extDir "ManagerModule.bsl"
|
||||
if (-not (Test-Path $modulePath)) {
|
||||
Ensure-ExtDir
|
||||
[System.IO.File]::WriteAllText($modulePath, "", $enc)
|
||||
$modulesCreated += $modulePath
|
||||
}
|
||||
}
|
||||
if ($objType -in $typesWithValueManagerModule) {
|
||||
$modulePath = Join-Path $extDir "ValueManagerModule.bsl"
|
||||
if (-not (Test-Path $modulePath)) {
|
||||
Ensure-ExtDir
|
||||
[System.IO.File]::WriteAllText($modulePath, "", $enc)
|
||||
$modulesCreated += $modulePath
|
||||
}
|
||||
@@ -2866,6 +2885,7 @@ if ($objType -in $typesWithManagerModule) {
|
||||
if ($objType -in $typesWithRecordSetModule) {
|
||||
$modulePath = Join-Path $extDir "RecordSetModule.bsl"
|
||||
if (-not (Test-Path $modulePath)) {
|
||||
Ensure-ExtDir
|
||||
[System.IO.File]::WriteAllText($modulePath, "", $enc)
|
||||
$modulesCreated += $modulePath
|
||||
}
|
||||
@@ -2873,6 +2893,7 @@ if ($objType -in $typesWithRecordSetModule) {
|
||||
if ($objType -in $typesWithModule) {
|
||||
$modulePath = Join-Path $extDir "Module.bsl"
|
||||
if (-not (Test-Path $modulePath)) {
|
||||
Ensure-ExtDir
|
||||
[System.IO.File]::WriteAllText($modulePath, "", $enc)
|
||||
$modulesCreated += $modulePath
|
||||
}
|
||||
@@ -2882,6 +2903,7 @@ if ($objType -in $typesWithModule) {
|
||||
if ($objType -eq "ExchangePlan") {
|
||||
$contentPath = Join-Path $extDir "Content.xml"
|
||||
if (-not (Test-Path $contentPath)) {
|
||||
Ensure-ExtDir
|
||||
$contentXml = "<?xml version=`"1.0`" encoding=`"UTF-8`"?>`r`n<ExchangePlanContent xmlns=`"http://v8.1c.ru/8.3/xcf/extrnprops`" xmlns:xr=`"http://v8.1c.ru/8.3/xcf/readable`" version=`"2.17`"/>`r`n"
|
||||
[System.IO.File]::WriteAllText($contentPath, $contentXml, $enc)
|
||||
$modulesCreated += $contentPath
|
||||
@@ -2890,6 +2912,7 @@ if ($objType -eq "ExchangePlan") {
|
||||
if ($objType -eq "BusinessProcess") {
|
||||
$flowchartPath = Join-Path $extDir "Flowchart.xml"
|
||||
if (-not (Test-Path $flowchartPath)) {
|
||||
Ensure-ExtDir
|
||||
$flowchartXml = "<?xml version=`"1.0`" encoding=`"UTF-8`"?>`r`n<Flowchart xmlns=`"http://v8.1c.ru/8.3/MDClasses`" version=`"2.17`"/>`r`n"
|
||||
[System.IO.File]::WriteAllText($flowchartPath, $flowchartXml, $enc)
|
||||
$modulesCreated += $flowchartPath
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-compile v1.4 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.5 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -2463,7 +2463,7 @@ ext_dir = os.path.join(obj_sub_dir, 'Ext')
|
||||
|
||||
os.makedirs(type_dir, exist_ok=True)
|
||||
if obj_type not in types_no_sub_dir:
|
||||
os.makedirs(ext_dir, exist_ok=True)
|
||||
os.makedirs(obj_sub_dir, exist_ok=True)
|
||||
|
||||
write_utf8_bom(main_xml_path, metadata_xml)
|
||||
|
||||
@@ -2478,30 +2478,45 @@ types_with_object_module = [
|
||||
types_with_record_set_module = [
|
||||
'InformationRegister', 'AccumulationRegister', 'AccountingRegister', 'CalculationRegister',
|
||||
]
|
||||
types_with_manager_module = ['Report', 'DataProcessor']
|
||||
types_with_manager_module = ['Report', 'DataProcessor', 'Constant', 'Enum']
|
||||
types_with_value_manager_module = ['Constant']
|
||||
types_with_module = ['CommonModule', 'HTTPService', 'WebService']
|
||||
|
||||
def ensure_ext_dir():
|
||||
os.makedirs(ext_dir, exist_ok=True)
|
||||
|
||||
if obj_type in types_with_object_module:
|
||||
module_path = os.path.join(ext_dir, 'ObjectModule.bsl')
|
||||
if not os.path.isfile(module_path):
|
||||
ensure_ext_dir()
|
||||
write_utf8_bom(module_path, '')
|
||||
modules_created.append(module_path)
|
||||
|
||||
if obj_type in types_with_manager_module:
|
||||
module_path = os.path.join(ext_dir, 'ManagerModule.bsl')
|
||||
if not os.path.isfile(module_path):
|
||||
ensure_ext_dir()
|
||||
write_utf8_bom(module_path, '')
|
||||
modules_created.append(module_path)
|
||||
|
||||
if obj_type in types_with_value_manager_module:
|
||||
module_path = os.path.join(ext_dir, 'ValueManagerModule.bsl')
|
||||
if not os.path.isfile(module_path):
|
||||
ensure_ext_dir()
|
||||
write_utf8_bom(module_path, '')
|
||||
modules_created.append(module_path)
|
||||
|
||||
if obj_type in types_with_record_set_module:
|
||||
module_path = os.path.join(ext_dir, 'RecordSetModule.bsl')
|
||||
if not os.path.isfile(module_path):
|
||||
ensure_ext_dir()
|
||||
write_utf8_bom(module_path, '')
|
||||
modules_created.append(module_path)
|
||||
|
||||
if obj_type in types_with_module:
|
||||
module_path = os.path.join(ext_dir, 'Module.bsl')
|
||||
if not os.path.isfile(module_path):
|
||||
ensure_ext_dir()
|
||||
write_utf8_bom(module_path, '')
|
||||
modules_created.append(module_path)
|
||||
|
||||
@@ -2509,6 +2524,7 @@ if obj_type in types_with_module:
|
||||
if obj_type == 'ExchangePlan':
|
||||
content_path = os.path.join(ext_dir, 'Content.xml')
|
||||
if not os.path.isfile(content_path):
|
||||
ensure_ext_dir()
|
||||
content_xml = '<?xml version="1.0" encoding="UTF-8"?>\r\n<ExchangePlanContent xmlns="http://v8.1c.ru/8.3/xcf/extrnprops" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" version="2.17"/>\r\n'
|
||||
write_utf8_bom(content_path, content_xml)
|
||||
modules_created.append(content_path)
|
||||
@@ -2516,6 +2532,7 @@ if obj_type == 'ExchangePlan':
|
||||
if obj_type == 'BusinessProcess':
|
||||
flowchart_path = os.path.join(ext_dir, 'Flowchart.xml')
|
||||
if not os.path.isfile(flowchart_path):
|
||||
ensure_ext_dir()
|
||||
flowchart_xml = '<?xml version="1.0" encoding="UTF-8"?>\r\n<Flowchart xmlns="http://v8.1c.ru/8.3/MDClasses" version="2.17"/>\r\n'
|
||||
write_utf8_bom(flowchart_path, flowchart_xml)
|
||||
modules_created.append(flowchart_path)
|
||||
|
||||
@@ -812,7 +812,7 @@ function normalizeE1cibUrl(url) {
|
||||
export async function openFile(filePath) {
|
||||
ensureConnected();
|
||||
await dismissPendingErrors();
|
||||
const absPath = resolveProjectPath(filePath);
|
||||
const absPath = resolveProjectPath(filePath.replace(/\\/g, '/'));
|
||||
|
||||
const MAX_ATTEMPTS = 2; // 1st may trigger security dialog, 2nd is the real open
|
||||
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// web-test dom v1.4 — DOM selectors and semantic mapping for 1C web client
|
||||
// web-test dom v1.5 — DOM selectors and semantic mapping for 1C web client
|
||||
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
/**
|
||||
* DOM selectors and semantic mapping for 1C:Enterprise web client.
|
||||
@@ -14,7 +14,7 @@
|
||||
* When modalSurface is visible — prefer the highest-numbered form (modal dialog). */
|
||||
const DETECT_FORM_FN = `function detectForm() {
|
||||
const counts = {};
|
||||
document.querySelectorAll('input.editInput[id], a.press[id]').forEach(el => {
|
||||
document.querySelectorAll('input.editInput[id], textarea[id], a.press[id]').forEach(el => {
|
||||
if (el.offsetWidth === 0) return;
|
||||
const m = el.id.match(/^form(\\d+)_/);
|
||||
if (m) counts[m[1]] = (counts[m[1]] || 0) + 1;
|
||||
@@ -36,7 +36,7 @@ const DETECT_FORM_FN = `function detectForm() {
|
||||
* Works even when the open-windows tab bar is hidden. */
|
||||
const DETECT_FORMS_FN = `function detectForms() {
|
||||
const counts = {};
|
||||
document.querySelectorAll('input.editInput[id], a.press[id]').forEach(el => {
|
||||
document.querySelectorAll('input.editInput[id], textarea[id], a.press[id]').forEach(el => {
|
||||
if (el.offsetWidth === 0) return;
|
||||
const m = el.id.match(/^form(\\d+)_/);
|
||||
if (m) counts[m[1]] = (counts[m[1]] || 0) + 1;
|
||||
@@ -1153,7 +1153,7 @@ export function checkErrorsScript() {
|
||||
const elCount = document.querySelectorAll('[id^="' + p + '"]').length;
|
||||
if (elCount > 100) continue;
|
||||
if (buttons.length !== 1 || !buttons[0].classList.contains('pressDefault')) continue;
|
||||
const hasInputs = document.querySelectorAll('input.editInput[id^="' + p + '"]').length > 0;
|
||||
const hasInputs = document.querySelectorAll('input.editInput[id^="' + p + '"], textarea[id^="' + p + '"]').length > 0;
|
||||
if (hasInputs) continue;
|
||||
const texts = [...document.querySelectorAll('[id^="' + p + '"].staticText')]
|
||||
.filter(el => el.offsetWidth > 0)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env node
|
||||
// web-test run v1.2 — CLI runner for 1C web client automation
|
||||
// web-test run v1.3 — CLI runner for 1C web client automation
|
||||
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
/**
|
||||
* CLI runner for 1C web client automation.
|
||||
@@ -168,6 +168,10 @@ async function executeScript(code, { noRecord } = {}) {
|
||||
};
|
||||
}
|
||||
|
||||
// Normalize Windows backslash paths to prevent JS parse errors
|
||||
// (e.g. C:\Users\... → \u triggers "Invalid Unicode escape sequence")
|
||||
code = code.replace(/[A-Za-z]:\\[^\s'"`;\n)}\]]+/g, m => m.replace(/\\/g, '/'));
|
||||
|
||||
const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
|
||||
const fn = new AsyncFunction(...Object.keys(exports), code);
|
||||
await fn(...Object.values(exports));
|
||||
|
||||
Reference in New Issue
Block a user