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>
|
15
packagedef
15
packagedef
@ -1,5 +1,14 @@
|
||||
|
||||
Описание.Имя("parserbia")
|
||||
.Версия("1.0.2")
|
||||
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПродукта.os");
|
||||
ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
|
||||
|
||||
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
|
||||
|
||||
Описание.Имя(ИмяПродукта)
|
||||
.ВерсияСреды("1.0.21")
|
||||
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
|
||||
.ЗависитОт("logos", "1.2.1")
|
||||
.ЗависитОт("fs", "1.0.0")
|
||||
.ВключитьФайл("src")
|
||||
.ВключитьФайл("lib.config");
|
||||
.ВключитьФайл("readme.md");
|
||||
.ВключитьФайл("LICENSE");
|
@ -8,3 +8,11 @@
|
||||
|
||||
`#Использовать "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 @@
|
||||
Перем РазделПрограммныйИнтерфейс Экспорт;
|
||||
Перем РазделСлужебныйПрограммныйИнтерфейс Экспорт;
|
||||
Перем РазделСлужебныеПроцедурыИФункции Экспорт;
|
||||
Перем РазделОбработчикиСобытий Экспорт;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
РазделПрограммныйИнтерфейс = "ПрограммныйИнтерфейс";
|
||||
РазделСлужебныйПрограммныйИнтерфейс = "СлужебныйПрограммныйИнтерфейс";
|
||||
РазделСлужебныеПроцедурыИФункции = "СлужебныеПроцедурыИФункции";
|
||||
РазделОбработчикиСобытий = "ОбработчикиСобытий";
|
||||
|
||||
РазделыОбщегоМодуля = Новый Массив;
|
||||
РазделыОбщегоМодуля.Добавить(РазделПрограммныйИнтерфейс);
|
||||
@ -20,3 +22,4 @@
|
||||
РазделыМодуляМенеджера.Добавить(РазделПрограммныйИнтерфейс);
|
||||
РазделыМодуляМенеджера.Добавить(РазделСлужебныйПрограммныйИнтерфейс);
|
||||
РазделыМодуляМенеджера.Добавить(РазделСлужебныеПроцедурыИФункции);
|
||||
РазделыМодуляМенеджера.Добавить(РазделОбработчикиСобытий);
|
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