diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" index 5777f364..523239f0 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\321\200\320\276\320\265\320\272\321\202\320\260EDT.os" @@ -9,13 +9,19 @@ Перем РабочаяОбласть; Перем СписокПапокСПроектами; Перем СписокИменПроектов; +Перем ВерсияEDT; + Перем КаталогОтчетов; +Перем ПутьКФайламПроекта; + Перем ИмяФайлаРезультата; Перем УдалятьФайлРезультата; Перем ИмяПредыдущегоФайлаРезультата; Перем ИсключенияВОшибках; Перем ПропускиВОшибках; +Перем кэш; + /////////////////////////////////////////////////////////////////////////////////////////////////// // Прикладной интерфейс @@ -25,27 +31,45 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--allure-results", "Путь к каталогу результатов Allure"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--exception-file", - "Путь файла с указанием пропускаемых ошибок + "Путь файла с указанием пропускаемых ошибок. Необязательный аргумент. | Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть | Кодировка: UTF-8"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--validation-result", - "Необязательный аргумент. Путь к файлу, в который будут записаны результаты проверки проекта."); + "Путь к файлу, в который будут записаны результаты проверки проекта. Необязательный аргумент."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--prev-validation-result", - "Необязательный аргумент. Путь к файлу с предыдущими результатами проверки проекта. + "Путь к файлу с предыдущими результатами проверки проекта. Необязательный аргумент. | Если заполнен, то результат будет записан как разность новых ошибок и старых. | Ошибки и предупреждения, которые есть в предыдущем файле, но которых нет в новом - будут помечены как passed (Исправлено). | Ошибки и предупреждения, которые есть только в новом файле результатов - будут помечены как failed (Ошибки) и broken (Предупреждения). | Все остальные ошибки и предупреждения, которые есть в обоих файлах, будут помечены как skipped (Пропущено)."); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--workspace-location", "Расположение рабочей области"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-url", + "Путь к файлам проекта. Необязательный аргумент. + | Если заполнен, то в отчетах аллюр будут ссылки на конкретные строки с ошибками. + | Пример: --project-url https://github.com/1C-Company/GitConverter/tree/master/GitConverter/src "); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--EDTversion", + "Используемая версия EDT. Необязательный аргумент. + | Необходима, если зарегистрировано одновременно несколько версий. + | Узнать доступные версии можно командой ""ring help"" + | Пример: --EDTversion 1.9.1"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--workspace-location", + "Расположение рабочей области. Необязательный аргумент. + | Если не указан, то проверка выполнятся не будет. Актуально для создания отчетов по существующему файлу результатов."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-list", - "Необязательный аргумент. Список папок, откуда загрузить проекты в формате EDT для проверки. + "Список папок, откуда загрузить проекты в формате EDT для проверки. Необязательный аргумент. | Одновременно можно использовать только один агрумент: project-list или project-name-list"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-name-list", - "Необязательный аргумент. Cписок имен проектов в текущей рабочей области, откуда загрузить проекты в формате EDT для проверки. + "Список имен проектов в текущей рабочей области, откуда загрузить проекты в формате EDT для проверки. Необязательный аргумент. | Одновременно можно использовать только один агрумент: project-list или project-name-list. | - | Пример выполнения: + | Примеры выполнения: | vanessa-runner edt-validate --project-list D:/project-1 D:/project-2 --workspace-location D:/workspace + | runner edt-validate --allure-results ""D:/allure-results/"" ^ + | --workspace-location ""D:/workspace"" ^ + | --project-list ""D:/GIT_Repo/GitConverter/"" ^ + | --exception-file ""D:/WORKDIR%excp.txt"" ^ + | --validation-result ""D:/validation-result.txt"" ^ + | --prev-validation-result ""D:/validation-result.txt"" ^ + | --project-url https://github.com/1C-Company/GitConverter/tree/master/GitConverter/src | | ВНИМАНИЕ! Параметры, которые перечислены далее, не используются. | @@ -65,11 +89,11 @@ Лог = ДополнительныеПараметры.Лог; - ПрочитатьПараметры( ПараметрыКоманды ); + ИнициализацияПараметров( ПараметрыКоманды ); Если ЗначениеЗаполнено( ИмяПредыдущегоФайлаРезультата ) Тогда - тзРезультатПред = ПрочитатьТаблицуИзФайлаРезультата(ИмяПредыдущегоФайлаРезультата); + тзРезультатПред = ПрочитатьТаблицуИзФайлаРезультата( ИмяПредыдущегоФайлаРезультата ); КонецЕсли; @@ -95,51 +119,55 @@ // { приватная часть -Процедура ПрочитатьПараметры( Знач ПараметрыКоманды ) +Процедура ИнициализацияПараметров( Знач ПараметрыКоманды ) Лог.Отладка("Чтение параметров"); - + КаталогОтчетов = ПараметрыКоманды["--allure-results"]; - + Если КаталогОтчетов = Неопределено Тогда - + КаталогОтчетов = ""; Лог.Отладка(" Каталог отчетов (--allure-results) не задан."); - + Иначе - + Лог.Отладка(" Каталог отчетов (--allure-results): %1", КаталогОтчетов); - + КонецЕсли; + ВерсияEDT = ПараметрыКоманды["--EDTversion"]; РабочаяОбласть = ПараметрыКоманды["--workspace-location"]; СписокПапокСПроектами = ПараметрыКоманды["--project-list"]; СписокИменПроектов = ПараметрыКоманды["--project-name-list"]; + ПутьКФайламПроекта = ПараметрыКоманды["--project-url"]; + + Лог.Отладка(" Версия EDT (--EDTversion): %1", Строка( ВерсияEDT ) ); + Лог.Отладка(" Рабочая область (--workspace-location): %1", Строка( РабочаяОбласть ) ); + Лог.Отладка(" Список папок с проектами (--project-list): %1", Строка( СписокПапокСПроектами ) ); + Лог.Отладка(" Список имен проектов (--project-name-list): %1", Строка( СписокИменПроектов ) ); + Лог.Отладка(" Путь к файлам проекта (--project-url): %1", Строка( ПутьКФайламПроекта ) ); - Лог.Отладка(" Рабочая область (--workspace-location): %1", Строка( РабочаяОбласть )); - Лог.Отладка(" Список папок с проектами (--project-list): %1", Строка( СписокПапокСПроектами )); - Лог.Отладка(" Список имен проектов (--project-name-list): %1", Строка( СписокИменПроектов )); - ИмяФайлаРезультата = ПараметрыКоманды["--validation-result"]; УдалятьФайлРезультата = Ложь; - + Если ИмяФайлаРезультата = Неопределено Тогда - + ИмяФайлаРезультата = ПолучитьИмяВременногоФайла("out"); УдалятьФайлРезультата = Истина; Лог.Отладка(" Файл результата не задан (--validation-result). Будет использован временный файл."); - + КонецЕсли; - + Лог.Отладка(" Файл результата (--validation-result): %1", ИмяФайлаРезультата); ИмяПредыдущегоФайлаРезультата = ПараметрыКоманды["--prev-validation-result"]; - + Лог.Отладка(" Файл предыдущего результата (--prev-validation-result): %1", Строка( ИмяПредыдущегоФайлаРезультата )); ИсключенияВОшибках = ИсключаемыеОшибки(); ПропускиВОшибках = СодержимоеФайлаПропускаемыхОшибок( ПараметрыКоманды["--exception-file"] ); - + ПарсерJSON = Новый ПарсерJSON(); КонецПроцедуры @@ -148,7 +176,7 @@ Если Не ЗначениеЗаполнено( РабочаяОбласть ) Тогда - Лог.Информация("Рабочая область (--workspace-location) не указана. Проверка проекта пропущена."); + Лог.Информация( "Рабочая область (--workspace-location) не указана. Проверка проекта пропущена." ); Возврат Истина; @@ -157,20 +185,31 @@ Если Не ЗначениеЗаполнено( СписокПапокСПроектами ) И Не ЗначениеЗаполнено( СписокИменПроектов ) Тогда - Лог.Информация("Проекты к проверке (--project-list или project-name-list) не указаны. Проверка проекта пропущена."); + Лог.Информация( "Проекты к проверке (--project-list или project-name-list) не указаны. Проверка проекта пропущена." ); Возврат Истина; КонецЕсли; Попытка - + // Для EDT критично, чтобы файла не существовало - ОбщиеМетоды.УдалитьФайлЕслиОнСуществует(ИмяФайлаРезультата); + ОбщиеМетоды.УдалитьФайлЕслиОнСуществует( ИмяФайлаРезультата ); Команда = Новый Команда; - Команда.УстановитьСтрокуЗапуска( "ring edt workspace validate" ); - Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); + + Если ЗначениеЗаполнено( ВерсияEDT ) Тогда + + строкаЗапуска = СтрШаблон( "ring edt@%1 workspace validate", ВерсияEDT ); + + Иначе + + строкаЗапуска = "ring edt workspace validate"; + + КонецЕсли; + + Команда.УстановитьСтрокуЗапуска( строкаЗапуска ); + Команда.УстановитьКодировкуВывода( КодировкаТекста.ANSI ); Команда.ДобавитьПараметр( "--workspace-location " + ОбщиеМетоды.ОбернутьПутьВКавычки( РабочаяОбласть ) ); Команда.ДобавитьПараметр( "--file " + ОбщиеМетоды.ОбернутьПутьВКавычки( ИмяФайлаРезультата ) ); @@ -182,12 +221,12 @@ Команда.ДобавитьПараметр("--project-name-list " + ОбщиеМетоды.ОбернутьПутьВКавычки( СписокИменПроектов ) ); КонецЕсли; - Лог.Информация("Начало проверки EDT-проекта"); + Лог.Информация( "Начало проверки EDT-проекта" ); началоЗамера = ТекущаяДата(); КодВозврата = Команда.Исполнить(); - Лог.Информация( "Проверка EDT-проекта завершена за %1с", Окр( ТекущаяДата()- началоЗамера )); + Лог.Информация( "Проверка EDT-проекта завершена за %1с", Окр( ТекущаяДата() - началоЗамера ) ); Исключение @@ -210,18 +249,29 @@ КонецПроцедуры -Функция СодержимоеФайлаПропускаемыхОшибок(Знач ИмяФайлаПропускаемыхОшибок) +Функция СодержимоеФайлаПропускаемыхОшибок( Знач ИмяФайлаПропускаемыхОшибок ) Результат = Новый Массив; - Если Не ЗначениеЗаполнено(ИмяФайлаПропускаемыхОшибок) Тогда + Если Не ЗначениеЗаполнено( ИмяФайлаПропускаемыхОшибок ) Тогда Лог.Информация( "Файл пропускаемых ошибок (--exception-file) не указан. Пропуски не используются." ); Возврат Результат; КонецЕсли; - Лог.Отладка("Чтение файла пропускаемых ошибок из %1", ИмяФайлаПропускаемыхОшибок); + Файл = Новый Файл( ИмяФайлаПропускаемыхОшибок ); + Если Не Файл.Существует() Тогда + + // Отсутствие этого файла не критично, поэтому обойдемся без исключений + + Лог.Предупреждение( "Файл пропускаемых ошибок (--exception-file) %1 не найден.", ИмяФайлаПропускаемыхОшибок ); + + Возврат Результат; + + КонецЕсли; + + Лог.Отладка( "Чтение файла пропускаемых ошибок из %1", ИмяФайлаПропускаемыхОшибок ); - ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаПропускаемыхОшибок, КодировкаТекста.UTF8); + ЧтениеТекста = Новый ЧтениеТекста( ИмяФайлаПропускаемыхОшибок, КодировкаТекста.UTF8 ); ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку(); Пока ПрочитаннаяСтрока <> Неопределено Цикл Если Не ПустаяСтрока(ПрочитаннаяСтрока) Тогда @@ -232,6 +282,8 @@ ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку(); КонецЦикла; + ЧтениеТекста.Закрыть(); + Лог.Отладка("Прочитано пропусков: %1", Результат.Количество()); Возврат Результат; @@ -255,7 +307,7 @@ // Создание таблицы результата Функция ПрочитатьТаблицуИзФайлаРезультата( Знач пПутьКФайлу ) - Лог.Отладка("Чтение файла результата %1", пПутьКФайлу); + Лог.Отладка( "Чтение файла результата %1", пПутьКФайлу ); тз = Новый ТаблицаЗначений; тз.Колонки.Добавить( "ДатаОбнаружения" ); @@ -265,6 +317,24 @@ тз.Колонки.Добавить( "Положение" ); тз.Колонки.Добавить( "Описание" ); + Файл = Новый Файл( пПутьКФайлу ); + Если Не Файл.Существует() Тогда + + // Файла может не быть если + // 1) Это первый запуск получение разностной таблицы + // 2) Нет ошибок (EDT просто не создает файл результата) + // 3) EDT вернул ошибку + // 4) Проверка EDT не запускалась, выполняется только построение отчета Аллюр + // По пунктам 1-3 стоит вернуть пустую таблицу, + // по 4 не все так однозначно, но если и вызывать исключение, то при инициализации параметров + + Лог.Информация( "Файл отчета об ошибках %1 не найден.", пПутьКФайлу ); + + Возврат тз; + + КонецЕсли; + + ЧтениеТекста = Новый ЧтениеТекста( пПутьКФайлу, КодировкаТекста.UTF8 ); ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку(); @@ -321,7 +391,7 @@ КонецЦикла; ЧтениеТекста.Закрыть(); - + Лог.Отладка("Из файла %1 прочитано %2 строк", пПутьКФайлу, тз.Количество()); Возврат тз; @@ -338,18 +408,18 @@ // Ложь, не нашли Функция СтрокаВходитВМассив( Знач ПроверяемаяСтрока, Знач МассивСтрокИсключений ) - Для каждого СтрИсключения Из МассивСтрокИсключений Цикл - + Для Каждого СтрИсключения Из МассивСтрокИсключений Цикл + Если СтрНайти(Нрег(ПроверяемаяСтрока), СтрИсключения) > 0 Тогда - + Возврат Истина; - + КонецЕсли; - + КонецЦикла; - + Возврат Ложь; - + КонецФункции Функция РазностнаяТаблицаРезультатов( Знач пТЗ_пред, Знач пТЗ_нов ) @@ -360,9 +430,9 @@ тз = пТЗ_нов.Скопировать(); тз.Колонки.Добавить("Изменение"); - тз.ЗаполнитьЗначения(-1, "Изменение" ); + тз.ЗаполнитьЗначения( - 1, "Изменение" ); - Для каждого цСтрока Из тз_стар Цикл + Для Каждого цСтрока Из тз_стар Цикл ЗаполнитьЗначенияСвойств( тз.Добавить(), цСтрока ); @@ -370,7 +440,7 @@ тз.Свернуть( "Тип,Проект,Метаданные,Положение,Описание" , "Изменение" ); - Для каждого цСтрока Из тз Цикл + Для Каждого цСтрока Из тз Цикл Если цСтрока.Изменение = 0 Тогда @@ -422,10 +492,10 @@ УдалитьФайлы( КаталогОтчетов, "*.json" ); Лог.Отладка(" Создание файлов json по таблице проверки в каталоге %1.", КаталогОтчетов); - + количествоСозданныхФайлов = 0; - Для каждого цСтрока Из пТаблицаПроверки Цикл + Для Каждого цСтрока Из пТаблицаПроверки Цикл СтруктураВыгрузки = ПолучитьОписаниеСценарияАллюр2(); СтруктураВыгрузки.name = цСтрока.Метаданные + ". " + цСтрока.Положение + ": " + цСтрока.Описание; @@ -454,7 +524,7 @@ структ = Новый Структура( "name,value", "package", цСтрока.Метаданные ); СтруктураВыгрузки.labels.Добавить( структ ); - Для каждого цКонтекст Из ПолучитьКонтексты( цСтрока.Описание ) Цикл + Для Каждого цКонтекст Из ПолучитьКонтексты( цСтрока.Описание ) Цикл структ = Новый Структура( "name,value", "tag", цКонтекст ); СтруктураВыгрузки.labels.Добавить( структ ); @@ -464,6 +534,19 @@ структ = Новый Структура( "name,value", "story", ОписаниеФункциональности( цСтрока.Описание ) ); СтруктураВыгрузки.labels.Добавить( структ ); + ссылкаНаСтроку = ПолучитьСсылкуНаСтроку( цСтрока.Метаданные, цСтрока.Положение ); + + Если ЗначениеЗаполнено( ссылкаНаСтроку ) Тогда + + ОписаниеСсылки = Новый Структура("name,url,type"); + ОписаниеСсылки.name = "Перейти на строку с ошибкой"; + ОписаниеСсылки.url = ссылкаНаСтроку; + ОписаниеСсылки.type = ""; + + СтруктураВыгрузки.links.Добавить( ОписаниеСсылки ); + + КонецЕсли; + РеальноеИмяФайла = ОбъединитьПути( КаталогОтчетов, "" + СтруктураВыгрузки.uuid + "-result.json" ); ЗаписатьФайлJSON( РеальноеИмяФайла, СтруктураВыгрузки); @@ -473,7 +556,7 @@ КонецЦикла; лог.Отладка( " Созданы файлы отчетов (%1) в каталоге %2 за %3с", количествоСозданныхФайлов, КаталогОтчетов, Окр( ТекущаяДата() - началоЗамера )); - + СоздатьФайлКатегорий(); КонецПроцедуры @@ -486,29 +569,22 @@ категории = Новый Массив; - массивСтатусов = Новый Массив; - массивСтатусов.Добавить( "failed" ); - структ = Новый Структура( "name,matchedStatuses", "Ошибка", массивСтатусов ); - категории.Добавить( структ ); + категории.Добавить( ОписаниеКатегории( "Ошибка", "failed" ) ); + категории.Добавить( ОписаниеКатегории( "Предупреждение", "broken" ) ); + категории.Добавить( ОписаниеКатегории( "Пропущено", "skipped" ) ); + категории.Добавить( ОписаниеКатегории( "Исправлено", "passed" ) ); - массивСтатусов = Новый Массив; - массивСтатусов.Добавить( "broken" ); - структ = Новый Структура( "name,matchedStatuses", "Предупреждение", массивСтатусов ); - категории.Добавить( структ ); + ЗаписатьФайлJSON( имяФайлаКатегорий, категории); - массивСтатусов = Новый Массив; - массивСтатусов.Добавить( "skipped" ); - структ = Новый Структура( "name,matchedStatuses", "Пропущено", массивСтатусов ); - категории.Добавить( структ ); +КонецПроцедуры + +Функция ОписаниеКатегории( Знач пНаименование, Знач пСтатус ) массивСтатусов = Новый Массив; - массивСтатусов.Добавить( "passed" ); - структ = Новый Структура( "name,matchedStatuses", "Исправлено", массивСтатусов ); - категории.Добавить( структ ); + массивСтатусов.Добавить( пСтатус ); + Возврат Новый Структура( "name,matchedStatuses", пНаименование, массивСтатусов ); - ЗаписатьФайлJSON( имяФайлаКатегорий, категории); - -КонецПроцедуры +КонецФункции Функция ПолучитьКонтексты( Знач пОписание ) @@ -518,7 +594,7 @@ Если начало < конец И конец > 0 Тогда - стрКонтексты = Сред( пОписание, начало + 1, конец - начало -1 ); + стрКонтексты = Сред( пОписание, начало + 1, конец - начало - 1 ); Возврат СтрРазделить( стрКонтексты, "," ); @@ -613,6 +689,191 @@ КонецФункции +Функция ПолучитьСсылкуНаСтроку( Знач пМетаданные, Знач пСтрока ) + + Если Не ЗначениеЗаполнено( ПутьКФайламПроекта ) Тогда + + Возврат ""; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( пСтрока ) Тогда + + Возврат ""; + + КонецЕсли; + + компоненты = СтрРазделить( пМетаданные, "." ); + + Если компоненты.Количество() = 0 Тогда + + Возврат ""; + + КонецЕсли; + + компонентыСсылки = Новый Массив; + компонентыСсылки.Добавить( ПутьКФайламПроекта ); + + // Тип метаданных + + Если кэш = Неопределено Тогда + + кэш = Новый Структура; + + кэш.Вставить( "Метаданные", СоответствиеМетаданнымКаталогам() ); + кэш.Вставить( "Модули", СоответствиеМодулейФайлам() ); + + КонецЕсли; + + имяМетаданных = ВРег( компоненты[0] ); + + каталог = кэш.Метаданные[ имяМетаданных ]; + + Если Не ЗначениеЗаполнено( каталог ) Тогда + + Возврат ""; + + КонецЕсли; + + Если компоненты.Количество() < 3 Тогда + + Возврат ""; + + КонецЕсли; + + компонентыСсылки.Добавить( каталог ); + + // Имя объекта + + компонентыСсылки.Добавить( компоненты[1] ); + + типОбъекта = ВРег( компоненты[2] ); + + имяФайла = кэш.Модули[типОбъекта]; + + Если ЗначениеЗаполнено( имяФайла ) Тогда + + компонентыСсылки.Добавить( имяФайла ); + + ИначеЕсли типОбъекта = "ФОРМА" Тогда + + компонентыСсылки.Добавить( "Forms" ); + + Если компоненты.Количество() > 3 Тогда + + компонентыСсылки.Добавить( компоненты[3] ); + + КонецЕсли; + + Если компоненты.Количество() > 5 Тогда + + Если ВРег( компоненты[4] ) = "ФОРМА" + И ВРег( компоненты[5] ) = "МОДУЛЬ" Тогда + + компонентыСсылки.Добавить( "Module.bsl" ); + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли типОбъекта = "КОМАНДА" Тогда + + компонентыСсылки.Добавить( "Commands" ); + + Если компоненты.Количество() > 3 Тогда + + компонентыСсылки.Добавить( компоненты[3] ); + + КонецЕсли; + + Если компоненты.Количество() > 4 Тогда + + Если ВРег( компоненты[4] ) = "МОДУЛЬКОМАНДЫ" Тогда + + компонентыСсылки.Добавить( "CommandModule.bsl" ); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат СтрСоединить( компонентыСсылки, "/" ) + "#L" + СтрЗаменить( ВРег( пСтрока ), "СТРОКА ", "" ); + +КонецФункции + +Функция СоответствиеМетаданнымКаталогам() + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить( "РегистрБухгалтерии", "AccountingRegisters" ); + Соответствие.Вставить( "РегистрНакопления", "AccumulationRegisters" ); + Соответствие.Вставить( "БизнесПроцесс", "BusinessProcesses" ); + Соответствие.Вставить( "РегистрРасчета", "CalculationRegisters" ); + Соответствие.Вставить( "Справочник", "Catalogs" ); + Соответствие.Вставить( "ПланСчетов", "ChartsOfAccounts" ); + Соответствие.Вставить( "ПланВидовРасчета", "ChartsOfCalculationTypes" ); + Соответствие.Вставить( "ПланВидовХарактеристик", "ChartsOfCharacteristicTypes" ); + Соответствие.Вставить( "ОбщаяГруппа", "CommandGroups" ); + Соответствие.Вставить( "ОбщийРеквизит", "CommonAttributes" ); + Соответствие.Вставить( "ОбщаяКоманда", "CommonCommands" ); + Соответствие.Вставить( "ОбщаяФорма", "CommonForms" ); + Соответствие.Вставить( "ОбщийМодуль", "CommonModules" ); + Соответствие.Вставить( "ОбщаяКартинка", "CommonPictures" ); + Соответствие.Вставить( "ОбщийМакет", "CommonTemplates" ); + Соответствие.Вставить( "Константа", "Constants" ); + Соответствие.Вставить( "Обработка", "DataProcessors" ); + Соответствие.Вставить( "ОпределяемыйТип", "DefinedTypes" ); + Соответствие.Вставить( "ЖурналДокумента", "DocumentJournals" ); + Соответствие.Вставить( "Нумератор", "DocumentNumerators" ); + Соответствие.Вставить( "Документ", "Documents" ); + Соответствие.Вставить( "Перечисление", "Enums" ); + Соответствие.Вставить( "ПодпискаНаСобытие", "EventSubscriptions" ); + Соответствие.Вставить( "ПланОбмена", "ExchangePlans" ); + Соответствие.Вставить( "ВнешнийИсточник", "ExternalDataSources" ); + Соответствие.Вставить( "КритерийОтбора", "FilterCriteria" ); + Соответствие.Вставить( "ФункциональнаяОпция", "FunctionalOptions" ); + Соответствие.Вставить( "ПарамертФункциональыхОпций", "FunctionalOptionsParameters" ); + Соответствие.Вставить( "HTTPСервис", "HTTPServices" ); + Соответствие.Вставить( "РегистрСведений", "InformationRegisters" ); + Соответствие.Вставить( "Язык", "Languages" ); + Соответствие.Вставить( "Отчет", "Reports" ); + Соответствие.Вставить( "Роль", "Roles" ); + Соответствие.Вставить( "РегламентноеЗадание", "ScheduledJobs" ); + Соответствие.Вставить( "Последовательность", "Sequences" ); + Соответствие.Вставить( "ПарамертСеанса", "SessionParameters" ); + Соответствие.Вставить( "ХранилищеНастроек", "SettingsStorages" ); + Соответствие.Вставить( "ЭлементСтиля", "StyleItems" ); + Соответствие.Вставить( "Подсистема", "Subsystems" ); + Соответствие.Вставить( "Задача", "Tasks" ); + Соответствие.Вставить( "WebСервис", "WebServices" ); + Соответствие.Вставить( "XDTOПакет", "XDTOPackages" ); + + соотВРег = Новый Соответствие; + + Для Каждого цЭлемент Из Соответствие Цикл + + соотВРег.Вставить( ВРег( цЭлемент.Ключ ), цЭлемент.Значение ); + + КонецЦикла; + + Возврат соотВРег; + +КонецФункции + +Функция СоответствиеМодулейФайлам() + + Соответствие = Новый Соответствие(); + + Соответствие.Вставить( "МОДУЛЬОБЪЕКТА", "ObjectModule.bsl" ); + Соответствие.Вставить( "МОДУЛЬ", "Module.bsl" ); + Соответствие.Вставить( "МОДУЛЬМЕНЕДЖЕРА", "ManagerModule.bsl" ); + Соответствие.Вставить( "МОДУЛЬНАБОРАЗАПИСЕЙ", "RecordSetModule.bsl" ); + + Возврат Соответствие; + +КонецФункции + Процедура ЗаписатьФайлJSON(Знач ИмяФайла, Знач пЗначение) Запись = Новый ЗаписьТекста;