mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-21 09:45:53 +03:00
fix(meta-info,meta-compile,+5): правки по ревью — регистр, BOM, голый менеджер, порог
Семь находок ревью, все подтверждены воспроизведением: 1. Голый менеджер в источниках печатался по-английски: карта объектных видов применялась только к форме с точкой, а meta-compile пишет «cfg:DocumentManager» обычным v8:Type. Восемнадцать добавленных *Manager-записей были недостижимы. Суффикс «(все)» ему не ставится — это сам тип менеджера, а не класс объектов. 2. Новые регулярки прощающего ввода расходились между портами: -replace в PowerShell регистронезависим, re.sub — нет. «ДокументОбъект (Все)» проходил в ps1 и падал в py. Добавлен re.IGNORECASE — это задокументированная ловушка портирования, и она же снова сработала. 3. В шесть py-портов попал BOM (перекодировка при бампе версии), и перед «#!/usr/bin/env python3» он ломает shebang на POSIX. Снят там, где его не было в HEAD; в mxl-compile.py он был изначально и оставлен. 4. Правило со стрелкой из Resolve-TypeStr убрано. form-compile режет тип по [|+] ДО резолвера, поэтому строка глоссария «A -> B | C» молча превращалась в составной тип «A | C» вместо одного A. Половина строки, принятая за тип, — хуже громкого отказа. Остались суффикс «(все)» и счётчик «— типов: N». 5. py-порт meta-info не переиспользовал общий климб до корня конфигурации: правка тогда молча не применилась, и порты разошлись по структуре. 6. Found выставлялся до разбора состава определяемого типа: падение внутри давало «состав пуст» — ложь вместо «файл типа не разобран». 7. Порог сворачивания источников считался по сумме множеств и явных типов, а сворачивались только явные: пять множеств плюс один тип прятали этот тип, а шесть типов без множеств давали «и ещё» после пустоты. Порог теперь по числу явных типов, «и ещё» убрано как ложное. Плюс формы источника подписки описаны в reference самого навыка: раньше они были только в docs/meta-dsl-spec.md, а навык обязан быть самодостаточным. Добавлен кейс на голого менеджера — без него находка 1 вернулась бы незамеченной. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
510c9163e3
commit
e9d45984dc
@@ -2503,9 +2503,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.199 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
@@ -3912,14 +3912,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
@@ -410,9 +410,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# form-edit v1.19 — Edit 1C managed form elements (Python port)
|
||||
# form-edit v1.19 — Edit 1C managed form elements (Python port)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import json
|
||||
@@ -534,14 +534,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
| Ключ | Умолчание | Значения |
|
||||
|------|-----------|----------|
|
||||
| `source` | `[]` | объекты-источники: `["CatalogObject.Контрагенты", "DocumentObject.Реализация"]` |
|
||||
| `source` | `[]` | объекты-источники (формы ниже): `["CatalogObject.Контрагенты", "DocumentObject.Реализация"]` |
|
||||
| `event` | `BeforeWrite` | `BeforeWrite` / `OnWrite` / `BeforeDelete` / `OnReadAtServer` / `FillCheckProcessing` … |
|
||||
| `handler` | пусто | метод-обработчик `"МодульСервер.Процедура"` (дополняется до `CommonModule.…`) |
|
||||
|
||||
@@ -53,4 +53,23 @@
|
||||
"handler": "ОбщегоНазначенияСервер.ПередЗаписьюКонтрагента" }
|
||||
```
|
||||
|
||||
**Формы источника.** Кроме конкретного объекта (`DocumentObject.Реализация`) источник бывает:
|
||||
|
||||
| Форма | Смысл | Пример |
|
||||
|-------|-------|--------|
|
||||
| голый объектный вид | ВСЕ объекты класса | `"DocumentObject"`, `"CatalogObject"`, `"InformationRegisterRecordSet"`, `"ConstantValueManager"` |
|
||||
| `DefinedType.<Имя>` | состав определяемого типа | `"DefinedType.ПрисоединенныйФайлОбъект"` |
|
||||
| `Characteristic.<Имя>` | значение характеристики ПВХ | `"Characteristic.ДополнительныеРеквизитыИСведения"` |
|
||||
| менеджер объекта | сам менеджер, не класс | `"DocumentManager.Реализация"`, `"CatalogManager.Контрагенты"` |
|
||||
|
||||
В типовых конфигурациях источник чаще задан классом или определяемым типом, чем перечислением:
|
||||
в выгрузке ERP так задана треть подписок. Русские имена принимаются наравне с английскими
|
||||
(`"ДокументОбъект"`, `"ОпределяемыйТип.Коллекция"`).
|
||||
|
||||
```json
|
||||
{ "type": "EventSubscription", "name": "ПроверкаЗаполненияЛюбогоДокумента",
|
||||
"source": ["DocumentObject", "DefinedType.ПрисоединенныйФайлОбъект"],
|
||||
"event": "FillCheckProcessing", "handler": "ОбщегоНазначенияСервер.ПроверитьЗаполнение" }
|
||||
```
|
||||
|
||||
> Процедура-обработчик (`methodName` / `handler`) должна существовать в указанном общем модуле (экспортная).
|
||||
|
||||
@@ -739,9 +739,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env python3
|
||||
# meta-compile v1.113 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
@@ -873,14 +873,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
@@ -625,9 +625,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env python3
|
||||
# meta-edit v1.53 — Edit existing 1C metadata object XML
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
@@ -649,14 +649,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
@@ -250,7 +250,6 @@ function Resolve-DefinedType([string]$dtName) {
|
||||
$dtNs.AddNamespace("v8", "http://v8.1c.ru/8.1/data/core")
|
||||
$tn = $dtDoc.SelectSingleNode("/md:MetaDataObject/md:DefinedType/md:Properties/md:Type", $dtNs)
|
||||
if ($tn) {
|
||||
$res.Found = $true
|
||||
$members = @()
|
||||
$script:inTypeSetExpansion = $true
|
||||
try {
|
||||
@@ -264,6 +263,9 @@ function Resolve-DefinedType([string]$dtName) {
|
||||
}
|
||||
} finally { $script:inTypeSetExpansion = $false }
|
||||
$res.Members = $members
|
||||
# Found только после успешного разбора: иначе упавшее раскрытие
|
||||
# печаталось бы как «состав пуст» — ложь вместо «не разобран».
|
||||
$res.Found = $true
|
||||
}
|
||||
} catch { $res.Broken = $true }
|
||||
if (-not $res.Found) { $res.Broken = $true }
|
||||
@@ -728,6 +730,12 @@ function Format-SourceType([string]$raw) {
|
||||
$prefix = $Matches[1]; $name = $Matches[2]
|
||||
if ($objectTypeMap.ContainsKey($prefix)) { return "$($objectTypeMap[$prefix]).$name" }
|
||||
}
|
||||
# Голый вид без точки тоже бывает источником: meta-compile пишет менеджера (ДокументМенеджер)
|
||||
# обычным v8:Type. Суффикса «(все)» тут НЕ ставим — это сам тип менеджера, а не класс объектов;
|
||||
# множеством голый вид приходит через v8:TypeSet, и его форматирует Format-SingleTypeSet.
|
||||
if ($raw -match '^cfg:(\w+)$' -and $objectTypeMap.ContainsKey($Matches[1])) {
|
||||
return $objectTypeMap[$Matches[1]]
|
||||
}
|
||||
if ($raw -match '^cfg:(.+)$') { return $Matches[1] }
|
||||
return $raw
|
||||
}
|
||||
@@ -1440,12 +1448,10 @@ if (-not $drillDone) {
|
||||
Out "Источники ($total):"
|
||||
# full печатает всё: режим для этого и нужен, а длину держит постраничник.
|
||||
# В overview явные типы сворачиваем в счётчик — их бывает больше тысячи.
|
||||
$listTypes = ($Mode -eq "full") -or ($total -le $script:composedTypeThreshold)
|
||||
$listTypes = ($Mode -eq "full") -or ($srcTypes.Count -le $script:composedTypeThreshold)
|
||||
if ($listTypes) { foreach ($s in $srcTypes) { Out " $s" } }
|
||||
foreach ($s in $srcSets) { Out " $s" }
|
||||
if (-not $listTypes -and $srcTypes.Count -gt 0) {
|
||||
Out " и ещё явных типов: $($srcTypes.Count) (-Mode full)"
|
||||
}
|
||||
if (-not $listTypes) { Out " явных типов: $($srcTypes.Count) (-Mode full)" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,7 +328,6 @@ def resolve_defined_type(dt_name):
|
||||
dt_root = etree.parse(dt_path, parser_xml).getroot()
|
||||
tn = find(dt_root, "/md:MetaDataObject/md:DefinedType/md:Properties/md:Type")
|
||||
if tn is not None:
|
||||
res["found"] = True
|
||||
members = []
|
||||
_in_type_set_expansion["on"] = True
|
||||
try:
|
||||
@@ -340,6 +339,9 @@ def resolve_defined_type(dt_name):
|
||||
finally:
|
||||
_in_type_set_expansion["on"] = False
|
||||
res["members"] = members
|
||||
# found только после успешного разбора: иначе упавшее раскрытие
|
||||
# печаталось бы как «состав пуст» — ложь вместо «не разобран».
|
||||
res["found"] = True
|
||||
except Exception:
|
||||
res["broken"] = True
|
||||
if not res["found"]:
|
||||
@@ -793,6 +795,12 @@ def format_source_type(raw):
|
||||
name = m.group(2)
|
||||
if prefix in object_type_map:
|
||||
return f"{object_type_map[prefix]}.{name}"
|
||||
# Голый вид без точки тоже бывает источником: meta-compile пишет менеджера (ДокументМенеджер)
|
||||
# обычным v8:Type. Суффикса «(все)» тут НЕ ставим — это сам тип менеджера, а не класс объектов;
|
||||
# множеством голый вид приходит через v8:TypeSet, и его форматирует format_single_type_set.
|
||||
m = re.match(r'^cfg:(\w+)$', raw)
|
||||
if m and m.group(1) in object_type_map:
|
||||
return object_type_map[m.group(1)]
|
||||
m = re.match(r'^cfg:(.+)$', raw)
|
||||
if m:
|
||||
return m.group(1)
|
||||
@@ -883,19 +891,9 @@ def get_object_support_status(obj_uuid):
|
||||
try:
|
||||
if _sg_is_external_root(object_path):
|
||||
return None
|
||||
d = os.path.dirname(object_path)
|
||||
bin_path = None
|
||||
for _ in range(8):
|
||||
if not d:
|
||||
break
|
||||
cand = os.path.join(d, "Ext", "ParentConfigurations.bin")
|
||||
if os.path.exists(cand) or os.path.exists(os.path.join(d, "Configuration.xml")):
|
||||
bin_path = cand
|
||||
break
|
||||
parent = os.path.dirname(d)
|
||||
if parent == d:
|
||||
break
|
||||
d = parent
|
||||
# Корень конфигурации ищем тем же климбом, что и состав определяемых типов.
|
||||
root = get_config_root_dir()
|
||||
bin_path = os.path.join(root, "Ext", "ParentConfigurations.bin") if root else None
|
||||
if not bin_path or not os.path.exists(bin_path):
|
||||
return "не на поддержке"
|
||||
data = open(bin_path, "rb").read()
|
||||
@@ -1474,14 +1472,14 @@ if not drill_done:
|
||||
out(f"Источники ({total}):")
|
||||
# full печатает всё: режим для этого и нужен, а длину держит постраничник.
|
||||
# В overview явные типы сворачиваем в счётчик — их бывает больше тысячи.
|
||||
list_types = mode == "full" or total <= COMPOSED_TYPE_THRESHOLD
|
||||
list_types = mode == "full" or len(src_types) <= COMPOSED_TYPE_THRESHOLD
|
||||
if list_types:
|
||||
for s in src_types:
|
||||
out(f" {s}")
|
||||
for s in src_sets:
|
||||
out(f" {s}")
|
||||
if not list_types and src_types:
|
||||
out(f" и ещё явных типов: {len(src_types)} (-Mode full)")
|
||||
if not list_types:
|
||||
out(f" явных типов: {len(src_types)} (-Mode full)")
|
||||
|
||||
# HTTPService
|
||||
if md_type == "HTTPService":
|
||||
|
||||
@@ -783,9 +783,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -577,14 +577,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
|
||||
@@ -443,9 +443,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env python3
|
||||
# skd-compile v1.123 — Compile 1C DCS from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
@@ -427,14 +427,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
@@ -274,9 +274,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# skd-edit v1.41 — Atomic 1C DCS editor (Python port)
|
||||
# skd-edit v1.41 — Atomic 1C DCS editor (Python port)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import json
|
||||
@@ -386,14 +386,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"name": "Подписка: голый менеджер в источниках — по-русски и без «(все)»",
|
||||
"setup": "empty-config",
|
||||
"preRun": [
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": {
|
||||
"type": "CommonModule",
|
||||
"name": "Обработчики",
|
||||
"server": true
|
||||
},
|
||||
"args": {
|
||||
"-JsonPath": "{inputFile}",
|
||||
"-OutputDir": "{workDir}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": {
|
||||
"type": "Document",
|
||||
"name": "Заказ"
|
||||
},
|
||||
"args": {
|
||||
"-JsonPath": "{inputFile}",
|
||||
"-OutputDir": "{workDir}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": {
|
||||
"type": "EventSubscription",
|
||||
"name": "Менеджеры",
|
||||
"event": "BeforeWrite",
|
||||
"handler": "Обработчики.ПередЗаписью",
|
||||
"source": [
|
||||
"DocumentManager",
|
||||
"DocumentManager.Заказ",
|
||||
"DocumentObject"
|
||||
]
|
||||
},
|
||||
"args": {
|
||||
"-JsonPath": "{inputFile}",
|
||||
"-OutputDir": "{workDir}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"params": {
|
||||
"objectPath": "EventSubscriptions/Менеджеры.xml"
|
||||
},
|
||||
"args_extra": [
|
||||
"-Mode",
|
||||
"full"
|
||||
],
|
||||
"expect": {
|
||||
"stdoutContains": [
|
||||
"Источники (3):",
|
||||
" ДокументМенеджер",
|
||||
" ДокументМенеджер.Заказ",
|
||||
" ДокументОбъект (все)"
|
||||
],
|
||||
"stdoutNotContains": [
|
||||
"DocumentManager",
|
||||
"ДокументМенеджер (все)"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -114,7 +114,7 @@
|
||||
"stdoutContains": [
|
||||
"Источники (7):",
|
||||
" СправочникОбъект (все)",
|
||||
" и ещё явных типов: 6 (-Mode full)"
|
||||
" явных типов: 6 (-Mode full)"
|
||||
],
|
||||
"stdoutNotContains": [
|
||||
"ДокументОбъект.Д3"
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||
<CommonModule uuid="UUID-001">
|
||||
<Properties>
|
||||
<Name>Обработчики</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Обработчики</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Global>false</Global>
|
||||
<ClientManagedApplication>false</ClientManagedApplication>
|
||||
<Server>true</Server>
|
||||
<ExternalConnection>false</ExternalConnection>
|
||||
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
|
||||
<ServerCall>false</ServerCall>
|
||||
<Privileged>false</Privileged>
|
||||
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
|
||||
</Properties>
|
||||
</CommonModule>
|
||||
</MetaDataObject>
|
||||
+254
@@ -0,0 +1,254 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||
<Configuration uuid="UUID-001">
|
||||
<InternalInfo>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-002</xr:ClassId>
|
||||
<xr:ObjectId>UUID-003</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-004</xr:ClassId>
|
||||
<xr:ObjectId>UUID-005</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-006</xr:ClassId>
|
||||
<xr:ObjectId>UUID-007</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-008</xr:ClassId>
|
||||
<xr:ObjectId>UUID-009</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-010</xr:ClassId>
|
||||
<xr:ObjectId>UUID-011</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-012</xr:ClassId>
|
||||
<xr:ObjectId>UUID-013</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
<xr:ContainedObject>
|
||||
<xr:ClassId>UUID-014</xr:ClassId>
|
||||
<xr:ObjectId>UUID-015</xr:ObjectId>
|
||||
</xr:ContainedObject>
|
||||
</InternalInfo>
|
||||
<Properties>
|
||||
<Name>TestConfig</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>TestConfig</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<NamePrefix/>
|
||||
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
||||
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
||||
<UsePurposes>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||
</UsePurposes>
|
||||
<ScriptVariant>Russian</ScriptVariant>
|
||||
<DefaultRoles/>
|
||||
<Vendor/>
|
||||
<Version/>
|
||||
<UpdateCatalogAddress/>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
|
||||
<AdditionalFullTextSearchDictionaries/>
|
||||
<CommonSettingsStorage/>
|
||||
<ReportsUserSettingsStorage/>
|
||||
<ReportsVariantsStorage/>
|
||||
<FormDataSettingsStorage/>
|
||||
<DynamicListsUserSettingsStorage/>
|
||||
<URLExternalDataStorage/>
|
||||
<Content/>
|
||||
<DefaultReportForm/>
|
||||
<DefaultReportVariantForm/>
|
||||
<DefaultReportSettingsForm/>
|
||||
<DefaultReportAppearanceTemplate/>
|
||||
<DefaultDynamicListSettingsForm/>
|
||||
<DefaultSearchForm/>
|
||||
<DefaultDataHistoryChangeHistoryForm/>
|
||||
<DefaultDataHistoryVersionDataForm/>
|
||||
<DefaultDataHistoryVersionDifferencesForm/>
|
||||
<DefaultCollaborationSystemUsersChoiceForm/>
|
||||
<RequiredMobileApplicationPermissions/>
|
||||
<UsedMobileApplicationFunctionalities>
|
||||
<app:functionality>
|
||||
<app:functionality>Biometrics</app:functionality>
|
||||
<app:use>true</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Location</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>BackgroundLocation</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>BluetoothPrinters</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>WiFiPrinters</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Contacts</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Calendars</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>PushNotifications</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>LocalNotifications</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>InAppPurchases</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>PersonalComputerFileExchange</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Ads</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>NumberDialing</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>CallProcessing</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>CallLog</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>AutoSendSMS</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>ReceiveSMS</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>SMSLog</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Camera</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Microphone</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>MusicLibrary</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>PictureAndVideoLibraries</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>AudioPlaybackAndVibration</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>BackgroundAudioPlaybackAndVibration</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>InstallPackages</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>OSBackup</app:functionality>
|
||||
<app:use>true</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>ApplicationUsageStatistics</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>BarcodeScanning</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>BackgroundAudioRecording</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>AllFilesAccess</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Videoconferences</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>NFC</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>DocumentScanning</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>SpeechToText</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>Geofences</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>IncomingShareRequests</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
<app:functionality>
|
||||
<app:functionality>AllIncomingShareRequestsTypesProcessing</app:functionality>
|
||||
<app:use>false</app:use>
|
||||
</app:functionality>
|
||||
</UsedMobileApplicationFunctionalities>
|
||||
<StandaloneConfigurationRestrictionRoles/>
|
||||
<MobileApplicationURLs/>
|
||||
<AllowedIncomingShareRequestTypes/>
|
||||
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
|
||||
<DefaultInterface/>
|
||||
<DefaultStyle/>
|
||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||
<BriefInformation/>
|
||||
<DetailedInformation/>
|
||||
<Copyright/>
|
||||
<VendorInformationAddress/>
|
||||
<ConfigurationInformationAddress/>
|
||||
<DataLockControlMode>Managed</DataLockControlMode>
|
||||
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
|
||||
<ModalityUseMode>DontUse</ModalityUseMode>
|
||||
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
|
||||
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
||||
<DatabaseTablespacesUseMode>DontUse</DatabaseTablespacesUseMode>
|
||||
<CompatibilityMode>Version8_3_24</CompatibilityMode>
|
||||
<DefaultConstantsForm/>
|
||||
</Properties>
|
||||
<ChildObjects>
|
||||
<Language>Русский</Language>
|
||||
<CommonModule>Обработчики</CommonModule>
|
||||
<EventSubscription>Менеджеры</EventSubscription>
|
||||
<Document>Заказ</Document>
|
||||
</ChildObjects>
|
||||
</Configuration>
|
||||
</MetaDataObject>
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||
<Document uuid="UUID-001">
|
||||
<InternalInfo>
|
||||
<xr:GeneratedType name="DocumentObject.Заказ" category="Object">
|
||||
<xr:TypeId>UUID-002</xr:TypeId>
|
||||
<xr:ValueId>UUID-003</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentRef.Заказ" category="Ref">
|
||||
<xr:TypeId>UUID-004</xr:TypeId>
|
||||
<xr:ValueId>UUID-005</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentSelection.Заказ" category="Selection">
|
||||
<xr:TypeId>UUID-006</xr:TypeId>
|
||||
<xr:ValueId>UUID-007</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentList.Заказ" category="List">
|
||||
<xr:TypeId>UUID-008</xr:TypeId>
|
||||
<xr:ValueId>UUID-009</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="DocumentManager.Заказ" category="Manager">
|
||||
<xr:TypeId>UUID-010</xr:TypeId>
|
||||
<xr:ValueId>UUID-011</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
</InternalInfo>
|
||||
<Properties>
|
||||
<Name>Заказ</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Заказ</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<UseStandardCommands>true</UseStandardCommands>
|
||||
<Numerator/>
|
||||
<NumberType>String</NumberType>
|
||||
<NumberLength>11</NumberLength>
|
||||
<NumberAllowedLength>Variable</NumberAllowedLength>
|
||||
<NumberPeriodicity>Year</NumberPeriodicity>
|
||||
<CheckUnique>true</CheckUnique>
|
||||
<Autonumbering>true</Autonumbering>
|
||||
<Characteristics/>
|
||||
<BasedOn/>
|
||||
<InputByString>
|
||||
<xr:Field>Document.Заказ.StandardAttribute.Number</xr:Field>
|
||||
</InputByString>
|
||||
<CreateOnInput>Use</CreateOnInput>
|
||||
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
|
||||
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||
<DefaultObjectForm/>
|
||||
<DefaultListForm/>
|
||||
<DefaultChoiceForm/>
|
||||
<AuxiliaryObjectForm/>
|
||||
<AuxiliaryListForm/>
|
||||
<AuxiliaryChoiceForm/>
|
||||
<Posting>Allow</Posting>
|
||||
<RealTimePosting>Deny</RealTimePosting>
|
||||
<RegisterRecordsDeletion>AutoDelete</RegisterRecordsDeletion>
|
||||
<RegisterRecordsWritingOnPost>WriteSelected</RegisterRecordsWritingOnPost>
|
||||
<SequenceFilling>AutoFill</SequenceFilling>
|
||||
<RegisterRecords/>
|
||||
<PostInPrivilegedMode>true</PostInPrivilegedMode>
|
||||
<UnpostInPrivilegedMode>true</UnpostInPrivilegedMode>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<DataLockFields/>
|
||||
<DataLockControlMode>Managed</DataLockControlMode>
|
||||
<FullTextSearch>Use</FullTextSearch>
|
||||
<ObjectPresentation/>
|
||||
<ExtendedObjectPresentation/>
|
||||
<ListPresentation/>
|
||||
<ExtendedListPresentation/>
|
||||
<Explanation/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
<DataHistory>DontUse</DataHistory>
|
||||
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
|
||||
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
|
||||
</Properties>
|
||||
<ChildObjects/>
|
||||
</Document>
|
||||
</MetaDataObject>
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||
<EventSubscription uuid="UUID-001">
|
||||
<Properties>
|
||||
<Name>Менеджеры</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Менеджеры</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Source>
|
||||
<v8:Type>cfg:DocumentManager</v8:Type>
|
||||
<v8:Type>cfg:DocumentManager.Заказ</v8:Type>
|
||||
<v8:TypeSet>cfg:DocumentObject</v8:TypeSet>
|
||||
</Source>
|
||||
<Event>BeforeWrite</Event>
|
||||
<Handler>CommonModule.Обработчики.ПередЗаписью</Handler>
|
||||
</Properties>
|
||||
</EventSubscription>
|
||||
</MetaDataObject>
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ClientApplicationInterface xmlns="http://v8.1c.ru/8.2/managed-application/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InterfaceLayouter">
|
||||
<top>
|
||||
<panel id="UUID-001">
|
||||
<uuid>UUID-002</uuid>
|
||||
</panel>
|
||||
</top>
|
||||
<left>
|
||||
<panel id="UUID-003">
|
||||
<uuid>UUID-004</uuid>
|
||||
</panel>
|
||||
</left>
|
||||
<panelDef id="UUID-004"/>
|
||||
<panelDef id="UUID-005"/>
|
||||
<panelDef id="UUID-006"/>
|
||||
<panelDef id="UUID-002"/>
|
||||
<panelDef id="UUID-007"/>
|
||||
</ClientApplicationInterface>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||
<Language uuid="UUID-001">
|
||||
<Properties>
|
||||
<Name>Русский</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Русский</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<LanguageCode>ru</LanguageCode>
|
||||
</Properties>
|
||||
</Language>
|
||||
</MetaDataObject>
|
||||
Reference in New Issue
Block a user