mirror of
https://github.com/bia-technologies/bsl-parser.git
synced 2024-11-27 08:20:55 +02:00
Переработано чтение описаний конфигурации
* Поддержка чтения формата EDT * Изменен доступ к API - использование фабрики для создания парсера, парсер - объект * Переименованы, некоторые модули * Дробление монолитных модулей
This commit is contained in:
parent
a1e78c27ac
commit
855c0fe827
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
bdd-log.xml
|
||||||
|
*.ospx
|
||||||
|
*.orig
|
||||||
|
exec.log
|
||||||
|
ignore/**
|
||||||
|
tests.xml
|
19
.vscode/launch.json
vendored
Normal file
19
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
|
||||||
|
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
|
||||||
|
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Отладка 1Script",
|
||||||
|
"type": "oscript",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceRoot}/tests/РазборконфигурацииEDT.os",
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"runtimeExecutable": null,
|
||||||
|
"debugPort": 2801,
|
||||||
|
"protocol": "internal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2019 BIA Technologies, LLC
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
12
installlocalhost.bat
Normal file
12
installlocalhost.bat
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
@echo off
|
||||||
|
call del "*.ospx"
|
||||||
|
|
||||||
|
for /f %%i in ('"oscript -version"') do set result=%%i
|
||||||
|
|
||||||
|
if %result%==1.0.19.105 (
|
||||||
|
call opm build . -mf ./packagedef -out .
|
||||||
|
) else (
|
||||||
|
call opm build -m ./packagedef -o .
|
||||||
|
)
|
||||||
|
|
||||||
|
call opm install -f *.ospx
|
@ -1,6 +0,0 @@
|
|||||||
<package-def>
|
|
||||||
<class name="РазборСтруктурыКонфигурации" file="src/РазборСтруктурыКонфигурации.os"/>
|
|
||||||
<module name="ТипБлоковМодуля" file="src/Core/Модули/ТипБлоковМодуля.os"/>
|
|
||||||
<module name="ТипМодуля" file="src/Core/Модули/ТипМодуля.os"/>
|
|
||||||
<module name="ТипОбласти" file="src/Core/Модули/ТипОбласти.os"/>
|
|
||||||
</package-def>
|
|
17
packagedef
17
packagedef
@ -1,5 +1,14 @@
|
|||||||
|
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПродукта.os");
|
||||||
Описание.Имя("parserbia")
|
ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
|
||||||
.Версия("1.0.2")
|
|
||||||
|
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
|
||||||
|
|
||||||
|
Описание.Имя(ИмяПродукта)
|
||||||
|
.ВерсияСреды("1.0.21")
|
||||||
|
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
|
||||||
|
.ЗависитОт("logos", "1.2.1")
|
||||||
|
.ЗависитОт("fs", "1.0.0")
|
||||||
.ВключитьФайл("src")
|
.ВключитьФайл("src")
|
||||||
.ВключитьФайл("lib.config");
|
.ВключитьФайл("lib.config");
|
||||||
|
.ВключитьФайл("readme.md");
|
||||||
|
.ВключитьФайл("LICENSE");
|
@ -8,3 +8,11 @@
|
|||||||
|
|
||||||
`#Использовать "parser-bia"`
|
`#Использовать "parser-bia"`
|
||||||
`Парсер = Новый РазборСтруктурыКонфигурации();`
|
`Парсер = Новый РазборСтруктурыКонфигурации();`
|
||||||
|
|
||||||
|
## Описание API
|
||||||
|
|
||||||
|
ПолучитьОписаниеМодуляПоИмениФайла
|
||||||
|
ПрочитатьСодержимоеМодуля
|
||||||
|
ПрочитатьДеревоКонфигурации
|
||||||
|
НайтиМодулиКонфигурации
|
||||||
|
ПолноеИмяОбъекта
|
@ -1,125 +0,0 @@
|
|||||||
Перем ОбщийМодуль Экспорт;
|
|
||||||
|
|
||||||
Перем МодульОбъекта Экспорт;
|
|
||||||
Перем МодульМенеджера Экспорт;
|
|
||||||
|
|
||||||
Перем МодульОбычнойФормы Экспорт;
|
|
||||||
Перем МодульУправляемойФормы Экспорт;
|
|
||||||
|
|
||||||
Перем МодульКоманды Экспорт;
|
|
||||||
|
|
||||||
Перем МодульСеанса Экспорт;
|
|
||||||
Перем МодульОбычногоПриложения Экспорт;
|
|
||||||
Перем МодульУправляемогоПриложения Экспорт;
|
|
||||||
Перем МодульВнешнегоСоединения Экспорт;
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
Функция ТипМодуляПоИмениФайла(ПолноеИмяФайла)Экспорт
|
|
||||||
|
|
||||||
Файл = Новый Файл(ПолноеИмяФайла);
|
|
||||||
ИмяБезРасширения = Файл.ИмяБезРасширения;
|
|
||||||
Расширение = Файл.Расширение;
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = "";
|
|
||||||
|
|
||||||
Если ИмяБезРасширения = "CommandModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульКоманды;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "ManagedApplicationModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульУправляемогоПриложения;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "OrdinaryApplicationModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульОбычногоПриложения;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "SessionModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульСеанса;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "ExternalConnectionModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульВнешнегоСоединения;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "ManagerModule"
|
|
||||||
ИЛИ ИмяБезРасширения = "ValueManagerModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульМенеджера;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "ObjectModule"
|
|
||||||
ИЛИ ИмяБезРасширения = "RecordSetModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульОбъекта;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "module" И ПустаяСтрока(Расширение) Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульОбычнойФормы;
|
|
||||||
|
|
||||||
ИначеЕсли ИмяБезРасширения = "Module" Тогда
|
|
||||||
|
|
||||||
МассивЧастейИмени = СтрРазделить(ПолноеИмяФайла, "\");
|
|
||||||
Если МассивЧастейИмени.Количество() > 3 Тогда
|
|
||||||
|
|
||||||
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 2];
|
|
||||||
Если Родитель = "Ext" Тогда
|
|
||||||
|
|
||||||
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 4];
|
|
||||||
Если Родитель = "CommonModules" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = ОбщийМодуль;
|
|
||||||
|
|
||||||
ИначеЕсли Родитель = "WebServices" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульОбъекта;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
ИначеЕсли Родитель = "Form" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульУправляемойФормы;
|
|
||||||
|
|
||||||
Иначе
|
|
||||||
|
|
||||||
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 3];
|
|
||||||
Если Родитель = "CommonModule" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = ОбщийМодуль;
|
|
||||||
|
|
||||||
ИначеЕсли Родитель = "WebService" Тогда
|
|
||||||
|
|
||||||
ТипЭтогоМодуля = МодульОбъекта;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Иначе
|
|
||||||
|
|
||||||
ВызватьИсключение "Ошибочная структура имени файла: " + ПолноеИмяФайла;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Возврат ТипЭтогоМодуля;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ОбщийМодуль = "ОбщийМодуль";
|
|
||||||
|
|
||||||
МодульОбъекта = "МодульОбъекта";
|
|
||||||
МодульМенеджера = "МодульМенеджера";
|
|
||||||
|
|
||||||
МодульОбычнойФормы = "МодульОбычнойФормы";
|
|
||||||
МодульУправляемойФормы = "МодульУправляемойФормы";
|
|
||||||
|
|
||||||
МодульКоманды = "МодульКоманды";
|
|
||||||
|
|
||||||
МодульСеанса = "МодульСеанса";
|
|
||||||
МодульОбычногоПриложения = "МодульОбычногоПриложения";
|
|
||||||
МодульУправляемогоПриложения = "МодульУправляемогоПриложения";
|
|
||||||
МодульВнешнегоСоединения = "МодульВнешнегоСоединения";
|
|
624
src/Классы/РазборКонфигурации1С.os
Normal file
624
src/Классы/РазборКонфигурации1С.os
Normal file
@ -0,0 +1,624 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Модуль разбора файлов конфигурации
|
||||||
|
//
|
||||||
|
// (с) BIA Technologies, LLC
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Использовать fs
|
||||||
|
#Использовать "../ЧтениеМодулей"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Перем СтруктураКаталогов;
|
||||||
|
Перем ЧитательОписаний;
|
||||||
|
Перем ОписаниеКонфигурации;
|
||||||
|
Перем ДанныеКонфигурации;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Процедура ПрочитатьСтруктуруКонфигурации() Экспорт
|
||||||
|
|
||||||
|
ОписаниеКонфигурации = ПрочитатьОписаниеКонфигурации();
|
||||||
|
|
||||||
|
ЗаполнитьПодсистемыОбъектовКонфигурации();
|
||||||
|
|
||||||
|
ЗаполнитьИменаФайлов();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция НайтиМодулиКонфигурации()Экспорт
|
||||||
|
|
||||||
|
МодулиКонфигурации = СтруктурыОписаний.ТаблицаОписанияМодулей();
|
||||||
|
|
||||||
|
// todo сделать чтение форм
|
||||||
|
ФормыКонфигурации = Новый ТаблицаЗначений;
|
||||||
|
ФормыКонфигурации.Колонки.Добавить("Родитель");
|
||||||
|
ФормыКонфигурации.Колонки.Добавить("ЭтоУправляемаяФорма");
|
||||||
|
ФормыКонфигурации.Колонки.Добавить("Наименование");
|
||||||
|
|
||||||
|
// todo сделать чтение команд
|
||||||
|
КомандыКонфигурации = Новый ТаблицаЗначений;
|
||||||
|
КомандыКонфигурации.Колонки.Добавить("Родитель");
|
||||||
|
КомандыКонфигурации.Колонки.Добавить("Наименование");
|
||||||
|
|
||||||
|
ОписаниеКонфигурации.Вставить("ФормыКонфигурации", ФормыКонфигурации);
|
||||||
|
ОписаниеКонфигурации.Вставить("КомандыКонфигурации", КомандыКонфигурации);
|
||||||
|
ОписаниеКонфигурации.Вставить("МодулиКонфигурации", МодулиКонфигурации);
|
||||||
|
|
||||||
|
Для Каждого ОбъектКонфигурации Из ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
|
||||||
|
|
||||||
|
ФайлыМодулей = СтруктураКаталогов.НайтиМодулиОбъекта(ОбъектКонфигурации.Наименование, ОбъектКонфигурации.Тип, Истина);
|
||||||
|
|
||||||
|
Для Каждого ИмяФайлаМодуля Из ФайлыМодулей Цикл
|
||||||
|
|
||||||
|
ПолучитьОписаниеМодуляПоИмениФайла(ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
МодулиКонфигурации.Сортировать("ПутьКФайлу");
|
||||||
|
Возврат ОписаниеКонфигурации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОписаниеКонфигурации() Экспорт
|
||||||
|
|
||||||
|
Возврат ОписаниеКонфигурации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьОписаниеКонстант()Экспорт
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("Тип", "Constant");
|
||||||
|
|
||||||
|
СтрокиКонстант = ОписаниеКонфигурации.ОбъектыКонфигурации.НайтиСтроки(Фильтр);
|
||||||
|
|
||||||
|
МассивОписанийКонстант = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Объект Из СтрокиКонстант Цикл
|
||||||
|
|
||||||
|
ОписаниеИзXML = ПолучитьОписаниеКонстанты(Объект.ПутьКФайлуСОписанием);
|
||||||
|
|
||||||
|
ОписаниеКонстанты = Новый Структура("Имя, Тип, Описание, Подсистема, ПодсистемаПредставление");
|
||||||
|
|
||||||
|
ОписаниеКонстанты.Имя = Объект.Наименование;
|
||||||
|
ОписаниеКонстанты.Тип = ЧтениеОписанийБазовый.ПреобразоватьТип(ОписаниеИзXML.ТипКонстанты);
|
||||||
|
ОписаниеКонстанты.Описание = ОписаниеИзXML.ТекстОписания;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Объект.Подсистемы) Тогда
|
||||||
|
ОписаниеКонстанты.Подсистема = Объект.Подсистемы[0].Имя;
|
||||||
|
ОписаниеКонстанты.ПодсистемаПредставление = Объект.Подсистемы[0].ПредставлениеКратко;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МассивОписанийКонстант.Добавить(ОписаниеКонстанты);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат МассивОписанийКонстант;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ПрочитатьСодержимоеМодуля(СтрокаМодуль)Экспорт
|
||||||
|
|
||||||
|
Файл = Новый ТекстовыйДокумент;
|
||||||
|
Файл.Прочитать(СтрокаМодуль.ПутьКФайлу, КодировкаТекста.UTF8NoBOM);
|
||||||
|
|
||||||
|
СодержимоеМодуля = ЧтениеМодулей.ПрочитатьМодуль(Файл);
|
||||||
|
СтрокаМодуль.Содержимое = СодержимоеМодуля.Содержимое;
|
||||||
|
|
||||||
|
ЧтениеМодулей.ДополнитьБлокиМодуля(СодержимоеМодуля.БлокиМодуля, Файл, СтрокаМодуль);
|
||||||
|
СтрокаМодуль.НаборБлоков = СодержимоеМодуля.БлокиМодуля;
|
||||||
|
|
||||||
|
Если СтрокаМодуль.ТипМодуля = ТипМодуля.ОбщийМодуль Тогда
|
||||||
|
|
||||||
|
Текст = Новый ТекстовыйДокумент;
|
||||||
|
Текст.Прочитать(СтрокаМодуль.Родитель.ПутьКФайлуСОписанием);
|
||||||
|
Если СтрНайти(Текст.ПолучитьТекст(), "<Global>true</Global>") Тогда
|
||||||
|
|
||||||
|
СтрокаМодуль.ОписаниеМодуля.Вставить("Глобальный", Истина);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура УдалитьОбъектыВнеПодсистем() Экспорт
|
||||||
|
|
||||||
|
Количество = ОписаниеКонфигурации.ОбъектыКонфигурации.Количество();
|
||||||
|
|
||||||
|
Для Инд = 1 По Количество Цикл
|
||||||
|
|
||||||
|
Если ОписаниеКонфигурации.ОбъектыКонфигурации[Количество - Инд].Подсистемы.Количество() = 0 Тогда
|
||||||
|
|
||||||
|
ОписаниеКонфигурации.ОбъектыКонфигурации.Удалить(Количество - Инд);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ПолноеИмяМодуля(СтрокаМодуль) Экспорт
|
||||||
|
|
||||||
|
Возврат ЧтениеОписанийБазовый.ПолноеИмяМодуля(СтрокаМодуль);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолноеИмяОбъекта(СтрокаМодуль, ДобавлятьПрефиксДляОбщихМодулей = ИСТИНА) Экспорт
|
||||||
|
|
||||||
|
Возврат ЧтениеОписанийБазовый.ПолноеИмяОбъекта(СтрокаМодуль, ДобавлятьПрефиксДляОбщихМодулей);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// УСТАРЕВШИЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПрочитатьДеревоКонфигурации() Экспорт
|
||||||
|
|
||||||
|
ПрочитатьСтруктуруКонфигурации();
|
||||||
|
|
||||||
|
Возврат ОписаниеКонфигурации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьОписаниеОбъекта(КореньОписания)
|
||||||
|
|
||||||
|
ОписаниеОбъекта = Новый Структура;
|
||||||
|
ВеткаСвойства = КореньОписания.Найти("Properties", "Имя");
|
||||||
|
Если ВеткаСвойства <> Неопределено Тогда
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ВеткаПодчиненныеОбъекты = КореньОписания.Найти("ChildObjects", "Имя");
|
||||||
|
Если ВеткаПодчиненныеОбъекты <> Неопределено И ТипЗнч(ВеткаПодчиненныеОбъекты.Значение) = Тип("ТаблицаЗначений") Тогда
|
||||||
|
|
||||||
|
Формы = СформироватьОписаниеОбъектаФормы(ВеткаПодчиненныеОбъекты.Значение);
|
||||||
|
Если Формы <> Неопределено Тогда
|
||||||
|
|
||||||
|
ОписаниеОбъекта.Вставить("Формы", Формы);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Реквизиты = СформироватьОписаниеОбъектаРеквизиты(ВеткаПодчиненныеОбъекты.Значение);
|
||||||
|
Если Реквизиты <> Неопределено Тогда
|
||||||
|
|
||||||
|
ОписаниеОбъекта.Вставить("Реквизиты", Реквизиты);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТЧ = СформироватьОписаниеОбъектаТабличныеЧасти(ВеткаПодчиненныеОбъекты.Значение);
|
||||||
|
Если ТЧ <> Неопределено Тогда
|
||||||
|
|
||||||
|
ОписаниеОбъекта.Вставить("ТабличныеЧасти", ТЧ);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ОписаниеОбъекта;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьОписаниеОбъектаФормы(ПодчиненныеОбъекты)
|
||||||
|
|
||||||
|
СтрФормы = ПодчиненныеОбъекты.НайтиСтроки(Новый Структура("Имя", "Form"));
|
||||||
|
Если СтрФормы.Количество() Тогда
|
||||||
|
|
||||||
|
Формы = Новый Массив;
|
||||||
|
Для Каждого СтрФорма Из СтрФормы Цикл
|
||||||
|
|
||||||
|
Формы.ДобавитЬ(СтрФорма.Значение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Формы;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Неопределено;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьОписаниеОбъектаРеквизиты(ПодчиненныеОбъекты)
|
||||||
|
|
||||||
|
СтрАтрибуты = ПодчиненныеОбъекты.НайтиСтроки(Новый Структура("Имя", "Attribute"));
|
||||||
|
Если СтрАтрибуты.Количество() Тогда
|
||||||
|
|
||||||
|
Реквизиты = Новый ТаблицаЗначений;
|
||||||
|
Реквизиты.Колонки.Добавить("Имя");
|
||||||
|
Для Каждого СтрАтрибут Из СтрАтрибуты Цикл
|
||||||
|
|
||||||
|
ОписаниеАтрибута = СтрАтрибут.Значение.Найти("Properties", "Имя");
|
||||||
|
Если ОписаниеАтрибута = Неопределено Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтрНаименования = ОписаниеАтрибута.Значение.Найти("Name", "Имя");
|
||||||
|
Если СтрНаименования = Неопределено Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НовыйРеквизит = Реквизиты.Добавить();
|
||||||
|
НовыйРеквизит.Имя = СтрНаименования.Значение;
|
||||||
|
Для Каждого ЭлОписания Из ОписаниеАтрибута.Значение Цикл
|
||||||
|
|
||||||
|
Если ЭлОписания.Имя = "Name" Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Реквизиты.Колонки.Найти(ЭлОписания.Имя) = Неопределено Тогда
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
|
||||||
|
Реквизиты.Колонки.Добавить(ЭлОписания.Имя);
|
||||||
|
|
||||||
|
Исключение
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НовыйРеквизит[ЭлОписания.Имя] = ЭлОписания.Значение;
|
||||||
|
|
||||||
|
КонецЦикла
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Реквизиты;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Неопределено;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СформироватьОписаниеОбъектаТабличныеЧасти(ПодчиненныеОбъекты)
|
||||||
|
|
||||||
|
СтрТЧ = ПодчиненныеОбъекты.НайтиСтроки(Новый Структура("Имя", "TabularSection"));
|
||||||
|
Если СтрТЧ.Количество() Тогда
|
||||||
|
|
||||||
|
ТЧ = Новый ТаблицаЗначений;
|
||||||
|
ТЧ.Колонки.Добавить("Имя");
|
||||||
|
ТЧ.Колонки.Добавить("Описание");
|
||||||
|
ТЧ.Колонки.Добавить("Реквизиты");
|
||||||
|
Для Каждого Стр Из СтрТЧ Цикл
|
||||||
|
|
||||||
|
СтрОписание = СформироватьОписаниеОбъекта(Стр.Значение);
|
||||||
|
Если СтрОписание.Свойство("Описание") Тогда
|
||||||
|
|
||||||
|
СтрНаименования = СтрОписание.Описание.Найти("Name", "Имя");
|
||||||
|
Если СтрНаименования <> Неопределено Тогда
|
||||||
|
|
||||||
|
НоваяТЧ = ТЧ.Добавить();
|
||||||
|
НоваяТЧ.Имя = СтрНаименования.Значение;
|
||||||
|
НоваяТЧ.Описание = СтрОписание.Описание;
|
||||||
|
|
||||||
|
Если СтрОписание.Свойство("Реквизиты") Тогда
|
||||||
|
|
||||||
|
НоваяТЧ.Реквизиты = СтрОписание.Реквизиты;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат ТЧ;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Неопределено;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПрочитатьОписаниеКонфигурации()
|
||||||
|
|
||||||
|
ФайлКонфигурации = СтруктураКаталогов.ИмяФайлаОписанияКонфигурации();
|
||||||
|
|
||||||
|
Если Не ФС.ФайлСуществует(ФайлКонфигурации) Тогда
|
||||||
|
|
||||||
|
ВызватьИсключение СтрШаблон("Файл описания конфигурации ""%1"" не обнаружен", ФайлКонфигурации);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ОписаниеКонфигурации = ЧитательОписаний.ПрочитатьОписаниеКонфигурации(ФайлКонфигурации);
|
||||||
|
|
||||||
|
СвойстваКонфигурации = ОписаниеКонфигурации.СвойстваКонфигурации;
|
||||||
|
ОбъектыКонфигурации = ОписаниеКонфигурации.ОбъектыКонфигурации;
|
||||||
|
|
||||||
|
// добавим руками объект "Configuration" для модулей приложения
|
||||||
|
ПустаяСтрокаОбъектКонфигурации = СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию();
|
||||||
|
НовСтрока = ОбъектыКонфигурации.Добавить();
|
||||||
|
ЗаполнитьЗначенияСвойств(НовСтрока, ПустаяСтрокаОбъектКонфигурации);
|
||||||
|
НовСтрока.Тип = "Configuration";
|
||||||
|
НовСтрока.Наименование = "Configuration";
|
||||||
|
НовСтрока.ПутьКФайлуСОписанием = ФайлКонфигурации;
|
||||||
|
|
||||||
|
Возврат Новый Структура("СвойстваКонфигурации, ОбъектыКонфигурации", СвойстваКонфигурации, ОбъектыКонфигурации);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ЗаполнитьПодсистемыОбъектовКонфигурации()
|
||||||
|
|
||||||
|
// дополним объекты информацией о подсистемах
|
||||||
|
ПодсистемыКонфигурации = ПрочитатьПодсистемыКонфигурации();
|
||||||
|
|
||||||
|
ОписаниеКонфигурации.Вставить("ПодсистемыКонфигурации", ПодсистемыКонфигурации);
|
||||||
|
|
||||||
|
Для Каждого ОбъектКонфигурации Из ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
|
||||||
|
|
||||||
|
Подсистемы = ПодсистемыКонфигурации.НайтиСтроки(Новый Структура("ОбъектМетаданных", ОбъектКонфигурации.Тип + "." + ОбъектКонфигурации.Наименование));
|
||||||
|
|
||||||
|
Если Подсистемы.Количество() Тогда
|
||||||
|
|
||||||
|
// ставим первую
|
||||||
|
ОбъектКонфигурации.Подсистемы = Подсистемы;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ПолучитьОписаниеМодуляПоИмениФайла(Знач ИмяФайлаМодуля, ОбъектКонфигурации, ОписаниеКонфигурации)Экспорт
|
||||||
|
|
||||||
|
НовыйМодульКонфигурации = Неопределено;
|
||||||
|
|
||||||
|
ПустаяСтрокаМодульКонфигурации = Новый Структура(
|
||||||
|
"ПутьКФайлу, ТипМодуля, ОписаниеМодуля, Родитель, РодительФорма, РодительКоманда, НаборБлоков, Содержимое",
|
||||||
|
"", "", Новый Структура, Неопределено, Неопределено, Неопределено, Неопределено, Неопределено);
|
||||||
|
|
||||||
|
ТипЭтогоМодуля = ТипМодуля.ТипМодуляПоИмениФайла(ИмяФайлаМодуля);
|
||||||
|
|
||||||
|
Если Не ПустаяСтрока(ТипЭтогоМодуля) Тогда
|
||||||
|
|
||||||
|
ФормаОбъекта = Неопределено;
|
||||||
|
КомандаОбъекта = Неопределено;
|
||||||
|
|
||||||
|
Если ТипЭтогоМодуля = ТипМодуля.МодульОбъекта
|
||||||
|
ИЛИ ТипЭтогоМодуля = ТипМодуля.МодульМенеджера
|
||||||
|
ИЛИ ТипЭтогоМодуля = ТипМодуля.ОбщийМодуль
|
||||||
|
ИЛИ ТипЭтогоМодуля = ТипМодуля.МодульУправляемогоПриложения
|
||||||
|
ИЛИ ТипЭтогоМодуля = ТипМодуля.МодульСеанса
|
||||||
|
ИЛИ ТипЭтогоМодуля = ТипМодуля.МодульВнешнегоСоединения
|
||||||
|
ИЛИ ТипЭтогоМодуля = ТипМодуля.МодульОбычногоПриложения Тогда
|
||||||
|
|
||||||
|
ИначеЕсли ТипМодуля.ЭтоМодульФормы(ТипЭтогоМодуля) Тогда
|
||||||
|
|
||||||
|
ФормаОбъекта = ОписаниеКонфигурации.ФормыКонфигурации.Добавить();
|
||||||
|
ФормаОбъекта.Родитель = ОбъектКонфигурации;
|
||||||
|
ФормаОбъекта.ЭтоУправляемаяФорма = ТипЭтогоМодуля = ТипМодуля.МодульУправляемойФормы;
|
||||||
|
ФормаОбъекта.Наименование = ПолучитьИмяФормыИзИмениФайлаМодуля(ИмяФайлаМодуля);
|
||||||
|
|
||||||
|
ИначеЕсли ТипЭтогоМодуля = ТипМодуля.МодульКоманды Тогда
|
||||||
|
|
||||||
|
КомандаОбъекта = ОписаниеКонфигурации.КомандыКонфигурации.Добавить();
|
||||||
|
КомандаОбъекта.Родитель = ОбъектКонфигурации;
|
||||||
|
КомандаОбъекта.Наименование = ПолучитьИмяКомандыИзИмениФайлаМодуля(ИмяФайлаМодуля);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ВызватьИсключение "Тип модуля: " + ТипЭтогоМодуля + " не имеет алгоритма разбора";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НовыйМодульКонфигурации = ОписаниеКонфигурации.МодулиКонфигурации.Добавить();
|
||||||
|
ЗаполнитьЗначенияСвойств(НовыйМодульКонфигурации, ПустаяСтрокаМодульКонфигурации);
|
||||||
|
НовыйМодульКонфигурации.ТипМодуля = ТипЭтогоМодуля;
|
||||||
|
НовыйМодульКонфигурации.ПутьКФайлу = ИмяФайлаМодуля;
|
||||||
|
НовыйМодульКонфигурации.Родитель = ОбъектКонфигурации;
|
||||||
|
НовыйМодульКонфигурации.РодительФорма = ФормаОбъекта;
|
||||||
|
НовыйМодульКонфигурации.РодительКоманда = КомандаОбъекта;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НовыйМодульКонфигурации <> Неопределено Тогда
|
||||||
|
|
||||||
|
ЗаполнитьЗначенияСвойств(ПустаяСтрокаМодульКонфигурации, НовыйМодульКонфигурации);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ПустаяСтрокаМодульКонфигурации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПолучитьОписаниеКонстанты(ПутьКФайлу)
|
||||||
|
|
||||||
|
ПараметрыОписанияКонстанты = СтруктурыОписаний.ОписаниеКонстанты();
|
||||||
|
|
||||||
|
Описание = ЧитательОписаний.ПрочитатьСвойстваИзФайла(ПутьКФайлу, ПараметрыОписанияКонстанты);
|
||||||
|
|
||||||
|
РезультатПоиска = Новый Структура("ТипКонстанты, ТекстОписания", Описание.Тип , Описание.Пояснение);
|
||||||
|
|
||||||
|
Возврат РезультатПоиска;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Процедура ЗаполнитьИменаФайлов()
|
||||||
|
|
||||||
|
Для Каждого СтрокаОбъектКонфигурации Из ОписаниеКонфигурации.ОбъектыКонфигурации Цикл
|
||||||
|
|
||||||
|
СтрокаОбъектКонфигурации.ПутьКФайлуСОписанием = СтруктураКаталогов.ИмяФайлаОписанияОбъекта(СтрокаОбъектКонфигурации.Наименование, СтрокаОбъектКонфигурации.Тип);
|
||||||
|
|
||||||
|
КонецЦикла
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПолучитьИмяФормыИзИмениФайлаМодуля(ПолноеИмяФайла)
|
||||||
|
|
||||||
|
МассивЧастейИмени = СтрРазделить(ПолноеИмяФайла, "\");
|
||||||
|
Если МассивЧастейИмени.Количество() > 3 Тогда
|
||||||
|
|
||||||
|
Номер = 2;
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - Номер];
|
||||||
|
Если Родитель = "Form" Тогда
|
||||||
|
|
||||||
|
Номер = Номер + 1;
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - Номер];
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Родитель = "Ext" Тогда
|
||||||
|
|
||||||
|
Номер = Номер + 1;
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - Номер];
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Родитель;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ВызватьИсключение "Ошибочная структура имени файла: " + ПолноеИмяФайла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат "";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьИмяКомандыИзИмениФайлаМодуля(ПолноеИмяФайла)
|
||||||
|
|
||||||
|
МассивЧастейИмени = СтрРазделить(ПолноеИмяФайла, "\");
|
||||||
|
Если МассивЧастейИмени.Количество() > 3 Тогда
|
||||||
|
|
||||||
|
Номер = 2;
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - Номер];
|
||||||
|
|
||||||
|
Если Родитель = "Ext" Тогда
|
||||||
|
|
||||||
|
Номер = Номер + 1;
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - Номер];
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Родитель;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ВызватьИсключение "Ошибочная структура имени файла: " + ПолноеИмяФайла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат "";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПрочитатьПодсистемыКонфигурации()
|
||||||
|
|
||||||
|
ОписаниеПодсистем = СтруктурыОписаний.ТаблицаОписанияПодсистем();
|
||||||
|
|
||||||
|
Для Каждого ФайлыПодсистемы Из СтруктураКаталогов.НайтиФайлыПодсистем() Цикл
|
||||||
|
|
||||||
|
ПрочитатьПодсистему(ФайлыПодсистемы, ОписаниеПодсистем, "", "", Неопределено, Неопределено);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат ОписаниеПодсистем;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ПрочитатьПодсистему(ФайлыПодсистемы, ОписаниеПодсистем, Знач ПодсистемаИмя, Знач ПодсистемаПредставление, Знач Визуальная, Знач Родитель)
|
||||||
|
|
||||||
|
СвойстваОписания = ЧитательОписаний.ПрочитатьСвойстваИзФайла(ФайлыПодсистемы.ФайлОписания, СтруктурыОписаний.ОписаниеПодсистемы());
|
||||||
|
|
||||||
|
ВКомандномИнтерфейсе = СвойстваОписания.ВключатьВКомандныйИнтерфейс = "true";
|
||||||
|
|
||||||
|
Визуальная = ?(Визуальная = Неопределено, ВКомандномИнтерфейсе, Мин(Визуальная, ВКомандномИнтерфейсе));
|
||||||
|
ПодсистемаИмя = ПодсистемаИмя + ?(ПустаяСтрока(ПодсистемаИмя), "", ".") + СвойстваОписания.Наименование;
|
||||||
|
ПодсистемаПредставление = ПодсистемаПредставление + ?(ПустаяСтрока(ПодсистемаПредставление), "", "/") + СвойстваОписания.Синоним;
|
||||||
|
|
||||||
|
Если Родитель <> Неопределено Тогда // В списке объектов конфигурации подсистемы только первого уровня
|
||||||
|
|
||||||
|
СтрОбъект = ОписаниеКонфигурации.ОбъектыКонфигурации.Добавить();
|
||||||
|
ЗаполнитьЗначенияСвойств(СтрОбъект, СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию());
|
||||||
|
СтрОбъект.Тип = "Subsystem";
|
||||||
|
СтрОбъект.Наименование = ПодсистемаИмя;
|
||||||
|
СтрОбъект.ПутьКФайлуСОписанием = ФайлыПодсистемы.ФайлОписания;
|
||||||
|
СтрОбъект.ПутьККаталогу = ФайлыПодсистемы.КаталогОписания;
|
||||||
|
СтрОбъект.Описание = СвойстваОписания;
|
||||||
|
СтрОбъект.Родитель = ОписаниеКонфигурации.ОбъектыКонфигурации.Найти(Родитель.Имя, "Наименование");
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СвойстваОписания.Состав.Количество() Тогда
|
||||||
|
|
||||||
|
Для Каждого ОбъектМетаданных Из СвойстваОписания.Состав Цикл
|
||||||
|
|
||||||
|
ЭтаПодсистема = ОписаниеПодсистем.Добавить();
|
||||||
|
ЭтаПодсистема.Имя = ПодсистемаИмя;
|
||||||
|
ЭтаПодсистема.ИмяКратко = СвойстваОписания.Наименование;
|
||||||
|
ЭтаПодсистема.Представление = ПодсистемаПредставление;
|
||||||
|
ЭтаПодсистема.ПредставлениеКратко = СвойстваОписания.Синоним;
|
||||||
|
ЭтаПодсистема.ПодсистемаОписание = СвойстваОписания.Комментарий;
|
||||||
|
ЭтаПодсистема.ОбъектМетаданных = ОбъектМетаданных;
|
||||||
|
ЭтаПодсистема.Визуальная = Визуальная;
|
||||||
|
ЭтаПодсистема.Родитель = Родитель;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЭтаПодсистема = ОписаниеПодсистем.Добавить();
|
||||||
|
ЭтаПодсистема.Имя = ПодсистемаИмя;
|
||||||
|
ЭтаПодсистема.ИмяКратко = СвойстваОписания.Наименование;
|
||||||
|
ЭтаПодсистема.Представление = ПодсистемаПредставление;
|
||||||
|
ЭтаПодсистема.ПредставлениеКратко = СвойстваОписания.Синоним;
|
||||||
|
ЭтаПодсистема.ПодсистемаОписание = СвойстваОписания.Комментарий;
|
||||||
|
ЭтаПодсистема.Визуальная = Визуальная;
|
||||||
|
ЭтаПодсистема.Родитель = Родитель;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Для Каждого ФайлыВложеннойПодсистемы Из ФайлыПодсистемы.Вложенные Цикл
|
||||||
|
|
||||||
|
ПрочитатьПодсистему(ФайлыВложеннойПодсистемы, ОписаниеПодсистем, ПодсистемаИмя, ПодсистемаПредставление, Визуальная, ЭтаПодсистема)
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПриСозданииОбъекта(КаталогИсходников)
|
||||||
|
|
||||||
|
СтруктураКаталогов = Новый СтруктураКаталоговКонфигурации(КаталогИсходников, "Авто");
|
||||||
|
|
||||||
|
Если СтруктураКаталогов.ФорматВыгрузки() = "EDT" Тогда
|
||||||
|
|
||||||
|
ЧитательОписаний = ЧтениеОписанийEDT;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЧитательОписаний = ЧтениеОписанийКонфигуратор;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
426
src/Классы/СтруктураКаталоговКонфигурации.os
Normal file
426
src/Классы/СтруктураКаталоговКонфигурации.os
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Класс-помощник, предоставляет информацию об иерархии каталогов
|
||||||
|
// выгрузки исходников 1с
|
||||||
|
//
|
||||||
|
// (с) BIA Technologies, LLC
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Использовать fs
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Перем КаталогИсходников;
|
||||||
|
Перем ФорматВыгрузки;
|
||||||
|
Перем СоздаватьКаталоги;
|
||||||
|
Перем РасширениеФайловОписания;
|
||||||
|
Перем РасширениеФайловМодулей;
|
||||||
|
Перем ЭтоФорматEDT;
|
||||||
|
Перем ИерархическийФормат;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
// Программный интерфейс
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Путь к корневому каталогу выгрузки
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к корневому каталогу выгрузки
|
||||||
|
//
|
||||||
|
Функция КорневойКаталог() Экспорт
|
||||||
|
|
||||||
|
Возврат КаталогИсходников;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает путь к каталогу файлов описания объекта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ИмяОбъекта - Строка - Имя объекта
|
||||||
|
// ВидОбъекта - Строка - Вид объекта метаданных, англ. в единственном числе
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к каталогу
|
||||||
|
//
|
||||||
|
Функция КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта) Экспорт
|
||||||
|
|
||||||
|
Если ИмяОбъекта = "Configuration" ИЛИ ВидОбъекта = "Configuration" Тогда
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
Каталог = ОбъединитьПути(КаталогИсходников, ВидОбъекта);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Каталог = КаталогИсходников;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли ВидОбъекта = ТипыОбъектовКонфигурации.ИмяТипаПодсистемы() И СтрНайти(ИмяОбъекта, ".") Тогда
|
||||||
|
|
||||||
|
Каталог = КаталогИсходников;
|
||||||
|
Для Каждого Часть Из СтрРазделить(ИмяОбъекта, ".") Цикл
|
||||||
|
|
||||||
|
Каталог = ОбъединитьПути(Каталог, ИмяКаталогВидаОбъекта(ВидОбъекта), Часть);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Каталог = ОбъединитьПути(КаталогИсходников, ИмяКаталогВидаОбъекта(ВидОбъекта), ИмяОбъекта);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СоздаватьКаталоги Тогда
|
||||||
|
|
||||||
|
СоздатьКаталог(Каталог);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Каталог;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает путь к каталогу дополнительных файлов объекта (модули, справка и т.д.)
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ИмяОбъекта - Строка - Имя объекта
|
||||||
|
// ВидОбъекта - Строка - Вид объекта метаданных, англ. в единственном числе
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к каталогу
|
||||||
|
//
|
||||||
|
Функция КаталогДополнительныхФайловОбъекта(ИмяОбъекта, ВидОбъекта) Экспорт
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
Каталог = КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Каталог = ОбъединитьПути(КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта), "Ext");
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СоздаватьКаталоги Тогда
|
||||||
|
|
||||||
|
СоздатьКаталог(Каталог);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Каталог;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает путь к каталогу модулей объекта, на всякий случай
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ИмяОбъекта - Строка - Имя объекта
|
||||||
|
// ВидОбъекта - Строка - Вид объекта метаданных, англ., в единственном числе
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к каталогу
|
||||||
|
//
|
||||||
|
Функция КаталогМодулиОбъекта(ИмяОбъекта, ВидОбъекта) Экспорт
|
||||||
|
|
||||||
|
Каталог = КаталогДополнительныхФайловОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
Если СоздаватьКаталоги Тогда
|
||||||
|
|
||||||
|
СоздатьКаталог(Каталог);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Каталог;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает путь к каталогу, в котором хранятся описания всех объектов одного вида
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ВидОбъекта - Строка - Вид объекта метаданных, англ., в единственном числе
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к каталогу
|
||||||
|
//
|
||||||
|
Функция КаталогВидаОбъекта(ВидОбъекта) Экспорт
|
||||||
|
|
||||||
|
Если СтрСравнить(ВидОбъекта, "Configuration") = 0 Тогда
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
Каталог = ОбъединитьПути(КаталогИсходников, ВидОбъекта);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Каталог = КаталогИсходников;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Каталог = ОбъединитьПути(КаталогИсходников, ИмяКаталогВидаОбъекта(ВидОбъекта));
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СоздаватьКаталоги Тогда
|
||||||
|
|
||||||
|
СоздатьКаталог(Каталог);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Каталог;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Путь к файлу описания конфигурации
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к файлу
|
||||||
|
//
|
||||||
|
Функция ИмяФайлаОписанияКонфигурации() Экспорт
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
Возврат ОбъединитьПути(КаталогИсходников, "Configuration", "Configuration." + РасширениеФайловОписания);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Возврат ОбъединитьПути(КаталогИсходников, "Configuration." + РасширениеФайловОписания);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Путь к файлу описания объекта
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ИмяОбъекта - Строка - Имя объекта
|
||||||
|
// ВидОбъекта - Строка - Вид объекта метаданных, англ., в единственном числе
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к файлу
|
||||||
|
//
|
||||||
|
Функция ИмяФайлаОписанияОбъекта(ИмяОбъекта, ВидОбъекта) Экспорт
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
КаталогОписаний = КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
ИначеЕсли ВидОбъекта = ТипыОбъектовКонфигурации.ИмяТипаПодсистемы() И СтрНайти(ИмяОбъекта, ".") Тогда
|
||||||
|
|
||||||
|
КаталогОписаний = КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
Возврат КаталогОписаний + "." + РасширениеФайловОписания;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КаталогОписаний = КаталогВидаОбъекта(ВидОбъекта);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ОбъединитьПути(КаталогОписаний, СтрШаблон("%1.%2", ИмяОбъекта, РасширениеФайловОписания));
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Путь к файлу модуля
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ИмяОбъекта - Строка - Имя объекта
|
||||||
|
// ВидОбъекта - Строка - Вид объекта метаданных, англ., в единственном числе
|
||||||
|
// ИмяМодуля - Строка - Имя модуля без расширения
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Путь к файлу
|
||||||
|
//
|
||||||
|
Функция ИмяФайлаМодуля(ИмяОбъекта, ВидОбъекта, ИмяМодуля = "Module") Экспорт
|
||||||
|
|
||||||
|
Каталог = КаталогМодулиОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
Возврат ОбъединитьПути(Каталог, ИмяМодуля + ".bsl");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ИмяВложенногоФайла(ИмяФайла) Экспорт
|
||||||
|
|
||||||
|
Возврат ОбъединитьПути(КорневойКаталог(), ИмяФайла);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ИерархическийФормат() Экспорт
|
||||||
|
|
||||||
|
Возврат ИерархическийФормат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ФорматВыгрузки() Экспорт
|
||||||
|
|
||||||
|
Возврат ФорматВыгрузки;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция НайтиФайлыПодсистем() Экспорт
|
||||||
|
|
||||||
|
Подсистемы = Новый Массив();
|
||||||
|
|
||||||
|
НайтиПодсистемы(КорневойКаталог(), Подсистемы);
|
||||||
|
|
||||||
|
Возврат Подсистемы;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура СообщитьОбОтсутствующихКаталогах(Путь) Экспорт
|
||||||
|
|
||||||
|
ЧастиПути = СтрРазделить(СтрЗаменить(Путь, КорневойКаталог(), ""), ПолучитьРазделительПути());
|
||||||
|
|
||||||
|
ПодПуть = "";
|
||||||
|
Для Каждого ЧастьПути Из ЧастиПути Цикл
|
||||||
|
|
||||||
|
ОбъединитьПути(ПодПуть, ЧастьПути);
|
||||||
|
|
||||||
|
Если НЕ ФС.Существует(ОбъединитьПути(КорневойКаталог(), ПодПуть)) Тогда
|
||||||
|
|
||||||
|
Сообщить("Не существует каталог " + ПодПуть);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция НайтиМодулиОбъекта(ИмяОбъекта, ВидОбъекта, МодулиПодчиненныхОбъектов = Ложь) Экспорт
|
||||||
|
|
||||||
|
Результат = Новый Массив();
|
||||||
|
|
||||||
|
РасширениеФайлов = "." + РасширениеФайловМодулей;
|
||||||
|
|
||||||
|
Если МодулиПодчиненныхОбъектов И НЕ ЭтоФорматEDT И ВидОбъекта <> "Configuration" Тогда
|
||||||
|
|
||||||
|
КаталогМодулей = КаталогФайловОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КаталогМодулей = КаталогМодулиОбъекта(ИмяОбъекта, ВидОбъекта);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Для Каждого Файл Из НайтиФайлы(КаталогМодулей, "*", МодулиПодчиненныхОбъектов) Цикл
|
||||||
|
|
||||||
|
Если Файл.ЭтоКаталог() Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НЕ (Файл.Расширение = "" ИЛИ СтрСравнить(РасширениеФайлов, Файл.Расширение) = 0) Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Результат.Добавить(Файл.ПолноеИмя);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
// Служебный функционал
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ИмяКаталогВидаОбъекта(ВидОбъекта)
|
||||||
|
|
||||||
|
Возврат ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(ВидОбъекта).НаименованиеКоллекцииEng;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура НайтиПодсистемы(Знач КаталогПоиска, Подсистемы)
|
||||||
|
|
||||||
|
КаталогПоиска = ОбъединитьПути(КаталогПоиска, "Subsystems");
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
Для Каждого Файл Из НайтиФайлы(КаталогПоиска, "*", Ложь) Цикл
|
||||||
|
|
||||||
|
Если НЕ Файл.ЭтоКаталог() Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИмяФайлаОписания = ОбъединитьПути(Файл.ПолноеИмя, СтрШаблон("%1.%2", Файл.Имя, РасширениеФайловОписания));
|
||||||
|
|
||||||
|
Если НЕ (Новый Файл(ИмяФайлаОписания)).Существует() Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ОписаниеПодсистемы = Новый Структура("КаталогОписания, ФайлОписания, Вложенные", Файл.ПолноеИмя, ИмяФайлаОписания, Новый Массив);
|
||||||
|
Подсистемы.Добавить(ОписаниеПодсистемы);
|
||||||
|
|
||||||
|
НайтиПодсистемы(Файл.ПолноеИмя, ОписаниеПодсистемы.Вложенные);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Для Каждого Файл Из НайтиФайлы(КаталогПоиска, "*.xml", Ложь) Цикл
|
||||||
|
|
||||||
|
КаталогДополнительныхФайлов = ОбъединитьПути(Файл.Путь, Файл.ИмяБезРасширения);
|
||||||
|
|
||||||
|
ОписаниеПодсистемы = Новый Структура("КаталогОписания, ФайлОписания, Вложенные", КаталогДополнительныхФайлов, Файл.ПолноеИмя, Новый Массив);
|
||||||
|
|
||||||
|
Подсистемы.Добавить(ОписаниеПодсистемы);
|
||||||
|
|
||||||
|
НайтиПодсистемы(КаталогДополнительныхФайлов, ОписаниеПодсистемы.Вложенные);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ПриСозданииОбъекта(пКаталогИсходников, пФорматВыгрузки = "Авто", пСоздаватьКаталоги = Ложь)
|
||||||
|
|
||||||
|
КаталогИсходников = пКаталогИсходников;
|
||||||
|
ФорматВыгрузки = пФорматВыгрузки;
|
||||||
|
СоздаватьКаталоги = пСоздаватьКаталоги = Истина;
|
||||||
|
|
||||||
|
Если ПустаяСтрока(ФорматВыгрузки) ИЛИ СтрСравнить(ФорматВыгрузки, "Авто") = 0 Тогда
|
||||||
|
|
||||||
|
Если ФС.ФайлСуществует(ОбъединитьПути(КаталогИсходников, "Configuration", "Configuration.mdo")) Тогда
|
||||||
|
|
||||||
|
ФорматВыгрузки = "EDT";
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ФорматВыгрузки = "Designer";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// определим иерархию
|
||||||
|
// схема определения проста, если есть каталог "Languages" то иерархия в формате 8.3.8
|
||||||
|
КаталогЯзыки = КаталогВидаОбъекта("Language");
|
||||||
|
ИерархическийФормат = ФС.Существует(КаталогЯзыки);
|
||||||
|
|
||||||
|
ЭтоФорматEDT = ФорматВыгрузки = "EDT";
|
||||||
|
|
||||||
|
Если ЭтоФорматEDT Тогда
|
||||||
|
|
||||||
|
РасширениеФайловОписания = "mdo";
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
РасширениеФайловОписания = "xml";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
РасширениеФайловМодулей = ?(ИерархическийФормат ИЛИ ЭтоФорматEDT, "bsl", "txt");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
51
src/Макеты/ОбъектыКонфигурации.md
Normal file
51
src/Макеты/ОбъектыКонфигурации.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Объекты конфигурации
|
||||||
|
|
||||||
|
## Имена
|
||||||
|
|
||||||
|
| Наименование | Наименование коллекции | Name | Collection name |
|
||||||
|
| --------------------------- | ---------------------------- | -------------------------- | --------------------------- |
|
||||||
|
| HTTPСервис | HTTPСервисы | HTTPService | HTTPServices |
|
||||||
|
| WebСервис | WebСервисы | WebService | WebServices |
|
||||||
|
| WSСсылка | WSСсылки | WSReference | WSReferences |
|
||||||
|
| БизнесПроцесс | БизнесПроцессы | BusinessProcess | BusinessProcesses |
|
||||||
|
| ВнешнийИсточникиДанных | ВнешниеИсточникиДанных | ExternalDataSource | ExternalDataSources |
|
||||||
|
| ГруппаКоманд | ГруппыКоманд | CommandGroup | CommandGroups |
|
||||||
|
| Документ | Документы | Document | Documents |
|
||||||
|
| ЖурналДокументов | ЖурналыДокументов | DocumentJournal | DocumentJournals |
|
||||||
|
| Задача | Задачи | Task | Tasks |
|
||||||
|
| Интерфейс | Интерфейсы | Interface | Interfaces |
|
||||||
|
| Константа | Константы | Constant | Constants |
|
||||||
|
| КритерийОтбора | КритерииОтбора | FilterCriterion | FilterCriteria |
|
||||||
|
| НумераторДокументов | НумераторыДокументов | DocumentNumerator | DocumentNumerators |
|
||||||
|
| Обработка | Обработки | DataProcessor | DataProcessors |
|
||||||
|
| ОбщаяКартинка | ОбщиеКартинки | CommonPicture | CommonPictures |
|
||||||
|
| ОбщаяКоманда | ОбщиеКоманды | CommonCommand | CommonCommands |
|
||||||
|
| ОбщийМакет | ОбщиеМакеты | CommonTemplate | CommonTemplates |
|
||||||
|
| ОбщийМодуль | ОбщиеМодули | CommonModule | CommonModules |
|
||||||
|
| ОбщийРеквизит | ОбщиеРеквизиты | CommonAttribute | CommonAttributes |
|
||||||
|
| ОбщаяФорм | ОбщиеФормы | CommonForm | CommonForms |
|
||||||
|
| ОпределяемыйТип | ОпределяемыеТипы | DefinedType | DefinedTypes |
|
||||||
|
| Отчет | Отчеты | Report | Reports |
|
||||||
|
| ПакетXDTO | ПакетыXDTO | XDTOPackage | XDTOPackages |
|
||||||
|
| ПараметрСеанса | ПараметрыСеанса | SessionParameter | SessionParameters |
|
||||||
|
| ПараметрФункциональныхОпций | ПараметрыФункциональныхОпций | FunctionalOptionsParameter | FunctionalOptionsParameters |
|
||||||
|
| Перечисление | Перечисления | Enum | Enums |
|
||||||
|
| ПланВидовРасчета | ПланыВидовРасчета | ChartOfCalculationTypes | ChartsOfCalculationTypes |
|
||||||
|
| ПланВидовХарактеристик | ПланыВидовХарактеристик | ChartOfCharacteristicTypes | ChartsOfCharacteristicTypes |
|
||||||
|
| ПланОбмена | ПланыОбмена | ExchangePlan | ExchangePlans |
|
||||||
|
| ПланСчетов | ПланыСчетов | ChartOfAccounts | ChartsOfAccounts |
|
||||||
|
| ПодпискаНаСобытия | ПодпискиНаСобытия | EventSubscription | EventSubscriptions |
|
||||||
|
| Подсистема | Подсистемы | Subsystem | Subsystems |
|
||||||
|
| Последовательность | Последовательности | Sequence | Sequences |
|
||||||
|
| РегистрБухгалтерии | РегистрыБухгалтерии | AccountingRegister | AccountingRegisters |
|
||||||
|
| РегистрНакопления | РегистрыНакопления | AccumulationRegister | AccumulationRegisters |
|
||||||
|
| РегистрРасчета | РегистрыРасчета | CalculationRegister | CalculationRegisters |
|
||||||
|
| РегистрСведений | РегистрыСведений | InformationRegister | InformationRegisters |
|
||||||
|
| РегламентноеЗадание | РегламентныеЗадания | ScheduledJob | ScheduledJobs |
|
||||||
|
| Роль | Роли | Role | Roles |
|
||||||
|
| Справочник | Справочники | Catalog | Catalogs |
|
||||||
|
| Стиль | Стили | Style | Styles |
|
||||||
|
| ФункциональнаяОпция | ФункциональныеОпции | FunctionalOption | FunctionalOptions |
|
||||||
|
| ХранилищеНастроек | ХранилищаНастроек | SettingsStorage | SettingsStorages |
|
||||||
|
| ЭлементСтиля | ЭлементыСтиля | StyleItem | StyleItems |
|
||||||
|
| Язык | Языки | Language | Languages |
|
77
src/Модули/ПараметрыПродукта.os
Normal file
77
src/Модули/ПараметрыПродукта.os
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Служебный модуль с набором служебных параметров библиотеки
|
||||||
|
//
|
||||||
|
// При создании новой библиотеки обязательно внести изменение
|
||||||
|
// в ф-ии ИмяПродукта, указав имя вашей библиотеки.
|
||||||
|
//
|
||||||
|
// При выпуске новой версии обязательно изменить ее значение
|
||||||
|
// в ф-ии ВерсияПродукта
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Использовать logos
|
||||||
|
|
||||||
|
Перем Лог;
|
||||||
|
|
||||||
|
// ИмяПродукта
|
||||||
|
// Возвращает имя продукта
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Значение имени продукта
|
||||||
|
//
|
||||||
|
Функция ИмяПродукта()
|
||||||
|
|
||||||
|
Возврат "bsl-parser";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает текущую версию продукта
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Значение текущей версии продукта
|
||||||
|
//
|
||||||
|
Функция ВерсияПродукта()
|
||||||
|
|
||||||
|
Возврат "2.0.1";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает идентификатор лога библиотеки
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Значение идентификатора лога библиотеки
|
||||||
|
//
|
||||||
|
Функция ИмяЛогаСистемы() Экспорт
|
||||||
|
|
||||||
|
Возврат "oscript.lib." + ИмяПродукта();
|
||||||
|
|
||||||
|
КонецФункции // ИмяЛогаСистемы
|
||||||
|
|
||||||
|
// Форматирование логов
|
||||||
|
// См. описание метода "УстановитьРаскладку" библиотеки logos
|
||||||
|
//
|
||||||
|
Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт
|
||||||
|
|
||||||
|
Возврат СтрШаблон("%1: %2 - %3", ТекущаяДата(), УровниЛога.НаименованиеУровня(Уровень), Сообщение);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Возвращает лог продукта
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Лог - Лог продукта
|
||||||
|
//
|
||||||
|
Функция ПолучитьЛог() Экспорт
|
||||||
|
|
||||||
|
Если Лог = Неопределено Тогда
|
||||||
|
|
||||||
|
Лог = Логирование.ПолучитьЛог(ИмяЛогаСистемы());
|
||||||
|
Лог.УстановитьРаскладку(ЭтотОбъект);
|
||||||
|
Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Лог;
|
||||||
|
|
||||||
|
КонецФункции
|
37
src/Модули/ПарсерBSL.os
Normal file
37
src/Модули/ПарсерBSL.os
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Модуль-фабрика для создания и инициализации парсеров
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПарсерКонфигурации(КаталогИсходников) Экспорт
|
||||||
|
|
||||||
|
Возврат Новый РазборКонфигурации1С(КаталогИсходников);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПарсерРасширения(КаталогИсходников) Экспорт
|
||||||
|
|
||||||
|
ВызватьИсключение "Не реализованно";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПарсерВнешнейОбработки(КаталогИсходников) Экспорт
|
||||||
|
|
||||||
|
ВызватьИсключение "Не реализованно";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПарсерМодуля(ИмяФайлаМодуля) Экспорт
|
||||||
|
|
||||||
|
ВызватьИсключение "Не реализованно";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
263
src/Модули/СтруктурыОписаний.os
Normal file
263
src/Модули/СтруктурыОписаний.os
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Содержит НСИ для разбора конфигураций
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Область КоллекцииОбъектов
|
||||||
|
|
||||||
|
Функция ТаблицаОписанияОбъектовКонфигурации() Экспорт
|
||||||
|
|
||||||
|
ОбъектыКонфигурации = Новый ТаблицаЗначений;
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("Наименование");
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("Тип");
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("ПутьКФайлуСОписанием");
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("ПутьККаталогу");
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("Подсистемы");
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("Описание");
|
||||||
|
ОбъектыКонфигурации.Колонки.Добавить("Родитель");
|
||||||
|
|
||||||
|
Возврат ОбъектыКонфигурации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ТаблицаОписанияМодулей() Экспорт
|
||||||
|
|
||||||
|
МодулиКонфигурации = Новый ТаблицаЗначений;
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("ТипМодуля");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("Родитель");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("ПутьКФайлу");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("НаборБлоков");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("Содержимое");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("РодительФорма");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("РодительКоманда");
|
||||||
|
МодулиКонфигурации.Колонки.Добавить("ОписаниеМодуля");
|
||||||
|
|
||||||
|
Возврат МодулиКонфигурации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ТаблицаОписанияПодсистем() Экспорт
|
||||||
|
|
||||||
|
ОписаниеПодсистем = Новый ТаблицаЗначений;
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("ОбъектМетаданных");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("Имя");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("Представление");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("ПодсистемаОписание");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("Визуальная");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("Родитель");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("ПредставлениеКратко");
|
||||||
|
ОписаниеПодсистем.Колонки.Добавить("ИмяКратко");
|
||||||
|
|
||||||
|
Возврат ОписаниеПодсистем;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОписанияОбъектовКонфигурации
|
||||||
|
|
||||||
|
Функция ОписаниеКонстанты() Экспорт
|
||||||
|
|
||||||
|
ДанныеОписания = БазовоеОписание();
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Тип", "type", , "ПолучитьТип");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Пояснение", "Explanation", Истина);
|
||||||
|
|
||||||
|
Возврат ДанныеОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОписаниеКонфигурации() Экспорт
|
||||||
|
|
||||||
|
ДанныеОписания = БазовоеОписание();
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "АвторскиеПрава", "Copyright", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "АдресИнформацииОКонфигурации", "ConfigurationInformationAddress", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "АдресИнформацииОПоставщике", "VendorInformationAddress", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "АдресКаталогаОбновлений", "UpdateCatalogAddress");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ВариантВстроенногоЯзыка", "ScriptVariant");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Версия", "Version");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ВключатьСправкуВСодержание", "IncludeHelpInContents");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ДополнительнаяФормаКонстант", "AuxiliaryConstantsForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ДополнительныеСловариПолнотекстовогоПоиска", "AdditionalFullTextSearchDictionaries");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Заставка", "Splash");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ИнтерфейсКлиентскогоПриложения", "ClientApplicationInterface");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ИспользоватьОбычныеФормыВУправляемомПриложении", "UseOrdinaryFormInManagedApplication");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ИспользоватьУправляемыеФормыВОбычномПриложении", "UseManagedFormInOrdinaryApplication");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "КартинкаОсновногоРаздела", "MainSectionPicture");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "КомандныйИнтерфейс", "CommandInterface");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "КомандныйИнтерфейсОсновногоРаздела", "MainSectionCommandInterface");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "КраткаяИнформация", "BriefInformation", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Логотип", "Logo");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "МодульВнешнегоСоединения", "ExternalConnectionModule");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "МодульОбычногоПриложения", "OrdinaryApplicationModule");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "МодульСеанса", "SessionModule");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "МодульУправляемогоПриложения", "ManagedApplicationModule");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "НазначениеРасширенияКонфигурации", "ConfigurationExtensionPurpose");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "НазначенияИспользования", "UsePurposes");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнаяФормаВариантаОтчета", "DefaultReportVariantForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнаяФормаКонстант", "DefaultConstantsForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнаяФормаНастроекДинамическогоСписка", "DefaultDynamicListSettingsForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнаяФормаНастроекОтчета", "DefaultReportSettingsForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнаяФормаОтчета", "DefaultReportForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнаяФормаПоиска", "DefaultSearchForm");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнойИнтерфейс", "DefaultInterface");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнойРежимЗапуска", "DefaultRunMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнойСтиль", "DefaultStyle");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновнойЯзык", "DefaultLanguage");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОсновныеРоли", "DefaultRoles");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПодробнаяИнформация", "DetailedInformation", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Поставщик", "Vendor");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПрефиксИмен", "NamePrefix");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПринадлежностьОбъекта", "ObjectBelonging");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РабочаяОбластьНачальнойСтраницы", "HomePageWorkArea");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимАвтонумерацииОбъектов", "ObjectAutonumerationMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимИспользованияМодальности", "ModalityUseMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимИспользованияСинхронныхВызововРасширенийПлатформыИВнешнихКомпонент", "SynchronousPlatformExtensionAndAddInCallUseMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимОсновногоОкнаКлиентскогоПриложения", "MainClientApplicationWindowMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимСовместимости", "CompatibilityMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимСовместимостиИнтерфейса", "InterfaceCompatibilityMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимСовместимостиРасширенияКонфигурации", "ConfigurationExtensionCompatibilityMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РежимУправленияБлокировкойДанных", "DataLockControlMode");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РодительскиеКонфигурации", "ParentConfigurations");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Справка", "Help");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ТребуемыеРазрешенияМобильногоПриложения", "RequiredMobileApplicationPermissions");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ФрагментКомандногоИнтерфейса", "CommandInterfaceFragment");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ХранилищеВариантовОтчетов", "ReportsVariantsStorage");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ХранилищеНастроекДанныхФорм", "FormDataSettingsStorage");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ХранилищеОбщихНастроек", "CommonSettingsStorage");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ХранилищеПользовательскихНастроекДинамическихСписков", "DynamicListsUserSettingsStorage");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ХранилищеПользовательскихНастроекОтчетов", "ReportsUserSettingsStorage");
|
||||||
|
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "HTTPСервисы", "HTTPServices", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "WebСервисы", "WebServices", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "WSСсылки", "WSReferences", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "БизнесПроцессы", "businessProcesses", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ВнешниеИсточникиДанных", "ExternalDataSources", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ГруппыКоманд", "CommandGroups", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Документы", "Documents", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ЖурналыДокументов", "DocumentJournals", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Задачи", "Tasks", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Интерфейсы", "Interfaces", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Константы", "Constants", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "КритерииОтбора", "FilterCriteria", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "НумераторыДокументов", "DocumentNumerators", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Обработки", "DataProcessors", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОбщиеКартинки", "CommonPictures", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОбщиеКоманды", "CommonCommands", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОбщиеМакеты", "CommonTemplates", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОбщиеМодули", "CommonModules", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОбщиеРеквизиты", "CommonAttributes", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОбщиеФормы", "CommonForms", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ОпределяемыеТипы", "DefinedTypes", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Отчеты", "Reports", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПакетыXDTO", "XDTOPackages", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПараметрыСеанса", "SessionParameters", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПараметрыФункциональныхОпций", "FunctionalOptionsParameters", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Перечисления", "Enums", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПланыВидовРасчета", "ChartsOfCalculationTypes", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПланыВидовХарактеристик", "ChartsOfCharacteristicTypes", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПланыОбмена", "ExchangePlans", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПланыСчетов", "ChartsOfAccounts", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ПодпискиНаСобытия", "EventSubscriptions", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Подсистемы", "Subsystems", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Последовательности", "Sequences", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РегистрыБухгалтерии", "AccountingRegisters", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РегистрыНакопления", "AccumulationRegisters", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РегистрыРасчета", "CalculationRegisters", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РегистрыСведений", "InformationRegisters", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "РегламентныеЗадания", "ScheduledJobs", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Роли", "Roles", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Справочники", "Catalogs", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Стили", "Styles", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ФункциональныеОпции", "FunctionalOptions", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ХранилищаНастроек", "SettingsStorages", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ЭлементыСтиля", "StyleItems", , , Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Языки", "Languages", , , Истина);
|
||||||
|
|
||||||
|
Возврат ДанныеОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОписаниеПодсистемы() Экспорт
|
||||||
|
|
||||||
|
ДанныеОписания = БазовоеОписание();
|
||||||
|
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ВключатьВКомандныйИнтерфейс", "IncludeInCommandInterface");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "ВключатьВСодержимоеСправки", "IncludeHelpInContents");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Пояснение", "Explanation", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Картинка", "Picture");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Состав", "Content", , "ПрочитатьСостав", Истина);
|
||||||
|
|
||||||
|
Возврат ДанныеОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция БазовоеОписание()
|
||||||
|
|
||||||
|
ДанныеОписания = Новый Структура();
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Наименование", "Name");
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Синоним", "Synonym", Истина);
|
||||||
|
ДобавитьВОписание(ДанныеОписания, "Комментарий", "Comment");
|
||||||
|
|
||||||
|
Возврат ДанныеОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
Функция ИменаТиповМетаданных() Экспорт
|
||||||
|
|
||||||
|
Возврат
|
||||||
|
"languages,
|
||||||
|
|subsystems,
|
||||||
|
|commonPictures,
|
||||||
|
|sessionParameters,
|
||||||
|
|roles,
|
||||||
|
|commonTemplates,
|
||||||
|
|filterCriteria,
|
||||||
|
|commonModules,
|
||||||
|
|commonAttributes,
|
||||||
|
|exchangePlans,
|
||||||
|
|xDTOPackages,
|
||||||
|
|webServices,
|
||||||
|
|httpServices,
|
||||||
|
|eventSubscriptions,
|
||||||
|
|scheduledJobs,
|
||||||
|
|functionalOptions,
|
||||||
|
|functionalOptionsParameters,
|
||||||
|
|definedTypes,
|
||||||
|
|commonCommands,
|
||||||
|
|commandGroups,
|
||||||
|
|constants,
|
||||||
|
|commonForms,
|
||||||
|
|catalogs,
|
||||||
|
|enums,
|
||||||
|
|reports,
|
||||||
|
|dataProcessors,
|
||||||
|
|informationRegisters,
|
||||||
|
|chartsOfCharacteristicTypes";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию() Экспорт
|
||||||
|
|
||||||
|
Возврат Новый Структура(
|
||||||
|
"Наименование, Тип, ПутьКФайлуСОписанием, ПутьККаталогу, Подсистемы, Описание, Родитель",
|
||||||
|
"", "", "", "", Новый Массив);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Процедура ДобавитьВОписание(Описание, Имя, ИмяПоля, Многоязычный = Ложь, ФункцияПреобразования = Неопределено, Коллекция = Ложь)
|
||||||
|
|
||||||
|
Описание.Вставить(Имя, Новый Структура("Поле, Многоязычный, ФункцияПреобразования, Коллекция", ИмяПоля, Многоязычный, ФункцияПреобразования, Коллекция));
|
||||||
|
|
||||||
|
КонецПроцедуры
|
105
src/Модули/ТипыОбъектовКонфигурации.os
Normal file
105
src/Модули/ТипыОбъектовКонфигурации.os
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Информация о типах конфигурации
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Перем ОбъектыКонфигурации;
|
||||||
|
Перем ХэшПоиска;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ОписаниеТипаПоИмени(ИмяТипаОбъектаКонфигурации) Экспорт
|
||||||
|
|
||||||
|
Возврат ХэшПоиска[ВРег(ИмяТипаОбъектаКонфигурации)];
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция НормализоватьИмя(ИмяТипаОбъектаКонфигурации) Экспорт
|
||||||
|
|
||||||
|
Описание = ХэшПоиска[ВРег(ИмяТипаОбъектаКонфигурации)];
|
||||||
|
|
||||||
|
Если Описание = Неопределено Тогда
|
||||||
|
Возврат ИмяТипаОбъектаКонфигурации;
|
||||||
|
Иначе
|
||||||
|
Возврат Описание.НаименованиеEng;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ИмяТипаПодсистемы() Экспорт
|
||||||
|
|
||||||
|
Возврат НормализоватьИмя("Подсистемы");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Процедура ЗагрузитьОписаниеТиповОбъектовКонфигурации()
|
||||||
|
|
||||||
|
ОбъектыКонфигурации = Новый Массив();
|
||||||
|
ХэшПоиска = Новый Соответствие();
|
||||||
|
|
||||||
|
ФайлОписаний = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "Макеты", "ОбъектыКонфигурации.md");
|
||||||
|
|
||||||
|
Чтение = Новый ЧтениеТекста();
|
||||||
|
Чтение.Открыть(ФайлОписаний, КодировкаТекста.UTF8);
|
||||||
|
|
||||||
|
Пока Истина Цикл // Позиционируемся на нужную строку
|
||||||
|
|
||||||
|
Строка = Чтение.ПрочитатьСтроку();
|
||||||
|
|
||||||
|
Если Строка = Неопределено Тогда
|
||||||
|
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Строка = "## Имена" Тогда
|
||||||
|
|
||||||
|
Чтение.ПрочитатьСтроку(); // Пропускаем пустую строку
|
||||||
|
Чтение.ПрочитатьСтроку(); // Пропускаем заголовок таблицы
|
||||||
|
Чтение.ПрочитатьСтроку(); // Пропускаем заголовок таблицы
|
||||||
|
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Пока Истина Цикл
|
||||||
|
|
||||||
|
Строка = Чтение.ПрочитатьСтроку();
|
||||||
|
|
||||||
|
Если Строка = Неопределено Тогда
|
||||||
|
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НЕ СтрНачинаетсяС(Строка, "|") Тогда
|
||||||
|
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЧастиСтроки = СтрРазделить(Строка, "|");
|
||||||
|
|
||||||
|
Описание = Новый Структура("Наименование, НаименованиеКоллекции, НаименованиеEng, НаименованиеКоллекцииEng",
|
||||||
|
СокрЛП(ЧастиСтроки[1]), СокрЛП(ЧастиСтроки[2]), СокрЛП(ЧастиСтроки[3]), СокрЛП(ЧастиСтроки[4]));
|
||||||
|
|
||||||
|
ОбъектыКонфигурации.Добавить(Описание);
|
||||||
|
ХэшПоиска.Вставить(ВРег(Описание.Наименование), Описание);
|
||||||
|
ХэшПоиска.Вставить(ВРег(Описание.НаименованиеКоллекции), Описание);
|
||||||
|
ХэшПоиска.Вставить(ВРег(Описание.НаименованиеEng), Описание);
|
||||||
|
ХэшПоиска.Вставить(ВРег(Описание.НаименованиеКоллекцииEng), Описание);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Чтение.Закрыть();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
ЗагрузитьОписаниеТиповОбъектовКонфигурации();
|
66
src/Модули/Утилиты.os
Normal file
66
src/Модули/Утилиты.os
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Служебный модуль, содержащий различные вспомогательные методы
|
||||||
|
//
|
||||||
|
// (с) BIA Technologies, LLC
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
// Программный интерфейс
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Читает текст из файла
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ИмяФайла - Строка - Путь к файлу
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Содержимое файла
|
||||||
|
//
|
||||||
|
Функция ПрочитатьФайл(ИмяФайла) Экспорт
|
||||||
|
|
||||||
|
ТекстовыйДокумент = Новый ТекстовыйДокумент();
|
||||||
|
ТекстовыйДокумент.Прочитать(ИмяФайла, КодировкаТекста.UTF8NoBOM);
|
||||||
|
СодержимоеФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||||||
|
|
||||||
|
Возврат СодержимоеФайла;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Создает все необходимы каталоги по пути
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Путь - Строка - Путь к каталогу
|
||||||
|
//
|
||||||
|
Процедура СоздатьРекурсивноКаталоги(Путь) Экспорт
|
||||||
|
|
||||||
|
Файл = Новый Файл(Путь);
|
||||||
|
|
||||||
|
Если НЕ Файл.Существует() Тогда
|
||||||
|
|
||||||
|
СоздатьРекурсивноКаталоги(Файл.Путь);
|
||||||
|
СоздатьКаталог(Путь);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция СтрРазделитьСОбрезкойПробелов(Строка, Разделитель) Экспорт
|
||||||
|
|
||||||
|
Результат = Новый Массив();
|
||||||
|
|
||||||
|
Для Каждого Стр Из СтрРазделить(Строка, Разделитель) Цикл
|
||||||
|
|
||||||
|
Результат.Добавить(СокрЛП(Стр));
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
// Служебный функционал
|
||||||
|
///////////////////////////////////////////////////////////////////
|
246
src/Модули/ЧтениеОписанийEDT.os
Normal file
246
src/Модули/ЧтениеОписанийEDT.os
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Модуль для чтения описаний метаданных 1с из EDT выгрузки
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Использовать reflector
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Перем Рефлектор;
|
||||||
|
Перем РегулярныеВыражения;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПолучитьСвойства(ТекстОписания, ПараметрыЧтения = Неопределено) Экспорт
|
||||||
|
|
||||||
|
СвойстваОписания = Новый Структура();
|
||||||
|
|
||||||
|
НайденныеСовпадения = РегулярныеВыражения.СвойстваОписания.НайтиСовпадения(ТекстОписания);
|
||||||
|
|
||||||
|
Для Каждого Совпадение Из НайденныеСовпадения Цикл
|
||||||
|
|
||||||
|
Имя = Совпадение.Группы[1].Значение;
|
||||||
|
Значение = Совпадение.Группы[2].Значение;
|
||||||
|
|
||||||
|
Если СвойстваОписания.Свойство(Имя) Тогда
|
||||||
|
|
||||||
|
Если ТипЗнч(СвойстваОписания[Имя]) = Тип("Массив") Тогда
|
||||||
|
|
||||||
|
СвойстваОписания[Имя].Добавить(Значение);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КоллекцияЗначений = Новый Массив();
|
||||||
|
КоллекцияЗначений.Добавить(СвойстваОписания[Имя]);
|
||||||
|
КоллекцияЗначений.Добавить(Значение);
|
||||||
|
|
||||||
|
СвойстваОписания.Вставить(Имя, КоллекцияЗначений);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
СвойстваОписания.Вставить(Имя, Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если ПараметрыЧтения <> Неопределено Тогда
|
||||||
|
|
||||||
|
СвойстваОписания = ВыполнитьОбработкуПрочитанныхСвойств(СвойстваОписания, ПараметрыЧтения, ЭтотОбъект);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СвойстваОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьСвойстваИзФайла(ИмяФайла, ПараметрыЧтения = Неопределено) Экспорт
|
||||||
|
|
||||||
|
ТекстОписания = Утилиты.ПрочитатьФайл(ИмяФайла);
|
||||||
|
|
||||||
|
Возврат ПолучитьСвойства(ТекстОписания, ПараметрыЧтения);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьОписаниеКонфигурации(ПутьКФайлуОписания) Экспорт
|
||||||
|
|
||||||
|
СвойстваКонфигурации = Новый Структура;
|
||||||
|
ОбъектыКонфигурации = СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации();
|
||||||
|
|
||||||
|
ПараметрыЧтения = СтруктурыОписаний.ОписаниеКонфигурации();
|
||||||
|
|
||||||
|
ЗначенияПоУмолчанию = СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию();
|
||||||
|
|
||||||
|
СвойстваОписания = ПолучитьСвойства(Утилиты.ПрочитатьФайл(ПутьКФайлуОписания), ПараметрыЧтения);
|
||||||
|
|
||||||
|
Для Каждого Параметр Из ПараметрыЧтения Цикл
|
||||||
|
|
||||||
|
Если Параметр.Ключ = "Языки" Тогда // Шлак какой-то там
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Значение = СвойстваОписания[Параметр.Ключ];
|
||||||
|
|
||||||
|
Если Параметр.Значение.Коллекция Тогда
|
||||||
|
|
||||||
|
Для Каждого ПолноеИмяОбъекта Из Значение Цикл
|
||||||
|
|
||||||
|
СтрокаОбъекта = ОбъектыКонфигурации.Добавить();
|
||||||
|
ЗаполнитьЗначенияСвойств(СтрокаОбъекта, ЗначенияПоУмолчанию);
|
||||||
|
|
||||||
|
ЧастиСтроки = СтрРазделить(ПолноеИмяОбъекта, ".");
|
||||||
|
СтрокаОбъекта.Тип = ТипыОбъектовКонфигурации.НормализоватьИмя(ЧастиСтроки[0]);
|
||||||
|
СтрокаОбъекта.Наименование = ЧастиСтроки[1];
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
СвойстваКонфигурации.Вставить(Параметр.Ключ, Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Новый Структура("СвойстваКонфигурации, ОбъектыКонфигурации", СвойстваКонфигурации , ОбъектыКонфигурации);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция МногоЯзыковаяСтрока(Знач Значение) Экспорт
|
||||||
|
|
||||||
|
Регулярка = РегулярныеВыражения.МногоЯзыковаяСтрока;
|
||||||
|
Совпадения = Регулярка.НайтиСовпадения(Значение);
|
||||||
|
|
||||||
|
Если Совпадения.Количество() Тогда
|
||||||
|
|
||||||
|
Значение = Совпадения[0].Группы[1].Значение;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Значение = "";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьТип(Знач Значение) Экспорт
|
||||||
|
|
||||||
|
Регулярка = РегулярныеВыражения.ПолучитьТип;
|
||||||
|
Совпадения = Регулярка.НайтиСовпадения(Значение);
|
||||||
|
|
||||||
|
Если Совпадения.Количество() Тогда
|
||||||
|
|
||||||
|
Значение = Совпадения[0].Группы[1].Значение;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Значение = "";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьСостав(Знач Значение) Экспорт
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ВыполнитьОбработкуПрочитанныхСвойств(СырыеДанные, ПараметрыЧтения, ОбъектПреобразователь)
|
||||||
|
|
||||||
|
СвойстваОписания = Новый Структура();
|
||||||
|
|
||||||
|
Для Каждого Параметр Из ПараметрыЧтения Цикл
|
||||||
|
|
||||||
|
Значение = Неопределено;
|
||||||
|
|
||||||
|
Если НЕ СырыеДанные.Свойство(Параметр.Значение.Поле, Значение) Тогда
|
||||||
|
|
||||||
|
Значение = "";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Значение = ОбработатьСвойство(Значение, Параметр.Значение, ОбъектПреобразователь);
|
||||||
|
|
||||||
|
СвойстваОписания.Вставить(Параметр.Ключ, Значение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат СвойстваОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОбработатьСвойство(Значение, Параметр, ОбъектПреобразователь)
|
||||||
|
|
||||||
|
Если ПустаяСтрока(Значение) И Параметр.Коллекция Тогда
|
||||||
|
|
||||||
|
Возврат Новый Массив();
|
||||||
|
|
||||||
|
ИначеЕсли ПустаяСтрока(Значение) Тогда
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ТипЗнч(Значение) = Тип("Массив") И ПустаяСтрока(Параметр.ФункцияПреобразования) И НЕ Параметр.Многоязычный Тогда
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ФункцияПреобразования = Параметр.ФункцияПреобразования;
|
||||||
|
|
||||||
|
Если НЕ ЗначениеЗаполнено(ФункцияПреобразования) И Параметр.Многоязычный Тогда
|
||||||
|
|
||||||
|
ФункцияПреобразования = "МногоЯзыковаяСтрока";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ФункцияПреобразования) Тогда
|
||||||
|
|
||||||
|
ЗначениеВМассиве = Новый Массив();
|
||||||
|
ЗначениеВМассиве.Добавить(Значение);
|
||||||
|
|
||||||
|
Значение = Рефлектор.ВызватьМетод(ОбъектПреобразователь, ФункцияПреобразования, ЗначениеВМассиве);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Параметр.Коллекция И ТипЗнч(Значение) <> Тип("Массив") Тогда
|
||||||
|
|
||||||
|
Результат = Новый Массив();
|
||||||
|
Результат.Добавить(Значение);
|
||||||
|
Значение = Результат;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Рефлектор = Новый Рефлектор;
|
||||||
|
|
||||||
|
|
||||||
|
РегулярныеВыражения = Новый Структура();
|
||||||
|
РегулярныеВыражения.Вставить("СвойстваОписания", Новый РегулярноеВыражение("<([a-zA-Z]+)\b[^>]*>([\s\S]*?)<\/\1>"));
|
||||||
|
РегулярныеВыражения.Вставить("МногоЯзыковаяСтрока", Новый РегулярноеВыражение("<value>([\s\S]*)<\/value>"));
|
||||||
|
РегулярныеВыражения.Вставить("ПолучитьТип", Новый РегулярноеВыражение("<types>([\s\S]*)<\/types>"));
|
109
src/Модули/ЧтениеОписанийБазовый.os
Normal file
109
src/Модули/ЧтениеОписанийБазовый.os
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Общие методы чтения файлов описаний
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Использовать reflector
|
||||||
|
#Использовать "../ЧтениеМодулей"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Перем Рефлектор;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПреобразоватьТип(ТипИзXML) Экспорт
|
||||||
|
|
||||||
|
СоответствиеТипов = Новый Соответствие;
|
||||||
|
|
||||||
|
СоответствиеТипов.Вставить("xs:boolean", "Булево");
|
||||||
|
СоответствиеТипов.Вставить("xs:decimal", "Число");
|
||||||
|
СоответствиеТипов.Вставить("xs:string", "Строка");
|
||||||
|
СоответствиеТипов.Вставить("xs:dateTime", "Дата");
|
||||||
|
СоответствиеТипов.Вставить("v8:ValueStorage", "Хранилище Значений");
|
||||||
|
СоответствиеТипов.Вставить("v8:UUID", "UUID");
|
||||||
|
СоответствиеТипов.Вставить("v8:Null", "Null");
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(ТипИзXML, "xs") Или СтрНачинаетсяС(ТипИзXML, "v8") Тогда
|
||||||
|
|
||||||
|
ПреобразованныйТип = СоответствиеТипов[ТипИзXML];
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(ТипИзXML, "cfg:") Тогда
|
||||||
|
|
||||||
|
ТипИзXML = СтрЗаменить(ТипИзXML, "cfg:", "");
|
||||||
|
ЧастиТипа = СтрРазделить(ТипИзXML, ".");
|
||||||
|
ТипОбъекта = СтрЗаменить(ЧастиТипа[0], "Ref", "");
|
||||||
|
|
||||||
|
ПреобразованныйТип = ПолучитьИмяТипаНаРусском(ТипОбъекта) + "." + ЧастиТипа[1];
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ПреобразованныйТип = ТипИзXML;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ПреобразованныйТип;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьИмяТипаНаРусском(ИмяТипа) Экспорт
|
||||||
|
|
||||||
|
ОписаниеТипа = ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(ИмяТипа);
|
||||||
|
|
||||||
|
Возврат ?(ОписаниеТипа = Неопределено, ИмяТипа, ОписаниеТипа.Наименование);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолноеИмяОбъекта(СтрокаМодуль, ДобавлятьПрефиксДляОбщихМодулей = ИСТИНА) Экспорт
|
||||||
|
|
||||||
|
Если СтрокаМодуль.ТипМодуля <> ТипМодуля.ОбщийМодуль
|
||||||
|
ИЛИ ДобавлятьПрефиксДляОбщихМодулей Тогда
|
||||||
|
|
||||||
|
Возврат ПолучитьИмяТипаНаРусском(СтрокаМодуль.Родитель.Тип) + "." + СтрокаМодуль.Родитель.Наименование;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Возврат СтрокаМодуль.Родитель.Наименование;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолноеИмяМодуля(СтрокаМодуль) Экспорт
|
||||||
|
|
||||||
|
ПолноеИмя = ПолноеИмяОбъекта(СтрокаМодуль);
|
||||||
|
Если СтрокаМодуль.ТипМодуля = ТипМодуля.ОбщийМодуль Тогда
|
||||||
|
|
||||||
|
// не надо дописывать
|
||||||
|
|
||||||
|
ИначеЕсли СтрокаМодуль.ТипМодуля = ТипМодуля.МодульМенеджера
|
||||||
|
ИЛИ СтрокаМодуль.ТипМодуля = ТипМодуля.МодульОбъекта Тогда
|
||||||
|
|
||||||
|
ПолноеИмя = ПолноеИмя + "." + СтрокаМодуль.ТипМодуля;
|
||||||
|
|
||||||
|
ИначеЕсли СтрокаМодуль.ТипМодуля = ТипМодуля.МодульУправляемойФормы Тогда
|
||||||
|
|
||||||
|
ПолноеИмя = ПолноеИмя + ".Форма." + СтрокаМодуль.РодительФорма.Наименование + ".МодульФормы";
|
||||||
|
|
||||||
|
ИначеЕсли СтрокаМодуль.ТипМодуля = ТипМодуля.МодульКоманды Тогда
|
||||||
|
|
||||||
|
ПолноеИмя = ПолноеИмя + ".Команда." + СтрокаМодуль.РодительКоманда.Наименование + ".МодульКоманды";
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ПолноеИмя = ПолноеИмя + "." + СтрокаМодуль.ТипМодуля;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ПолноеИмя;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Рефлектор = Новый Рефлектор;
|
372
src/Модули/ЧтениеОписанийКонфигуратор.os
Normal file
372
src/Модули/ЧтениеОписанийКонфигуратор.os
Normal file
@ -0,0 +1,372 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Модуль для чтения описаний метаданных 1с из XML выгрузки
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#Использовать reflector
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Перем Рефлектор;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПолучитьСвойства(ТекстОписания, ПараметрыЧтения = Неопределено) Экспорт
|
||||||
|
|
||||||
|
СвойстваОписания = Новый Структура();
|
||||||
|
|
||||||
|
ЧтениеXML = Новый ЧтениеXML;
|
||||||
|
ЧтениеXML.УстановитьСтроку(ТекстОписания);
|
||||||
|
|
||||||
|
ПрочитатьСвойстваXML(ЧтениеXML, СвойстваОписания, ПараметрыЧтения);
|
||||||
|
|
||||||
|
ЧтениеXML.Закрыть();
|
||||||
|
|
||||||
|
Если ПараметрыЧтения <> Неопределено Тогда
|
||||||
|
|
||||||
|
СвойстваОписания = ВыполнитьОбработкуПрочитанныхСвойств(СвойстваОписания, ПараметрыЧтения);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СвойстваОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьСвойстваИзФайла(ИмяФайла, ПараметрыЧтения = Неопределено) Экспорт
|
||||||
|
|
||||||
|
СвойстваОписания = Новый Структура();
|
||||||
|
|
||||||
|
ЧтениеXML = Новый ЧтениеXML;
|
||||||
|
ЧтениеXML.ОткрытьФайл(ИмяФайла);
|
||||||
|
|
||||||
|
ПрочитатьСвойстваXML(ЧтениеXML, СвойстваОписания, ПараметрыЧтения);
|
||||||
|
|
||||||
|
ЧтениеXML.Закрыть();
|
||||||
|
|
||||||
|
Если ПараметрыЧтения <> Неопределено Тогда
|
||||||
|
|
||||||
|
СвойстваОписания = ВыполнитьОбработкуПрочитанныхСвойств(СвойстваОписания, ПараметрыЧтения);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СвойстваОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьОписаниеКонфигурации(ПутьКФайлуОписания) Экспорт
|
||||||
|
|
||||||
|
СвойстваКонфигурации = Новый Структура;
|
||||||
|
|
||||||
|
ОбъектыКонфигурации = СтруктурыОписаний.ТаблицаОписанияОбъектовКонфигурации();
|
||||||
|
|
||||||
|
ПустаяСтрокаОбъектКонфигурации = СтруктурыОписаний.ОписаниеОбъектаКонфигурацииЗначенияПоУмолчанию();
|
||||||
|
|
||||||
|
ЧтениеXML = Новый ЧтениеXML;
|
||||||
|
ЧтениеXML.ОткрытьФайл(ПутьКФайлуОписания);
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Прочитать() Цикл
|
||||||
|
|
||||||
|
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Properties" Тогда
|
||||||
|
|
||||||
|
// Настройки
|
||||||
|
Пока НЕ (ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Properties") Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
КлючСвойства = "";
|
||||||
|
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||||||
|
|
||||||
|
Если ЧтениеXML.Имя = "RequiredMobileApplicationPermissions" Тогда // атрибуты мобильного приложения
|
||||||
|
|
||||||
|
Пока НЕ (ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "RequiredMobileApplicationPermissions") Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КлючСвойства = ЧтениеXML.Имя;
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда // вложенный элемент
|
||||||
|
|
||||||
|
Если ЧтениеXML.Имя = "v8:item" Тогда // надо найти элемент с именем v8:content
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Имя <> "v8:content" Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
Иначе // просто ищем значение
|
||||||
|
|
||||||
|
Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СвойстваКонфигурации.Вставить(КлючСвойства, ЧтениеXML.Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "ChildObjects" Тогда
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
// подчиненные элементы (первый уровень)
|
||||||
|
Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
|
||||||
|
|
||||||
|
НовСтрока = ОбъектыКонфигурации.Добавить();
|
||||||
|
ЗаполнитьЗначенияСвойств(НовСтрока, ПустаяСтрокаОбъектКонфигурации);
|
||||||
|
НовСтрока.Тип = ТипыОбъектовКонфигурации.НормализоватьИмя(ЧтениеXML.Имя);
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
НовСтрока.Наименование = ЧтениеXML.Значение;
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ЧтениеXML.Закрыть();
|
||||||
|
|
||||||
|
Возврат Новый Структура("СвойстваКонфигурации, ОбъектыКонфигурации" ,СвойстваКонфигурации , ОбъектыКонфигурации);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция МногоЯзыковаяСтрока(Знач ЧтениеXML) Экспорт
|
||||||
|
|
||||||
|
Имя = ЧтениеXML.Имя;
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Имя <> "v8:content" Цикл
|
||||||
|
|
||||||
|
Если ЧтениеXML.Имя = Имя И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
|
||||||
|
|
||||||
|
Возврат "";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
Значение = ЧтениеXML.Значение;
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьТип(Знач ЧтениеXML) Экспорт
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Имя <> "v8:Type" Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
Значение = ЧтениеXML.Значение;
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Имя <> "Type" Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьСостав(Знач ЧтениеXML) Экспорт
|
||||||
|
|
||||||
|
Значение = Новый Массив();
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "Content" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента) Цикл
|
||||||
|
|
||||||
|
Если ЧтениеXML.ИмеетЗначение Тогда
|
||||||
|
|
||||||
|
Строка = ЧтениеXML.Значение;
|
||||||
|
|
||||||
|
Позиция = СтрНайти(Строка, ".");
|
||||||
|
|
||||||
|
Если Позиция > 0 Тогда
|
||||||
|
|
||||||
|
Значение.Добавить(ТипыОбъектовКонфигурации.НормализоватьИмя(Лев(Строка, Позиция - 1)) + Сред(Строка, Позиция));
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Значение.Добавить(ЧтениеXML.Значение);
|
||||||
|
|
||||||
|
КонецЕсли
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ВыполнитьОбработкуПрочитанныхСвойств(СырыеДанные, ПараметрыЧтения)
|
||||||
|
|
||||||
|
СвойстваОписания = Новый Структура();
|
||||||
|
|
||||||
|
Для Каждого Параметр Из ПараметрыЧтения Цикл
|
||||||
|
|
||||||
|
Значение = Неопределено;
|
||||||
|
|
||||||
|
Если НЕ СырыеДанные.Свойство(Параметр.Значение.Поле, Значение) Тогда
|
||||||
|
|
||||||
|
Значение = "";
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Значение = ОбработатьСвойство(Значение, Параметр.Значение);
|
||||||
|
|
||||||
|
СвойстваОписания.Вставить(Параметр.Ключ, Значение);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат СвойстваОписания;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОбработатьСвойство(Значение, Параметр)
|
||||||
|
|
||||||
|
Если ПустаяСтрока(Значение) И Параметр.Коллекция Тогда
|
||||||
|
|
||||||
|
Возврат Новый Массив();
|
||||||
|
|
||||||
|
ИначеЕсли ПустаяСтрока(Значение) Тогда
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
ИначеЕсли Параметр.Коллекция И ТипЗнч(Значение) <> Тип("Массив") Тогда
|
||||||
|
|
||||||
|
Результат = Новый Массив();
|
||||||
|
Результат.Добавить(Значение);
|
||||||
|
Значение = Результат;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Значение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПрочитатьСвойстваXML(ЧтениеXML, Данные, ПараметрыЧтения)
|
||||||
|
|
||||||
|
ОбработчикиПолей = Новый Структура();
|
||||||
|
|
||||||
|
Если ПараметрыЧтения <> Неопределено Тогда
|
||||||
|
|
||||||
|
Для Каждого Элемент Из ПараметрыЧтения Цикл
|
||||||
|
|
||||||
|
Параметр = Элемент.Значение;
|
||||||
|
Если ПустаяСтрока(Параметр.ФункцияПреобразования) И Параметр.Многоязычный Тогда
|
||||||
|
|
||||||
|
ОбработчикиПолей.Вставить(ВРег(Параметр.Поле), "МногоЯзыковаяСтрока");
|
||||||
|
|
||||||
|
ИначеЕсли НЕ ПустаяСтрока(Параметр.ФункцияПреобразования) Тогда
|
||||||
|
|
||||||
|
ОбработчикиПолей.Вставить(ВРег(Параметр.Поле), Параметр.ФункцияПреобразования);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Прочитать() Цикл
|
||||||
|
|
||||||
|
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Properties" Тогда
|
||||||
|
|
||||||
|
Уровень = ЧтениеXML.КонтекстПространствИмен.Глубина;
|
||||||
|
// Настройки
|
||||||
|
Пока НЕ (ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Properties") Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
КлючСвойства = "";
|
||||||
|
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||||||
|
|
||||||
|
Если ЧтениеXML.Имя = "RequiredMobileApplicationPermissions" Тогда // атрибуты мобильного приложения
|
||||||
|
|
||||||
|
Пока НЕ (ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "RequiredMobileApplicationPermissions") Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КлючСвойства = ЧтениеXML.ЛокальноеИмя;
|
||||||
|
|
||||||
|
Если ОбработчикиПолей.Свойство(ВРег(КлючСвойства)) Тогда
|
||||||
|
|
||||||
|
ЗначениеВМассиве = Новый Массив();
|
||||||
|
ЗначениеВМассиве.Добавить(ЧтениеXML);
|
||||||
|
|
||||||
|
Значение = Рефлектор.ВызватьМетод(ЭтотОбъект, ОбработчикиПолей[КлючСвойства], ЗначениеВМассиве);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
Уровень = ЧтениеXML.КонтекстПространствИмен.Глубина;
|
||||||
|
Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Значение = ЧтениеXML.Значение;
|
||||||
|
|
||||||
|
Пока Уровень < ЧтениеXML.КонтекстПространствИмен.Глубина Цикл
|
||||||
|
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Данные.Вставить(КлючСвойства, Значение);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Данные;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Рефлектор = Новый Рефлектор();
|
File diff suppressed because it is too large
Load Diff
126
src/ЧтениеМодулей/Модули/ТипМодуля.os
Normal file
126
src/ЧтениеМодулей/Модули/ТипМодуля.os
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
Перем ОбщийМодуль Экспорт;
|
||||||
|
|
||||||
|
Перем МодульОбъекта Экспорт;
|
||||||
|
Перем МодульМенеджера Экспорт;
|
||||||
|
|
||||||
|
Перем МодульОбычнойФормы Экспорт;
|
||||||
|
Перем МодульУправляемойФормы Экспорт;
|
||||||
|
|
||||||
|
Перем МодульКоманды Экспорт;
|
||||||
|
|
||||||
|
Перем МодульСеанса Экспорт;
|
||||||
|
Перем МодульОбычногоПриложения Экспорт;
|
||||||
|
Перем МодульУправляемогоПриложения Экспорт;
|
||||||
|
Перем МодульВнешнегоСоединения Экспорт;
|
||||||
|
|
||||||
|
Перем СоответствиеИмениФайлаИТИпаМодуля;
|
||||||
|
Перем СоответствиеИмениРодителяИТИпаМодуля;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ТипМодуляПоИмениФайла(ПолноеИмяФайла)Экспорт
|
||||||
|
|
||||||
|
Файл = Новый Файл(ПолноеИмяФайла);
|
||||||
|
ИмяБезРасширения = Файл.ИмяБезРасширения;
|
||||||
|
Расширение = Файл.Расширение;
|
||||||
|
|
||||||
|
ТипЭтогоМодуля = Неопределено;
|
||||||
|
|
||||||
|
Если ИмяБезРасширения = "module" И ПустаяСтрока(Расширение) Тогда
|
||||||
|
|
||||||
|
ТипЭтогоМодуля = МодульОбычнойФормы;
|
||||||
|
|
||||||
|
ИначеЕсли ИмяБезРасширения = "Module" Тогда
|
||||||
|
|
||||||
|
МассивЧастейИмени = СтрРазделить(ПолноеИмяФайла, "\");
|
||||||
|
|
||||||
|
Если МассивЧастейИмени.Количество() > 3 Тогда
|
||||||
|
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 2];
|
||||||
|
|
||||||
|
Если Родитель = "Ext" Тогда
|
||||||
|
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 4];
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 3];
|
||||||
|
|
||||||
|
Если Родитель = "Ext" Тогда // Общие формы
|
||||||
|
|
||||||
|
Родитель = МассивЧастейИмени[МассивЧастейИмени.Количество() - 5];
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТипЭтогоМодуля = СоответствиеИмениРодителяИТИпаМодуля[Родитель];
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ВызватьИсключение "Ошибочная структура имени файла: " + ПолноеИмяФайла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ТипЭтогоМодуля = СоответствиеИмениФайлаИТИпаМодуля[ИмяБезРасширения];
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ПустаяСтрока(ТипЭтогоМодуля) Тогда
|
||||||
|
|
||||||
|
Сообщить("Не смогли определить тип модуля. " + ПолноеИмяФайла);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ТипЭтогоМодуля;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ЭтоМодульФормы(ТипПереданногоМодуля) Экспорт
|
||||||
|
|
||||||
|
Возврат ТипПереданногоМодуля = ТипМодуля.МодульУправляемойФормы ИЛИ ТипПереданногоМодуля = ТипМодуля.МодульОбычнойФормы;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ОбщийМодуль = "ОбщийМодуль";
|
||||||
|
|
||||||
|
МодульОбъекта = "МодульОбъекта";
|
||||||
|
МодульМенеджера = "МодульМенеджера";
|
||||||
|
|
||||||
|
МодульОбычнойФормы = "МодульОбычнойФормы";
|
||||||
|
МодульУправляемойФормы = "МодульУправляемойФормы";
|
||||||
|
|
||||||
|
МодульКоманды = "МодульКоманды";
|
||||||
|
|
||||||
|
МодульСеанса = "МодульСеанса";
|
||||||
|
МодульОбычногоПриложения = "МодульОбычногоПриложения";
|
||||||
|
МодульУправляемогоПриложения = "МодульУправляемогоПриложения";
|
||||||
|
МодульВнешнегоСоединения = "МодульВнешнегоСоединения";
|
||||||
|
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля = Новый Соответствие();
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("CommandModule", МодульКоманды);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("ManagedApplicationModule", МодульУправляемогоПриложения);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("OrdinaryApplicationModule", МодульОбычногоПриложения);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("SessionModule", МодульСеанса);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("ExternalConnectionModule", МодульВнешнегоСоединения);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("ManagerModule", МодульМенеджера);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("ValueManagerModule", МодульМенеджера);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("ObjectModule", МодульОбъекта);
|
||||||
|
СоответствиеИмениФайлаИТИпаМодуля.Вставить("RecordSetModule", МодульОбъекта);
|
||||||
|
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля = Новый Соответствие();
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("CommonModules", ОбщийМодуль);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("CommonModule", ОбщийМодуль);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("WebServices", МодульОбъекта);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("WebService", МодульОбъекта);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("HTTPServices", МодульОбъекта);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("HTTPService", МодульОбъекта);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("Forms", МодульУправляемойФормы);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("Form", МодульУправляемойФормы);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("CommonForms", МодульУправляемойФормы);
|
||||||
|
СоответствиеИмениРодителяИТИпаМодуля.Вставить("CommonForm", МодульУправляемойФормы);
|
@ -4,12 +4,14 @@
|
|||||||
Перем РазделПрограммныйИнтерфейс Экспорт;
|
Перем РазделПрограммныйИнтерфейс Экспорт;
|
||||||
Перем РазделСлужебныйПрограммныйИнтерфейс Экспорт;
|
Перем РазделСлужебныйПрограммныйИнтерфейс Экспорт;
|
||||||
Перем РазделСлужебныеПроцедурыИФункции Экспорт;
|
Перем РазделСлужебныеПроцедурыИФункции Экспорт;
|
||||||
|
Перем РазделОбработчикиСобытий Экспорт;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
РазделПрограммныйИнтерфейс = "ПрограммныйИнтерфейс";
|
РазделПрограммныйИнтерфейс = "ПрограммныйИнтерфейс";
|
||||||
РазделСлужебныйПрограммныйИнтерфейс = "СлужебныйПрограммныйИнтерфейс";
|
РазделСлужебныйПрограммныйИнтерфейс = "СлужебныйПрограммныйИнтерфейс";
|
||||||
РазделСлужебныеПроцедурыИФункции = "СлужебныеПроцедурыИФункции";
|
РазделСлужебныеПроцедурыИФункции = "СлужебныеПроцедурыИФункции";
|
||||||
|
РазделОбработчикиСобытий = "ОбработчикиСобытий";
|
||||||
|
|
||||||
РазделыОбщегоМодуля = Новый Массив;
|
РазделыОбщегоМодуля = Новый Массив;
|
||||||
РазделыОбщегоМодуля.Добавить(РазделПрограммныйИнтерфейс);
|
РазделыОбщегоМодуля.Добавить(РазделПрограммныйИнтерфейс);
|
||||||
@ -19,4 +21,5 @@
|
|||||||
РазделыМодуляМенеджера = Новый Массив;
|
РазделыМодуляМенеджера = Новый Массив;
|
||||||
РазделыМодуляМенеджера.Добавить(РазделПрограммныйИнтерфейс);
|
РазделыМодуляМенеджера.Добавить(РазделПрограммныйИнтерфейс);
|
||||||
РазделыМодуляМенеджера.Добавить(РазделСлужебныйПрограммныйИнтерфейс);
|
РазделыМодуляМенеджера.Добавить(РазделСлужебныйПрограммныйИнтерфейс);
|
||||||
РазделыМодуляМенеджера.Добавить(РазделСлужебныеПроцедурыИФункции);
|
РазделыМодуляМенеджера.Добавить(РазделСлужебныеПроцедурыИФункции);
|
||||||
|
РазделыМодуляМенеджера.Добавить(РазделОбработчикиСобытий);
|
819
src/ЧтениеМодулей/Модули/ЧтениеМодулей.os
Normal file
819
src/ЧтениеМодулей/Модули/ЧтениеМодулей.os
Normal file
@ -0,0 +1,819 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Методы разбора исходных модулей 1с
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Функция ПрочитатьМодуль(СодержимоеФайла) Экспорт
|
||||||
|
|
||||||
|
БлокиМодуля = Новый ТаблицаЗначений;
|
||||||
|
БлокиМодуля.Колонки.Добавить("ТипБлока");
|
||||||
|
БлокиМодуля.Колонки.Добавить("НачальнаяСтрока");
|
||||||
|
БлокиМодуля.Колонки.Добавить("КонечнаяСтрока");
|
||||||
|
БлокиМодуля.Колонки.Добавить("Содержимое");
|
||||||
|
БлокиМодуля.Колонки.Добавить("ОписаниеБлока");
|
||||||
|
|
||||||
|
КоличествоСтрокМодуля = СодержимоеФайла.КоличествоСтрок();
|
||||||
|
|
||||||
|
ТекущийБлок = Неопределено;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
НачальнаяСтрока = 1;
|
||||||
|
КонечнаяСтрока = 1;
|
||||||
|
|
||||||
|
Для НомерСтроки = 1 По КоличествоСтрокМодуля Цикл
|
||||||
|
|
||||||
|
СтрокаМодуля = ВРег(СокрЛП(СодержимоеФайла.ПолучитьСтроку(НомерСтроки)));
|
||||||
|
|
||||||
|
Если НЕ ЭтоКонецБлока Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТекущийБлок;
|
||||||
|
Если НовыйБлок = ТипБлоковМодуля.ОписаниеПеременной Тогда
|
||||||
|
|
||||||
|
УдалитьКомментарийИзСтроки(СтрокаМодуля);
|
||||||
|
ЭтоКонецБлока = СтрНайти(СтрокаМодуля, ";") > 0;
|
||||||
|
|
||||||
|
ИначеЕсли НовыйБлок = ТипБлоковМодуля.ЗаголовокПроцедуры
|
||||||
|
ИЛИ НовыйБлок = ТипБлоковМодуля.ЗаголовокФункции Тогда
|
||||||
|
|
||||||
|
УдалитьКомментарийИзСтроки(СтрокаМодуля);
|
||||||
|
ПозицияСкобки = СтрНайти(СтрокаМодуля, ")") > 0;
|
||||||
|
ЭтоКонецБлока = ПозицияСкобки > 0;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "#ОБЛАСТЬ")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "// #ОБЛАСТЬ") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.НачалоОбласти;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(СтрокаМодуля, "//") Тогда
|
||||||
|
|
||||||
|
СтрокаМодуля = Сред(СтрокаМодуля, 4);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "#КОНЕЦОБЛАСТИ")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "// #КОНЕЦОБЛАСТИ") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.КонецОбласти;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(СтрокаМодуля, "//") Тогда
|
||||||
|
|
||||||
|
СтрокаМодуля = Сред(СтрокаМодуля, 4);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "//") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.Комментарий;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "&") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.ДирективаКомпиляции;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "ПЕРЕМ") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.ОписаниеПеременной;
|
||||||
|
УдалитьКомментарийИзСтроки(СтрокаМодуля);
|
||||||
|
ЭтоКонецБлока = СтрНайти(СтрокаМодуля, ";") > 0;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "ПРОЦЕДУРА")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "ФУНКЦИЯ")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "FUNCTION")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "ПРОЦЕДУРА")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "ФУНКЦИЯ")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "FUNCTION") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ?(СтрНачинаетсяС(СтрокаМодуля, "ПРОЦЕДУРА"), ТипБлоковМодуля.ЗаголовокПроцедуры, ТипБлоковМодуля.ЗаголовокФункции);
|
||||||
|
|
||||||
|
УдалитьКомментарийИзСтроки(СтрокаМодуля);
|
||||||
|
ПозицияСкобки = СтрНайти(СтрокаМодуля, ")");
|
||||||
|
ЭтоКонецБлока = ПозицияСкобки > 0;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаМодуля, "КОНЕЦПРОЦЕДУРЫ")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "КОНЕЦФУНКЦИИ")
|
||||||
|
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "ENDFUNCTION") Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ?(СтрНачинаетсяС(СтрокаМодуля, "КОНЕЦПРОЦЕДУРЫ"), ТипБлоковМодуля.ОкончаниеПроцедуры, ТипБлоковМодуля.ОкончаниеФункции);
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
УдалитьКомментарийИзСтроки(СтрокаМодуля);
|
||||||
|
|
||||||
|
ИначеЕсли ПустаяСтрока(СтрокаМодуля) И ТекущийБлок <> ТипБлоковМодуля.Операторы Тогда
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.ПустаяСтрока;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
НовыйБлок = ТипБлоковМодуля.Операторы;
|
||||||
|
ЭтоКонецБлока = Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НовыйБлок = ТекущийБлок Тогда
|
||||||
|
|
||||||
|
КонечнаяСтрока = КонечнаяСтрока + 1;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(ТекущийБлок) Тогда
|
||||||
|
|
||||||
|
НоваяЗаписьОБлоке = БлокиМодуля.Добавить();
|
||||||
|
НоваяЗаписьОБлоке.ТипБлока = ТекущийБлок;
|
||||||
|
НоваяЗаписьОБлоке.НачальнаяСтрока = НачальнаяСтрока;
|
||||||
|
НоваяЗаписьОБлоке.КонечнаяСтрока = КонечнаяСтрока;
|
||||||
|
НоваяЗаписьОБлоке.ОписаниеБлока = Новый Структура;
|
||||||
|
|
||||||
|
НоваяЗаписьОБлоке.Содержимое = ПолучитьСодержимоеБлока(СодержимоеФайла, НачальнаяСтрока, КонечнаяСтрока);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НачальнаяСтрока = НомерСтроки;
|
||||||
|
КонечнаяСтрока = НомерСтроки;
|
||||||
|
ТекущийБлок = НовыйБлок;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НомерСтроки = КоличествоСтрокМодуля Тогда
|
||||||
|
|
||||||
|
НоваяЗаписьОБлоке = БлокиМодуля.Добавить();
|
||||||
|
НоваяЗаписьОБлоке.ТипБлока = ТекущийБлок;
|
||||||
|
НоваяЗаписьОБлоке.НачальнаяСтрока = НачальнаяСтрока;
|
||||||
|
НоваяЗаписьОБлоке.КонечнаяСтрока = КонечнаяСтрока;
|
||||||
|
НоваяЗаписьОБлоке.ОписаниеБлока = Новый Структура;
|
||||||
|
|
||||||
|
НоваяЗаписьОБлоке.Содержимое = ПолучитьСодержимоеБлока(СодержимоеФайла, НачальнаяСтрока, КонечнаяСтрока);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
СодержимоеМодуля = Новый Структура("Содержимое, БлокиМодуля", СодержимоеФайла.ПолучитьТекст(), БлокиМодуля);
|
||||||
|
|
||||||
|
Возврат СодержимоеМодуля;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Процедура УдалитьКомментарийИзСтроки(СтрокаМодуля)
|
||||||
|
|
||||||
|
ПозицияКомментария = СтрНайти(СтрокаМодуля, "//");
|
||||||
|
Если ПозицияКомментария > 0 Тогда
|
||||||
|
|
||||||
|
СтрокаМодуля = СокрП(Лев(СтрокаМодуля, ПозицияКомментария - 1));
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ПолучитьНазначениеБлока(Файл, Знач НачальнаяСтрока, Знач КонечнаяСтрока, ИмяБлока = "")
|
||||||
|
|
||||||
|
Назначение = "";
|
||||||
|
Если НачальнаяСтрока + 1 < КонечнаяСтрока Тогда
|
||||||
|
|
||||||
|
СтрокаМодуляНач = СокрЛП(Файл.ПолучитьСтроку(НачальнаяСтрока));
|
||||||
|
СтрокаМодуляКон = СокрЛП(Файл.ПолучитьСтроку(КонечнаяСтрока));
|
||||||
|
Если СтрНачинаетсяС(СтрокаМодуляНач, "////")
|
||||||
|
И СтрНачинаетсяС(СтрокаМодуляКон, "////") Тогда // да, это описание
|
||||||
|
|
||||||
|
Если Не ПустаяСтрока(ИмяБлока) Тогда
|
||||||
|
|
||||||
|
СтрокаМодуля2 = СокрЛП(Файл.ПолучитьСтроку(НачальнаяСтрока + 1));
|
||||||
|
Если СтрНачинаетсяС(СтрокаМодуля2, "// " + ИмяБлока) Тогда
|
||||||
|
|
||||||
|
НачальнаяСтрока = НачальнаяСтрока + 1;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// имени блока нет, пропускаем
|
||||||
|
НачальнаяСтрока = КонечнаяСтрока;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Для Ит = НачальнаяСтрока + 1 По КонечнаяСтрока - 1 Цикл
|
||||||
|
|
||||||
|
СтрокаМодуля = СокрЛП(Сред(Файл.ПолучитьСтроку(Ит), 3));
|
||||||
|
Назначение = Назначение + ?(ПустаяСтрока(Назначение), "", Символы.ПС) + СтрокаМодуля;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Назначение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьПараметрыМетода(СтрокаПараметров)
|
||||||
|
|
||||||
|
ПараметрыМетода = Новый ТаблицаЗначений;
|
||||||
|
ПараметрыМетода.Колонки.Добавить("Имя");
|
||||||
|
ПараметрыМетода.Колонки.Добавить("Знач");
|
||||||
|
ПараметрыМетода.Колонки.Добавить("ЗначениеПоУмолчанию");
|
||||||
|
ПараметрыМетода.Колонки.Добавить("ТипПараметра");
|
||||||
|
ПараметрыМетода.Колонки.Добавить("ОписаниеПараметра");
|
||||||
|
|
||||||
|
ДлинаСтроки = СтрДлина(СтрокаПараметров);
|
||||||
|
|
||||||
|
Пока Истина Цикл
|
||||||
|
|
||||||
|
Если ПустаяСтрока(СтрокаПараметров) Тогда
|
||||||
|
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтрокаПараметров = СокрЛП(СтрокаПараметров);
|
||||||
|
ПараметрМетода = ПараметрыМетода.Добавить();
|
||||||
|
ЗаполнитьЗначенияСвойств(ПараметрМетода, Новый Структура("ЗНАЧ, Имя, ЗначениеПоУмолчанию, ТипПараметра, ОписаниеПараметра", Ложь, "", Неопределено, "", ""));
|
||||||
|
|
||||||
|
// отделим ЗНАЧ
|
||||||
|
Если СтрНачинаетсяС(ВРег(СтрокаПараметров), "ЗНАЧ ") Тогда
|
||||||
|
|
||||||
|
ПараметрМетода.ЗНАЧ = Истина;
|
||||||
|
СтрокаПараметров = СокрЛП(Сред(СтрокаПараметров, 5));
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// отделим имя
|
||||||
|
ПозицияРавно = СтрНайти(СтрокаПараметров, "=");
|
||||||
|
ПозицияЗапятая = СтрНайти(СтрокаПараметров, ",");
|
||||||
|
|
||||||
|
Если ПозицияЗапятая + ПозицияРавно = 0 Тогда
|
||||||
|
|
||||||
|
// вся строка параметр
|
||||||
|
ПараметрМетода.Имя = СокрЛП(СтрокаПараметров);
|
||||||
|
СтрокаПараметров = "";
|
||||||
|
|
||||||
|
ИначеЕсли ПозицияРавно = 0 ИЛИ ПозицияРавно > ПозицияЗапятая И ПозицияЗапятая > 0 Тогда
|
||||||
|
|
||||||
|
// значения по умолчанию нет
|
||||||
|
ПараметрМетода.Имя = СокрЛП(Лев(СтрокаПараметров, ПозицияЗапятая - 1));
|
||||||
|
СтрокаПараметров = СокрЛП(Сред(СтрокаПараметров, ПозицияЗапятая + 1));
|
||||||
|
|
||||||
|
Иначе // есть значение по умолчанию
|
||||||
|
|
||||||
|
ПараметрМетода.Имя = СокрЛП(Лев(СтрокаПараметров, ПозицияРавно - 1));
|
||||||
|
СтрокаПараметров = СокрЛП(Сред(СтрокаПараметров, ПозицияРавно + 1));
|
||||||
|
ПозицияЗапятая = СтрНайти(СтрокаПараметров, ",");
|
||||||
|
Если ПозицияЗапятая = 0 Тогда
|
||||||
|
|
||||||
|
// до конца строки - это значение по умолчанию
|
||||||
|
ПараметрМетода.ЗначениеПоУмолчанию = СтрокаПараметров;
|
||||||
|
СтрокаПараметров = "";
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// надо отделить значение по умолчанию от следующего параметра
|
||||||
|
// варианты значения - число, строка, булево, Неопределено
|
||||||
|
ПозицияКавычки = СтрНайти(СтрокаПараметров, """");
|
||||||
|
Если ПозицияКавычки = 0 ИЛИ ПозицияКавычки > ПозицияЗапятая Тогда
|
||||||
|
|
||||||
|
// текущее значение по умолчанию не строковое
|
||||||
|
ПараметрМетода.ЗначениеПоУмолчанию = СокрЛП(Лев(СтрокаПараметров, ПозицияЗапятая - 1));
|
||||||
|
СтрокаПараметров = СокрЛП(Сред(СтрокаПараметров, ПозицияЗапятая + 1));
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЗначениеПараметра = "";
|
||||||
|
КавычкаОткрыта = Истина;
|
||||||
|
Пока Истина Цикл
|
||||||
|
|
||||||
|
ПозицияКавычки = СтрНайти(СтрокаПараметров, """", , 2);
|
||||||
|
КавычкаОткрыта = НЕ КавычкаОткрыта;
|
||||||
|
ЗначениеПараметра = ЗначениеПараметра + Лев(СтрокаПараметров, ПозицияКавычки);
|
||||||
|
СтрокаПараметров = Сред(СтрокаПараметров, ПозицияКавычки + 1);
|
||||||
|
|
||||||
|
Если ПустаяСтрока(СтрокаПараметров) Тогда
|
||||||
|
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ПозицияЗапятая = СтрНайти(СтрокаПараметров, ",");
|
||||||
|
ПозицияКавычки = СтрНайти(СтрокаПараметров, """", , 2);
|
||||||
|
|
||||||
|
Если ПозицияКавычки = 0 ИЛИ ПозицияКавычки > ПозицияЗапятая ИЛИ НЕ КавычкаОткрыта Тогда
|
||||||
|
|
||||||
|
|
||||||
|
ЗначениеПараметра = СокрЛП(ЗначениеПараметра + Лев(СтрокаПараметров, ПозицияЗапятая - 1));
|
||||||
|
СтрокаПараметров = СокрЛП(Сред(СтрокаПараметров, ПозицияЗапятая + 1));
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ПараметрМетода.ЗначениеПоУмолчанию = ЗначениеПараметра;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат ПараметрыМетода;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ДополнитьБлокиМодуля(БлокиМодуля, Файл, Модуль) Экспорт
|
||||||
|
|
||||||
|
ОписаниеМодуля = Новый Структура(
|
||||||
|
"Глобальный, ЕстьНазначениеМодуля, Назначение, Разделы",
|
||||||
|
Ложь, Ложь, "", Новый Массив);
|
||||||
|
|
||||||
|
НазначениеМодуляПрошли = Ложь;
|
||||||
|
РазделОткрыт = Ложь;
|
||||||
|
ЛокальнаяОбластьОткрыта = Ложь;
|
||||||
|
МетодОткрыт = Ложь;
|
||||||
|
|
||||||
|
Области = Новый Массив;
|
||||||
|
|
||||||
|
ТекущийРаздел = "";
|
||||||
|
ПоследнийБлокКомментария = Неопределено;
|
||||||
|
ПоследнийБлокМетода = Неопределено;
|
||||||
|
|
||||||
|
БлокиДляУдаления = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Блок Из БлокиМодуля Цикл
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("ЭтоРаздел", Ложь);
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяРаздела", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяОбласти", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("НазначениеРаздела", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяМетода", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("ПараметрыМетода", Неопределено);
|
||||||
|
Блок.ОписаниеБлока.Вставить("Назначение", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("Экспортный", Ложь);
|
||||||
|
Блок.ОписаниеБлока.Вставить("ТипВозвращаемогоЗначения", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("ОписаниеВозвращаемогоЗначения", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("Примеры", Новый Массив);
|
||||||
|
Блок.ОписаниеБлока.Вставить("Тело", "");
|
||||||
|
|
||||||
|
Если МетодОткрыт Тогда
|
||||||
|
|
||||||
|
БлокиДляУдаления.Добавить(Блок);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Блок.ТипБлока = ТипБлоковМодуля.ПустаяСтрока Тогда
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Блок.ТипБлока <> ТипБлоковМодуля.Комментарий Тогда
|
||||||
|
|
||||||
|
// если коммент не первый, значит уже и нет смысла искать описания
|
||||||
|
НазначениеМодуляПрошли = Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Блок.ТипБлока = ТипБлоковМодуля.Комментарий Тогда
|
||||||
|
|
||||||
|
Если НЕ НазначениеМодуляПрошли Тогда
|
||||||
|
|
||||||
|
// первый каммент считаем описанием модуля
|
||||||
|
НазначениеМодуляПрошли = Истина;
|
||||||
|
Назначение = ПолучитьНазначениеБлока(Файл, Блок.НачальнаяСтрока, Блок.КонечнаяСтрока);
|
||||||
|
|
||||||
|
Блок.ТипБлока = ТипБлоковМодуля.Описание;
|
||||||
|
ОписаниеМодуля.ЕстьНазначениеМодуля = НЕ ПустаяСтрока(Назначение);
|
||||||
|
ОписаниеМодуля.Назначение = Назначение;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ПоследнийБлокКомментария = Блок;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли Блок.ТипБлока = ТипБлоковМодуля.НачалоОбласти Тогда
|
||||||
|
|
||||||
|
СтрокаМодуля = СокрЛП(Файл.ПолучитьСтроку(Блок.НачальнаяСтрока));
|
||||||
|
ИмяОбласти = СокрЛП(Сред(СтрокаМодуля, СтрДлина("#Область") + 1));
|
||||||
|
|
||||||
|
ЭтоРаздел = Ложь;
|
||||||
|
Если Модуль.ТипМодуля = ТипМодуля.ОбщийМодуль Тогда
|
||||||
|
|
||||||
|
ЭтоРаздел = ТипОбласти.РазделыОбщегоМодуля.Найти(ИмяОбласти) <> Неопределено;
|
||||||
|
|
||||||
|
ИначеЕсли Модуль.ТипМодуля = ТипМодуля.МодульМенеджера Тогда
|
||||||
|
|
||||||
|
ЭтоРаздел = ТипОбласти.РазделыМодуляМенеджера.Найти(ИмяОбласти) <> Неопределено;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЭтоРаздел И (РазделОткрыт ИЛИ ЛокальнаяОбластьОткрыта ИЛИ МетодОткрыт) Тогда
|
||||||
|
|
||||||
|
// кривая структура модуля
|
||||||
|
ЭтоРаздел = Ложь;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекущаяОбласть = "";
|
||||||
|
Если Области.Количество() Тогда
|
||||||
|
|
||||||
|
ТекущаяОбласть = Области[Области.ВГраница()];
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("ЭтоРаздел", ЭтоРаздел);
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяРаздела", ТекущийРаздел);
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяОбласти", ТекущаяОбласть);
|
||||||
|
Блок.ОписаниеБлока.Вставить("НазначениеРаздела", "");
|
||||||
|
|
||||||
|
Если ЭтоРаздел Тогда
|
||||||
|
|
||||||
|
РазделОткрыт = Истина;
|
||||||
|
ТекущийРаздел = ИмяОбласти;
|
||||||
|
|
||||||
|
ОписаниеМодуля.Разделы.Добавить(ТекущийРаздел);
|
||||||
|
|
||||||
|
// заполним описание раздела
|
||||||
|
Если ПоследнийБлокКомментария <> Неопределено Тогда
|
||||||
|
|
||||||
|
Назначение = ПолучитьНазначениеБлока(Файл, ПоследнийБлокКомментария.НачальнаяСтрока, ПоследнийБлокКомментария.КонечнаяСтрока, ИмяОбласти);
|
||||||
|
Блок.ОписаниеБлока.Вставить("НазначениеРаздела", Назначение);
|
||||||
|
Если НЕ ПустаяСтрока(Назначение) Тогда
|
||||||
|
|
||||||
|
ПоследнийБлокКомментария.ТипБлока = ТипБлоковМодуля.Описание;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПоследнийБлокКомментария = Неопределено;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЛокальнаяОбластьОткрыта = Истина;
|
||||||
|
Области.Добавить(ИмяОбласти);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли Блок.ТипБлока = ТипБлоковМодуля.КонецОбласти Тогда
|
||||||
|
|
||||||
|
ПоследнийБлокКомментария = Неопределено;
|
||||||
|
|
||||||
|
Если ЛокальнаяОбластьОткрыта Тогда
|
||||||
|
|
||||||
|
Области.Удалить(Области.ВГраница());
|
||||||
|
ЛокальнаяОбластьОткрыта = Области.Количество();
|
||||||
|
|
||||||
|
ИначеЕсли РазделОткрыт Тогда
|
||||||
|
|
||||||
|
РазделОткрыт = Ложь;
|
||||||
|
ТекущийРаздел = "";
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// ошибка, пока не обрабатываю
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли Блок.ТипБлока = ТипБлоковМодуля.ЗаголовокПроцедуры
|
||||||
|
ИЛИ Блок.ТипБлока = ТипБлоковМодуля.ЗаголовокФункции Тогда
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяРаздела", ТекущийРаздел);
|
||||||
|
Если Области.Количество() Тогда
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяОбласти", Области[Области.ВГраница()]);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяОбласти", "");
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МетодОткрыт = Истина;
|
||||||
|
ПоследнийБлокМетода = Блок;
|
||||||
|
|
||||||
|
// получим имя метода
|
||||||
|
Заголовок = СтрЗаменить(Блок.Содержимое, Символы.ПС, " ");
|
||||||
|
Заголовок = СокрЛП(СтрЗаменить(Заголовок, Символы.Таб, " "));
|
||||||
|
Если Блок.ТипБлока = ТипБлоковМодуля.ЗаголовокПроцедуры Тогда
|
||||||
|
|
||||||
|
Заголовок = СокрЛП(Сред(Заголовок, СтрДлина("Процедура") + 1))
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(Заголовок, "Функция") Тогда
|
||||||
|
|
||||||
|
Заголовок = СокрЛП(Сред(Заголовок, СтрДлина("Функция") + 1))
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Заголовок = СокрЛП(Сред(Заголовок, СтрДлина("Function") + 1))
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// получим параметры метода
|
||||||
|
ПозицияСкобки = СтрНайти(Заголовок, "(");
|
||||||
|
ИмяМетода = Лев(Заголовок, ПозицияСкобки - 1);
|
||||||
|
СтрокаПараметров = СокрЛП(Сред(Заголовок, ПозицияСкобки + 1));
|
||||||
|
ПозицияСкобки = СтрНайти(СтрокаПараметров, ")", НаправлениеПоиска.СКонца);
|
||||||
|
СтрокаПараметров = СокрЛП(Лев(СтрокаПараметров, ПозицияСкобки - 1));
|
||||||
|
Заголовок = СокрЛП(Сред(Заголовок, СтрНайти(Заголовок, ")", НаправлениеПоиска.СКонца) + 1));
|
||||||
|
Блок.ОписаниеБлока.Вставить("ИмяМетода", ИмяМетода);
|
||||||
|
Блок.ОписаниеБлока.Вставить("ПараметрыМетода", ПолучитьПараметрыМетода(СтрокаПараметров));
|
||||||
|
Блок.ОписаниеБлока.Вставить("Назначение", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("Экспортный", СтрЗаканчиваетсяНа(ВРег(Заголовок), "ЭКСПОРТ"));
|
||||||
|
Блок.ОписаниеБлока.Вставить("ТипВозвращаемогоЗначения", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("ОписаниеВозвращаемогоЗначения", "");
|
||||||
|
Блок.ОписаниеБлока.Вставить("Примеры", Новый Массив);
|
||||||
|
|
||||||
|
// получим описание метода
|
||||||
|
Если ПоследнийБлокКомментария <> Неопределено Тогда
|
||||||
|
|
||||||
|
СтрокаКомментария = Файл.ПолучитьСтроку(ПоследнийБлокКомментария.НачальнаяСтрока);
|
||||||
|
СтрокаКомментария = СокрЛП(Сред(СтрокаКомментария, 3));
|
||||||
|
Если СтрНайти(СтрокаКомментария, ИмяМетода) Тогда
|
||||||
|
|
||||||
|
ПоследнийБлокКомментария.ТипБлока = ТипБлоковМодуля.Описание;
|
||||||
|
Назначение = "";
|
||||||
|
НомерСтрокиПараметры = Неопределено;
|
||||||
|
НомерСтрокиВозвращаемоеЗначение = Неопределено;
|
||||||
|
НомерСтрокиПример = Неопределено;
|
||||||
|
НомерСтроки = Неопределено;
|
||||||
|
Для Ит = ПоследнийБлокКомментария.НачальнаяСтрока + 1 По ПоследнийБлокКомментария.КонечнаяСтрока Цикл
|
||||||
|
|
||||||
|
СтрокаКомментария = Файл.ПолучитьСтроку(Ит);
|
||||||
|
СтрокаКомментария = СокрЛП(Сред(СтрокаКомментария, 3));
|
||||||
|
Если СтрНачинаетсяС(СтрокаКомментария, "Параметры:") Тогда
|
||||||
|
|
||||||
|
НомерСтрокиПараметры = Ит;
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаКомментария, "Возвращаемое значение:") Тогда
|
||||||
|
|
||||||
|
НомерСтрокиВозвращаемоеЗначение = Ит;
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаКомментария, "Пример") Тогда
|
||||||
|
|
||||||
|
НомерСтрокиПример = Ит;
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Назначение = Назначение + ?(ПустаяСтрока(Назначение), "", Символы.ПС) + СтрокаКомментария;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если НомерСтрокиПараметры <> Неопределено Тогда
|
||||||
|
|
||||||
|
ИмяПараметра = Неопределено;
|
||||||
|
ОписаниеПараметра = "";
|
||||||
|
ТипПараметра = "";
|
||||||
|
Для Ит = НомерСтрокиПараметры + 1 По ПоследнийБлокКомментария.КонечнаяСтрока Цикл
|
||||||
|
|
||||||
|
СтрокаКомментария = Файл.ПолучитьСтроку(Ит);
|
||||||
|
СтрокаКомментария = СокрЛП(Сред(СтрокаКомментария, 3));
|
||||||
|
Если СтрНачинаетсяС(СтрокаКомментария, "Возвращаемое значение:") Тогда
|
||||||
|
|
||||||
|
НомерСтрокиВозвращаемоеЗначение = Ит;
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
ИначеЕсли СтрНачинаетсяС(СтрокаКомментария, "Пример") Тогда
|
||||||
|
|
||||||
|
НомерСтрокиПример = Ит;
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// шаблон параметра
|
||||||
|
// 'Имя' - 'Тип' - 'Описаание'
|
||||||
|
// 'продолжение описания'
|
||||||
|
|
||||||
|
СоставСтрокиКомментария = СтрРазделить(СтрокаКомментария, "-");
|
||||||
|
Если СоставСтрокиКомментария.Количество() >= 3 Тогда
|
||||||
|
|
||||||
|
Если ИмяПараметра <> Неопределено Тогда
|
||||||
|
|
||||||
|
СтрокаПараметраМетода = Блок.ОписаниеБлока.ПараметрыМетода.Найти(ИмяПараметра, "Имя");
|
||||||
|
Если СтрокаПараметраМетода <> Неопределено Тогда
|
||||||
|
|
||||||
|
СтрокаПараметраМетода.ТипПараметра = ТипПараметра;
|
||||||
|
СтрокаПараметраМетода.ОписаниеПараметра = ОписаниеПараметра;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// это описание параметра
|
||||||
|
ИмяПараметра = СокрЛП(СоставСтрокиКомментария[0]);
|
||||||
|
ТипПараметра = СокрЛП(СоставСтрокиКомментария[1]);
|
||||||
|
|
||||||
|
ПозицияДефис = СтрНайти(СтрокаКомментария, "-");
|
||||||
|
ПозицияДефис = СтрНайти(СтрокаКомментария, "-",, ПозицияДефис + 1);
|
||||||
|
ОписаниеПараметра = СокрЛП(Сред(СтрокаКомментария, ПозицияДефис + 1));
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// продолжение описания параметра либо косячное описание
|
||||||
|
ОписаниеПараметра = ОписаниеПараметра + ?(ПустаяСтрока(ОписаниеПараметра), "", Символы.ПС) + СтрокаКомментария;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если ИмяПараметра <> Неопределено Тогда
|
||||||
|
|
||||||
|
СтрокаПараметраМетода = Блок.ОписаниеБлока.ПараметрыМетода.Найти(ИмяПараметра, "Имя");
|
||||||
|
Если СтрокаПараметраМетода <> Неопределено Тогда
|
||||||
|
|
||||||
|
СтрокаПараметраМетода.ТипПараметра = ТипПараметра;
|
||||||
|
СтрокаПараметраМетода.ОписаниеПараметра = ОписаниеПараметра;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НомерСтрокиВозвращаемоеЗначение <> Неопределено Тогда
|
||||||
|
|
||||||
|
ОписаниеПараметра = "";
|
||||||
|
ТипПараметра = "";
|
||||||
|
Для Ит = НомерСтрокиВозвращаемоеЗначение + 1 По ПоследнийБлокКомментария.КонечнаяСтрока Цикл
|
||||||
|
|
||||||
|
СтрокаКомментария = Файл.ПолучитьСтроку(Ит);
|
||||||
|
СтрокаКомментария = СокрЛП(Сред(СтрокаКомментария, 3));
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(СтрокаКомментария, "Пример") Тогда
|
||||||
|
|
||||||
|
НомерСтрокиПример = Ит;
|
||||||
|
Прервать;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// шаблон параметра
|
||||||
|
// 'Тип' - 'Описаание'
|
||||||
|
// 'продолжение описания'
|
||||||
|
|
||||||
|
СоставСтрокиКомментария = СтрРазделить(СтрокаКомментария, "-");
|
||||||
|
Если ТипПараметра = "" И СоставСтрокиКомментария.Количество() >= 2 Тогда
|
||||||
|
|
||||||
|
// это описание параметра
|
||||||
|
ТипПараметра = СокрЛП(СоставСтрокиКомментария[0]);
|
||||||
|
|
||||||
|
ПозицияДефис = СтрНайти(СтрокаКомментария, "-");
|
||||||
|
ОписаниеПараметра = СокрЛП(Сред(СтрокаКомментария, ПозицияДефис + 1));
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// продолжение описания параметра либо косячное описание
|
||||||
|
ОписаниеПараметра = ОписаниеПараметра + ?(ПустаяСтрока(ОписаниеПараметра), "", Символы.ПС) + СтрокаКомментария;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если ТипПараметра <> "" Тогда
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("ТипВозвращаемогоЗначения", ТипПараметра);
|
||||||
|
Блок.ОписаниеБлока.Вставить("ОписаниеВозвращаемогоЗначения", ОписаниеПараметра);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НомерСтрокиПример <> Неопределено Тогда
|
||||||
|
|
||||||
|
Примеры = Новый Массив;
|
||||||
|
СтрокаПример = "";
|
||||||
|
Для Ит = НомерСтрокиПример + 1 По ПоследнийБлокКомментария.КонечнаяСтрока Цикл
|
||||||
|
|
||||||
|
СтрокаКомментария = Файл.ПолучитьСтроку(Ит);
|
||||||
|
СтрокаКомментария = СокрЛП(Сред(СтрокаКомментария, 3));
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(СтрокаКомментария, "Пример") Тогда
|
||||||
|
|
||||||
|
Примеры.Добавить(СтрокаПример);
|
||||||
|
СтрокаПример = "";
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
ИначеЕсли Не ПустаяСтрока(СтрокаКомментария) Тогда
|
||||||
|
|
||||||
|
СтрокаПример = СтрокаПример + ?(ПустаяСтрока(СтрокаПример), "", Символы.ПС)
|
||||||
|
+ СтрокаКомментария;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если СтрокаПример <> "" Тогда
|
||||||
|
|
||||||
|
Примеры.Добавить(СтрокаПример);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Примеры.Количество() Тогда
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("Примеры", Примеры);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Блок.ОписаниеБлока.Вставить("Назначение", Назначение);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// кривое описание либо ХЗ что это
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПоследнийБлокКомментария = Неопределено;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ИначеЕсли Блок.ТипБлока = ТипБлоковМодуля.ОкончаниеПроцедуры
|
||||||
|
ИЛИ Блок.ТипБлока = ТипБлоковМодуля.ОкончаниеФункции Тогда
|
||||||
|
|
||||||
|
МетодОткрыт = Ложь;
|
||||||
|
ПоследнийБлокКомментария = Неопределено;
|
||||||
|
|
||||||
|
ПоследнийБлокМетода.ОписаниеБлока.Тело = ПолучитьСодержимоеБлока(Файл, ПоследнийБлокМетода.КонечнаяСтрока + 1, Блок.НачальнаяСтрока - 1);
|
||||||
|
ПоследнийБлокМетода = Неопределено;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// забываем последний каммент-блок
|
||||||
|
ПоследнийБлокКомментария = Неопределено;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
// // удалим служебные блоки
|
||||||
|
// Для Каждого Блок Из БлокиДляУдаления Цикл
|
||||||
|
|
||||||
|
// БлокиМодуля.Удалить(Блок);
|
||||||
|
|
||||||
|
// КонецЦикла;
|
||||||
|
|
||||||
|
КоличествоБлоков = БлокиМодуля.Количество() - 1;
|
||||||
|
Для Ит = 0 По КоличествоБлоков Цикл
|
||||||
|
|
||||||
|
Блок = БлокиМодуля[КоличествоБлоков - Ит];
|
||||||
|
Если Блок.ТипБлока = ТипБлоковМодуля.ОкончаниеПроцедуры
|
||||||
|
ИЛИ Блок.ТипБлока = ТипБлоковМодуля.ОкончаниеФункции
|
||||||
|
ИЛИ Блок.ТипБлока = ТипБлоковМодуля.КонецОбласти
|
||||||
|
ИЛИ Блок.ТипБлока = ТипБлоковМодуля.Описание
|
||||||
|
ИЛИ Блок.ТипБлока = ТипБлоковМодуля.ПустаяСтрока Тогда
|
||||||
|
|
||||||
|
БлокиМодуля.Удалить(Блок);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Модуль.ОписаниеМодуля = ОписаниеМодуля;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ПолучитьСодержимоеБлока(Текст, НачальнаяСтрока, КонечнаяСтрока)
|
||||||
|
|
||||||
|
СодержимоеБлока = "";
|
||||||
|
Для Ит = НачальнаяСтрока По КонечнаяСтрока Цикл
|
||||||
|
|
||||||
|
СтрокаМодуля = Текст.ПолучитьСтроку(Ит);
|
||||||
|
СодержимоеБлока = СодержимоеБлока + ?(ПустаяСтрока(СодержимоеБлока), "", Символы.ПС) + СтрокаМодуля;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат СодержимоеБлока;
|
||||||
|
|
||||||
|
КонецФункции
|
Loading…
Reference in New Issue
Block a user