# epf-add-form v1.0 — Add managed form to 1C processor # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] [string]$ProcessorName, [Parameter(Mandatory)] [string]$FormName, [string]$Synonym = $FormName, [switch]$Main, [string]$SrcDir = "src" ) $ErrorActionPreference = "Stop" # --- Проверки --- $rootXmlPath = Join-Path $SrcDir "$ProcessorName.xml" if (-not (Test-Path $rootXmlPath)) { Write-Error "Корневой файл обработки не найден: $rootXmlPath. Сначала выполните epf-init." exit 1 } $processorDir = Join-Path $SrcDir $ProcessorName $formsDir = Join-Path $processorDir "Forms" $formMetaPath = Join-Path $formsDir "$FormName.xml" if (Test-Path $formMetaPath) { Write-Error "Форма уже существует: $formMetaPath" exit 1 } # --- Создание каталогов --- $formDir = Join-Path $formsDir $FormName $formExtDir = Join-Path $formDir "Ext" $formModuleDir = Join-Path $formExtDir "Form" New-Item -ItemType Directory -Path $formModuleDir -Force | Out-Null # --- Кодировка --- $encBom = New-Object System.Text.UTF8Encoding($true) $encNoBom = New-Object System.Text.UTF8Encoding($false) # --- 1. Метаданные формы (Forms/.xml) --- $formUuid = [guid]::NewGuid().ToString() $formMetaXml = @"
$FormName ru $Synonym Managed false PlatformApplication MobilePlatformApplication
"@ [System.IO.File]::WriteAllText($formMetaPath, $formMetaXml, $encBom) # --- 2. Описание формы (Forms//Ext/Form.xml) --- $formXmlPath = Join-Path $formExtDir "Form.xml" $formXml = @"
true cfg:ExternalDataProcessorObject.$ProcessorName true "@ [System.IO.File]::WriteAllText($formXmlPath, $formXml, $encBom) # --- 3. BSL-модуль (Forms//Ext/Form/Module.bsl) --- $modulePath = Join-Path $formModuleDir "Module.bsl" $moduleBsl = @" #Область ОбработчикиСобытийФормы #КонецОбласти #Область ОбработчикиСобытийЭлементовФормы #КонецОбласти #Область ОбработчикиКомандФормы #КонецОбласти #Область ОбработчикиОповещений #КонецОбласти #Область СлужебныеПроцедурыИФункции #КонецОбласти "@ [System.IO.File]::WriteAllText($modulePath, $moduleBsl, $encBom) # --- 4. Модификация корневого XML --- $rootXmlFull = Resolve-Path $rootXmlPath $xmlDoc = New-Object System.Xml.XmlDocument $xmlDoc.PreserveWhitespace = $true $xmlDoc.Load($rootXmlFull.Path) $nsMgr = New-Object System.Xml.XmlNamespaceManager($xmlDoc.NameTable) $nsMgr.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses") $childObjects = $xmlDoc.SelectSingleNode("//md:ChildObjects", $nsMgr) if (-not $childObjects) { Write-Error "Не найден элемент ChildObjects в $rootXmlPath" exit 1 } # Добавить
перед первым