diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fee28f69..1ee87aca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,62 +1,15 @@ -# MIT License -# Copyright (C) 2020 Tymko Oleg and contributors -# All rights reserved. +name: Публикация релиза -name: Подготовка релиза и публикация в хабе -# Только события создания и изменения релиза on: - release: - types: [published, edited] - -env: - PACKAGE_MASK: vanessa-runner-*.ospx + release: + types: + - published + workflow_dispatch: jobs: - build: - runs-on: self-hosted - # runs-on: ${{ matrix.os }} - # strategy: - # fail-fast: false - # matrix: - # os: [ubuntu-latest] - # oscript_version: ['1.4.0'] - - steps: - # Загрузка проекта - - name: Актуализация - uses: actions/checkout@v2 - - # Установка OneScript конкретной версии - # - name: Установка OneScript - # uses: otymko/setup-onescript@v1.1 - # with: - # version: ${{ matrix.oscript_version }} - - # Установка зависимостей пакета - - name: Установка зависимостей - run: | - opm install - # run: | - # opm install opm - # opm install - - - name: Сборка пакета - run: opm build - - - name: Заливка артефактов - uses: actions/upload-artifact@v2 - with: - name: package.zip - path: ./${{ env.PACKAGE_MASK }} - - - name: Заливка в релиз - uses: AButler/upload-release-assets@v1.0 - with: - files: ./${{ env.PACKAGE_MASK }} - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Публикация в hub.oscript.io - shell: cmd - run: opm push -f ./${{ env.PACKAGE_MASK }} --token ${{ env.TOKEN }} -c stable - env: - TOKEN: ${{ secrets.OSHUB_TOKEN }} + release: + uses: autumn-library/workflows/.github/workflows/release.yml@v1 + with: + package_mask: "vanessa-runner-*.ospx" # change me! + secrets: + PUSH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 7f1a42f7..f470c077 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -15,15 +15,15 @@ jobs: # matrix: # # os: [ubuntu-latest, windows-latest] # oscript_version: ['1.4.0'] - + steps: # Загрузка проекта - name: Актуализация - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: # Disabling shallow clone is recommended for improving relevancy of reporting fetch-depth: 0 - + # Установка OneScript конкретной версии # - name: Установка OneScript # uses: otymko/setup-onescript@v1.1 @@ -34,13 +34,14 @@ jobs: - name: Установка зависимостей shell: cmd run: | - opm install --dev - opm install -l + call opm install --dev + call opm install -l + call opm u v8unpack@1.0.5 # run: | # opm install opm # opm install add # opm install --dev - + # Задача тестирования, в результате ожидается успешное выполнение - name: Тестирование run: oscript ./tasks/test.os diff --git a/.gitignore b/.gitignore index 8c691272..45c8d21a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,6 @@ bdd-exec\.xml **/ConfigDumpInfo.xml .vscode/launch.json -tools/oscript.cfg -src/oscript.cfg # Каталоги build/ diff --git a/README.md b/README.md index 36c1cb40..fe6bb056 100644 --- a/README.md +++ b/README.md @@ -498,9 +498,9 @@ call vrunner <параметры запуска> "-Server", "-ExternalConnection", "-ThickClientOrdinaryApplication" + // "-Extension" : "ИмяРасширения", + // "-AllExtensions" : true ] - // "-Extension" : "ИмяРасширения", - // "-AllExtensions" : true } } ``` diff --git a/epf/readme.md b/epf/readme.md index 784fa348..9e04d1c8 100644 --- a/epf/readme.md +++ b/epf/readme.md @@ -18,7 +18,12 @@ + **ЗагрузитьРасширение** позволяет подключать расширение в режиме предприятия и получать результат ошибки. Предназначено для подключения в конфигурациях, основанных на БСП. В параметрах /C передается путь к расширению и путь к файлу лога подключения. -+ **ЗагрузитьВнешниеОбработки** позволяет загрузить все внешние обработки и подключить в справочник "Дополнительные отчеты и обработки", т.к. их очень много то первым параметром идет каталог, вторым параметром путь к файлу лога. Все обработки обновляются согласно версиям. ++ **ЗагрузитьОбработки** позволяет загрузить\подключить все внешние обработки из файлов в справочник "Дополнительные отчеты и обработки". Первым параметром указывается каталог, в котором хранятся внешние обработки, а вторым параметром - путь к файлу лога. Все обработки обновляются согласно версиям. Также можно указать параметр `ЗавершитьРаботуСистемы`. Параметры разделяются через точку с запятой. + + Примеры: + - `ПутьКФайламДляЗагрузки;ПутьКЛогФайлу` + - `ПутьКФайламДляЗагрузки;ПутьКЛогФайлу;ЗавершитьРаботуСистемы` + - `C:\Users\user\Documents\СпрДопОтчетыОбработки;C:\Users\user\Documents\log.txt` + **БлокировкаРаботыСВнешнимиРесурсами** позволяет блокировать, разблокировать работу с внешними ресурсами и выключать отдельные регламентные задания (по наименованию). diff --git "a/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 61f7956a..857edf05 100644 --- "a/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -31,8 +31,10 @@ ПараметрыКоманднойСтроки = ПолучитьСтруктуруПараметров(СтрокаЗапуска); ПреобразоватьПараметрыКоторыеНачинаютсяСТочкиКНормальнымПутям(ПараметрыКоманднойСтроки); + ЗапуститьТолькоПроверкуПрименимостиРасширений = ЗначениеПараметраБулево("ЗапуститьТолькоПроверкуПрименимостиРасширений", ПараметрыКоманднойСтроки, Ложь); + ПутьРасширения = ЗначениеПараметра("Путь", ПараметрыКоманднойСтроки, - "Не задан путь расширения - формат Путь=НужныйПутьФайлаРасширения"); + "Не задан путь расширения - формат Путь=НужныйПутьФайлаРасширения", Не ЗапуститьТолькоПроверкуПрименимостиРасширений); ИмяРасширения = ЗначениеПараметра("Имя", ПараметрыКоманднойСтроки, "Не задано имя расширения - формат Имя=МоеИмя", Ложь); @@ -45,12 +47,18 @@ ПараметрыКоманднойСтроки); ИспользоватьОсновныеРолиДляВсехПользователей = ЗначениеПараметраБулево("ИспользоватьОсновныеРолиДляВсехПользователей", ПараметрыКоманднойСтроки, Истина); + ПроверитьПрименимость = ЗначениеПараметраБулево("ПроверитьПрименимость", ПараметрыКоманднойСтроки, Ложь); + ЗагружатьРасширениеПриНаличииПроблемПрименимости = ЗначениеПараметраБулево("ЗагружатьРасширениеПриНаличииПроблемПрименимости", ПараметрыКоманднойСтроки, Ложь); ПараметрыРасширения = Новый Структура; ПараметрыРасширения.Вставить("БезопасныйРежим", БезопасныйРежимРасширения); ПараметрыРасширения.Вставить("ЗащитаОтОпасныхДействий", ЗащитаОтОпасныхДействийРасширения); ПараметрыРасширения.Вставить("ИспользоватьОсновныеРолиДляВсехПользователей", - ИспользоватьОсновныеРолиДляВсехПользователей); + ИспользоватьОсновныеРолиДляВсехПользователей); + ПараметрыРасширения.Вставить("ПроверитьПрименимость", + ПроверитьПрименимость); + ПараметрыРасширения.Вставить("ЗагружатьРасширениеПриНаличииПроблемПрименимости", + ЗагружатьРасширениеПриНаличииПроблемПрименимости); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -68,11 +76,14 @@ КонецПопытки; Попытка - - ЗагрузитьРасширения(ПутьРасширения, ИмяРасширения, Перезаписывать, - ПараметрыРасширения, - ЗавершитьРаботуСистемы, ОтключитьЛогикуНачалаРаботыСистемы); - + Если ЗапуститьТолькоПроверкуПрименимостиРасширений Тогда + Лог("Указан ключ <ЗапуститьТолькоПроверкуПрименимостиРасширений> будет выполнена только проверка применимости. Расширения с этим ключем загружены не будут!", "Информация"); + ПроверитьВозможностьПрименимостиРасширений(); + Иначе + ЗагрузитьРасширения(ПутьРасширения, ИмяРасширения, Перезаписывать, + ПараметрыРасширения, + ЗавершитьРаботуСистемы, ОтключитьЛогикуНачалаРаботыСистемы); + КонецЕсли; Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -104,10 +115,13 @@ |Можно указать как путь каталога с несколькими расширениями, так и путь каталога с одним расширением. | |Любые параметры, кроме первого (Путь), являются необязательными. + |Если указан параметр ЗапуститьТолькоПроверкуПрименимостиРасширений выполняется только проверка применимости всех расширений в конфигурации. Параметр (Путь) в этом случае указывать не нужно. |Если параметр (БезопасныйРежим;ЗащитаОтОпасныхДействий;ЗавершитьРаботуСистемы) не указан, расширение будет загружено без него. |Если параметр Перезаписывать указан, если соответствующие расширение будет переустановлено. | Если параметр Перезаписывать не указан, будет выдана ошибка, если расширение с таким именем уже установлено!. |Если указано ЗавершитьРаботуСистемы=Ложь, работа 1С:Предприятия не будет завершена. + |Если параметр ПроверитьПрименимость указан, перед загрузкой расширения будет выполнена проверка на наличие проблем применимости расширения. + | Если, несмотря на наличие проблем применимости, нужно загрузить расширение - необходимо указать параметр ЗагружатьРасширениеПриНаличииПроблемПрименимости | |По умолчанию простой режим запуска Путь=Путь загружает расширение из файла, отключая безопасный режим и защиту от опасных действий. |Для платформы 8.3.15 и выше по умолчанию расширение загружается с использованим основных ролей расширения для всех пользователей. @@ -199,6 +213,9 @@ ОписаниеЗащиты = Новый("ОписаниеЗащитыОтОпасныхДействий"); ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = ПараметрыРасширения.ЗащитаОтОпасныхДействий; + + ПроверитьПрименимость = ПараметрыРасширения.ПроверитьПрименимость; + ЗагружатьРасширениеПриНаличииПроблемПрименимости = ПараметрыРасширения.ЗагружатьРасширениеПриНаличииПроблемПрименимости; Расширение = РасширенияКонфигурации.Создать(); Расширение.БезопасныйРежим = ПараметрыРасширения.БезопасныйРежим; @@ -208,7 +225,17 @@ Расширение.ИспользоватьОсновныеРолиДляВсехПользователей = ПараметрыРасширения.ИспользоватьОсновныеРолиДляВсехПользователей; КонецЕсли; - + + Если ПроверитьПрименимость И Не ПовторнаяУстановка Тогда + МассивПроблемПрименимости = Расширение.ПроверитьВозможностьПрименения(ДвоичныеДанныеРасширения, Истина); + ВывестиДанныеОПроблемахПрименимости(МассивПроблемПрименимости, Имя); + Если МассивПроблемПрименимости.Количество() > 0 И НЕ ЗагружатьРасширениеПриНаличииПроблемПрименимости Тогда + ЛогСервер("Расширение не удалось установить. Обнаружены ошибки применимости! + | Если вы хотите загрузить расширение не смотря на ошибки применимости, то используйте параметр <ЗагружатьРасширениеПриНаличииПроблемПрименимости;>"); + ВызватьИсключение "Установка не удалась"; + КонецЕсли; + КонецЕсли; + Попытка Расширение.Записать(ДвоичныеДанныеРасширения); Исключение @@ -331,6 +358,38 @@ КонецПроцедуры +&НаСервере +Процедура ПроверитьВозможностьПрименимостиРасширений() + МассивПроблемПрименимости = РасширенияКонфигурации.ПроверитьВозможностьПримененияВсех(); + ВывестиДанныеОПроблемахПрименимости(МассивПроблемПрименимости); + Если МассивПроблемПрименимости.Количество() > 0 Тогда + ВызватьИсключение "При проверке применимости обнаружены ошибки!"; + Иначе + ЛогСервер("Ошибок применимости не обнаружено!", "Информация") + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ВывестиДанныеОПроблемахПрименимости(МассивПроблемПрименимости, ИмяНовогоРасширения = "") + + СтрокаОшибокПрименимости = ""; + Шаблон = "В расширении <%1> обнаружена проблема с важностью <%2>: + |%3"; + + Для Каждого Проблема Из МассивПроблемПрименимости Цикл + СтрокаОшибокПрименимости = СтрокаОшибокПрименимости + Символы.ПС + СтрШаблон(Шаблон, + ?(ЗначениеЗаполнено(Проблема.Расширение.Имя), Проблема.Расширение.Имя, ИмяНовогоРасширения), + Строка(Проблема.Важность), + Проблема.Описание); + КонецЦикла; + + Если НЕ СтрокаОшибокПрименимости = "" Тогда + ЛогСервер("При проверке применимости расширения обнаружены следующие проблемы: + | + |" + СтрокаОшибокПрименимости, "Информация"); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область БиблиотекаЗапускаВанессаРаннер diff --git "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" index d9904d6a..a5517eee 100644 --- "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" +++ "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -35,5 +35,31 @@ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Путь к файлу результата</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ошибка обновления</v8:content> + </v8:item> + + + xs:boolean + + \ No newline at end of file diff --git "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 27bd6253..81138ea7 100644 --- "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -16,6 +16,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОшибкаОбновления = Ложь; + Попытка Выполнить("ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(""ОбщиеНастройкиПользователя"", |""ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"", Ложь);"); @@ -30,11 +32,25 @@ ПрекратитьРаботуСистемы(); //Сообщить("Заглушка - завершаем работу системы"); Возврат; - КонецЕсли; + КонецЕсли; + + ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); + СтрокаПоиска = "exitCodePath="; + Для каждого Стр из ПараметрыЗапуска Цикл + Если СтрНайти(Стр, СтрокаПоиска) > 0 Тогда + ПутьКФайлуРезультата = СтрЗаменить(Стр, СтрокаПоиска, ""); + Сообщить("Путь файла лога " + ПутьКФайлуРезультата); + УдалитьФайлРезультата(); + Прервать; + КонецЕсли; + КонецЦикла; ПодключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияПрограммы", 10, Истина); ПодключитьОбработчикОжидания("ПроверитьЛегальностьОбновления", 2); - + Если СуществуетПодсистемаМультиязычность() Тогда + ПодключитьОбработчикОжидания("ПроверитьРегиональныеНастройки", 2); + ПроверитьРегиональныеНастройки(); + КонецЕсли; ПроверитьНеобходимостьЗавершенияПрограммы(); ПроверитьЛегальностьОбновления(); КонецПроцедуры @@ -47,6 +63,8 @@ СтрокаНеудачиОбновления = Нрег(НСтр("ru='Не удалось выполнить обновлени';uk='Не вдалося виконати оновленн'")); СтрокаНачальноеЗаполнение = НСтр("ru='начальное заполнение';uk='початкове заповнення'"); + СтрокаПереходСДругойПрограммы = НСтр("ru='переход';uk='переход'"); + СтрокаНевыполненыДополнительныеПроцедуры = НСтр("ru='не выполнены дополнительные процедуры'"); СтрокаОбновлениеВерсии = НСтр("ru='обновление версии';uk='оновлення версії'" ); СтрокаЧтоНового = НРег(НСтр("ru='Что нового в конфигурации';uk='Що нового в конфігурації'")); @@ -71,6 +89,15 @@ ФормаНачальногоЗаполненияНайденаОдинРаз = Истина; ФормаНачальногоЗаполненияНайдена = Истина; ОбновитьПрогресс = Истина; + ИначеЕсли Найти(ЗаголовокНРег, СтрокаПереходСДругойПрограммы) > 0 Тогда + + ФормаНачальногоЗаполненияНайденаОдинРаз = Истина; + ФормаНачальногоЗаполненияНайдена = Истина; + ОбновитьПрогресс = Истина; + ИначеЕсли Найти(ЗаголовокНРег, СтрокаНевыполненыДополнительныеПроцедуры) > 0 Тогда + + ФормаОбновленияНайдена = Истина; + КонецЕсли; Если ОбновитьПрогресс Тогда @@ -80,16 +107,24 @@ КонецЕсли; + Если Найти(ЗаголовокНРег, СтрокаНевыполненыДополнительныеПроцедуры)>0 Тогда + Если Не Содержимое = Неопределено И ТипЗнч(Содержимое) = Тип("УправляемаяФорма") Тогда + Содержимое.Закрыть(Истина); + МожемЗавершатьРаботу = Ложь; + Прервать; + КонецЕсли; + КонецЕсли; + Если СчетчикОжиданияРезультатов > 0 И Найти(ЗаголовокНРег, СтрокаЧтоНового)>0 Тогда СчетчикОжиданияРезультатов = МаксИтерацийОжиданияРезультатов + 1; Сообщить(""+ТекущаяДата() + " - Удачное завершение обновления"); - МожноЗавершатьРаботу = Истина; Прервать; КонецЕсли; Если Найти(ЗаголовокНРег, СтрокаНеудачиОбновления)>0 Тогда СчетчикОжиданияРезультатов = МаксИтерацийОжиданияРезультатов + 1; МожноЗавершатьРаботу = Истина; + ОшибкаОбновления = Истина; Попытка Если ТипЗнч(Содержимое) = Тип("УправляемаяФорма") Тогда @@ -190,6 +225,9 @@ &НаКлиенте Процедура ЗавершитьРаботу() Экспорт + Если Не ОшибкаОбновления Тогда + ЗаписатьФайлРезультата(); + КонецЕсли; ПрекратитьРаботуСистемы(); КонецПроцедуры @@ -202,15 +240,86 @@ Рез = Описание.Имя = "СтандартныеПодсистемы"; Исключение ИнфоОшибки = ИнформацияОбОшибке(); - //Сообщить("Описание = '" + ИнфоОшибки.Описание + "'", СтатусСообщения.Внимание); - //Сообщить("Модуль = '" + ИнфоОшибки.ИмяМодуля + "'", СтатусСообщения.Важное); - //Сообщить("НомерСтроки = '" + ИнфоОшибки.НомерСтроки + "'", СтатусСообщения.Важное); - //Сообщить("ИсходнаяСтрока = '" + ИнфоОшибки.ИсходнаяСтрока + "'", СтатусСообщения.Важное); Рез = НРег(ИнфоОшибки.ИмяМодуля) = НРег("ОбщийМодуль.ОбновлениеИнформационнойБазыБСП.Модуль"); КонецПопытки; Возврат Рез; КонецФункции +&НаКлиенте +Процедура ЗаписатьФайлРезультата() + + Если ПутьКФайлуРезультата = "" Тогда + Возврат; + КонецЕсли; + + ТекстовыйФайл = Новый ТекстовыйДокумент; + ТекстовыйФайл.УстановитьТекст("0"); + ТекстовыйФайл.Записать(ПутьКФайлуРезультата, КодировкаТекста.UTF8); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьФайлРезультата() + + Если ПутьКФайлуРезультата = "" Тогда + Возврат; + КонецЕсли; + + Попытка + УдалитьФайлы(ПутьКФайлуРезультата); + Исключение + ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьВЖурналРегистрации(ТекстСообщения); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьРегиональныеНастройки() Экспорт + СтрокаРегиональныеНастройки = НРег(НСтр("ru='Региональные настройки'")); + + Окна = ПолучитьОкна(); + Для каждого Окн Из Окна Цикл + Если ТипЗнч(Окн) = Тип("ОкноКлиентскогоПриложения") Тогда + Содержимое = Окн.ПолучитьСодержимое(); + Если Найти(НРег(Строка(Окн.Заголовок)), СтрокаРегиональныеНастройки) > 0 Тогда + Попытка + Если ТипЗнч(Содержимое) = Тип("УправляемаяФорма") Тогда + Содержимое.Закрыть(Новый Структура("Отказ", Ложь));; + СчетчикОжиданияРезультатов = 0; + КонецЕсли; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + + ОтключитьОбработчикОжидания("ПроверитьРегиональныеНастройки"); + + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция СуществуетПодсистемаМультиязычность() + Рез = Ложь; + Попытка + Выполнить("Рез = ОбщегоНазначенияКлиент.ПодсистемаСуществует(""СтандартныеПодсистемы.Мультиязычность"");"); + Исключение + КонецПопытки; + Возврат Рез; +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаписатьВЖурналРегистрации(Комментарий); + ЗаписьЖурналаРегистрации(КлючЖР(), УровеньЖурналаРегистрации.Ошибка, Неопределено, Неопределено, Комментарий); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция КлючЖР() + Возврат "VanessaRunner.ЗакрытьПредприятие"; +КонецФункции + СчетчикОжиданияРезультатов = 0; МаксИтерацийОжиданияРезультатов = 5; ИндикаторВыполнения = 0; diff --git "a/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 9701eae3..9e701284 100644 --- "a/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -242,7 +242,7 @@ Функция СоздатьПервогоАдминистратораПриНеобходимости(Имя) Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда - Лог("Уже существуют пользователь. Пользователь-администратор не создан!"); + Лог("Уже существуют пользователи. Пользователь-администратор не создан!"); Возврат Ложь; КонецЕсли; @@ -252,9 +252,11 @@ Администратор.ПоказыватьВСпискеВыбора = Истина; Администратор.ПолноеИмя = Имя; - Если Метаданные.Роли.Найти("ПолныеПрава") <> Неопределено Тогда - Администратор.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - КонецЕсли; + СнятьЗащитуОтОпасныхДействий(Администратор); + + ДобавитьРольПользователю(Администратор, "ПолныеПрава"); + ДобавитьРольПользователю(Администратор, "АдминистраторСистемы"); + ДобавитьРольПользователю(Администратор, "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок"); Администратор.Язык = Метаданные.Языки.Русский; Администратор.Записать(); @@ -266,7 +268,7 @@ КонецФункции -&НаСервере +&НаСервереБезКонтекста Процедура Лог(Знач Комментарий, Знач Уровень = "Ошибка") Если Не ЗначениеЗаполнено(Уровень) Тогда @@ -288,9 +290,34 @@ КонецПроцедуры -&НаСервере +&НаСервереБезКонтекста +Процедура СнятьЗащитуОтОпасныхДействий(ПользовательИБ) + + Попытка + + ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий; + ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь; + + ПользовательИБ.ЗащитаОтОпасныхДействий = ОписаниеЗащиты; + + Исключение + Лог("Не удалось снять защиту от опасных действий пользователю"); + КонецПопытки + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьРольПользователю(ПользовательИБ, ИмяРоли) + + Если Метаданные.Роли.Найти(ИмяРоли) <> Неопределено Тогда + ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИмяРоли]); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста Функция КлючЖР() Возврат "VanessaRunner.СозданиеПользователей"; КонецФункции -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git "a/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" "b/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 5954eb5f..aad75a99 100644 --- "a/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" +++ "b/features/step_definitions/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -58,7 +58,7 @@ УстановитьПутьКБазеВБазыДляУдаленияВКонтексте(СтрокаБазыДанных); Ожидаем.Что(МенеджерСпискаБаз.ПолучитьИмяБазыВСписке("/F" +СтрокаБазыДанных), - "Искали базу в списке баз /F" +СтрокаБазыДанных).Равно(Новый Файл(БДД.ПолучитьИзКонтекста("РабочийКаталог")).ИмяБезРасширения); + "Искали базу в списке баз /F" +СтрокаБазыДанных).Равно(Новый Файл(БДД.ПолучитьИзКонтекста("РабочийКаталог")).Имя); КонецПроцедуры @@ -70,9 +70,8 @@ УстановитьПутьКБазеВБазыДляУдаленияВКонтексте(СтрокаПутиБазы); Парсер = МенеджерСпискаБаз.ПолучитьПарсерБаз(); - ИмяПроекта = Новый Файл(СтрокаПутиБазы).ИмяБезРасширения; - Ожидаем.Что(Парсер.НайтиПоИмени(ИмяПроекта)).Существует(); - + ИмяПроекта = Новый Файл(СтрокаПутиБазы).Имя; + Ожидаем.Что(Парсер.НайтиПоИмени(ИмяПроекта), "База не найдена по имени").Существует(); КонецПроцедуры diff --git "a/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" "b/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" index e9ca06aa..74eb4aa1 100644 --- "a/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" +++ "b/features/\320\220\320\262\321\202\320\276\321\201\320\261\320\276\321\200\320\272\320\260\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272\320\237\321\200\320\270\320\241\320\261\320\276\321\200\320\272\320\265\320\237\320\260\320\272\320\265\321\202\320\260.feature" @@ -12,5 +12,6 @@ Допустим Я создаю временный каталог и сохраняю его в контекст Допустим Я собираю пакет во временном каталоге И Я устанавливаю временный каталог как рабочий каталог + И каталог "oscript_modules/vanessa-runner" не существует Когда я устанавливаю пакет из файла собранного пакета Тогда файл "oscript_modules/vanessa-runner/epf/ЗакрытьПредприятие.epf" существует diff --git "a/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" "b/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" index 700df31f..8797f1a3 100644 --- "a/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" +++ "b/features/\320\222\320\275\320\265\321\210\320\275\320\270\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.feature" @@ -30,13 +30,10 @@ И Я добавляю параметр "--command" для команды "oscript" И Я добавляю параметр "СоздатьАдминистратора;Имя=Администратор;ЗавершитьРаботуСистемы" для команды "oscript" И Я добавляю параметр "--execute СоздатьПользователей.epf" для команды "oscript" - # И Я добавляю параметр "--execute $runnerRoot\epf\СоздатьПользователей.epf" для команды "oscript" И Я добавляю параметр " --ibconnection /Fbuild/ib" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" - # И Я сообщаю вывод команды "oscript" - Тогда Вывод команды "oscript" содержит | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | | Информация: Пользователь-администратор с именем Администратор создан! | @@ -60,10 +57,9 @@ Тогда Вывод команды "oscript" содержит | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | | Пользователь ИБ не идентифицирован | - | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено. | Тогда Вывод команды "oscript" не содержит | Ошибка: Неудача при обработке параметров запуска | - И Код возврата команды "oscript" равен 0 + И Код возврата команды "oscript" равен 1 Сценарий: Неудача создания первого пользователя-администратора, если пользователи существуют @@ -80,8 +76,7 @@ Тогда Вывод команды "oscript" содержит | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | - | Ошибка: Уже существуют пользователь. Пользователь-администратор не создан! | - | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено. | + | Ошибка: Уже существуют пользователи. Пользователь-администратор не создан! | Тогда Вывод команды "oscript" не содержит | Ошибка: Неудача при обработке параметров запуска | - И Код возврата команды "oscript" равен 0 + И Код возврата команды "oscript" равен 1 diff --git "a/features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" "b/features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" new file mode 100644 index 00000000..05a1fb7b --- /dev/null +++ "b/features/\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.feature" @@ -0,0 +1,69 @@ +#language: ru + +Функционал: Загрузка в режиме Предприятие + Как разработчик + Я хочу иметь возможность загрузить режим 1С:Предприятие + Чтобы изменять данные или выполнять обработку обновления + +Контекст: + Дано я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию + И Я очищаю параметры команды "oscript" в контексте + + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf $runnerRoot\epf\ЗакрытьПредприятие ЗакрытьПредприятие.epf --nocacheuse --language ru" + И Я показываю вывод команды + И Код возврата команды "oscript" равен 0 + + Дано Я очищаю параметры команды "oscript" в контексте + И Я установил рабочий каталог как текущий каталог + И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL" + +Сценарий: Запуск "ЗакрытьПредприятие.epf" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os run" для команды "oscript" + + И Я добавляю параметр "--execute ЗакрытьПредприятие.epf" для команды "oscript" + И Я добавляю параметр " --ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + Когда Я выполняю команду "oscript" + + И Я показываю вывод команды + + Тогда Вывод команды "oscript" содержит + | ИНФОРМАЦИЯ - Выполняю команду/действие в режиме 1С:Предприятие | + | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено | + Тогда Вывод команды "oscript" не содержит + | Пользователь ИБ не идентифицирован | + И Код возврата команды "oscript" равен 0 + +Сценарий: Запуск с неверным именем пользователя ИБ + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os run" для команды "oscript" + + И Я добавляю параметр "--execute ЗакрытьПредприятие.epf" для команды "oscript" + И Я добавляю параметр " --ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--db-user НеизвестныйПользователь" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + # И Я добавляю параметр "--online-file log.txt" для команды "oscript" + Когда Я выполняю команду "oscript" + + И Я показываю вывод команды + + Тогда Вывод команды "oscript" содержит + | Пользователь ИБ не идентифицирован | + Тогда Вывод команды "oscript" не содержит + | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено | + И Код возврата команды "oscript" равен 1 + +Сценарий: Запуск с открытием навигационной ссылки + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os run" для команды "oscript" + И Я добавляю параметр "--url e1cib/navigationpoint/startpage" для команды "oscript" + И Я добавляю параметр "--execute ЗакрытьПредприятие.epf" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + + Тогда Код возврата команды "oscript" равен 0 + И Вывод команды "oscript" содержит + | ИНФОРМАЦИЯ - Выполнение команды/действия в режиме 1С:Предприятие завершено | diff --git "a/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" "b/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" index 10238bac..ac6e97ba 100644 --- "a/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" +++ "b/features/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" @@ -20,10 +20,9 @@ И Я установил рабочий каталог как текущий каталог -Сценарий: Проверка репозитория git +Сценарий: Инициализация рабочей базы по умолчанию в ./build/ib Тогда В рабочем каталоге существует каталог ".git" -Сценарий: Инициализация рабочей базы по умолчанию в ./build/ib Когда Я сохраняю каталог проекта в контекст # Тогда Я показываю каталог проекта # И Я показываю рабочий каталог @@ -104,7 +103,6 @@ Сценарий: Разрядность x64 - Инициализация рабочей базы по умолчанию в ./build/ib Когда Я сохраняю каталог проекта в контекст - # Допустим я включаю отладку лога с именем "oscript.app.vanessa-runner" Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru --locale ru --bitness x64" И Я сообщаю вывод команды "oscript" diff --git "a/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" "b/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" index 19eae3e3..2cf15e47 100644 --- "a/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" +++ "b/features/\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.feature" @@ -6,19 +6,19 @@ Чтобы выполнять коллективную разработку проекта 1С Контекст: Подготовка репозитория и рабочего каталога проекта 1С - Допустим я включаю отладку лога с именем "oscript.app.vanessa-runner" + Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" И Я очищаю параметры команды "oscript" в контексте - Допустим Я создаю временный каталог и сохраняю его в контекст + Дано Я создаю временный каталог и сохраняю его в контекст И Я устанавливаю временный каталог как рабочий каталог И Я инициализирую репозиторий git в рабочем каталоге - Допустим Я создаю каталог "build/out" в рабочем каталоге + Дано Я создаю каталог "build/out" в рабочем каталоге И Я копирую каталог "cf" из каталога "tests/fixtures" проекта в рабочий каталог И Я установил рабочий каталог как текущий каталог + Когда Я сохраняю каталог проекта в контекст Сценарий: Инициализация и обновление рабочей базы по умолчанию в ./build/ib - Когда Я сохраняю каталог проекта в контекст Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" И Я очищаю параметры команды "oscript" в контексте @@ -28,7 +28,6 @@ И Код возврата команды "oscript" равен 0 Сценарий: Инициализация и обновление рабочей базы на сервере в режиме реструктуризации -v2 - Когда Я сохраняю каталог проекта в контекст Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" И Я очищаю параметры команды "oscript" в контексте @@ -39,37 +38,50 @@ Сценарий: Инициализация и обновление с инкрементальной загрузкой по логу GIT Когда Я выполняю команду "git" с параметрами "init" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте - Когда Я выполняю команду "echo" с параметрами "lastUploadedCommit.txt >> .gitignore" - И Я очищаю параметры команды "echo" в контексте + Когда Я создаю файл ".gitignore" с текстом + """ + lastUploadedCommit.txt + build/ib/ + """ Когда Я выполняю команду "git" с параметрами "add -A" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте Когда Я выполняю команду "git" с параметрами 'commit -m "first commit"' + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте + + Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" + И я показываю вывод команды + И Я очищаю параметры команды "oscript" в контексте + Когда Я выполняю команду "git" с параметрами "rev-parse --short HEAD >> ./cf/lastUploadedCommit.txt" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте Тогда Файл "./cf/lastUploadedCommit.txt" существует - - Когда Я сохраняю каталог проекта в контекст - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cf --nocacheuse --language ru" - И Я очищаю параметры команды "oscript" в контексте + # И я показываю текст файла "./cf/lastUploadedCommit.txt" Когда Я выполняю команду "echo" с параметрами 'Сообщить("Управляемое приложение"); A=1; >> ./cf/Ext/ManagedApplicationModule.bsl' Когда Я выполняю команду "git" с параметрами "status" + И я показываю вывод команды Тогда Вывод команды "git" содержит "modified: cf/Ext/ManagedApplicationModule.bsl" И Я очищаю параметры команды "git" в контексте Когда Я выполняю команду "git" с параметрами "add -A" + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте Когда Я выполняю команду "git" с параметрами 'commit -m "second commit"' + И я показываю вывод команды И Я очищаю параметры команды "git" в контексте - Когда Я сохраняю каталог проекта в контекст Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os update-dev --src ./cf --nocacheuse --git-increment --language ru" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит "Будет выполнена инкрементальная загрузка" И Вывод команды "oscript" содержит "Измененные файлы:" И Вывод команды "oscript" содержит "ManagedApplicationModule.bsl" И Вывод команды "oscript" содержит "Обновление конфигурации базы данных успешно завершено" - И Код возврата команды "oscript" равен 0 + И Код возврата команды "oscript" равен 0 # TODO Сценарий: Инициализация сервисной базы по умолчанию в ./build/ibservice # TODO Сценарий: Инициализация рабочей базы в отдельном каталоге diff --git "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" similarity index 89% rename from "features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" rename to "features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" index 990b45a8..56d2324f 100644 --- "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" +++ "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217\320\222\320\260\320\275\320\265\321\201\321\201\320\260.feature" @@ -1,21 +1,23 @@ # language: ru -Функционал: Проверка запуска и работы vanessa behavior +Функционал: Проверка запуска и работы Vanessa-ADD Как Разработчик/Инженер по тестированию - Я Хочу иметь возможность автоматической проверки запуска Ванессы + Я Хочу иметь возможность автоматической проверки запуска проверки через Vanessa-ADD Чтобы удостовериться в качестве подготовленной конфигурации Контекст: - Дано я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию + И Я копирую каталог "feature" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога - И Я создаю каталог "build/feature" в рабочем каталоге И Я копирую файл "vb-conf.json" из каталога "tests/fixtures/feature" проекта в подкаталог "build/" рабочего каталога И Я копирую файл "env.json" из каталога "tests/fixtures/feature" проекта в подкаталог "build/" рабочего каталога - Допустим файл "build/env.json" существует + Дано файл "build/env.json" существует И файл "build/vb-conf.json" существует И Я очищаю параметры команды "oscript" в контексте +Сценарий: Первый - подготовка базы запуска + Дано я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию + Сценарий: Запуск проверки поведения с паузой И Я создаю файл "build/feature/пауза.feature" с текстом """ @@ -28,14 +30,14 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os vanessa" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--vanessasettings ./vb-conf.json" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--vanessasettings ./build/vb-conf.json" для команды "oscript" И Я добавляю параметр "--path build/feature" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" И Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит - | Сценарий: Пауза | + # TODO вернуть | Сценарий: Пауза | + # | Сценарий: Пауза | | Все фичи/сценарии выполнены! | | Тестирование поведения завершено | И Вывод команды "oscript" не содержит @@ -57,8 +59,7 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os vanessa" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--vanessasettings ./vb-conf.json" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--vanessasettings ./build/vb-conf.json" для команды "oscript" И Я добавляю параметр "--path build/feature" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" diff --git "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" index 117c8034..663f846b 100644 --- "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" +++ "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.feature" @@ -8,6 +8,8 @@ Контекст: Допустим я подготовил репозиторий и рабочий каталог проекта И я подготовил рабочую базу проекта "./build/ib" по умолчанию + # И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + # Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" Сценарий: Синтаксическая проверка временной файловой базы # Допустим я включаю отладку лога с именем "oscript.app.vanessa-runner" @@ -232,3 +234,130 @@ И файл "out-my/allure-my/*-result.json" существует И файл "out-my/allure-my/dummy-for-delete-result.json" не существует + +Сценарий: Синтаксическая проверка базы с исключениями + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + """ + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 0 + И Вывод команды "oscript" не содержит + | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + | Неопознанный оператор | + | {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор | + +Сценарий: Синтаксическая проверка базы с исключениями с группировкой по метаданным + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + """ + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--groupbymetadata" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 0 + И Вывод команды "oscript" не содержит + | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + | Неопознанный оператор | + | {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор | + +Сценарий: Синтаксическая проверка базы с исключениями - есть ошибка не в исключениях + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + """ + # {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 1 + И Вывод команды "oscript" содержит + | {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) | + # И Вывод команды "oscript" не содержит + # | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + # | Неопознанный оператор | + # # | {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор | + +Сценарий: Синтаксическая проверка базы с исключениями с группировкой по метаданным - есть ошибка не в исключениях + И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + Дано я включаю отладку лога с именем "oscript.app.vanessa-runner" + Допустим Я очищаю параметры команды "oscript" в контексте + + И Я создаю каталог "out-my/allure-my" + + И Я копирую каталог "cfbad" из каталога "tests/fixtures" проекта в рабочий каталог + И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os init-dev --src ./cfbad --nocacheuse --ibconnection /F./build/ib --language ru" + + Когда Я создаю файл "build/exclude.txt" с текстом + """ + {МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) + {Справочник.Справочник1.МодульОбъекта(2,10)}: Неопознанный оператор + """ + # {Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) + + Когда Я очищаю параметры команды "oscript" в контексте + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os syntax-check" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + И Я добавляю параметр "--groupbymetadata" для команды "oscript" + И Я добавляю параметр "--exception-file build/exclude.txt" для команды "oscript" + И Я добавляю параметр "--mode -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication" для команды "oscript" + Когда Я выполняю команду "oscript" + И Я показываю вывод команды + И Код возврата равен 1 + И Вывод команды "oscript" содержит + | Справочник.Справочник1.Форма.УпрФормаСписка.Форма(2,13)}: Переменная не определена (Истиа) | + # И Вывод команды "oscript" не содержит + # | МодульУправляемогоПриложения(2,13)}: Переменная не определена (Итина) | + # | Неопознанный оператор | diff --git "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" index b66bedc2..0fd7d448 100644 --- "a/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" +++ "b/features/\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\265\321\201\321\202\320\276\320\262.feature" @@ -6,8 +6,6 @@ Чтобы удостовериться в качестве подготовленной конфигурации Контекст: - Допустим я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию И Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога И Я копирую каталог "feature" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога @@ -16,57 +14,28 @@ Дано Я очищаю параметры команды "oscript" в контексте И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL" -Сценарий: Запуск тестирования xunit с указанием логина, пароля пользователя - - Дано файл "build/xdd_test.epf" не существует - Дано Я очищаю параметры команды "oscript" в контексте - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/xdd_test build --language ru" - И Я очищаю параметры команды "oscript" в контексте - Дано файл "build/xdd_test.epf" существует + И я удаляю файл "build/xdd_test.epf" + И я удаляю файл "build/cache.json" - Когда Я создаю файл "build/env.json" с текстом - """ - { - "default": { - "--db-user":"Пользователь", - "--db-pwd":"Пароль" - } - } - """ - # "--additional": " /DisplayAllFunctions /Lru /iTaxi /TESTMANAGER /Debug /DebuggerURL tcp://localhost:1560", - - И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" +Сценарий: Первый - подготовка запуска тестирования xunit - Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" - И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" - И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" - И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" - И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" - И Я добавляю параметр "--testclient ::" для команды "oscript" - И Я добавляю параметр "--language ru" для команды "oscript" - - Когда Я выполняю команду "oscript" - И Я сообщаю вывод команды "oscript" - Тогда Вывод команды "oscript" содержит - | Выполняю тесты с помощью фреймворка Vanessa-ADD (Vanessa Automation Driven Development) | - | Пользователь ИБ не идентифицирован | - - И Код возврата команды "oscript" равен 1 + Допустим я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию Сценарий: Запуск тестирования xunit Дано файл "build/xdd_test.epf" не существует Дано Я очищаю параметры команды "oscript" в контексте Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/xdd_test build --language ru" + И я показываю вывод команды И Я очищаю параметры команды "oscript" в контексте Дано файл "build/xdd_test.epf" существует И файл "build/junitreport/*.xml" не существует И файл "build/allurereport/*-result.json" не существует - И Я создаю каталог "build/junitreport" - И Я создаю каталог "build/allurereport" - И Я создаю файл "build/junitreport/dummy-for-delete.xml" - И Я создаю файл "build/allurereport/dummy-for-delete-result.json" + И Я создаю каталог "junitreport" + И Я создаю каталог "allurereport" + И Я создаю файл "junitreport/dummy-for-delete.xml" + И Я создаю файл "allurereport/dummy-for-delete-result.json" Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" @@ -78,14 +47,14 @@ | -->> тест ТестДолжен_ЧтоТоСделать | | ИНФОРМАЦИЯ - Все тесты выполнены! | | Выполнение тестов завершено | - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\junitreport\xddreport.xml" - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\allurereport\allure-testsuite.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\junitreport\xddreport.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\allurereport\allure-testsuite.xml" И Код возврата команды "oscript" равен 0 - Тогда файл "build/junitreport/*.xml" существует - И файл "build/allurereport/*-result.json" существует - И файл "build/junitreport/dummy-for-delete.xml" существует - И файл "build/allurereport/dummy-for-delete-result.json" существует + Тогда файл "junitreport/*.xml" существует + И файл "allurereport/*-result.json" существует + И файл "junitreport/dummy-for-delete.xml" существует + И файл "allurereport/dummy-for-delete-result.json" существует Сценарий: Падающий серверный тест xunit возвращает код 1 и в логе консоли видна причина падения @@ -125,7 +94,7 @@ И Код возврата команды "oscript" равен 0 И Я очищаю параметры команды "oscript" в контексте - Когда Я создаю файл "build/env.json" с текстом + Когда Я создаю файл "env.json" с текстом """ { "default": { @@ -133,12 +102,11 @@ } } """ - # "--additional": " /DisplayAllFunctions /Lru /iTaxi /TESTMANAGER /Debug /DebuggerURL tcp://localhost:1560", Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" @@ -190,7 +158,7 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" @@ -208,8 +176,6 @@ Сценарий: Проверка исключения и показа лога от 1С, когда еще не успел выполниться браузер тестов - # И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" - И Я копирую каталог "fixture-epf/fixture" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога Дано я создаю каталог "build/fixture/Тест1/Forms/Форма/Ext/Form" в рабочем каталоге @@ -238,7 +204,7 @@ Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/Тест1.epf" для команды "oscript" И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" - И Я добавляю параметр "--workspace ./build" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" И Я добавляю параметр "--pathxunit build/Тест1.epf" для команды "oscript" И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" @@ -263,10 +229,10 @@ Дано файл "build/xdd_test.epf" существует И файл "build/junitreport/*.xml" не существует И файл "build/allurereport/*-result.json" не существует - И Я создаю каталог "build/junitreport" - И Я создаю каталог "build/allurereport" - И Я создаю файл "build/junitreport/dummy-for-delete.xml" - И Я создаю файл "build/allurereport/dummy-for-delete-result.json" + И Я создаю каталог "junitreport" + И Я создаю каталог "allurereport" + И Я создаю файл "junitreport/dummy-for-delete.xml" + И Я создаю файл "allurereport/dummy-for-delete-result.json" Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" @@ -279,11 +245,49 @@ | -->> тест ТестДолжен_ЧтоТоСделать | | ИНФОРМАЦИЯ - Все тесты выполнены! | | Выполнение тестов завершено | - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\junitreport\xddreport.xml" - И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\build\allurereport\allure-testsuite.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\junitreport\xddreport.xml" + И я вижу в консоли вывод "Сформирован отчет тестирования <РабочийКаталог>\allurereport\allure-testsuite.xml" И Код возврата команды "oscript" равен 0 - И файл "build/junitreport/dummy-for-delete.xml" не существует - И файл "build/allurereport/dummy-for-delete-result.json" не существует - Тогда файл "build/junitreport/*.xml" существует - И файл "build/allurereport/*-result.json" существует + И файл "junitreport/dummy-for-delete.xml" не существует + И файл "allurereport/dummy-for-delete-result.json" не существует + Тогда файл "junitreport/*.xml" существует + И файл "allurereport/*-result.json" существует + +Сценарий: Запуск тестирования xunit с указанием логина, пароля пользователя + + Дано файл "build/xdd_test.epf" не существует + Дано Я очищаю параметры команды "oscript" в контексте + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os compileepf build/xdd_test build --language ru" + И Я очищаю параметры команды "oscript" в контексте + Дано файл "build/xdd_test.epf" существует + + Когда Я создаю файл "env.json" с текстом + """ + { + "default": { + "--db-user":"Пользователь", + "--db-pwd":"Пароль" + } + } + """ + + И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os xunit" для команды "oscript" + И Я добавляю параметр "build/xdd_test.epf" для команды "oscript" + И Я добавляю параметр "--ibconnection /Fbuild/ib" для команды "oscript" + И Я добавляю параметр "--workspace ." для команды "oscript" + И Я добавляю параметр "--xddConfig build/xUnitParams.json" для команды "oscript" + И Я добавляю параметр "--xddExitCodePath ./build/xddExitCodePath.txt" для команды "oscript" + И Я добавляю параметр "--testclient ::" для команды "oscript" + И Я добавляю параметр "--language ru" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Выполняю тесты с помощью фреймворка Vanessa-ADD (Vanessa Automation Driven Development) | + | Пользователь ИБ не идентифицирован | + + И Код возврата команды "oscript" равен 1 + diff --git "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" index c8dbc2ba..24d76645 100644 --- "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" +++ "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" @@ -38,11 +38,27 @@ # отладку логов включать нельзя, т.к. сценарий упадет # И я включаю полную отладку логов пакетов OneScript - Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os version --debuglogfile debug.log" + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os version --debuglogfile 11/debug.log" Тогда Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит "." - И я показываю текст файла "debug.log" - И Файл "debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" + И я показываю текст файла "11/debug.log" + И Файл "11/debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл 11/debug.log" + И Вывод команды "oscript" не содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" + И Код возврата команды "oscript" равен 0 + +Сценарий: Вызов приложения с выводом отладки во временный файл + + Дано Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + И Я установил рабочий каталог как текущий каталог + # отладку логов включать нельзя, т.к. сценарий упадет + # И я включаю полную отладку логов пакетов OneScript + + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os version --debuglog" + Тогда Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит "." + # И я показываю текст файла "debug.log" + # И Файл "debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" И Вывод команды "oscript" не содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл debug.log" И Код возврата команды "oscript" равен 0 diff --git "a/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" "b/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" index 8998acf9..d36e58e4 100644 --- "a/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" +++ "b/features/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\274.feature" @@ -19,6 +19,16 @@ И Я очищаю параметры команды "oscript" в контексте +Сценарий: Создание хранилища 1С без указания строки соединения + Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os createrepo ./build/repo admin 123 --language ru" + # Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os createrepo ./build/repo admin 123 --language ru --debuglogfile debug.log" + Тогда Я сообщаю вывод команды "oscript" + # И я показываю текст файла "debug.log" + # И Файл "debug.log" содержит "ОТЛАДКА - Подключил вывод отладочного лога в отдельный файл 11/debug.log" + И каталог "build/repo" существует + Тогда Вывод команды "oscript" содержит "При создании хранилища не определена БД, создаем на основе временной БД" + И Код возврата команды "oscript" равен 0 + Сценарий: Создание хранилища 1С Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os createrepo ./build/repo admin 123 --ibconnection /F./build/ib --language ru" Тогда Я сообщаю вывод команды "oscript" diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.feature" index f7e2ac45..4261ffe5 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.feature" @@ -6,13 +6,16 @@ Чтобы удостовериться в автоматизации сборки конфигурации из исходников Контекст: - Допустим я подготовил репозиторий и рабочий каталог проекта - И я подготовил рабочую базу проекта "./build/ib" по умолчанию + И я удаляю каталог "build/cf" + И я удаляю файл "build/1Cv8.cf" И Я очищаю параметры команды "oscript" в контексте +Сценарий: Первый - подготовка базы запуска + Допустим я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию -Сценарий: Запуск разборки конфигурации из исходников в файл cf. - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" +Сценарий: Запуск разборки конфигурации из исходников в файл cf + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" И Я добавляю параметр "-s ./cf" для команды "oscript" И Я добавляю параметр "-o ./build/1Cv8.cf" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" @@ -21,41 +24,49 @@ Тогда Вывод команды "oscript" содержит | Сохранение конфигурации успешно завершено | И Код возврата команды "oscript" равен 0 - Допустим Я создаю каталог "build/cf" в рабочем каталоге И Я очищаю параметры команды "oscript" в контексте - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os decompile" для команды "oscript" + И файл "build/1Cv8.cf" существует + Дано Я создаю каталог "build/cf" в рабочем каталоге + + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os decompile" для команды "oscript" И Я добавляю параметр "-i ./build/1Cv8.cf" для команды "oscript" И Я добавляю параметр "-o ./build/cf" для команды "oscript" И Я добавляю параметр "--ibconnection /F./build/ib" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит | Запускаю выгрузку конфигурации в исходники | | Выгрузка в исходники завершена | И каталог "build/cf" существует И файл "build/cf/Configuration.xml" существует -Сценарий: Запуск выгрузки конфигурации из текущей конфигурации. - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" +Сценарий: Запуск выгрузки конфигурации из текущей конфигурации + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os compile" для команды "oscript" И Я добавляю параметр "-s ./cf" для команды "oscript" И Я добавляю параметр "-c" для команды "oscript" И Я добавляю параметр "--ibconnection /F./build/ib" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" Когда Я выполняю команду "oscript" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит | Загрузка конфигурации из файлов успешно завершена | И Код возврата команды "oscript" равен 0 И Я очищаю параметры команды "oscript" в контексте - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os decompile --ibconnection /F./build/ib" для команды "oscript" + Дано Я создаю каталог "build/cf" в рабочем каталоге + + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os decompile --ibconnection /F./build/ib" для команды "oscript" И Я добавляю параметр "--ibconnection /F./build/ib" для команды "oscript" + И Я добавляю параметр "-c" для команды "oscript" И Я добавляю параметр "-o ./build/cf" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" - Допустим Я создаю каталог "build/cf" в рабочем каталоге + Когда Я выполняю команду "oscript" + И я показываю вывод команды Тогда Вывод команды "oscript" содержит - | Запускаю выгрузку конфигурации в исходники | + | Запускаем разборку конфигурации текущей ИБ на исходники | | Выгрузка в исходники завершена | И каталог "build/cf" существует И файл "build/cf/Configuration.xml" существует diff --git "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" index ed1440d2..52fe7c5d 100644 --- "a/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" +++ "b/features/\320\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" @@ -6,6 +6,9 @@ Чтобы выполнять коллективную разработку проекта 1С Контекст: + И Я очищаю параметры команды "oscript" в контексте + +Сценарий: Первый - подготовка базы Допустим я подготовил репозиторий и рабочий каталог проекта И я подготовил рабочую базу проекта "./build/ib" по умолчанию @@ -21,19 +24,18 @@ Тогда Код возврата равен 0 И Файл "cfe-out/Configuration.xml" содержит """ - - Расширение1 - - - ru - Расширение1 - - - - Customization - Adopted + Расширение1 + + + ru + Расширение1 + + + """ - # Расш1_ + И Файл "cfe-out/Configuration.xml" содержит "Расш1_" + И Файл "cfe-out/Configuration.xml" содержит "Customization" + И Файл "cfe-out/Configuration.xml" содержит "Adopted" И Файл "cfe-out/Ext/ManagedApplicationModule.bsl" содержит 'Сообщить("Внутри Расш1_ПриНачалеРаботыСистемы");' # TODO почему-то проверкак текст файла ManagedApplicationModule.bsl ниже не проходит diff --git "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" index 306f1c84..76d5fdf9 100644 --- "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" +++ "b/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.feature" @@ -6,10 +6,15 @@ Чтобы выполнять коллективную разработку проекта 1С Контекст: - Допустим я подготовил репозиторий и рабочий каталог проекта - Допустим я подготовил рабочую базу проекта "./build/ib" по умолчанию + Дано Я очищаю параметры команды "oscript" в контексте И Я копирую каталог "cfe" из каталога "tests/fixtures" проекта в рабочий каталог + И я удаляю файл "*.cfe" + И я удаляю каталог "cfe-out" + +Сценарий: Первый - подготовка базы + Дано я подготовил репозиторий и рабочий каталог проекта + Дано я подготовил рабочую базу проекта "./build/ib" по умолчанию Сценарий: Сборка одного расширения с явно заданной базой @@ -47,7 +52,7 @@ # TODO Сценарий: Сборка каталога расширений с явно заданной базой Сценарий: Сборка расширения из исходников в cfe-файл с изменением номера сборки - Допустим Я добавляю параметр "<КаталогПроекта>/src/main.os compileexttocfe" для команды "oscript" + Дано Я добавляю параметр "<КаталогПроекта>/src/main.os compileexttocfe" для команды "oscript" И Я добавляю параметр "-s cfe -o РасширениеНовое1.cfe" для команды "oscript" И Я добавляю параметр "--build-number 1516" для команды "oscript" И Я добавляю параметр "--language ru" для команды "oscript" diff --git "a/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" "b/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" index 28110488..1cf693b8 100644 --- "a/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" +++ "b/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" @@ -25,7 +25,7 @@ # И Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.0.0.0 | + | Предыдущая версия 1.0.0.0 | И Код возврата команды "oscript" равен 0 @@ -43,7 +43,7 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.1.0.0 | + | Предыдущая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 @@ -59,7 +59,7 @@ # И Я сообщаю вывод команды "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.0.0.0 | + | Предыдущая версия 1.0.0.0 | И Код возврата команды "oscript" равен 0 @@ -76,7 +76,7 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.1.0.0 | + | Предыдущая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 @@ -93,8 +93,8 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия 1.0.0.0 | - | Старая версия 1.1.0.0 | + | Предыдущая версия 1.0.0.0 | + | Предыдущая версия 1.1.0.0 | И Код возврата команды "oscript" равен 0 @@ -112,8 +112,120 @@ Когда Я выполняю команду "oscript" Тогда Вывод команды "oscript" содержит | Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 | - | Старая версия | + | Предыдущая версия | И Код возврата команды "oscript" равен 0 Тогда файл "cfe_without_version/Configuration.xml" содержит "2.0.0.0" + +Сценарий: Изменение 3х-версии конфигурации, указан путь Configuration.xml для конфигурации + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.0.0" для команды "oscript" + И Я добавляю параметр "--src cf/Configuration.xml" для команды "oscript" + + Когда Я выполняю команду "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках конфигурации 1С на 2.0.0 | + | Предыдущая версия 1.0.0 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "cf/Configuration.xml" содержит "2.0.0" + +Сценарий: Изменение версии в модуле объекта внешней обработки + + Дано Я копирую каталог "fixture" из каталога "tests/fixtures/fixture-epf" проекта в рабочий каталог + Дано Я создаю файл "fixture/Тест1/Ext/ObjectModule.bsl" с текстом + """ + Функция Версия() Экспорт + Версия = "1.2.3"; + Возврат Версия; + КонецФункции + """ + + Дано Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + И я включаю отладку лога с именем "oscript.app.vanessa-runner" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.3.4.5" для команды "oscript" + И Я добавляю параметр "--check-module" для команды "oscript" + И Я добавляю параметр "--src fixture/Тест1" для команды "oscript" + # И Я добавляю параметр "--src fixture/Тест1/Ext/ObjectModule.bsl" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках модуля 1С на 2.3.4.5 | + | Предыдущая версия 1.2.3 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "fixture/Тест1/Ext/ObjectModule.bsl" содержит + """ + Версия = "2.3.4.5"; + """ + +Сценарий: Изменение версии в модуле объекта внешней обработки - прямой путь к модулю + + Дано Я копирую каталог "fixture" из каталога "tests/fixtures/fixture-epf" проекта в рабочий каталог + Дано Я создаю файл "fixture/Тест1/Ext/ObjectModule.bsl" с текстом + """ + Функция Версия() Экспорт + Версия = "1.2.3"; + Возврат Версия; + КонецФункции + """ + + Дано Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + И я включаю отладку лога с именем "oscript.app.vanessa-runner" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.3.4.5" для команды "oscript" + И Я добавляю параметр "--check-module" для команды "oscript" + # И Я добавляю параметр "--src fixture/Тест1" для команды "oscript" + И Я добавляю параметр "--src fixture/Тест1/Ext/ObjectModule.bsl" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках модуля 1С на 2.3.4.5 | + | Предыдущая версия 1.2.3 | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "fixture/Тест1/Ext/ObjectModule.bsl" содержит + """ + Версия = "2.3.4.5"; + """ + +Сценарий: Изменение версии, если нет версии в модуле объекта внешней обработки + + Дано Я копирую каталог "fixture" из каталога "tests/fixtures/fixture-epf" проекта в рабочий каталог + Дано Я создаю файл "fixture/Тест1/Ext/ObjectModule.bsl" с текстом + """ + Функция Версия() Экспорт + Возврат 1; + КонецФункции + """ + + Дано Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + И я включаю отладку лога с именем "oscript.app.vanessa-runner" + + Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript" + И Я добавляю параметр "--new-version 2.3.4.5" для команды "oscript" + И Я добавляю параметр "--check-module" для команды "oscript" + И Я добавляю параметр "--src fixture/Тест1" для команды "oscript" + + Когда Я выполняю команду "oscript" + И Я сообщаю вывод команды "oscript" + Тогда Вывод команды "oscript" содержит + | Изменяю версию в исходниках модуля 1С на 2.3.4.5 | + | Не найдена предыдущая установка версии, новая версия не установлена. | + + И Код возврата команды "oscript" равен 0 + + Тогда файл "fixture/Тест1/Ext/ObjectModule.bsl" не содержит + """ + Версия = "2.3.4.5"; + """ diff --git a/oscript.cfg b/oscript.cfg new file mode 100644 index 00000000..41016836 --- /dev/null +++ b/oscript.cfg @@ -0,0 +1 @@ +lib.additional=../oscript_modules diff --git a/packagedef b/packagedef index e761ae16..d9ed38f4 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,39 @@ #Использовать 1commands +//////////////////////////////////////////////////////////// +// Описание пакета для сборки и установки +// Полную документацию см. на hub.oscript.io/packaging +// + +#Область УстановкаПакетаНаКлиентскойМашине + +// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - Строка - Путь в который пакетный менеджер устанавливает текущий пакет. +// ЧтениеZipФайла - ЧтениеZipФайла - Архив пакета. +// +Процедура ПередУстановкой(Знач КаталогУстановкиПакета, Знач ЧтениеZipФайла) Экспорт +КонецПроцедуры + +// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину. +// +// Параметры: +// КаталогУстановкиПакета - Строка - Путь в который пакетный менеджер устанавливает текущий пакет. +// СтандартнаяОбработка - Булево - стандартная обработка +// +Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт +КонецПроцедуры + +#КонецОбласти + +#Область СборкаПакета + +// Вызывается пакетным менеджером перед началом сборки пакета. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// Процедура ПередСборкой(Знач РабочийКаталог) Экспорт Команда = Новый Команда; Команда.УстановитьПравильныйКодВозврата(0); @@ -14,6 +48,19 @@ СобратьПакетСЛокальнымиЗависимостями(РабочийКаталог); КонецПроцедуры +// Вызывается пакетным менеджером после помещения файлов в пакет. +// +// Параметры: +// РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета. +// АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы). +// +Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура СобратьПакетСЛокальнымиЗависимостями(Знач РабочийКаталог) Экспорт УдалитьФайлы(ОбъединитьПути(РабочийКаталог, "oscript_modules"), "*.*"); @@ -37,38 +84,62 @@ ВызватьИсключение "Ошибка сборки пакета"; КонецЕсли; + ВосстановитьНастройкиЗависимостейВ_oscript_cfg(); + +КонецПроцедуры + +// TODO до исправления бага opm - удаляется строки с lib.system +Процедура ВосстановитьНастройкиЗависимостейВ_oscript_cfg() + ИмяФайлаНастройки = "oscript.cfg"; + ИмяФайлаШаблона = "oscript-template.cfg"; + + Каталоги = КаталогиС_oscript_cfg(); + Для Каждого Каталог Из Каталоги Цикл + КопироватьФайл(ОбъединитьПути("tools", ИмяФайлаШаблона), ОбъединитьПути(Каталог, ИмяФайлаНастройки)); + КонецЦикла; КонецПроцедуры +Функция КаталогиС_oscript_cfg() + + Результат = Новый Массив; + Результат.Добавить("src"); + Результат.Добавить("tools"); + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +#КонецОбласти + ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыСистемы.os"); ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров); Описание.Имя("vanessa-runner") .Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта()) - .ВерсияСреды("1.7.0") + .ВерсияСреды("1.9.0") - .ЗависитОт("logos", "1.4.0") + .ЗависитОт("1commands", "1.5.0") + .ЗависитОт("asserts", "1.4.0") + .ЗависитОт("cli-selector", "0.5.0") .ЗависитОт("cmdline", "1.0.0") - .ЗависитОт("tempfiles", "1.0.0") - .ЗависитОт("asserts", "1.3.0") - .ЗависитОт("v8runner", "1.8.2") - .ЗависитОт("v8find", "0.2.0") - .ЗависитОт("strings", "0.4.1") + .ЗависитОт("fluent", "0.6.1") + .ЗависитОт("fs", "1.2.0") + .ЗависитОт("ibcmdrunner", "0.2.3") .ЗависитОт("json", "1.1.1") - .ЗависитОт("1commands", "1.5.0") - .ЗависитОт("1bdd", "1.7.0") - .ЗависитОт("fs", "1.0.0") + .ЗависитОт("logos", "1.7.0") .ЗависитОт("ParserFileV8i", "0.0.5") + .ЗависитОт("semver", "0.5.2") + .ЗависитОт("strings", "0.5.0") + .ЗависитОт("tempfiles", "1.0.0") + .ЗависитОт("v8find", "0.3.0") + .ЗависитОт("v8runner", "1.10.0") .ЗависитОт("v8storage", "0.6.5") - .ЗависитОт("v8unpack", "1.0.4") - .ЗависитОт("cli-selector", "0.4.0") - - .РазработкаЗависитОт("1bdd") - .РазработкаЗависитОт("1testrunner") - .РазработкаЗависитОт("asserts") - .РазработкаЗависитОт("coverage") - .РазработкаЗависитОт("1commands") - .РазработкаЗависитОт("fs") - .РазработкаЗависитОт("add") + .ЗависитОт("v8unpack", "1.0.6") + + .РазработкаЗависитОт("1bdd", "1.14.0") + .РазработкаЗависитОт("1testrunner", "1.8.0") + .РазработкаЗависитОт("gitrunner", "1.7.1") + .РазработкаЗависитОт("add", "6.8.0") .ВключитьФайл("tools") .ВключитьФайл("src") diff --git a/src/main.os b/src/main.os index 5fe3171f..c6dd82d4 100644 --- a/src/main.os +++ b/src/main.os @@ -26,61 +26,6 @@ КонецПроцедуры -Функция СоответствиеПеременныхОкруженияПараметрамКоманд() - СоответствиеПеременных = Новый Соответствие(); - - СоответствиеПеременных.Вставить("RUNNER_IBCONNECTION", "--ibconnection"); - СоответствиеПеременных.Вставить("RUNNER_IBNAME", "--ibname"); - СоответствиеПеременных.Вставить("RUNNER_DBUSER", "--db-user"); - СоответствиеПеременных.Вставить("RUNNER_DBPWD", "--db-pwd"); - СоответствиеПеременных.Вставить("RUNNER_v8version", "--v8version"); - СоответствиеПеременных.Вставить("RUNNER_uccode", "--uccode"); - СоответствиеПеременных.Вставить("RUNNER_command", "--command"); - СоответствиеПеременных.Вставить("RUNNER_execute", "--execute"); - СоответствиеПеременных.Вставить("RUNNER_storage-user", "--storage-user"); - СоответствиеПеременных.Вставить("RUNNER_storage-pwd", "--storage-pwd"); - СоответствиеПеременных.Вставить("RUNNER_storage-ver", "--storage-ver"); - СоответствиеПеременных.Вставить("RUNNER_storage-name", "--storage-name"); - СоответствиеПеременных.Вставить("RUNNER_ROOT", "--root"); - СоответствиеПеременных.Вставить("RUNNER_WORKSPACE", "--workspace"); - СоответствиеПеременных.Вставить("RUNNER_PATHVANESSA", "--pathvanessa"); - СоответствиеПеременных.Вставить("RUNNER_PATHXUNIT", "--pathxunit"); - СоответствиеПеременных.Вставить("RUNNER_VANESSASETTINGS", "--vanessasettings"); - СоответствиеПеременных.Вставить("RUNNER_NOCACHEUSE", "--nocacheuse"); - СоответствиеПеременных.Вставить("RUNNER_LOCALE", "--locale"); - СоответствиеПеременных.Вставить("RUNNER_LANGUAGE", "--language"); - - СоответствиеПеременных.Вставить("RUNNER_V8VERSION", "--v8version"); - СоответствиеПеременных.Вставить("RUNNER_ADDITIONAL", "--additional"); - СоответствиеПеременных.Вставить("RUNNER_UCCODE", "--uccode"); - СоответствиеПеременных.Вставить("RUNNER_COMMAND", "--command"); - СоответствиеПеременных.Вставить("RUNNER_EXECUTE", "--execute"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_NAME", "--storage-name"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_USER", "--storage-user"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_PWD", "--storage-pwd"); - СоответствиеПеременных.Вставить("RUNNER_STORAGE_VER", "--storage-ver"); - - Возврат Новый ФиксированноеСоответствие(СоответствиеПеременных); -КонецФункции - -Функция НайтиКаталогТекущегоПроекта(Знач Путь) - Рез = ""; - Если ПустаяСтрока(Путь) Тогда - Попытка - Команда = Новый Команда; - Команда.УстановитьСтрокуЗапуска("git rev-parse --show-toplevel"); - Команда.УстановитьПравильныйКодВозврата(0); - Команда.Исполнить(); - Рез = СокрЛП(Команда.ПолучитьВывод()); - Исключение - // некуда выдавать ошибку, логи еще не доступны - КонецПопытки; - Иначе - Рез = Путь; - КонецЕсли; - Возврат Рез; -КонецФункции // НайтиКаталогТекущегоПроекта() - Функция ПолучитьПарсерКоманднойСтроки() Парсер = Новый ПарсерАргументовКоманднойСтроки(); @@ -97,7 +42,7 @@ ПараметрыЗапуска = РазобратьАргументыКоманднойСтроки(); - Если ПараметрыЗапуска = Неопределено ИЛИ ПараметрыЗапуска.Количество() = 0 Тогда + Если Не ЗначениеЗаполнено(ПараметрыЗапуска) Тогда ВывестиВерсию(); Лог.Ошибка("Некорректные аргументы командной строки"); @@ -135,10 +80,6 @@ ВывестиВерсию(); КонецЕсли; - ДополнитьЗначенияПараметров(Команда, ЗначенияПараметров); - - ВключитьВыводОтладочногоЛогаВОтдельныйФайл(ЗначенияПараметров); - Возврат МенеджерКомандПриложения.ВыполнитьКоманду(Команда, ЗначенияПараметров); КонецФункции // ВыполнениеКоманды() @@ -146,180 +87,7 @@ Процедура ПроверитьПодключениеВанессаАДД() ДопТекстОшибки = "Команда тестирования xunit недоступна |Команда проверки поведения vanessa недоступна"; - ВанессаАДД = ОбщиеМетоды.ЗагрузитьВанессаАДД(ДопТекстОшибки); -КонецПроцедуры - -Процедура ДополнитьЗначенияПараметров(Знач Команда, ЗначенияПараметров) - Перем ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию, ФайлОбщихНастроек; - Перем ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных, НастройкиИзФайла; - - ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта( ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров) ); - - ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - - ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, ОбщиеМетоды.ИмяФайлаНастроек()); - - ЗначениеПараметраФайлНастроек = ЗначенияПараметров["--settings"]; - Если ЗначениеЗаполнено(ЗначениеПараметраФайлНастроек) Тогда - ФайлОбщихНастроек = Новый Файл(ОбщиеМетоды.ПолныйПуть(ЗначениеПараметраФайлНастроек)); - Ожидаем.Что(ФайлОбщихНастроек.Существует(), - СтрШаблон("Ожидаем, что указанный в --settings <%1> файл по пути <%2> существует, а его нет!", - ЗначениеПараметраФайлНастроек, - ФайлОбщихНастроек.ПолноеИмя) - ).ЭтоИстина(); - КонецЕсли; - - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, - ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию); - - ЗначенияПараметровНизкийПриоритет = Новый Соответствие; - - Если НастройкиИзФайла.Количество() > 0 Тогда - ОбщиеМетоды.ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); - КонецЕсли; - - СоответствиеПеременных = СоответствиеПеременныхОкруженияПараметрамКоманд(); - - ОбщиеМетоды.ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных); - - ОбщиеМетоды.ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); - - // на случай переопределения этой настройки повторная установка - ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта(ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров)); - - ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - - ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); - ДобавитьДанныеПодключения(ЗначенияПараметров); - - НастройкиДля1С.ДобавитьШаблоннуюПеременную("workspaceRoot", ТекущийКаталогПроекта); - НастройкиДля1С.ДобавитьШаблоннуюПеременную("runnerRoot", ОбщиеМетоды.КаталогПроекта()); - - НастройкиДля1С.ЗаменитьШаблонныеПеременныеВКоллекции(ЗначенияПараметров); - - ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); - -КонецПроцедуры // ДополнитьЗначенияПараметров - -Процедура ДобавитьДанныеПодключения(ЗначенияПараметров) - СтрокаПодключения = ЗначенияПараметров["--ibconnection"]; - ИмяБазы = ЗначенияПараметров["--ibname"]; - - Если ЗначениеЗаполнено(СтрокаПодключения) И ЗначениеЗаполнено(ИмяБазы) Тогда - ВызватьИсключение СтрШаблон("Запрещено одновременно задавать ключи %1 и %2", "--ibconnection", "--ibname"); - КонецЕсли; - - Если ЗначениеЗаполнено(СтрокаПодключения) Тогда - ЗначенияПараметров.Вставить("--ibname", СтрокаПодключения); - Иначе - ЗначенияПараметров.Вставить("--ibconnection", ИмяБазы); - - Если ЗначениеЗаполнено(ИмяБазы) Тогда - Лог.Предупреждение("------------------------------------------------------------------"); - Лог.Предупреждение("Параметр --ibname устарел. Используйте --ibconnection вместо него!"); - Лог.Предупреждение("------------------------------------------------------------------"); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(ЗначенияПараметров["--ibname"]) Тогда - ЗначенияПараметров.Вставить("--ibname", - ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(ЗначенияПараметров["--ibname"])); - - ИсходнаяСтрокаПодключения = ЗначенияПараметров["--ibname"]; - - НоваяСтрокаПодключения = МенеджерСпискаБаз.ПолучитьСтрокуПодключенияСКэшем( - ИсходнаяСтрокаПодключения, - ЗначенияПараметров["--nocacheuse"]); - - ЗначенияПараметров.Вставить("--ibname", НоваяСтрокаПодключения); - ЗначенияПараметров.Вставить("--ibconnection", ИсходнаяСтрокаПодключения); - - КонецЕсли; - - ЗначенияПараметров.Вставить("ДанныеПодключения", ДанныеПодключения(ЗначенияПараметров)); -КонецПроцедуры - -Функция ДанныеПодключения(ЗначенияПараметров) - СтруктураПодключения = Новый Структура; - - // здесь может находиться и имя базы и строка подключения - СтруктураПодключения.Вставить("СтрокаПодключения", ЗначенияПараметров["--ibname"]); - - // здесь может находиться только строка подключения в виде пути к базе - СтруктураПодключения.Вставить("ПутьБазы", ЗначенияПараметров["--ibconnection"]); - - СтруктураПодключения.Вставить("Пользователь", ЗначенияПараметров["--db-user"]); - СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); - СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); - СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); - СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); - - Рез = Новый Структура; - Для каждого КлючЗначение Из СтруктураПодключения Цикл - Значение = КлючЗначение.Значение; - Если Значение = Неопределено Тогда - Значение = ""; - КонецЕсли; - Рез.Вставить(КлючЗначение.Ключ, Значение); - КонецЦикла; - - Возврат Новый ФиксированнаяСтруктура(Рез); -КонецФункции - -Функция ЗначениеПараметра_КаталогПроекта(Знач ЗначенияПараметров) - Рез = ЗначенияПараметров["--root"]; - Если Не ЗначениеЗаполнено(Рез) Тогда - Рез = ЗначенияПараметров["--workspace"]; - Если Не ЗначениеЗаполнено(Рез) Тогда - Рез = ""; - КонецЕсли; - КонецЕсли; - Возврат Рез; -КонецФункции - -Процедура ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров) - Если Не ПараметрыСистемы.ЭтоWindows Тогда - Возврат; - КонецЕсли; - РегулярноеВыражение = Новый РегулярноеВыражение("[\\\/]\s*$"); - РегулярноеВыражение.Многострочный = Истина; - Для каждого КлючЗначение Из ЗначенияПараметров Цикл - Значение = КлючЗначение.Значение; - Если ЗначениеЗаполнено(Значение) И РегулярноеВыражение.Совпадает(Значение) Тогда - ВызватьИсключение СтрШаблон( - "Запрещено использование слешей как последних символов в параметрах.%1" + - " Это может привести к проблемам при запуске в командной строке.%1%1 Ключ %2 = %3", - Символы.ПС, КлючЗначение.Ключ, Значение); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Процедура ВключитьВыводОтладочногоЛогаВОтдельныйФайл(Знач ЗначенияПараметров) - - ПутьФайлаВывода = ""; - Если ЗначенияПараметров["--debuglogfile"] <> Неопределено Тогда - ПутьФайлаВывода = ЗначенияПараметров["--debuglogfile"]; - ИначеЕсли ЗначенияПараметров["--debuglog"] <> Неопределено Тогда - // специально не через ВременныеФайлы для возмножности сохранения файла после завершения - ПутьФайлаВывода = ПолучитьИмяВременногоФайла(".log"); // BSLLS:MissingTemporaryFileDeletion-off - ФайлВывода = Новый Файл(ПутьФайлаВывода); - ПутьФайлаВывода = ОбъединитьПути(ФайлВывода.Путь, "vrunner-" + ФайлВывода.Имя); // BSLLS:MissingTemporaryFileDeletion-off - Иначе - Возврат; - КонецЕсли; - - - ФайлЖурнала = Новый ВыводЛогаВФайл; - ФайлЖурнала.ОткрытьФайл(ПутьФайлаВывода); - - Если Не Лог.ДобавленыСобственныеСпособыВывода() Тогда - ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); - Лог.ДобавитьСпособВывода(ВыводПоУмолчанию); - КонецЕсли; - - Лог.ДобавитьСпособВывода(ФайлЖурнала, УровниЛога.Отладка); - - Лог.Отладка("Подключил вывод отладочного лога в отдельный файл %1", ПутьФайлаВывода); + ОбщиеМетоды.ЗагрузитьВанессаАДД(ДопТекстОшибки); КонецПроцедуры Процедура ВывестиВерсию() diff --git a/src/oscript.cfg b/src/oscript.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/src/oscript.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules 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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.os" index b9ff4398..d800d223 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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\222\320\244\320\260\320\271\320\273.os" @@ -11,13 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,6 +29,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "dtpath", "Путь к результату - выгружаемому файлу с данными (*.dt)"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -38,26 +40,34 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["dtpath"]); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем выгрузку информационной базы в dt..."); Попытка - МенеджерКонфигуратора.ВыгрузитьИнфобазуВФайл( - ПараметрыКоманды["dtpath"]); + МенеджерСборки.ВыгрузитьИнфобазуВФайл(ФайлВыгрузки); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Выгрузка информационной базы в dt завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.os" index a98ead71..26e11d8e 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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216\320\222\320\244\320\260\320\271\320\273.os" @@ -11,13 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,6 +29,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "cfpath", "Путь к результату - выгружаемому файлу конфигурации (*.cf)"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -38,29 +40,34 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; - - // TODO отрефакторить получение ЗапускатьТолстыйКлиент + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["cfpath"]); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем выгрузку конфигурации в cf..."); Попытка - МенеджерКонфигуратора.ВыгрузитьКонфигурациюВФайл( - ПараметрыКоманды["cfpath"] - ); + МенеджерСборки.ВыгрузитьКонфигурациюВФайл(ФайлКонфигурации); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Выгрузка конфигурации в cf завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.os" index 289bc0b2..9a7b494e 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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.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\222\321\213\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\222\320\244\320\260\320\271\320\273.os" @@ -9,13 +9,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,7 +29,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "cfepath", "Путь к результату - выгружаемому файлу расширения (*.cfe)"); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extname", "Имя расширения"); - + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -39,28 +40,35 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлРасширения = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["cfepath"]); + ИмяРасширения = ПараметрыКоманды["extname"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем выгрузку расширения в cfe..."); Попытка - МенеджерКонфигуратора.ВыгрузитьРасширениеВФайл( - ПараметрыКоманды["cfepath"], - ПараметрыКоманды["extname"] - ); + МенеджерСборки.ВыгрузитьРасширениеВФайл(ФайлРасширения, ИмяРасширения); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Выгрузка расширения в cfe завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" index b7210eb3..ef1c1c20 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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\230\320\275\321\204\320\276\320\261\320\260\320\267\321\203\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" @@ -1,8 +1,6 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// // -// Выполнение команды/действия в 1С:Предприятие в режиме тонкого/толстого клиента с передачей запускаемых обработок и параметров -// -// TODO добавить фичи для проверки команды +// Загрузка информационной базы из dt-файла // // Служебный модуль с набором методов работы с командами приложения // @@ -11,13 +9,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -29,35 +27,50 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "dtpath", "Путь к файлу с данными информационной базы (*.dt)"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--JobsCount ", + "Количество заданий для загрузки информационной базы. Значение по умолчанию ‑ 0, что означает, будет столько заданий, сколько и процессоров. + | Работает только для клиент-серверной ИБ."); Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ФайлВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["dtpath"]); + КоличествоЗаданий = ПараметрыКоманды["--JobsCount"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем загрузку информационной базы из dt..."); Попытка - МенеджерКонфигуратора.ЗагрузитьИнфобазуИзФайла( - ПараметрыКоманды["dtpath"]); + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ФайлВыгрузки, КоличествоЗаданий); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Загрузка информационной базы из dt завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду + +КонецФункции + +#КонецОбласти 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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" index 2770b60f..412aa380 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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\265\320\230\320\267\320\244\320\260\320\271\320\273\320\260.os" @@ -9,14 +9,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -28,9 +27,13 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--file", "Путь к cfe-файлу расширения, например: --file=./1Cv8.cfe"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-f", - "Краткая команда 'путь к cfe --file', пример: -f ./1Cv8.cfe"); + "Краткая команда 'путь к cfe --file', пример: -f ./1Cv8.cfe + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cfе выгрузит файл вида 1Cv8_1.2.3.4.cfе"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--extension", "Имя расширения. Обязательный параметр."); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--updatedb", "Признак обновления расширения"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -40,15 +43,14 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ИмяРасширения = ПараметрыКоманды["--extension"]; Если Не ЗначениеЗаполнено(ИмяРасширения) Тогда @@ -56,23 +58,28 @@ КонецЕсли; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ОбновитьКонфигурациюИБ = ПараметрыКоманды["--updatedb"]; ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-f", "--file")); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьВходящийСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьВходящий); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - + Лог.Информация("Запускаем загрузку расширения из cfe..."); Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.ЗагрузитьФайлРасширения(ПутьВходящий, ИмяРасширения, - ПараметрыКоманды["--updatedb"]); + МенеджерСборки.ЗагрузитьФайлРасширения(ПутьВходящийСВерсией, ИмяРасширения, ОбновитьКонфигурациюИБ); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Загрузка расширения из cfe завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index d8a30398..e6826e27 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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -11,14 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -30,7 +29,11 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Путь к файлу cf, пример: --src=./1Cv8.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", - "Краткая команда 'путь к cf --src', пример: -s ./1Cv8.cf"); + "Краткая команда 'путь к cf --src', пример: -s ./1Cv8.cf + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -40,33 +43,37 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьВходящийСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьВходящий); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - + Лог.Информация("Запускаем загрузку конфигурации из cf..."); Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.ЗагрузитьФайлКонфигурации(ПутьВходящий); + МенеджерСборки.ЗагрузитьФайлКонфигурации(ПутьВходящийСВерсией); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Загрузка конфигурации из cf завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции + +#КонецОбласти 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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.os" index b85ddcc9..bf23e46f 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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\240\320\265\320\266\320\270\320\274\320\265\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\321\217.os" @@ -40,6 +40,8 @@ | Разрешено использовать переменную $runnerRoot для указания пути к каталогу vanessa-runner. | В этом случае можно использовать обработки из vanessa-runner. | vrunner run --command ""Путь=МойКаталог;ЗавершитьРаботуСистемы"" --execute $runnerRoot/epf/ЗагрузитьРасширениеВРежимеПредприятия.epf"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--url", + "Навигационная ссылка для перехода после старта 1С:Предприятия"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--no-wait", "Не ожидать завершения запущенной команды/действия"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--online-file", @@ -79,12 +81,18 @@ ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"]; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); ПутьКФайлуСтатусаВыполнения = ПараметрыКоманды["--exitCodePath"]; КомандаЗапуска = КомандаЗапуска(ПараметрыКоманды["--command"], ПутьКФайлуСтатусаВыполнения); ПутьЛогаВыполнения = ПараметрыКоманды["--online-file"]; + НавигационнаяСсылка = ПараметрыКоманды["--url"]; + ДополнительныеПараметры = ПараметрыКоманды["--additional"]; + Если Не ПустаяСтрока(НавигационнаяСсылка) Тогда + ДополнительныеПараметры = СтрШаблон("/URL ""%1"" %2", НавигационнаяСсылка, ДополнительныеПараметры); + КонецЕсли; + ДопСообщения = МенеджерКонфигуратора.НовыеДопСообщенияДляЗапускаПредприятия(); ДопСообщения.Ключ = "ЗапускВРежимеПредприятия"; ДопСообщения.СообщениеВСлучаеУспеха = "Выполнение в режиме 1С:Предприятие завершено"; @@ -95,7 +103,7 @@ МенеджерКонфигуратора.ЗапуститьВРежимеПредприятияСПроверкойВыполнения( ДопСообщения, КомандаЗапуска, ПутьОбработки1С, - ЗапускатьТолстыйКлиент, ПараметрыКоманды["--additional"], + ЗапускатьТолстыйКлиент, ДополнительныеПараметры, ОжидатьЗавершения, ПутьЛогаВыполнения, ПутьКФайлуСтатусаВыполнения); 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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.os" index a8ffb20a..f5d0e92f 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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.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\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200.os" @@ -64,7 +64,7 @@ ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"]; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); МенеджерКонфигуратора.УстановитьПараметрыХранилища(ПараметрыХранилища); 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\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index a84c864e..53e061c8 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\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\227\320\260\321\205\320\262\320\260\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -56,7 +56,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Попытка 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\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.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\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 3b556de2..e045796d 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\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.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\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -7,15 +7,23 @@ // /////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать fs -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера Перем КорневойПутьПроекта; -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +// Параметры команды +Перем ДанныеПодключения; +Перем ПараметрыХранилища; +Перем РежимыРеструктуризации; +Перем РежимРазработчика; +Перем ПутьКФайлуКонфигурации; +Перем ПутьКИсходникам; +Перем ПутьКФайлуВыгрузки; + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -31,6 +39,9 @@ | указываем версию платформы, которую хотим использовать, | и получаем по пути build\ib готовую базу для тестирования."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dt", "Путь к файлу с dt выгрузкой"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cf", "Путь к cf-файлу конфигурации + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--dev", "Признак dev режима, создаем и загружаем автоматом структуру конфигурации"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--storage", "Признак обновления из хранилища"); @@ -44,6 +55,8 @@ "Поддержка режима реструктуризации -v1 на сервере"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--v2", "Поддержка режима реструктуризации -v2 на сервере"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -55,9 +68,12 @@ // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений // ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) // +// Возвращаемое значение: +// Число - Код возврата команды. +// Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; @@ -73,205 +89,216 @@ РежимыРеструктуризации.Вставить("Первый", ПараметрыКоманды["--v1"]); РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]); - ИнициализироватьБазуДанных(РежимыРеструктуризации, ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"], - ДанныеПодключения, ПараметрыКоманды["--uccode"], - ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], - ПараметрыХранилища, - ПараметрыКоманды["--nocacheuse"], + ПутьКИсходникам = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + ПутьКФайлуВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--dt"]); + ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--cf"]); + РежимРазработчика = ПараметрыКоманды["--dev"]; + + ИнициализироватьБазуДанных(ПараметрыКоманды["--v8version"], ПараметрыКоманды["--nocacheuse"], ПараметрыКоманды); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции -Процедура ИнициализироватьБазуДанных(РежимыРеструктуризации, Знач ПутьКSRC, Знач ПутьКDT, Знач ДанныеПодключения, - Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика, - Знач ПараметрыХранилища, Знач НеДобавлятьВСписокБаз, +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ИнициализироватьБазуДанных(Знач ВерсияПлатформы, + Знач НеДобавлятьВСписокБаз, Знач ПараметрыКоманды) Перем БазуСоздавали; БазуСоздавали = Ложь; - СтрокаПодключения = ДанныеПодключения.ПутьБазы; Пользователь = ДанныеПодключения.Пользователь; Пароль = ДанныеПодключения.Пароль; - КодЯзыка = ДанныеПодключения.КодЯзыка; - КодЯзыкаСеанса = ДанныеПодключения.КодЯзыкаСеанса; - - СтрокаПодключенияХранилище = ПараметрыХранилища.СтрокаПодключения; - ПользовательХранилища = ПараметрыХранилища.Пользователь; - ПарольХранилища = ПараметрыХранилища.Пароль; - ВерсияХранилища = ПараметрыХранилища.Версия; - РежимОбновленияХранилища = ПараметрыХранилища.РежимОбновления; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); - - Если ПустаяСтрока(СтрокаПодключения) Тогда - - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); - СтрокаПодключения = "/F""" + КаталогБазы + """"; + Если ПустаяСтрока(ДанныеПодключения.ПутьБазы) Тогда + ДанныеПодключения = СоздатьДанныеПодключения(ДанныеПодключения); КонецЕсли; + СтрокаПодключения = ДанныеПодключения.ПутьБазы; + + МенеджерСборки = НовыйМенеджерСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); - Если Лев(СтрокаПодключения, 2) = "/F" Тогда - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); + Если ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключения) Тогда - ФайлБазы = Новый Файл(КаталогБазы); - Если ФайлБазы.Существует() Тогда - Лог.Отладка("Удаляем файл " + ФайлБазы.ПолноеИмя); - УдалитьФайлы(ФайлБазы.ПолноеИмя, ПолучитьМаскуВсеФайлы()); - КонецЕсли; - СоздатьКаталог(ФайлБазы.ПолноеИмя); - МенеджерКонфигуратора.Инициализация( - СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса, ПараметрыКоманды - ); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - СоздатьФайловуюБазу(Конфигуратор, ФайлБазы.ПолноеИмя); + ОбеспечитьФайловуюБазу(МенеджерСборки, СтрокаПодключения); БазуСоздавали = Истина; Лог.Информация("Создали базу данных для " + СтрокаПодключения); - КонецЕсли; - // При первичной инициализации опускаем указание пользователя и пароля, т.к. их еще нет. - МенеджерКонфигуратора.Инициализация( - СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса, ПараметрыКоманды - ); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); - - Если Не ПустаяСтрока(ПутьКDT) Тогда - ПутьКDT = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКDT)).ПолноеИмя; - Лог.Информация("Загружаем dt " + ПутьКDT); - Попытка - Если БазуСоздавали = Истина Тогда - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКDT); - КонецЕсли; - Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение "Не удалось загрузить: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); - КонецПопытки; КонецЕсли; // Базу создали, пользователей еще нет. - Если БазуСоздавали И ПустаяСтрока(ПутьКDT) Тогда - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, "", ""); + Если БазуСоздавали И ПустаяСтрока(ПутьКФайлуВыгрузки) Тогда + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); Пользователь = ""; Пароль = ""; Иначе - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); КонецЕсли; - Если Не ПустаяСтрока(ПутьКSRC) Тогда - Лог.Информация("Запускаю загрузку конфигурации из исходников"); + Если ЗначениеЗаполнено(ПутьКИсходникам) Тогда + ЗагрузкаИзИсходников(МенеджерСборки); - ПутьКSRC = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьКSRC)).ПолноеИмя; - СписокФайлов = ""; - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКSRC, СписокФайлов, Ложь); + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуВыгрузки) Тогда + ЗагрузкаИзФайлаВыгрузки(МенеджерСборки); + + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда + ЗагрузкаИзФайлаКонфигурации(МенеджерСборки); + + ИначеЕсли ПараметрыХранилища.РежимОбновления Тогда + ЗагрузкаИзХранилища(МенеджерСборки, ПараметрыХранилища); + + Иначе + Лог.Информация("Создана пустая база данных."); КонецЕсли; + ОбновитьКонфигурациюБД(МенеджерСборки); + + МенеджерСборки.Деструктор(); + + ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения); + + Лог.Информация("Инициализация завершена"); + +КонецПроцедуры + +Процедура ОбеспечитьФайловуюБазу(МенеджерСборки, СтрокаПодключения) + + МенеджерСборки.УстановитьКонтекст(СтрокаПодключения, "", ""); + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаПодключения); + + Лог.Отладка("Нашли каталог базы для удаления <%1> ", КаталогБазы); Попытка + МенеджерСборки.СоздатьФайловуюБазу(КаталогБазы); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; - Если РежимОбновленияХранилища = Истина Тогда - Лог.Информация("Обновляем из хранилища"); - МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( - СтрокаПодключенияХранилище, ПользовательХранилища, ПарольХранилища, - ВерсияХранилища); - КонецЕсли; +КонецПроцедуры - Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, - РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); - КонецЕсли; +Процедура ЗагрузкаИзФайлаКонфигурации(МенеджерСборки) + + Лог.Информация("Запускаем загрузку конфигурации из cf-файла..."); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьКФайлуСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьКФайлуКонфигурации); + + Попытка + МенеджерСборки.ЗагрузитьФайлКонфигурации(ПутьКФайлуСВерсией, Ложь); + МенеджерСборки.ОбновитьКонфигурациюБазыДанных(Ложь); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Создана информационная база из файла конфигурации."); - МенеджерКонфигуратора.Деструктор(); +КонецПроцедуры - Если НЕ НеДобавлятьВСписокБаз Тогда +Процедура ЗагрузкаИзИсходников(МенеджерСборки) - ДопДанныеСпискаБаз = Новый Структура; - ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); - Попытка - Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда - ДопДанныеСпискаБаз.Вставить("Version", ВерсияПлатформы); - КонецЕсли; - МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаПодключения, - Новый Файл(КорневойПутьПроекта).ИмяБезРасширения, - ДопДанныеСпискаБаз); - Исключение - Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); - КонецПопытки; + Лог.Информация("Запускаем загрузку конфигурации из исходников..."); + Попытка + СписокФайлов = ""; + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКИсходникам, СписокФайлов, Ложь); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Создана информационная база из исходников."); - КонецЕсли; +КонецПроцедуры - Лог.Информация("Инициализация завершена"); +Процедура ЗагрузкаИзФайлаВыгрузки(МенеджерСборки) + + Лог.Информация("Запускаем загрузку конфигурации из dt-файла..."); + Попытка + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ПутьКФайлуВыгрузки); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Создана информационная база из файла выгрузки."); КонецПроцедуры -Процедура СоздатьФайловуюБазу(Конфигуратор, Знач КаталогБазы, Знач ПутьКШаблону = "", - Знач ИмяБазыВСписке = "", Знач КодЯзыка = "") - Лог.Отладка("Создаю файловую базу " + КаталогБазы); +Процедура ЗагрузкаИзХранилища(МенеджерКонфигуратора, ПараметрыХранилища) - ФС.ОбеспечитьКаталог(КаталогБазы); - УдалитьФайлы(КаталогБазы, "*.*"); + Лог.Информация("Обновляем из хранилища"); + Попытка + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыХранилища.СтрокаПодключения, ПараметрыХранилища.Пользователь, ПараметрыХранилища.Пароль, + ПараметрыХранилища.Версия); + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение; + КонецПопытки; - ПараметрыЗапуска = Новый Массив; - ПараметрыЗапуска.Добавить("CREATEINFOBASE"); - ПараметрыЗапуска.Добавить("File=""" +КаталогБазы + """"); - ПараметрыЗапуска.Добавить("/Out""" +Конфигуратор.ФайлИнформации() + """"); - Если ЗначениеЗаполнено(КодЯзыка) Тогда - ПараметрыЗапуска.Добавить("/L" +СокрЛП(КодЯзыка)); - КонецЕсли; +КонецПроцедуры - Если ИмяБазыВСписке <> "" Тогда - ПараметрыЗапуска.Добавить("/AddInList""" + ИмяБазыВСписке + """"); - КонецЕсли; - Если ПутьКШаблону <> "" Тогда - ПараметрыЗапуска.Добавить("/UseTemplate""" + ПутьКШаблону + """"); - КонецЕсли; +Процедура ОбновитьКонфигурациюБД(МенеджерСборки) - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПараметрыЗапуска Цикл - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - КонецЦикла; + Попытка + Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, + РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); + КонецЕсли; + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры - Приложение = ""; - Приложение = Конфигуратор.ПутьКПлатформе1С(); - Если Найти(Приложение, " ") > 0 Тогда - Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); +Процедура ДобавитьБазуВСписокБаз(НеДобавлятьВСписокБаз, ВерсияПлатформы, СтрокаПодключения) + + Если НеДобавлятьВСписокБаз Тогда + Возврат; КонецЕсли; - Приложение = Приложение + " " + СтрокаЗапуска; + ДопДанныеСпискаБаз = Новый Структура; + ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); Попытка - ОбщиеМетоды.ЗапуститьПроцесс(Приложение); + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + ДопДанныеСпискаБаз.Вставить("Version", ВерсияПлатформы); + КонецЕсли; + МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаПодключения, + Новый Файл(КорневойПутьПроекта).Имя, + ДопДанныеСпискаБаз); Исключение - ИнфоОшибки = ИнформацияОбОшибке(); - ВызватьИсключение "Не удалось создать файловую ИБ: - |" + ПодробноеПредставлениеОшибки(ИнфоОшибки); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Предупреждение("Добавление базы в список " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; - РезультатСообщение = ОбщиеМетоды.ПрочитатьФайлИнформации(Конфигуратор.ФайлИнформации()); - Если НЕ (СтрНайти(РезультатСообщение, "успешно завершено") = 0 - ИЛИ СтрНайти(РезультатСообщение, "completed successfully") = 0) Тогда +КонецПроцедуры - ВызватьИсключение "Результат работы не успешен: " + Символы.ПС + РезультатСообщение; +Функция НовыйМенеджерСборки(ПараметрыКоманды) + Если ПараметрыХранилища.РежимОбновления Тогда + Возврат ОбщиеМетоды.НовыйМенеджерКонфигуратора(); + Иначе + Возврат ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); КонецЕсли; -КонецПроцедуры +КонецФункции + +Функция СоздатьДанныеПодключения(ДанныеПодключения) + + _ДанныеПодключения = Новый Структура(ДанныеПодключения); + КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); + Файл = Новый Файл(КаталогБазы); + _ДанныеПодключения.ПутьБазы = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.СтрокаПодключения = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.Пользователь = ""; + _ДанныеПодключения.Пароль = ""; + + Возврат _ДанныеПодключения; + +КонецФункции + +#КонецОбласти 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\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index 4cd8b511..7810cc30 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\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -73,14 +73,9 @@ Ожидаем.Что(ПарольПользователяКопии, " не задан пароль пользователя хранилища, откуда копируем").Заполнено(); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.КопироватьПользователейИзХранилища( 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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index 43b390fe..0e6cdc7b 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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -52,7 +52,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); ДополнительныйКлючЗапуска = ""; ИмяРасширения = ПараметрыКоманды["--extension"]; 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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.os" index 6056d230..d8d55514 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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.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\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\216.os" @@ -22,21 +22,20 @@ Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт ТекстОписания = - " Обновление конфигурации, находящейся на поддержке, или объединение конфигурации с файлом (с использованием файла настроек). - |"; + " Обновление конфигурации, находящейся на поддержке, или объединение конфигурации с файлом (с использованием файла настроек)."; ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Путь файла с объединяемой конфигурацией (.cf-файл) или с файлом обновления конфигурации (.cfu-файл), - |пример: --src=./1Cv8.cf"); + | Пример: --src=./1Cv8.cf + | В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + | Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткий псевдоним для команды `--src', пример: -s ./1Cv8.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--update-settings", "Файл с настройками объединения конфигураций (обязательный параметр)"); - // Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--enable-support", "Флаг необходимости установки конфигурации на поддержку, если есть возможность поставки на поддержку"); - // Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--disable-support", "Флаг запрета установки конфигурации на поддержку, даже если есть возможность поставки на поддержку"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--IncludeObjectsByUnresolvedRefs", "Флаг небходимости включения в объединение объектов, |не включенных в список объединяемых и отсутствующих в основной конфигурации"); @@ -56,6 +55,9 @@ // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений // ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) // +// Возвращаемое значение: +// Число - Результат выполнения команды +// Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт Попытка @@ -71,10 +73,6 @@ ПутьДистрибутива = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); ПутьФайлаНастройки = ПараметрыКоманды["--update-settings"]; - // Если Не ЗначениеЗаполнено(ПутьФайлаНастройки) Тогда - // ВызватьИсключение "Необходимо задать к файлу с настройками объединения конфигураций, - // |Параметр --update-settings является обязательным." - // КонецЕсли; ВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам = ПараметрыКоманды["--IncludeObjectsByUnresolvedRefs"]; ОчищатьОбъектыПоНеразрешеннымСсылкам = ПараметрыКоманды["--ClearUnresolvedRefs"]; @@ -89,8 +87,11 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); + ПутьДистрибутиваСВерсией = МенеджерВерсий.НайтиФайлСВерсией(ПутьДистрибутива); + Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); УправлениеКонфигуратором = МенеджерКонфигуратора.УправлениеКонфигуратором(); @@ -101,7 +102,7 @@ ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам = Ложь; КонецЕсли; - УправлениеКонфигуратором.ОбновитьКонфигурациюИзФайла(ПутьДистрибутива, ПутьФайлаНастройки, + УправлениеКонфигуратором.ОбновитьКонфигурациюИзФайла(ПутьДистрибутиваСВерсией, ПутьФайлаНастройки, ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно, ВывестиДваждыИзмененныеОбъекты); Лог.Информация(УправлениеКонфигуратором.ВыводКоманды()); 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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\224.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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\224.os" index c291e207..b0fd7cef 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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\224.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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\224.os" @@ -11,10 +11,13 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать v8runner +#Область ОписаниеПеременных -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +Перем Лог; // Экземпляр логгера + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -31,7 +34,8 @@ "Поддержка режима реструктуризации -v2 на сервере"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--dynamic", "Динамическое обновление конфигурации"); - + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); КонецПроцедуры // ЗарегистрироватьКоманду @@ -39,22 +43,32 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); РежимРеструктуризации_В1 = ПараметрыКоманды["--v1"]; РежимРеструктуризации_В2 = ПараметрыКоманды["--v2"]; ДинамическоеОбновление = ПараметрыКоманды["--dynamic"]; - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, РежимРеструктуризации_В1, РежимРеструктуризации_В2, ДинамическоеОбновление); - МенеджерКонфигуратора.Деструктор(); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Лог.Информация("Запускаем обновление конфигурации базы данных..."); + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, РежимРеструктуризации_В1, РежимРеструктуризации_В2, ДинамическоеОбновление); + Лог.Информация("Обновление конфигурации базы данных завершено."); + + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" index 692c9126..4a7dee8b 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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217.os" @@ -7,13 +7,24 @@ // /////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner -#Использовать fs +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера Перем КорневойПутьПроекта; +Перем ДанныеПодключения; +Перем ПараметрыХранилища; +Перем РежимыРеструктуризации; +Перем РежимРазработчика; +Перем ПутьКИсходникам; +Перем ПутьКФайлуВыгрузки; +Перем ИнкрементальнаяЗагрузкаGit; +Перем СниматьСПоддержки; + +#КонецОбласти + +#Область ОбработчикиСобытий + Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт ТекстОписания = @@ -36,7 +47,7 @@ "Снимает конфигурации с поддержки перед загрузкой исходников"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--git-increment", - СтрШаблон("Инкрменальная загрузка по git diff + СтрШаблон("Инкременальная загрузка по git diff | Схема работы | При загрузке в каталоге исходников (--src) ищется файл | %1 (необходимо добавить в .gitignore). @@ -58,6 +69,9 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--v2", "Поддержка режима реструктуризации -v2 на сервере"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -66,11 +80,14 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; @@ -86,141 +103,56 @@ РежимыРеструктуризации.Вставить("Первый", ПараметрыКоманды["--v1"]); РежимыРеструктуризации.Вставить("Второй", ПараметрыКоманды["--v2"]); - ОбновитьБазуДанных(ПараметрыКоманды["--src"], ПараметрыКоманды["--dt"], - ДанныеПодключения, - ПараметрыКоманды["--uccode"], - ПараметрыКоманды["--v8version"], ПараметрыКоманды["--dev"], - ПараметрыХранилища, РежимыРеструктуризации, - ПараметрыКоманды); - - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + ПутьКИсходникам = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + ПутьКФайлуВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--dt"]); -КонецФункции - -Процедура ОбновитьБазуДанных(Знач ПутьИсходников, Знач ПутьАрхиваИБ, - Знач ДанныеПодключения, - Знач КлючРазрешенияЗапуска, Знач ВерсияПлатформы, Знач РежимРазработчика, - Знач ПараметрыХранилища, РежимыРеструктуризации, - ПараметрыКоманды) - - Перем БазуСоздавали; - БазуСоздавали = Ложь; - ТекущаяПроцедура = "Запускаем обновление"; - - СниматьСПоддержки = ПараметрыКоманды["--disable-support"]; ИнкрементальнаяЗагрузкаGit = ПараметрыКоманды["--git-increment"]; + СниматьСПоддержки = ПараметрыКоманды["--disable-support"]; + РежимРазработчика = ПараметрыКоманды["--dev"]; - СтрокаПодключения = ДанныеПодключения.ПутьБазы; - Пользователь = ДанныеПодключения.Пользователь; - Пароль = ДанныеПодключения.Пароль; - КодЯзыка = ДанныеПодключения.КодЯзыка; - КодЯзыкаСеанса = ДанныеПодключения.КодЯзыкаСеанса; - - СтрокаПодключенияХранилище = ПараметрыХранилища.СтрокаПодключения; - ПользовательХранилища = ПараметрыХранилища.Пользователь; - ПарольХранилища = ПараметрыХранилища.Пароль; - ВерсияХранилища = ПараметрыХранилища.Версия; - РежимОбновленияХранилища = ПараметрыХранилища.РежимОбновления; - - Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); - - Если РежимРазработчика = Истина Тогда - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, "./build/ibservice"); - СтрокаПодключения = "/F""" + КаталогБазы + """"; - КонецЕсли; + ОбновитьБазуДанных(ПараметрыКоманды); - Если ПустаяСтрока(СтрокаПодключения) Тогда - КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); - СтрокаПодключения = "/F""" + КаталогБазы + """"; - КонецЕсли; + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; - Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); +КонецФункции - Если Лев(СтрокаПодключения, 2) = "/F" Тогда - КаталогБазы = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); - ФайлБазы = Новый Файл(КаталогБазы); - Ожидаем.Что(ФайлБазы.Существует(), ТекущаяПроцедура + " папка с базой существует").ЭтоИстина(); - КонецЕсли; +#КонецОбласти - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - // При первичной инициализации опускаем указание пользователя и пароля, т.к. их еще нет. - МенеджерКонфигуратора.Инициализация( - СтрокаПодключения, "", "", - ВерсияПлатформы, КлючРазрешенияЗапуска, - КодЯзыка, КодЯзыкаСеанса, ПараметрыКоманды - ); +#Область СлужебныеПроцедурыИФункции - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); +Процедура ОбновитьБазуДанных(ПараметрыКоманды) - Конфигуратор.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла("log")); + ТекущаяПроцедура = "Запускаем обновление"; - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, "", ""); - Если Не ПустаяСтрока(ПутьАрхиваИБ) Тогда - ПутьАрхиваИБ = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьАрхиваИБ)).ПолноеИмя; - Лог.Информация("Загружаем dt " + ПутьАрхиваИБ); - Попытка - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьАрхиваИБ); - Исключение - Лог.Ошибка("Не удалось загрузить:" + ОписаниеОшибки()); - КонецПопытки; + Если ПустаяСтрока(ДанныеПодключения.ПутьБазы) Тогда + ДанныеПодключения = СоздатьДанныеПодключения(ДанныеПодключения); КонецЕсли; - Конфигуратор.УстановитьКонтекст(СтрокаПодключения, Пользователь, Пароль); - - Если Не ПустаяСтрока(ПутьИсходников) Тогда - - Если ИнкрементальнаяЗагрузкаGit Тогда - СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьИсходников); - Иначе - СписокФайлов = ""; - КонецЕсли; - - Лог.Информация("Запускаю загрузку конфигурации из исходников"); - - Если Не ПустаяСтрока(СписокФайлов) Тогда - - Лог.Информация( - "Будет выполнена инкрементальная загрузка - |Измененные файлы: - |%1", - СтрСоединить(СтрРазделить(СписокФайлов, ";"), Символы.ПС) - ); - - КонецЕсли; - - ПутьИсходников = Новый Файл(ОбъединитьПути(КорневойПутьПроекта, ПутьИсходников)).ПолноеИмя; - - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию( - ПутьИсходников, СписокФайлов, СниматьСПоддержки); + СтрокаПодключения = ДанныеПодключения.ПутьБазы; - Если ИнкрементальнаяЗагрузкаGit Тогда - ЗаписатьХэшПоследнегоЗагруженногоКоммита(ПутьИсходников); - КонецЕсли; + Лог.Отладка("ИнициализироватьБазуДанных СтрокаПодключения:" + СтрокаПодключения); + Если ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключения) Тогда + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаПодключения); + Ожидаем.Что(ФС.КаталогСуществует(КаталогБазы), ТекущаяПроцедура + " папка с базой существует").ЭтоИстина(); КонецЕсли; - Попытка - - Если РежимОбновленияХранилища = Истина Тогда - Лог.Информация("Обновляем из хранилища"); - - МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( - СтрокаПодключенияХранилище, ПользовательХранилища, ПарольХранилища, - ВерсияХранилища); - КонецЕсли; - - Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда - ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерКонфигуратора, - РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); - КонецЕсли; + МенеджерСборки = НовыйМенеджерСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Если ЗначениеЗаполнено(ПутьКИсходникам) Тогда + ЗагрузкаИзИсходников(МенеджерСборки); + ИначеЕсли ЗначениеЗаполнено(ПутьКФайлуВыгрузки) Тогда + ЗагрузкаИзФайлаВыгрузки(МенеджерСборки); + ИначеЕсли ПараметрыХранилища.РежимОбновления Тогда + ЗагрузкаИзХранилища(МенеджерСборки); + Иначе + Лог.Ошибка("Информационная база не обновлялась!"); + КонецЕсли; - Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; + ОбновитьКонфигурациюБД(МенеджерСборки); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); КонецПроцедуры @@ -229,12 +161,17 @@ Хэш = ПолучитьХэшПоследнегоЗагруженногоКоммита(ПутьИсходников); Если ПустаяСтрока(Хэш) Тогда + Лог.Отладка("Не найден хэш последнего загруженного коммита для инкрементальной загрузки"); Возврат ""; КонецЕсли; - ТекущийКаталог = ТекущийКаталог(); + ТекущийКаталог = КорневойПутьПроекта; + Лог.Отладка("ТекущийКаталог %1", ТекущийКаталог); + + ОтносительныйПутьИсходников = ФС.ОтносительныйПуть(КорневойПутьПроекта, ПутьИсходников, "/"); КоманднаяСтрока = СтрШаблон("git diff --name-only %1 HEAD", Хэш); + Лог.Отладка("Запускаю команду git получить измененные файлы %1", КоманднаяСтрока); Процесс = СоздатьПроцесс(КоманднаяСтрока, ТекущийКаталог, Истина, , КодировкаТекста.UTF8); Процесс.Запустить(); @@ -245,7 +182,8 @@ Пока Процесс.ПотокВывода.ЕстьДанные Цикл СтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку(); - Если СтрНачинаетсяС(СтрокаВывода, СтрЗаменить(ПутьИсходников, "./", "")) + Лог.Отладка(" Строка вывода команды: %1", СтрокаВывода); + Если СтрНачинаетсяС(СтрокаВывода, ОтносительныйПутьИсходников) И Не ФайлВСпискеИсключений(СтрокаВывода) Тогда СтрокаВывода = СкорректироватьПутьКИзменениюФормы(СтрокаВывода); @@ -263,9 +201,20 @@ КонецЕсли; КонецЦикла; + Лог.Отладка("Ошибки от процесса + |%1", Процесс.ПотокОшибок.Прочитать()); Если ЗначениеЗаполнено(СтрокаИзмененныхФайлов) Тогда СтрокаИзмененныхФайлов = Лев(СтрокаИзмененныхФайлов, СтрДлина(СтрокаИзмененныхФайлов) - 1); + + ИзменныеФайлыЛог = СтрСоединить(СтрРазделить(СтрокаИзмененныхФайлов, ";"), Символы.ПС); + Лог.Информация( "Будет выполнена инкрементальная загрузка + |Измененные файлы: + |%1", + ИзменныеФайлыЛог + ); + Иначе + Лог.Отладка("Не получена строка измененных файлов для инкрементальной загрузки"); КонецЕсли; Возврат СтрокаИзмененныхФайлов; @@ -275,8 +224,10 @@ Функция ПолучитьХэшПоследнегоЗагруженногоКоммита(Знач ПутьИсходников) ИмяФайла = ФайлПредыдущегоГитКоммита(ПутьИсходников).ПолноеИмя; + Лог.Отладка("Путь файла предыдущего коммита git %1", ИмяФайла); Если Не ФС.ФайлСуществует(ИмяФайла) Тогда + Лог.Отладка("Не существует файл предыдущего коммита git %1", ИмяФайла); Возврат ""; КонецЕсли; @@ -292,7 +243,7 @@ ИмяФайла = ФайлПредыдущегоГитКоммита(ПутьИсходников).ПолноеИмя; - ТекущийКаталог = ТекущийКаталог(); + ТекущийКаталог = КорневойПутьПроекта; КоманднаяСтрока = "git rev-parse --short HEAD"; @@ -348,3 +299,93 @@ Функция ИмяФайлаПредыдущегоГитКоммита() Возврат "lastUploadedCommit.txt"; КонецФункции + +Функция НовыйМенеджерСборки(ПараметрыКоманды) + + Если ПараметрыХранилища.РежимОбновления Тогда + Возврат ОбщиеМетоды.НовыйМенеджерКонфигуратора(); + Иначе + Возврат ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + КонецЕсли; + +КонецФункции + +Функция СоздатьДанныеПодключения(ДанныеПодключения) + + _ДанныеПодключения = Новый Структура(ДанныеПодключения); + ЗаполнитьЗначенияСвойств(_ДанныеПодключения, ДанныеПодключения); + КаталогБазы = ОбъединитьПути(КорневойПутьПроекта, ?(РежимРазработчика = Истина, "./build/ibservice", "./build/ib")); + Файл = Новый Файл(КаталогБазы); + _ДанныеПодключения.ПутьБазы = "/F""" + Файл.ПолноеИмя + """"; + _ДанныеПодключения.СтрокаПодключения = "/F""" + Файл.ПолноеИмя + """"; + + Возврат _ДанныеПодключения; + +КонецФункции + +Процедура ЗагрузкаИзИсходников(МенеджерСборки) + + Лог.Информация("Запускаем обновление конфигурации из исходников..."); + Если ИнкрементальнаяЗагрузкаGit Тогда + СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьКИсходникам); + Иначе + СписокФайлов = ""; + КонецЕсли; + + Попытка + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьКИсходникам, СписокФайлов, СниматьСПоддержки); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + + Если ИнкрементальнаяЗагрузкаGit Тогда + ЗаписатьХэшПоследнегоЗагруженногоКоммита(ПутьКИсходникам); + КонецЕсли; + + Лог.Информация("Информационная база обновлена из исходников."); + +КонецПроцедуры + +Процедура ЗагрузкаИзФайлаВыгрузки(МенеджерСборки) + + Лог.Информация("Запускаем обновление конфигурации из dt-файла..."); + Попытка + МенеджерСборки.ЗагрузитьИнфобазуИзФайла(ПутьКФайлуВыгрузки); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Информационная база обновлена из файла выгрузки."); + +КонецПроцедуры + +Процедура ЗагрузкаИзХранилища(МенеджерКонфигуратора) + + Лог.Информация("Обновляем из хранилища"); + Попытка + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыХранилища.СтрокаПодключения, ПараметрыХранилища.Пользователь, ПараметрыХранилища.Пароль, + ПараметрыХранилища.Версия); + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ОбновитьКонфигурациюБД(МенеджерСборки) + + Попытка + Если РежимРазработчика = Ложь Или РежимыРеструктуризации.Первый Или РежимыРеструктуризации.Второй Тогда + ОбщиеМетоды.ОбновитьКонфигурациюБД(МенеджерСборки, + РежимыРеструктуризации.Первый, РежимыРеструктуризации.Второй); + КонецЕсли; + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти 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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" index ee7b9de0..27c459dd 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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.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\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" @@ -7,13 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать v8runner -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -23,6 +23,9 @@ ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName", "Имя расширения, которое нужно обновить"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -31,29 +34,35 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ИмяРасширения = ПараметрыКоманды["extensionName"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.ОбновитьРасширение(ПараметрыКоманды["extensionName"]); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем обновление базы данных расширения ..."); Попытка - МенеджерКонфигуратора.ПоказатьСписокВсехРасширенийКонфигурации(); + МенеджерСборки.ОбновитьРасширение(ИмяРасширения); + МенеджерСборки.ПоказатьСписокВсехРасширенийКонфигурации(); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Обновление базы данных расширения завершено."); - - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index cbe88986..e1e18273 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\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\236\320\261\321\212\320\265\320\264\320\270\320\275\320\270\321\202\321\214\320\241\320\244\320\260\320\271\320\273\320\276\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -30,6 +30,12 @@ "Путь к cf-файлу, пример: --src=./1Cv8.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткая команда 'путь к cf --src', пример: -s ./1Cv8.cf"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-name", + "Строка подключения к хранилищу, если ранее было выполнено подключение к хранилищу"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", + "Пользователь хранилища"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-pwd", + "Пароль пользователя хранилища"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--merge-settings", "Файл с настройками объединения конфигураций (обязательный параметр)"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--enable-support", @@ -79,17 +85,22 @@ ОчищатьОбъектыПоНеразрешеннымСсылкам = ПараметрыКоманды["--ClearUnresolvedRefs"]; Принудительно = ПараметрыКоманды["--force"]; + СтрокаПодключенияХранилище = ПараметрыКоманды["--storage-name"]; + ПользовательХранилища = ПараметрыКоманды["--storage-user"]; + ПарольХранилища = ПараметрыКоманды["--storage-pwd"]; + Лог.Отладка("ПутьВходящий %1", ПутьВходящий); Лог.Отладка("ПутьФайлаНастройки %1", ПутьФайлаНастройки); Лог.Отладка("ПоставитьНаПоддержку %1", ПоставитьНаПоддержку); Лог.Отладка("НеСтавитьНаПоддержку %1", НеСтавитьНаПоддержку); Лог.Отладка("ВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам %1", ВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам); Лог.Отладка("Принудительно %1", Принудительно); + Лог.Отладка("Адрес хранилища %1", СтрокаПодключенияХранилище); МенеджерКонфигуратора = Новый МенеджерКонфигуратора; Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); УправлениеКонфигуратором = МенеджерКонфигуратора.УправлениеКонфигуратором(); @@ -107,8 +118,18 @@ ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам = Ложь; КонецЕсли; - УправлениеКонфигуратором.ОбъединитьКонфигурациюСФайлом(ПутьВходящий, ПутьФайлаНастройки, ПараметрПоставитьНаПоддержку, - ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно); + Если НЕ ПустаяСтрока(СтрокаПодключенияХранилище) Тогда + СтруктураХранилища = Новый Структура(); + СтруктураХранилища.Вставить("СтрокаПодключенияХранилище", СтрокаПодключенияХранилище); + СтруктураХранилища.Вставить("ПользовательХранилища", ПользовательХранилища); + СтруктураХранилища.Вставить("ПарольХранилища", ПарольХранилища); + + УправлениеКонфигуратором.ОбъединитьКонфигурациюСФайлом(ПутьВходящий, ПутьФайлаНастройки, ПараметрПоставитьНаПоддержку, + ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно, СтруктураХранилища); + Иначе + УправлениеКонфигуратором.ОбъединитьКонфигурациюСФайлом(ПутьВходящий, ПутьФайлаНастройки, ПараметрПоставитьНаПоддержку, + ПараметрВключитьВОбъединениеОбъектыПоНеразрешеннымСсылкам, Принудительно); + КонецЕсли; Лог.Информация(УправлениеКонфигуратором.ВыводКоманды()); 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\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index 26fed343..8861d444 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\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\236\321\202\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\236\321\202\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -55,7 +55,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.ОтключитьсяОтХранилища(); 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\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" new file mode 100644 index 00000000..ad5d1f94 --- /dev/null +++ "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\236\321\202\320\277\321\203\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -0,0 +1,94 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Отмена захвата объектов в хранилище 1С. +// +// TODO добавить фичи для проверки команды +// +// Служебный модуль с набором методов работы с командами приложения +// +// Структура модуля реализована в соответствии с рекомендациями +// oscript-app-template (C) EvilBeaver +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#Использовать logos + +Перем Лог; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Прикладной интерфейс + +Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт + + ТекстОписания = + " Отмена захвата объектов в хранилище 1С."; + + ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-name", "Строка подключения к хранилищу"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-user", "Пользователь хранилища"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--storage-pwd", "Пароль"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--objects", "Имя файла со списком объектов. + | Путь к файлу формата XML со списком объектов. + | Если опция используется, будет выполнена попытка отменить захват только для объектов, указанных в файле. + | Если опция не используется, захват будет отменен для всех объектов конфигурации. + | При наличии в списке объектов, не захваченных текущим пользователем или захваченных другим пользователем, ошибка выдана не будет. + | Подробнее о формате файла см в документации https://its.1c.ru/db/v8324doc#bookmark:adm:TI000000698 ."); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--force", "Игнорировать локальные изменения. + | Локально измененные объекты будут получены из хранилища, и внесенные изменения будут потеряны. + | Если опция не указана, то при наличии локально измененных объектов операция будет отменена и будет выдана ошибка."); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--do-not-update", "Не обновлять конфигурацию из хранилища. + | Значительно ускоряет процесс отмены захвата объектов хранилища. Может вызывать ошибки при использовании + | --objects со списком объектов"); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры // ЗарегистрироватьКоманду + +// Выполняет логику команды +// +// Параметры: +// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений +// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Булево - Истина, если команда выполнена успешно +Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог = ДополнительныеПараметры.Лог; + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + + МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); + +Попытка + + // сперва получим все изменения + Если НЕ ПараметрыКоманды["--do-not-update"] Тогда + МенеджерКонфигуратора.ЗапуститьОбновлениеИзХранилища( + ПараметрыКоманды["--storage-name"], + ПараметрыКоманды["--storage-user"], + ПараметрыКоманды["--storage-pwd"]); + КонецЕсли; + + МенеджерКонфигуратора.ОтпуститьОбъектыВХранилище( + ПараметрыКоманды["--storage-name"], + ПараметрыКоманды["--storage-user"], + ПараметрыКоманды["--storage-pwd"], + ПараметрыКоманды["--objects"], + ПараметрыКоманды["--force"]); + +Исключение + + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + +КонецПопытки; + + МенеджерКонфигуратора.Деструктор(); + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции // ВыполнитьКоманду 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\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.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\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.os" index 7b742e5e..0a344810 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\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.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\320\276\320\264\320\272\320\273\321\216\321\207\320\270\321\202\321\214\321\201\321\217\320\232\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\321\203.os" @@ -52,14 +52,9 @@ Лог = ДополнительныеПараметры.Лог; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); ИгнорироватьНаличиеПодключеннойБД = ПараметрыКоманды["--BindAlreadyBindedUser"]; ЗаменитьКонфигурациюБД = Не ПараметрыКоманды["--NotReplaceCfg"]; 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\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index 7048e71a..ca040be9 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\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\222\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -60,7 +60,7 @@ МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Попытка 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 cfd3db6c..9d16da5f 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" @@ -2,6 +2,7 @@ #Использовать 1commands #Использовать tempfiles #Использовать json +#Использовать semver Перем Лог; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -20,7 +21,7 @@ | Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть | Кодировка: UTF-8"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--validation-result", - "Путь к файлу, в который будут записаны результаты проверки проекта. Необязательный аргумент."); + "Путь к файлу, в который будут записаны результаты проверки проекта. Необязательный аргумент, если выбрана выгрузка в junit или allure."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--prev-validation-result", "Путь к файлу с предыдущими результатами проверки проекта. Необязательный аргумент. | Если заполнен, то результат будет записан как разность новых ошибок и старых. @@ -32,19 +33,21 @@ | Если заполнен, то в отчетах аллюр будут ссылки на конкретные строки с ошибками. | Пример: --project-url https://github.com/1C-Company/GitConverter/tree/master/GitConverter/src "); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--EDTversion", - "Используемая версия EDT. Необязательный аргумент. + "Используемая версия EDT. Необязательный аргумент при указании --alwaysUseLastVersion. | Необходима, если зарегистрировано одновременно несколько версий. | Узнать доступные версии можно командой ""ring help"" | Пример: --EDTversion 1.9.1"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--alwaysUseLastVersion", + "Всегда использовать последнюю версию EDT. Необязательный аргумент."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--workspace-location", "Расположение рабочей области. Необязательный аргумент. - | Если не указан, то проверка выполнятся не будет. Актуально для создания отчетов по существующему файлу результатов."); + | Если не указан, то проверка выполняться не будет. Актуально для создания отчетов по существующему файлу результатов."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-list", "Список папок, откуда загрузить проекты в формате EDT для проверки. Необязательный аргумент. - | Одновременно можно использовать только один агрумент: project-list или project-name-list"); + | Одновременно можно использовать только один аргумент: project-list или project-name-list"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--project-name-list", "Список имен проектов в текущей рабочей области, откуда загрузить проекты в формате EDT для проверки. Необязательный аргумент. - | Одновременно можно использовать только один агрумент: project-list или project-name-list. + | Одновременно можно использовать только один аргумент: project-list или project-name-list. | | Примеры выполнения: | vanessa-runner edt-validate --project-list D:/project-1 D:/project-2 --workspace-location D:/workspace @@ -78,6 +81,11 @@ ПутьОтчетаВФорматеJUnitxml = ПараметрыКоманды["--junitpath"]; Если ПутьОтчетаВФорматеJUnitxml = Неопределено Тогда ПутьОтчетаВФорматеJUnitxml = ""; + Иначе + СообщениеОшибки = "Генерация отчетов тестирования JUnit невозможна, т.к. не существуют каталоги:"; + МассивПутей = Новый Массив; + МассивПутей.Добавить(ПутьОтчетаВФорматеJUnitxml); + ОбщиеМетоды.ОбеспечитьСуществованиеРодительскихКаталоговДляПутей(МассивПутей, СообщениеОшибки); КонецЕсли; ПутьОтчетаВФорматеAllure = ПараметрыКоманды["--allure-results"]; @@ -85,6 +93,8 @@ ПутьОтчетаВФорматеAllure = ""; ИначеЕсли ОчищатьКаталогОтчетов Тогда ФС.ОбеспечитьПустойКаталог(ПутьОтчетаВФорматеAllure); + Иначе + ФС.ОбеспечитьКаталог(ПутьОтчетаВФорматеAllure); КонецЕсли; ПутьОтчетаВФорматеAllure2 = ПараметрыКоманды["--allure-results2"]; @@ -92,6 +102,8 @@ ПутьОтчетаВФорматеAllure2 = ""; ИначеЕсли ОчищатьКаталогОтчетов Тогда ФС.ОбеспечитьПустойКаталог(ПутьОтчетаВФорматеAllure2); + Иначе + ФС.ОбеспечитьКаталог(ПутьОтчетаВФорматеAllure2); КонецЕсли; СохранятьОтчетВФайл = ЗначениеЗаполнено(ПутьОтчетаВФорматеJUnitxml) @@ -99,6 +111,7 @@ ИЛИ ЗначениеЗаполнено(ПутьОтчетаВФорматеAllure2); ВерсияEDT = ПараметрыКоманды["--EDTversion"]; + ВсегдаИспользоватьПоследнююВерсиюEDT = ПараметрыКоманды["--alwaysUseLastVersion"]; РабочаяОбласть = ПараметрыКоманды["--workspace-location"]; СписокПапокСПроектами = ПараметрыКоманды["--project-list"]; СписокИменПроектов = ПараметрыКоманды["--project-name-list"]; @@ -119,7 +132,8 @@ ИмяПредыдущегоФайлаРезультата = ПараметрыКоманды["--prev-validation-result"]; ДатаНачала = ТекущаяДата(); - Успешно = ВыполнитьПроверкуEDT(РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, ВерсияEDT); + Успешно = ВыполнитьПроверкуEDT(РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, + ВерсияEDT, ВсегдаИспользоватьПоследнююВерсиюEDT); Если СохранятьОтчетВФайл Тогда @@ -160,7 +174,8 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// -Функция ВыполнитьПроверкуEDT(Знач РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, ВерсияEDT) +Функция ВыполнитьПроверкуEDT(Знач РабочаяОбласть, ИмяФайлаРезультата, СписокПапокСПроектами, СписокИменПроектов, + Знач ВерсияEDT, ВсегдаИспользоватьПоследнююВерсиюEDT) Если Не ЗначениеЗаполнено(РабочаяОбласть) Тогда @@ -181,19 +196,33 @@ КонецЕсли; + // TODO убрать код преобразования в абсолютные пути после решения https://github.com/1C-Company/1c-edt-issues/issues/293 + РабочаяОбласть = ОбъединитьПути(ТекущийКаталог(), РабочаяОбласть); + ИмяФайлаРезультата = ОбъединитьПути(ТекущийКаталог(), ИмяФайлаРезультата); + + Если ПустаяСтрока(ВерсияEDT) И ВсегдаИспользоватьПоследнююВерсиюEDT Тогда + ВерсияEDT = НайтиМаксимальнуюУстановленнуюВерсиюEDT(); + КонецЕсли; + + Если НЕ ПустаяСтрока(ВерсияEDT) Тогда + ВерсияЕДТДляЗапуска = "@" + ВерсияEDT; + Иначе + ВерсияЕДТДляЗапуска = ""; + КонецЕсли; + Попытка // Для EDT критично, чтобы файла не существовало ОбщиеМетоды.УдалитьФайлЕслиОнСуществует(ИмяФайлаРезультата); Команда = Новый Команда; - Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring edt%1 workspace validate", ?(ПустаяСтрока(ВерсияEDT), "", "@" + ВерсияEDT))); + Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring edt%1 workspace validate", ВерсияЕДТДляЗапуска)); Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); Команда.ДобавитьПараметр("--workspace-location " + ОбщиеМетоды.ОбернутьПутьВКавычки(РабочаяОбласть)); Команда.ДобавитьПараметр("--file " + ОбщиеМетоды.ОбернутьПутьВКавычки(ИмяФайлаРезультата)); Если ЗначениеЗаполнено(СписокПапокСПроектами) Тогда - Команда.ДобавитьПараметр("--project-list " + ОбщиеМетоды.ОбернутьПутьВКавычки(СписокПапокСПроектами)); + Команда.ДобавитьПараметр("--project-list " + СписокПапокСПроектами); КонецЕсли; Если ЗначениеЗаполнено(СписокИменПроектов) Тогда @@ -213,8 +242,69 @@ КонецПопытки; - Возврат КодВозврата = 0; + Результат = (КодВозврата = 0); + Если Не Результат Тогда + Лог.Ошибка("Возникла ошибка: код возврата %1, + |%2", КодВозврата, Команда.ПолучитьВывод()); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция НайтиМаксимальнуюУстановленнуюВерсиюEDT() + Команда = Новый Команда; + Команда.УстановитьСтрокуЗапуска("ring edt platform-versions"); + Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); + + Лог.Отладка("Поиск максимальной установленной версии EDT"); + + КодВозврата = Команда.Исполнить(); + ЛогКоманды = Команда.ПолучитьВывод(); + Лог.Отладка("ЛогКоманды %1", ЛогКоманды); + Если КодВозврата = 0 Тогда + Возврат ""; + КонецЕсли; + + МассивВерсий = НайтиВерсииЕДТПоЛогу(ЛогКоманды); + Если Не ЗначениеЗаполнено(МассивВерсий) Тогда + ВызватьИсключение "Не найдено ни одной установленной версии 1C:EDT"; + КонецЕсли; + + Возврат Версии.МаксимальнаяИзМассива(МассивВерсий).ВСтроку(); +КонецФункции + +Функция НайтиВерсииЕДТПоЛогу(ЛогКоманды) + Результат = Новый Массив; + + РВ = Новый РегулярноеВыражение("""edt""|((\d+\.\d+\.\d+)[,\.])"); + Совпадения = РВ.НайтиСовпадения(ЛогКоманды); + + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадения.Количество() %1", Совпадения.Количество()); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадения %1", Совпадения); + Если Совпадения.Количество() > 2 Тогда + Лог.Отладка("Совпадения[0].Значение %1", Совпадения[0].Значение); + Если Совпадения[0].Значение = """edt""" Тогда + Для кк = 1 По Совпадения.Количество() - 1 Цикл + Совпадение = Совпадения[кк]; + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Значение %1", Совпадение.Значение); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы.Количество() %1", Совпадение.Группы.Количество()); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы[0].Значение %1", Совпадение.Группы[0].Значение); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы[1].Значение %1", Совпадение.Группы[1].Значение); + Лог.Отладка("НайтиВерсииЕДТПоЛогу Совпадение.Группы[2].Значение %1", Совпадение.Группы[2].Значение); + Если Совпадение.Группы.Количество() = 3 Тогда + ВерсияСтрокой = Совпадение.Группы[2].Значение; + Результат.Добавить(Версии.ВерсияИзСтроки(ВерсияСтрокой)); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Для Каждого Версия Из Результат Цикл + Лог.Отладка("Нашли версию ЕДТ %1", Версия.ВСтроку()); + КонецЦикла; + + Возврат Результат; КонецФункции Функция ОбработатьЛогОшибок(ДатаНачала, ПутьКФайлуЛогаОшибок, ИмяФайлаИсключенийОшибок, ИмяПредыдущегоФайлаРезультата) @@ -226,6 +316,7 @@ РезультатТестирования.Вставить("КоличествоПроверок", 0); РезультатТестирования.Вставить("КоличествоПропущено", 0); РезультатТестирования.Вставить("КоличествоУпало", 0); + РезультатТестирования.Вставить("РазделитьВремя", Истина); Файл = Новый Файл(ПутьКФайлуЛогаОшибок); Если Не Файл.Существует() Тогда 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\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.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\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.os" index 5c792e15..f438c077 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\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.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\241\320\270\320\275\321\202\320\260\320\272\321\201\320\270\321\201\320\260.os" @@ -1,6 +1,5 @@ #Использовать fs -Перем Конфигуратор; Перем Лог; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -21,7 +20,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--testsuitename", "Указать имя тестового набора в отчете JUnit для раздельной проверки в различных режимах"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--groupbymetadata", - "Группировать проверки в по метаданным конфигурации"); + "Группировать проверки по метаданным конфигурации"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--exception-file", "Путь файла с указанием пропускаемых исключений @@ -143,12 +142,12 @@ ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); Лог.Информация("Начало проверки проекта"); ДатаНачала = ТекущаяУниверсальнаяДата(); // UTC Попытка - ОшибокНет = МенеджерКонфигуратора.ВыполнитьСинтаксическийКонтроль( + Успешно = МенеджерКонфигуратора.ВыполнитьСинтаксическийКонтроль( КоллекцияПроверок, ЛогПроверкиИзКонфигуратора, ПараметрыКоманды["--storage-name"], @@ -165,21 +164,24 @@ МенеджерКонфигуратора.Деструктор(); ПараметрыОбработатьЛогОШибок = Новый Структура; - ПараметрыОбработатьЛогОШибок.вставить("ДатаНачала", ДатаНачала); - //ПараметрыОбработатьЛогОШибок.вставить("ДатаОкончания", ДатаОкончания); - ПараметрыОбработатьЛогОШибок.вставить("ЛогПроверкиИзКонфигуратора", ЛогПроверкиИзКонфигуратора); - ПараметрыОбработатьЛогОШибок.вставить("ГруппироватьПоМетаданным", ГруппироватьПоМетаданным); - ПараметрыОбработатьЛогОШибок.вставить("ИмяФайлаИсключенийОшибок", ИмяФайлаИсключенийОшибок); - ПараметрыОбработатьЛогОШибок.вставить("НеПоказыватьИсключения", НеПоказыватьИсключения); + ПараметрыОбработатьЛогОШибок.Вставить("ДатаНачала", ДатаНачала); + //ПараметрыОбработатьЛогОШибок.Вставить("ДатаОкончания", ДатаОкончания); + ПараметрыОбработатьЛогОШибок.Вставить("ЛогПроверкиИзКонфигуратора", ЛогПроверкиИзКонфигуратора); + ПараметрыОбработатьЛогОШибок.Вставить("ГруппироватьПоМетаданным", ГруппироватьПоМетаданным); + ПараметрыОбработатьЛогОШибок.Вставить("ИмяФайлаИсключенийОшибок", ИмяФайлаИсключенийОшибок); + ПараметрыОбработатьЛогОШибок.Вставить("НеПоказыватьИсключения", НеПоказыватьИсключения); РезультатТестирования = ОбработатьЛогОшибок(ПараметрыОбработатьЛогОШибок); Если РезультатТестирования.КоличествоУпало = 0 Тогда - ОшибокНет = Истина; + Успешно = Истина; + Лог.Информация("Результат синтакс-контроля: Ошибок не обнаружено"); + Иначе + Лог.Информация("Замечания синтаксической проверки: + |%1", СтрСоединить(ОставшиесяОшибки(РезультатТестирования), Символы.ПС)); КонецЕсли; Если СохранятьОтчетВФайл Тогда - Лог.Отладка("ЛогПроверкиИзКонфигуратора %1", ЛогПроверкиИзКонфигуратора); Если НРег(СокрЛП(ЛогПроверкиИзКонфигуратора)) = "ошибок не обнаружено" Тогда ЛогПроверкиИзКонфигуратора = ""; КонецЕсли; @@ -212,7 +214,7 @@ РезультатыКоманд = МенеджерКомандПриложения.РезультатыКоманд(); - Возврат ?(ОшибокНет, РезультатыКоманд.Успех, РезультатыКоманд.ОшибкаВремениВыполнения); + Возврат ?(Успешно, РезультатыКоманд.Успех, РезультатыКоманд.ОшибкаВремениВыполнения); КонецФункции @@ -230,26 +232,29 @@ РезультатТестирования.Вставить("КоличествоУпало", 0); РезультатТестирования.Вставить("РазделитьВремя", Параметры.ГруппироватьПоМетаданным); - МассивСтрокИсключений = МассивСтрокИсключений(); - ПропускаемыеОшибки = СодержимоеФайлаИсключенийОшибок(Параметры.ИмяФайлаИсключенийОшибок); ОбработанныйЛог = СтрЗаменить(Параметры.ЛогПроверкиИзКонфигуратора, Символы.ВК + Символы.Таб, Символы.Таб); ОбработанныйЛог = СтрЗаменить(ОбработанныйЛог, Символы.ПС + Символы.Таб, Символы.Таб); - Лог.Отладка("ОбработанныйЛог %1", ОбработанныйЛог); + ОставшиесяОшибки = ИзбавитьсяОтИсключений(ОбработанныйЛог, ТиповыеИсключения()); + ОбработанныйЛог = СтрСоединить(ОставшиесяОшибки, Символы.ПС); + ИмяТестСценарияПредыдущаяСтрока = "Синтаксическая проверка конфигурации"; - ОставшиесяОшибки = ИзбавитьсяОтИсключений(ОбработанныйЛог, МассивСтрокИсключений); - ОбработанныйЛог = СтрСоединить(ОставшиесяОшибки, Символы.ПС); + ПользовательскиеИсключения = СодержимоеФайлаИсключенийОшибок(Параметры.ИмяФайлаИсключенийОшибок); Если НЕ Параметры.ГруппироватьПоМетаданным Тогда Лог.Отладка("Ветка НЕ ГруппироватьПоМетаданным"); - Лог.Отладка("ОставшиесяОшибки %1", ОбработанныйЛог); - Если Не ПустаяСтрока(ОбработанныйЛог) Тогда + Если ЗначениеЗаполнено(ОставшиесяОшибки) Тогда + + Для Каждого ТекСтрока Из ОставшиесяОшибки Цикл - ОписаниеОшибкиТеста = ШаблонОписанияОшибки("Синтаксическая проверка конфигурации", ОбработанныйЛог); - ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибкиТеста); + ОписаниеОшибки = ШаблонОписанияОшибки(ИмяТестСценарияПредыдущаяСтрока, ТекСтрока); + ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибки, ПользовательскиеИсключения, + ТекСтрока, Параметры.НеПоказыватьИсключения); + КонецЦикла; КонецЕсли; + Возврат РезультатТестирования; КонецЕсли; @@ -259,35 +264,62 @@ Для Каждого ТекСтрока Из ОставшиесяОшибки Цикл ОписаниеОшибки = ПолучитьОписаниеОшибки(ТекСтрока, ИмяТестСценарияПредыдущаяСтрока); - ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибки, ПропускаемыеОшибки, ТекСтрока, Параметры.НеПоказыватьИсключения); + ДополнитьРезультатТекстомОшибки(РезультатТестирования, ОписаниеОшибки, ПользовательскиеИсключения, + ТекСтрока, Параметры.НеПоказыватьИсключения); КонецЦикла; + Возврат РезультатТестирования; КонецФункции +Функция ОставшиесяОшибки(РезультатТестирования) + Если Лог.Уровень() = УровниЛога.Отладка Тогда + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, РезультатТестирования); + СтрокаJson = ЗаписьJSON.Закрыть(); + Лог.Отладка("РезультатТестирования: %1", СтрокаJson); + КонецЕсли; + + Результат = Новый Массив; + Для каждого КлючЗначение Из РезультатТестирования["Ошибки"] Цикл + Ошибка = КлючЗначение.Значение.Получить("Ошибка"); + Если Не ЗначениеЗаполнено(Ошибка) Тогда + Продолжить; + КонецЕсли; + Для каждого ОписаниеОшибки Из Ошибка Цикл + Если ОписаниеОшибки["ТипОшибки"] = "Ошибка" Тогда + Результат.Добавить(ОписаниеОшибки["ИсходныйТекстОшибки"]); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; +КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////// // Определяем строки для исключения из ошибок // См. стандарт "Обработчики событий модуля формы, подключаемые из кода" // https://its.1c.ru/db/v8std#content:-2145783155:hdoc -Функция МассивСтрокИсключений() - МассивСтрокИсключений = Новый Массив(); - МассивСтрокИсключений.Добавить(Нрег("Не обнаружено ссылок на процедуру: ""Подключаемый_")); - МассивСтрокИсключений.Добавить(Нрег("Не обнаружено ссылок на функцию: ""Подключаемый_")); - МассивСтрокИсключений.Добавить(Нрег("Пустой обработчик: ""Подключаемый_")); - МассивСтрокИсключений.Добавить(Нрег("No links to function found: ""Attachable_")); - МассивСтрокИсключений.Добавить(Нрег("No links to procedure found: ""Attachable_")); - МассивСтрокИсключений.Добавить(Нрег("Empty handler: ""Attachable_")); +Функция ТиповыеИсключения() + Результат = Новый Массив(); + // TODO частичный дубль исключений с КомандаПроверкаПроектаEDT + Результат.Добавить(Нрег("Не обнаружено ссылок на процедуру: ""Подключаемый_")); + Результат.Добавить(Нрег("Не обнаружено ссылок на функцию: ""Подключаемый_")); + Результат.Добавить(Нрег("Пустой обработчик: ""Подключаемый_")); + Результат.Добавить(Нрег("No links to function found: ""Attachable_")); + Результат.Добавить(Нрег("No links to procedure found: ""Attachable_")); + Результат.Добавить(Нрег("Empty handler: ""Attachable_")); // Исключаем из ошибок статус усшешного завершения тестирования - МассивСтрокИсключений.Добавить(Нрег("Ошибок не обнаружено")); - МассивСтрокИсключений.Добавить(Нрег("No syntax errors found")); - МассивСтрокИсключений.Добавить(Нрег("No errors found")); + Результат.Добавить(Нрег("Ошибок не обнаружено")); + Результат.Добавить(Нрег("No syntax errors found")); + Результат.Добавить(Нрег("No errors found")); - Возврат МассивСтрокИсключений; + Возврат Результат; КонецФункции -Функция ИзбавитьсяОтИсключений(Знач ОбработанныйЛог, МассивСтрокИсключений) +Функция ИзбавитьсяОтИсключений(Знач ОбработанныйЛог, Исключения) ОставшиесяОшибки = Новый Массив; Если ПустаяСтрока(ОбработанныйЛог) Тогда @@ -306,10 +338,12 @@ Ит = Ит + 1; КонецЕсли; КонецЕсли; + //Лог.Отладка("Строка для проверки исключений: %1", ТекСтрока); - Если ИсключитьСтроку(ТекСтрока, МассивСтрокИсключений) Тогда + Если ИсключитьСтроку(ТекСтрока, Исключения) Тогда Продолжить; КонецЕсли; + //Лог.Отладка("Добавляю замечание для строки: %1", ТекСтрока); ОставшиесяОшибки.Добавить(ТекСтрока); КонецЦикла; @@ -355,17 +389,18 @@ КонецФункции -Функция ИсключитьСтроку(Знач ПроверяемаяСтрока, Знач МассивСтрокИсключений) +Функция ИсключитьСтроку(Знач ПроверяемаяСтрока, Знач Исключения) Если НЕ ЗначениеЗаполнено(ПроверяемаяСтрока) Тогда - Возврат ИСТИНА; + Возврат Истина; КонецЕсли; - Для Каждого СтрИсключения Из МассивСтрокИсключений Цикл + НормализованныйТекстОшибки = НормализованныйТекстОшибки(ПроверяемаяСтрока); + Для Каждого СтрИсключения Из Исключения Цикл - Если СтрНайти(НормализованныйТекстОшибки(ПроверяемаяСтрока), СтрИсключения) > 0 Тогда + Если СтрНайти(НормализованныйТекстОшибки, СтрИсключения) > 0 Тогда Возврат Истина; @@ -379,7 +414,11 @@ Функция ПолучитьОписаниеОшибки(Знач СтрокаЛога, ИмяПоУмолчанию) + ИсходныйТекстОшибки = СтрокаЛога; + Результат = ШаблонОписанияОшибки(ИмяПоУмолчанию); + Результат.ИсходныйТекстОшибки = ИсходныйТекстОшибки; + ЧастиСтрокиЛога = СтрРазделить(СокрЛП(СтрокаЛога), " ", Ложь); Если ЧастиСтрокиЛога.Количество() Тогда @@ -423,8 +462,8 @@ Функция ШаблонОписанияОшибки(ИмяПоУмолчанию, ТекстОшибки = "", НомерСтроки = 0, ТипОшибки = "Ошибка") - Возврат Новый Структура("ТекстОшибки, ИмяГруппы, НомерСтроки, ТипОшибки", ТекстОшибки, ИмяПоУмолчанию, - НомерСтроки, ТипОшибки); + Возврат Новый Структура("ТекстОшибки, ИмяГруппы, НомерСтроки, ТипОшибки, ИсходныйТекстОшибки", + ТекстОшибки, ИмяПоУмолчанию, НомерСтроки, ТипОшибки, ТекстОшибки); КонецФункции @@ -435,9 +474,10 @@ Возврат Ложь; КонецЕсли; + НормализованныйТекстОшибки = НормализованныйТекстОшибки(СтрокаСОшибкой); Для Каждого ТекИсключение Из ПропускаемыеОшибки Цикл - Если СтрНайти(НормализованныйТекстОшибки(СтрокаСОшибкой), ТекИсключение) > 0 Тогда + Если СтрНайти(НормализованныйТекстОшибки, ТекИсключение) > 0 Тогда Возврат Истина; @@ -450,7 +490,7 @@ Функция НормализованныйТекстОшибки(Знач ТекстОшибки) - Возврат СокрЛП(НРег(ТекстОшибки)); + Возврат НРег(СокрЛП(ТекстОшибки)); КонецФункции 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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 47b57b05..808c95db 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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -7,12 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -32,8 +33,12 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-c", "Флаг выгрузки из текущей базы, краткая форма от --current"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--userenames", "Использовать файл переименований renames"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-v", "Путь к файлу версии, краткая от --versions"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--versions", "Путь к файлу версии или -v"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-v", + "Путь к файлу версии (ConfigDumpInfo.xml или его копия), краткая от --versions"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--versions", + "Путь к файлу версии (ConfigDumpInfo.xml или его копия) или -v"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -43,62 +48,91 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-i", "--in")); ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-o", "--out")); - ВерсияПлатформы = ПараметрыКоманды["--v8version"]; ФайлВерсии = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-v", "--versions")); - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; + ИспользоватьПереименования = ПараметрыКоманды["--userenames"]; - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + ИспользоватьТекущуюИБ = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + + Если ИспользоватьТекущуюИБ Тогда + РазобратьНаИсходникиТекущуюКонфигурацию(ПараметрыКоманды, + ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования); + Иначе + РазобратьНаИсходникиФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования); + КонецЕсли; - Попытка - ИзТекущейКонфигурации = ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-c", "--current"); - ИзТекущейКонфигурации = ?(ИзТекущейКонфигурации, ИзТекущейКонфигурации, - НЕ (ЗначениеЗаполнено(ПутьВходящий) И Новый Файл(ПутьВходящий).Существует())); - ТолькоИзмененные = ?(ИспользоватьПереименования, Ложь, Истина); - Если ИзТекущейКонфигурации Тогда + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; - Лог.Информация("Запускаю выгрузку конфигурации в исходники"); +КонецФункции // ВыполнитьКоманду - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); +#КонецОбласти - МенеджерКонфигуратора.РазобратьНаИсходникиТекущуюКонфигурацию(ПутьИсходящий, ФайлВерсии, - ТолькоИзмененные, ИспользоватьПереименования); +#Область СлужебныеПроцедурыИФункции - Иначе +Процедура РазобратьНаИсходникиТекущуюКонфигурацию(ПараметрыКоманды, + ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования) + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ТолькоИзмененные = ?(ИспользоватьПереименования, Ложь, Истина); + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); - КаталогВременнойИБ = ВременныеФайлы.СоздатьКаталог(); - СтрокаПодключения = "/F" +КаталогВременнойИБ; - МенеджерКонфигуратора.Инициализация(СтрокаПодключения, , , - ВерсияПлатформы, ПараметрыКоманды["--uccode"], - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - МенеджерКонфигуратора.УправлениеКонфигуратором().СоздатьФайловуюБазу(КаталогВременнойИБ); + Лог.Информация("Запускаем разборку конфигурации текущей ИБ на исходники..."); + Попытка + МенеджерСборки.РазобратьНаИсходникиТекущуюКонфигурацию(ПутьИсходящий, ФайлВерсии, + ТолькоИзмененные, ИспользоватьПереименования); + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + Лог.Информация("Разборка конфигурации текущей ИБ на исходники завершена."); - МенеджерКонфигуратора.ВыгрузитьКонфигурациюВИсходники(ПутьВходящий, ПутьИсходящий, ФайлВерсии, - ИспользоватьПереименования); - ВременныеФайлы.УдалитьФайл(КаталогВременнойИБ); + МенеджерСборки.Деструктор(); + +КонецПроцедуры - КонецЕсли; +Процедура РазобратьНаИсходникиФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования) + + Если НЕ ФС.ФайлСуществует(ПутьВходящий) Тогда + ВызватьИсключение СтрШаблон("Файл cf %1 не найден", ПутьВходящий); + КонецЕсли; + + ОбщиеМетоды.УстановитьИспользованиеВременнойБазы(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + КаталогВременнойИБ = МенеджерСборки.КаталогВременнойИБ(); + + Лог.Информация("Запускаем разборку cf-файла на исходники..."); + Попытка + + МенеджерСборки.СоздатьФайловуюБазу(КаталогВременнойИБ); + МенеджерСборки.ВыгрузитьКонфигурациюВИсходники(ПутьВходящий, + ПутьИсходящий, ФайлВерсии, ИспользоватьПереименования); + Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Разборка cf-файла на исходники завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецПроцедуры + +#КонецОбласти 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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" index cd5355d5..a3c8c182 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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.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\240\320\260\320\267\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" @@ -7,12 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -24,6 +25,9 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName", "Имя расширения, под которым оно зарегистрировано в списке расширений"); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "outputPath", "Путь к исходникам расширения"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); + Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -32,54 +36,35 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - ПутьИсходников = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["outputPath"]); - - РазобратьНаИсходникиРасширение( - ПараметрыКоманды["extensionName"], ПутьИсходников, - ДанныеПодключения, - ПараметрыКоманды["--v8version"], ПараметрыКоманды["--uccode"], ПараметрыКоманды - ); - - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции + ИмяРасширения = ПараметрыКоманды["extensionName"]; + КаталогВыгрузки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["outputPath"]); -Процедура РазобратьНаИсходникиРасширение(Знач ИмяРасширения, Знач Каталог, - Знач ДанныеПодключения, - Знач ВерсияПлатформы, Знач КлючРазрешенияЗапуска, - Знач ПараметрыКоманды) - - Лог.Информация("Выполняю разборку расширения %1 на исходники в каталог %2", ИмяРасширения, Каталог); - Ожидаем.Что(ДанныеПодключения.СтрокаПодключения, "Ожидаем, что строка подключения к ИБ задана, а это не так").Заполнено(); - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.Инициализация(ДанныеПодключения.СтрокаПодключения, - ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль, - ВерсияПлатформы, КлючРазрешенияЗапуска, - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - - ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска(); - ПараметрыЗапуска.Добавить("/Visible"); - ПараметрыЗапуска.Добавить("/DumpConfigToFiles """ + Каталог + """"); - ПараметрыЗапуска.Добавить("-Extension """ + ИмяРасширения + """"); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Лог.Информация("Запускаем разборку расширения на исходники..."); Попытка - Конфигуратор.ВыполнитьКоманду(ПараметрыЗапуска); + МенеджерСборки.РазобратьРасширениеНаИсходники(КаталогВыгрузки, ИмяРасширения); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + МенеджерСборки.Деструктор(); + ВызватьИсключение; КонецПопытки; + Лог.Информация("Разборка расширения на исходники завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); - Лог.Информация("Разборка расширения завершена"); + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции -КонецПроцедуры +#КонецОбласти 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\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.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\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" index 6b86092e..fd944d02 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\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.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\241\320\261\320\276\321\200\320\272\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\320\271.os" @@ -7,13 +7,13 @@ // /////////////////////////////////////////////////////////////////// -#Использовать v8runner -#Использовать asserts +#Область ОписаниеПеременных -Перем Лог; +Перем Лог; // Экземпляр логгера -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -26,6 +26,8 @@ Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName", "Имя расширения, под которым оно будет зарегистрировано в списке расширений"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--updatedb", "Признак обновления расширения"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры // ЗарегистрироватьКоманду @@ -34,35 +36,38 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Лог = ДополнительныеПараметры.Лог; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + КаталогИсходников = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["inputPath"]); + ИмяРасширения = ПараметрыКоманды["extensionName"]; + ОбновлятьИБ = ПараметрыКоманды["--updatedb"]; + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Лог.Информация("Собираем расширение %1 из исходников...", ИмяРасширения); Попытка - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.СобратьИзИсходниковРасширение( - ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["inputPath"]), - ПараметрыКоманды["extensionName"], ПараметрыКоманды["--updatedb"]); + МенеджерСборки.СобратьИзИсходниковРасширение(КаталогИсходников, ИмяРасширения, ОбновлятьИБ); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; + Лог.Информация("Сборка расширения из исходников завершена."); - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; КонецФункции // ВыполнитьКоманду + +#КонецОбласти 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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.os" index be52f6ca..200b7514 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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262.os" @@ -11,14 +11,16 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера +Перем МенеджерВерсий; -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +Перем ДанныеПодключения; + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -32,7 +34,10 @@ "Путь к каталогу с исходниками, пример: --src=./cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткая команда 'путь к исходникам --src', пример: -s ./cf"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", "Путь к файлу cf (*.cf), --out=./1Cv8.cf"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", + "Путь к файлу cf (*.cf), --out=./1Cv8.cf. + |В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + |Пример: --out=1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-o", "Краткая команда 'Путь к файлу cf --out', пример: -o ./1Cv8.cf"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--current", "Флаг загрузки в указанную базу или -с"); @@ -42,6 +47,8 @@ Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--noupdate", "Флаг обновления СonfigDumpInfo.xml"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", "Номер сборки для установки в последний разряд номера версии"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -51,23 +58,22 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); - ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды,"-o", "--out")); - ВерсияПлатформы = ПараметрыКоманды["--v8version"]; + ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-o", "--out")); СписокФайлов = ПараметрыКоманды["--list"]; - ОбновлятьДамп = НЕ ПараметрыКоманды["--noupdate"]; + ОбновлятьФайлВерсий = НЕ ПараметрыКоманды["--noupdate"]; + ИспользоватьТекущуюИБ = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); НомерСборки = ПараметрыКоманды["--build-number"]; Если ЗначениеЗаполнено(НомерСборки) Тогда @@ -75,46 +81,74 @@ ИзменитьНомерСборкиВИсходникахКонфигурации(ПутьВходящий, НомерСборки); КонецЕсли; + + Если ИспользоватьТекущуюИБ Тогда + СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, ПутьВходящий, СписокФайлов, ОбновлятьФайлВерсий); + Иначе + СобратьИзИсходниковФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ОбновлятьФайлВерсий); + КонецЕсли; + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; +#КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, + ПутьВходящий, СписокФайлов, ОбновлятьФайлВерсий) + + Лог.Информация("Запускаем сборку конфигурации из исходников в текущую ИБ..."); + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Попытка - ВТекущуюКонфигурацию = ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-c", "--current"); - Если ТипЗнч(ВТекущуюКонфигурацию) = Тип("Булево") И ВТекущуюКонфигурацию Тогда - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию( - ПутьВходящий, - СписокФайлов, Истина, ОбновлятьДамп); - Иначе - СобратьИзИсходниковФайлКонфигурации(ПутьВходящий, ПутьИсходящий, ДанныеПодключения, ВерсияПлатформы, - ОбновлятьДамп, ПараметрыКоманды); - КонецЕсли; + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию( + ПутьВходящий, СписокФайлов, Истина, ОбновлятьФайлВерсий); Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - МенеджерКонфигуратора.Деструктор(); + МенеджерСборки.Деструктор(); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции + Лог.Информация("Сборка конфигурации из исходников в текущую ИБ завершена."); + +КонецПроцедуры -Процедура СобратьИзИсходниковФайлКонфигурации(ПутьВходящий, ПутьИсходящий, ДанныеПодключения, - ВерсияПлатформы, ОбновлятьФайлВерсий, Знач ПараметрыКоманды) +Процедура СобратьИзИсходниковФайлКонфигурации(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий, ОбновлятьФайлВерсий) - КаталогВременнойБазы = ВременныеФайлы.СоздатьКаталог(); - СтрокаПодключения = "/F""" + КаталогВременнойБазы + """"; - МенеджерКонфигуратора.Инициализация(СтрокаПодключения, "", "", ВерсияПлатформы, , - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); + Лог.Информация("Запускаем сборку конфигурации из исходников в файл cf..."); - Конфигуратор.СоздатьФайловуюБазу(КаталогВременнойБазы); + ОбщиеМетоды.УстановитьИспользованиеВременнойБазы(ПараметрыКоманды); - МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(ПутьВходящий, , , ОбновлятьФайлВерсий); - МенеджерКонфигуратора.ВыгрузитьКонфигурациюВФайл(ПутьИсходящий); + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - ВременныеФайлы.УдалитьФайл(КаталогВременнойБазы); + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + КаталогВременнойИБ = МенеджерСборки.КаталогВременнойИБ(); + + ПутьИсходящийСВерсией = МенеджерВерсий.ПодставитьНомерВерсии(ПутьВходящий, ПутьИсходящий); + Попытка + + МенеджерСборки.СоздатьФайловуюБазу(КаталогВременнойИБ); + МенеджерСборки.СобратьИзИсходниковТекущуюКонфигурацию(ПутьВходящий, , , ОбновлятьФайлВерсий); + МенеджерСборки.ВыгрузитьКонфигурациюВФайл(ПутьИсходящийСВерсией); + + Исключение + МенеджерСборки.Деструктор(); + ВызватьИсключение; + КонецПопытки; + + МенеджерСборки.Деструктор(); + + Лог.Информация("Сборка конфигурации из исходников в файл cf завершена."); КонецПроцедуры @@ -122,11 +156,12 @@ Лог.Информация("Изменяю номер сборки в исходниках конфигурации 1С на %1", НомерСборки); - МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); + СтарыеВерсии = МенеджерВерсий.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); Для каждого КлючЗначение Из СтарыеВерсии Цикл Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); КонецЦикла; КонецПроцедуры + +#КонецОбласти 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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.os" index ac7f8142..1c66d506 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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.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\241\320\276\320\261\321\200\320\260\321\202\321\214\320\230\320\267\320\230\321\201\321\205\320\276\320\264\320\275\320\270\320\272\320\276\320\262\320\244\320\260\320\271\320\273\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.os" @@ -11,14 +11,16 @@ // /////////////////////////////////////////////////////////////////////////////////////////////////// -#Использовать logos -#Использовать v8runner +#Область ОписаниеПеременных -Перем Лог; -Перем МенеджерКонфигуратора; +Перем Лог; // Экземпляр логгера +Перем МенеджерВерсий; -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Прикладной интерфейс +Перем ИмяРасширения; + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт @@ -32,16 +34,22 @@ "Путь к каталогу с исходниками, пример: --src=./cfe"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-s", "Краткая команда 'путь к исходникам --src', пример: -s ./cfe"); - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", "Путь к файлу cf (*.cf), --out=./Extension.cfe"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--out", + "Путь к файлу cf (*.cf), --out=./Extension.cfe + |В пути файла можно указать шаблонную переменную $version для подстановки в нее версии расширения + |Пример: --out=1Cv8_$version.cfe выгрузит файл вида 1Cv8_1.2.3.4.cfe"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-o", "Краткая команда 'Путь к файлу cf --out', пример: -o ./Extension.cfe"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--current", "Флаг загрузки в указанную базу или -с"); Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-c", "Флаг загрузки в указанную базу, краткая форма от --current"); + // TODO зачем объявлен параметр "--noupdate", который в коде не используется Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--noupdate", "Флаг обновления СonfigDumpInfo.xml"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", "Номер сборки для установки в последний разряд номера версии"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--ibcmd", + "Использовать утилиту ibcmd вместо конфигуратора"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -51,23 +59,20 @@ // // Параметры: // ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// ДополнительныеПараметры - Структура - дополнительные параметры (необязательно) +// +// Возвращаемое значение: +// Число - Код возврата команды. // Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - Попытка - Лог = ДополнительныеПараметры.Лог; - Исключение - Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - КонецПопытки; - - ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры); ПутьВходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-s", "--src")); ПутьИсходящий = ОбщиеМетоды.ПолныйПуть(ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды,"-o", "--out")); - ВерсияПлатформы = ПараметрыКоманды["--v8version"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - ОбновлятьДамп = НЕ ПараметрыКоманды["--noupdate"]; + ИспользоватьТекущуюИБ = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + + МенеджерВерсий = Новый МенеджерВерсийФайлов1С(); НомерСборки = ПараметрыКоманды["--build-number"]; Если ЗначениеЗаполнено(НомерСборки) Тогда @@ -75,48 +80,88 @@ ИзменитьНомерСборкиВИсходникахКонфигурации(ПутьВходящий, НомерСборки); КонецЕсли; - - МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + ПутьИсходящийСВерсией = МенеджерВерсий.ПодставитьНомерВерсии(ПутьВходящий, ПутьИсходящий); ИмяРасширения = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); + Если ИспользоватьТекущуюИБ Тогда + СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, ПутьВходящий, ПутьИсходящийСВерсией); + Иначе + СобратьИзИсходниковВоВременнойБазе(ПараметрыКоманды, ПутьВходящий, ПутьИсходящийСВерсией); + КонецЕсли; + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий) + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + Лог.Информация("Запускаем сборку расширения из исходников в текущую ИБ..."); + + Попытка + + МенеджерСборки.СобратьИзИсходниковРасширение(ПутьВходящий, ИмяРасширения, Ложь); + МенеджерСборки.ВыгрузитьРасширениеВФайл(ПутьИсходящий, ИмяРасширения); + + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + МенеджерСборки.Деструктор(); + + Лог.Информация("Сборка расширения из исходников в текущую ИБ завершена."); + +КонецПроцедуры + +Процедура СобратьИзИсходниковВоВременнойБазе(ПараметрыКоманды, + ПутьВходящий, ПутьИсходящий) + + ОбщиеМетоды.УстановитьИспользованиеВременнойБазы(ПараметрыКоманды); + + МенеджерСборки = ОбщиеМетоды.ФабрикаМенеджераСборки(ПараметрыКоманды); + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды); + КаталогВременнойИБ = МенеджерСборки.КаталогВременнойИБ(); + + Лог.Информация("Запускаем сборку расширения из исходников в файл cfe..."); + Попытка - ВТекущуюКонфигурацию = ОбщиеМетоды.ПолучитьПараметры(ПараметрыКоманды, "-c", "--current"); - Если ТипЗнч(ВТекущуюКонфигурацию) = Тип("Булево") И ВТекущуюКонфигурацию Тогда - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); - Иначе - КаталогВременнойБазы = ВременныеФайлы.СоздатьКаталог(); - СтрокаПодключения = "/F""" + КаталогВременнойБазы + """"; - МенеджерКонфигуратора.Инициализация(СтрокаПодключения, "", "", ВерсияПлатформы, , - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, ПараметрыКоманды); - Конфигуратор = МенеджерКонфигуратора.УправлениеКонфигуратором(); - - Конфигуратор.СоздатьФайловуюБазу(КаталогВременнойБазы); - КонецЕсли; - - МенеджерКонфигуратора.СобратьИзИсходниковРасширение( - ПутьВходящий, - ИмяРасширения, - Ложь); - МенеджерКонфигуратора.ВыгрузитьРасширениеВФайл(ПутьИсходящий, ИмяРасширения); + + МенеджерСборки.СоздатьФайловуюБазу(КаталогВременнойИБ); + МенеджерСборки.СобратьИзИсходниковРасширение(ПутьВходящий, ИмяРасширения, Ложь); + МенеджерСборки.ВыгрузитьРасширениеВФайл(ПутьИсходящий, ИмяРасширения); + Исключение - МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МенеджерСборки.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - МенеджерКонфигуратора.Деструктор(); + Лог.Информация("Сборка расширения из исходников в файл cfe завершена."); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции +КонецПроцедуры Процедура ИзменитьНомерСборкиВИсходникахКонфигурации(Знач ПутьИсходников, Знач НомерСборки) Лог.Информация("Изменяю номер сборки в исходниках конфигурации 1С на %1", НомерСборки); - МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); + СтарыеВерсии = МенеджерВерсий.УстановитьНомерСборкиДляКонфигурации(ПутьИсходников, НомерСборки); Для каждого КлючЗначение Из СтарыеВерсии Цикл Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); КонецЦикла; КонецПроцедуры + +#КонецОбласти 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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" index e297ae0e..959c3e5d 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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.os" @@ -67,14 +67,9 @@ "Не заполнены роли пользователя. Они должны быть заданы через параметр ком.строки --storage-role").Заполнено(); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.СоздатьПользователяХранилища( 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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.os" index cc9b0109..b7c05dc4 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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\244\320\260\320\271\320\273\320\237\320\276\321\201\321\202\320\260\320\262\320\272\320\270.os" @@ -13,6 +13,14 @@ #Использовать v8runner Перем Лог; +Перем МенеджерКонфигуратора; +Перем МенеджерВерсий; + +// Параметры команды +Перем ИмяФайлаПоставки; +Перем КаталогИсходников; +Перем НомерСборки; +Перем ЗагружатьВТекущую; /////////////////////////////////////////////////////////////////////////////////////////////////// // Прикладной интерфейс @@ -26,7 +34,14 @@ ТекстОписания); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "cfpath", - "Путь к результату - выгружаемому файлу поставки конфигурации (*.cf)"); + "Путь к результату - выгружаемому файлу поставки конфигурации (*.cf) + |В пути файла можно указать шаблонную переменную $version для подстановки в нее версии конфигурации + |Пример: 1Cv8_$version.cf выгрузит файл вида 1Cv8_1.2.3.4.cf"); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", "Каталог с исходниками конфигурации"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--build-number", "Номер сборки"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--current", "Флаг загрузки в указанную базу или -с"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-c", "Флаг загрузки в указанную базу, краткая форма от --current"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -44,13 +59,22 @@ ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + ИмяФайлаПоставки = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["cfpath"]); + КаталогИсходников = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--src"]); + НомерСборки = ПараметрыКоманды["--build-number"]; + ЗагружатьВТекущую = ОбщиеМетоды.ЕстьФлагКоманды(ПараметрыКоманды, "-c", "--current"); + МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерВерсий = Новый МенеджерВерсийФайлов1С; + + Если ЗагружатьВТекущую Или ПустаяСтрока(КаталогИсходников) Тогда + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); + Иначе + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); + КонецЕсли; Попытка - МенеджерКонфигуратора.СоздатьФайлПоставки( - ПараметрыКоманды["cfpath"] - ); + СоздатьФайлПоставки(); Исключение МенеджерКонфигуратора.Деструктор(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -59,4 +83,39 @@ МенеджерКонфигуратора.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + КонецФункции // ВыполнитьКоманду + +Процедура СоздатьФайлПоставки() + + Если ЗначениеЗаполнено(КаталогИсходников) Тогда + СобратьИзИсходниковТекущуюКонфигурацию(); + КонецЕсли; + + ИмяФайлаПоставкиСВерсией = МенеджерВерсий.ПодставитьНомерВерсии(КаталогИсходников, ИмяФайлаПоставки); + МенеджерКонфигуратора.СоздатьФайлПоставки(ИмяФайлаПоставкиСВерсией); + +КонецПроцедуры + +Процедура СобратьИзИсходниковТекущуюКонфигурацию() + + Если ЗначениеЗаполнено(НомерСборки) Тогда + ИзменитьНомерСборкиВИсходникахКонфигурации(); + КонецЕсли; + + МенеджерКонфигуратора.СобратьИзИсходниковТекущуюКонфигурацию(КаталогИсходников, "", Ложь, Ложь); + МенеджерКонфигуратора.ОбновитьКонфигурациюБазыДанных(Ложь); + +КонецПроцедуры + +Процедура ИзменитьНомерСборкиВИсходникахКонфигурации() + + Лог.Информация("Изменяю номер сборки в исходниках конфигурации 1С на %1", НомерСборки); + + СтарыеВерсии = МенеджерВерсий.УстановитьНомерСборкиДляКонфигурации(КаталогИсходников, НомерСборки); + + Для каждого КлючЗначение Из СтарыеВерсии Цикл + Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); + КонецЦикла; + +КонецПроцедуры 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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index f793d1ce..22e15689 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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.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\241\320\276\320\267\320\264\320\260\321\202\321\214\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -33,7 +33,7 @@ Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // @@ -46,15 +46,9 @@ Лог = ДополнительныеПараметры.Лог; ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - //Исключаем ситуацию с Неопределено или еще с Булево. - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = ""; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.СоздатьХранилище( @@ -68,4 +62,4 @@ МенеджерКонфигуратора.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецФункции 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\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.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\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.os" index 22539eb2..09b819df 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\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.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\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214\320\222\320\265\321\200\321\201\320\270\321\216\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\222\320\244\320\260\320\271\320\273.os" @@ -37,7 +37,7 @@ Парсер.ДобавитьКоманду(ОписаниеКоманды); -КонецПроцедуры // ЗарегистрироватьКоманду +КонецПроцедуры // Выполняет логику команды // @@ -59,14 +59,9 @@ Ожидаем.Что(ПарольПользователя, " не задан пароль создаваемого пользователя хранилища").Заполнено(); ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; - СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; - Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда - ДанныеПодключения.СтрокаПодключения = "/F"; - КонецЕсли; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.КонструкторДляНеобязательнойСтрокиСоединения(ДанныеПодключения, ПараметрыКоманды); Попытка МенеджерКонфигуратора.СохранитьВерсиюХранилищаВФайл( @@ -80,4 +75,4 @@ МенеджерКонфигуратора.Деструктор(); Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; -КонецФункции // ВыполнитьКоманду +КонецФункции 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\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.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\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" new file mode 100644 index 00000000..55671832 --- /dev/null +++ "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\241\321\200\320\260\320\262\320\275\320\270\321\202\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Формирование отчета о сравнении основной конфигурации с файлом или двух файлов конфигураций +// +// Служебный модуль с набором методов работы с командами приложения +// +// TODO добавить тесты\фичи +// +// Структура модуля реализована в соответствии с рекомендациями oscript-app-template (C) EvilBeaver +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#Использовать logos +#Использовать v8runner + +Перем Лог; +Перем МенеджерКонфигуратора; + + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Прикладной интерфейс + +Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт + + ТекстОписания = + " Формирование файла отчета сравнения конфигураций. + |"; + + ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, ТекстОписания); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--secondFile", + "Путь к файлу cf/cfe, с которым идёт сравнение конфигурации. Обязательный параметр."); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--reportFile", + "Путь к файлу, где должен быть сохранён отчет. Обязательный параметр."); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--reportType", + "Тип отчёта о сравнении: по-умолчанию Full (полный) или указать Brief (краткий)"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--reportFormat", + "Формат файла отчета: по-умолчанию txt или указать mxl"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--extensionName", + "Имя расширения, если надо сравнить его вместо основной конфигурации"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--firstFile", + "Путь к первому файлу cf/cfe: если не указать - используется основная конфигурация (расширение)"); + + Парсер.ДобавитьКоманду(ОписаниеКоманды); + +КонецПроцедуры // ЗарегистрироватьКоманду + +// Выполняет логику команды +// +// Параметры: +// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений +// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно) +// +Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Попытка + Лог = ДополнительныеПараметры.Лог; + Исключение + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + КонецПопытки; + + Лог.Информация("Начинаю сравнение конфигураций"); + + ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; + + ПутьКФайлуКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--secondFile"]); + ПутьКОтчету = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--reportFile"]); + ТипОтчета = ПараметрыКоманды["--reportType"]; + ФорматОтчета = ПараметрыКоманды["--reportFormat"]; + ИмяРасширения = ПараметрыКоманды["--extensionName"]; + ПутьКФайлуПервойКонфигурации = ОбщиеМетоды.ПолныйПуть(ПараметрыКоманды["--firstFile"]); + + Лог.Отладка("ПутьКФайлуКонфигурации %1", ПутьКФайлуКонфигурации); + Лог.Отладка("ТипОтчета %1", ТипОтчета); + Лог.Отладка("ФорматОтчета %1", ФорматОтчета); + Лог.Отладка("ПутьКОтчету %1", ПутьКОтчету); + Лог.Отладка("ИмяРасширения %1", ИмяРасширения); + Лог.Отладка("ПутьКФайлуПервойКонфигурации %1", ПутьКФайлуПервойКонфигурации); + + Если Не ЗначениеЗаполнено(ПутьКФайлуКонфигурации) Тогда + ВызватьИсключение "Необходимо задать путь к файлу cf/cfe, с которым идёт сравнение, + |Параметр --secondFile является обязательным."; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПутьКОтчету) Тогда + ВызватьИсключение "Необходимо задать путь к файлу сохранения отчета, + |Параметр --reportFile является обязательным."; + КонецЕсли; + + МенеджерКонфигуратора = Новый МенеджерКонфигуратора; + + Попытка + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); + + УправлениеКонфигуратором = МенеджерКонфигуратора.УправлениеКонфигуратором(); + + Если ЗначениеЗаполнено(ТипОтчета) И НРег(ТипОтчета) <> "full" Тогда + ТипОтчета = ТипыОтчетовОСравнении.Краткий; + Иначе + ТипОтчета = ТипыОтчетовОСравнении.Полный; + КонецЕсли; + + Если ЗначениеЗаполнено(ФорматОтчета) И НРег(ФорматОтчета) <> "txt" Тогда + ФорматОтчета = "mxl"; + Иначе + ФорматОтчета = "txt"; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ПутьКФайлуПервойКонфигурации) Тогда + ПутьКФайлуПервойКонфигурации = Неопределено; + КонецЕсли; + + УправлениеКонфигуратором.ПолучитьОтчетОСравненииКонфигурацииСФайлом(ПутьКФайлуКонфигурации, ПутьКОтчету, + ТипОтчета, ФорматОтчета, ИмяРасширения, ПутьКФайлуПервойКонфигурации); + + Лог.Информация(УправлениеКонфигуратором.ВыводКоманды()); + + Лог.Информация("Успешно завершено сравнение конфигураций"); + + Исключение + МенеджерКонфигуратора.Деструктор(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + МенеджерКонфигуратора.Деструктор(); + + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции // ВыполнитьКоманду 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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.os" index b33de483..edc744dd 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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_xUnitFor1C.os" @@ -123,7 +123,7 @@ ДанныеПодключения = ПараметрыКоманды["ДанныеПодключения"]; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); НастройкиТестКлиента = Новый Структура; НастройкиТестКлиента.Вставить("Подключение", ПараметрыКоманды["--testclient"]); @@ -289,8 +289,6 @@ Функция КлючЗапускаЗагрузчика(ЗагружатьВстроенныеТесты, ПутьВходящихДанных) - ПараметрыЗапуска = Новый Массив(); - Если Не ЗагружатьВстроенныеТесты Тогда Если Новый Файл(ПутьВходящихДанных).ЭтоКаталог() Тогда 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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.os" index cff8572a..85ae6202 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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.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\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\276\320\262\320\265\320\264\320\265\320\275\320\270\321\217.os" @@ -80,7 +80,7 @@ ЗапускатьТолстыйКлиент = ОбщиеМетоды.УказанПараметрТолстыйКлиент(ПараметрыКоманды["--ordinaryapp"], Лог); ОжидатьЗавершения = Не ПараметрыКоманды["--no-wait"]; МенеджерКонфигуратора = Новый МенеджерКонфигуратора; - МенеджерКонфигуратора.ИнициализацияИзПараметровКоманды(ДанныеПодключения, ПараметрыКоманды); + МенеджерКонфигуратора.Конструктор(ДанныеПодключения, ПараметрыКоманды); ПутьКФичам = ""; Если ПараметрыКоманды.Получить("--path") <> Неопределено Тогда @@ -102,7 +102,7 @@ ПараметрыКоманды["--additional"], ПараметрыКоманды["--tags-ignore"], ПараметрыКоманды["--tags-filter"], - ПараметрыКоманды["additional-keys"] + ПараметрыКоманды["--additional-keys"] ); Исключение @@ -174,22 +174,28 @@ ПутьЛогаВыполненияСценариев = НастройкиДля1С.ПолучитьНастройку(Настройки, "ИмяФайлаЛогВыполненияСценариев", "./build/vanessaonline.txt", "путь к лог-файлу выполнения"); - Если ПустаяСтрока(ДопКлючи) И НЕ Лев(ДопКлючи, 1) = ";" Тогда - ДопКлючи = ";" + ДопКлючи; - КонецЕсли; + КлючиЗапуска = Новый Массив; + КлючиЗапуска.Добавить("StartFeaturePlayer"); + КлючиЗапуска.Добавить("workspaceRoot=" + РабочийКаталогПроекта); - КлючЗапуска = """StartFeaturePlayer;VBParams=" + ПутьКНастройкам - + ";workspaceRoot=" + РабочийКаталогПроекта - + ДопКлючи + """"; + Если ЗначениеЗаполнено(ПутьКНастройкам) Тогда + КлючиЗапуска.Добавить("VBParams=" + ПутьКНастройкам); + КонецЕсли; Если ЗначениеЗаполнено(ТегиОтбор) Тогда - КлючЗапуска = КлючЗапуска + ";TagsIgnore=" + ТегиОтбор; + КлючиЗапуска.Добавить("TagsIgnore=" + ТегиОтбор); КонецЕсли; Если ЗначениеЗаполнено(ТегиФильтр) Тогда - КлючЗапуска = КлючЗапуска + ";TagsFilter=" + ТегиФильтр; + КлючиЗапуска.Добавить("TagsFilter=" + ТегиФильтр); КонецЕсли; + Если ЗначениеЗаполнено(ДопКлючи) Тогда + КлючиЗапуска.Добавить(ДопКлючи); + КонецЕсли; + + КлючЗапуска = СтрШаблон("""%1""", СтрСоединить(КлючиЗапуска, ";")); + Лог.Отладка(КлючЗапуска); ДополнительныеКлючи = " /TESTMANAGER " + ДопПараметры; 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\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.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\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" index d2be8650..51ef86f2 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\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.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\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" @@ -30,11 +30,11 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cluster-admin", - "Администратор кластера"); + "[env RUNNER_CLUSTERADMIN_USER] Администратор кластера"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cluster-pwd", - "Пароль администратора кластера"); + "[env RUNNER_CLUSTERADMIN_PWD] Пароль администратора кластера"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--cluster", @@ -44,6 +44,10 @@ "--cluster-name", "Имя кластера"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, + "--try", + "Число попыток обращения по протоколу rac/ras"); + Если ЭтоУправлениеСеансами Тогда Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, @@ -61,11 +65,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--lockstartat", "Время старта блокировки через n сек"); - - Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "--try", - "Число попыток обращения по протоколу rac/ras"); - + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--with-nolock", "Не блокировать сеансы (y/n). Может применяться для действия kill, т.к. по умолчанию, при его выполнении автоматически блокируется начало сеансов. @@ -271,6 +271,8 @@ Пауза_ПолСекунды = 500; Пауза_ДесятьСек = 10000; + УспешноеУдалениеСеансов = Ложь; + ОшибкаУдаленияСеансов = ""; Для Сч = 1 По Настройки.ЧислоПопыток Цикл Попытка @@ -279,22 +281,28 @@ Приостановить(Пауза_ПолСекунды); Сеансы = ПолучитьСписокСеансов(); - Если Сеансы.Количество() Тогда - Лог.Информация("Пауза перед отключением соединений"); - Приостановить(Пауза_ДесятьСек); - ОтключитьСоединенияСРабочимиПроцессами(); - КонецЕсли; - + // соединения будет отключать всегда, так как могут быть зависшие + Лог.Информация("Пауза перед отключением соединений"); + Приостановить(Пауза_ДесятьСек); + ОтключитьСоединенияСРабочимиПроцессами(); + Сеансы = ПолучитьСписокСеансов(); Если Сеансы.Количество() = 0 Тогда + УспешноеУдалениеСеансов = Истина; Прервать; КонецЕсли; Исключение - ВызватьИсключение СтрШаблон("Попытка удаления сеансов не удалась. Текст ошибки: - |%1", ИнформацияОбОшибке().Описание); + УспешноеУдалениеСеансов = Ложь; + ОшибкаУдаленияСеансов = ИнформацияОбОшибке().Описание; + Лог.Информация("Попытка удаления сеансов №" + Сч + " неудачна. Текст ошибки: + |" + ОшибкаУдаленияСеансов); КонецПопытки; КонецЦикла; + Если Не УспешноеУдалениеСеансов Тогда + ВызватьИсключение СтрШаблон("Попытка удаления сеансов не удалась. Текст ошибки: + |%1", ОшибкаУдаленияСеансов); + КонецЕсли; КонецПроцедуры @@ -343,15 +351,24 @@ ВремяБлокировки, СтрокаОкончанияБлокировки) + " " + Настройки.АдресСервераАдминистрирования; + УспешныйЗапускRac = Ложь; + ОшибкаЗапускаRac = ""; Для Сч = 1 По Настройки.ЧислоПопыток Цикл Попытка ЗапуститьПроцесс(КомандаВыполнения); + УспешныйЗапускRac = Истина; Прервать; Исключение - ВызватьИсключение СтрШаблон("Попытка запуска rac не удалась. Текст ошибки: - |%1", ИнформацияОбОшибке().Описание); + УспешныйЗапускRac = Ложь; + ОшибкаЗапускаRac = ИнформацияОбОшибке().Описание; + Лог.Информация("Попытка запуска rac №" + Сч + " неудачна. Текст ошибки: + |" + ОшибкаЗапускаRac); КонецПопытки; КонецЦикла; + Если Не УспешныйЗапускRac Тогда + ВызватьИсключение СтрШаблон("Попытка запуска rac не удалась. Текст ошибки: + |%1", ОшибкаЗапускаRac); + КонецЕсли; Лог.Информация("Сеансы " + ?(Блокировать, "запрещены", "разрешены")); @@ -471,8 +488,9 @@ ЗапуститьПроцесс(СтрокаВыполнения); Исключение ТекстОшибки = ОписаниеОшибки(); - Если СтрНайти(ВРег(ТекстОшибки), ВРег("Сеанс отсутствует или удален")) = 0 - И СтрНайти(ВРег(ТекстОшибки), ВРег("Сеанс с указанным идентификатором не найден")) = 0 Тогда + ТекстОшибкиВРег = ВРег(ТекстОшибки); + Если СтрНайти(ТекстОшибкиВРег, "СЕАНС ОТСУТСТВУЕТ ИЛИ УДАЛЕН") = 0 + И СтрНайти(ТекстОшибкиВРег, "СЕАНС С УКАЗАННЫМ ИДЕНТИФИКАТОРОМ НЕ НАЙДЕН") = 0 Тогда ВызватьИсключение; КонецЕсли; Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); @@ -558,7 +576,7 @@ КонецФункции -Функция РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) +Процедура РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) ОписаниеКластера = МенеджерRac.ОписаниеКластера(); КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", @@ -577,16 +595,13 @@ Лог.Информация(Сообщение); Попытка - Результат = ЗапуститьПроцесс(КомандаРазрывСоединения); + ЗапуститьПроцесс(КомандаРазрывСоединения); Исключение ТекстОшибки = ВРег(ОписаниеОшибки()); Если СтрНайти(ТекстОшибки, "СОЕДИНЕНИЕ") = 0 И СтрНайти(ТекстОшибки, "НЕ НАЙДЕНО") = 0 Тогда ВызватьИсключение; КонецЕсли; Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); - Результат = Ложь; КонецПопытки; - Возврат Результат; - -КонецФункции +КонецПроцедуры 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\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.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\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" index 880e7a23..fd67a4e1 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\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.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\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" @@ -19,12 +19,19 @@ Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт - ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, " Установка номера версии файлов 1С (конфигурации, расширения, внешние обработки\отчеты)."); + ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, + " Установка номера версии файлов 1С (конфигурации, расширения, внешние обработки\отчеты)."); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--new-version", "Номер версии, который нужно установить"); + Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--check-module", + "Исправление версии в модулях объектов внешних обработок\отчетов 1С (Ext/ObjectModule.bsl) или в общих модулях (Ext/Module.bsl) + | Формат версии в коде нужно задать в виде отдельной строки Версия = ""1.2.3.4""; // или ""1.2.3"""); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--src", - "Путь Configuration.xml или каталога, содержащего этот файл, или корневого каталога для поиска в подкаталогах - для исходников конфигурации или расширения"); + "Путь Configuration.xml или Configuration.mdo или каталога, содержащего любой из этих файлов, + |или корневого каталога для поиска в подкаталогах - для исходников конфигурации или расширения + |Если указан флаг --check-module, тогда в параметре передается путь к указанным модулям или к каталогам\подкаталогам с модулями + |и будут анализируются только указанные модули кода!"); Парсер.ДобавитьКоманду(ОписаниеКоманды); @@ -45,14 +52,25 @@ НомерВерсии = ПараметрыКоманды["--new-version"]; ПутьФайла = ПараметрыКоманды["--src"]; + ТолькоМодулиКода = ПараметрыКоманды["--check-module"]; - Лог.Информация("Изменяю версию в исходниках конфигурации 1С на %1 - %2", НомерВерсии, ПутьФайла); + Если ТолькоМодулиКода Тогда + Лог.Информация("Изменяю версию в исходниках модуля 1С на %1 - %2", НомерВерсии, ПутьФайла); + Иначе + Лог.Информация("Изменяю версию в исходниках конфигурации 1С на %1 - %2", НомерВерсии, ПутьФайла); + КонецЕсли; МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С; - СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии); + СтарыеВерсии = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии, ТолькоМодулиКода); Для каждого КлючЗначение Из СтарыеВерсии Цикл - Лог.Информация(" Старая версия %1, файл - %2", КлючЗначение.Значение, КлючЗначение.Ключ); + ПредыдущаяВерсия = КлючЗначение.Значение; + Если ТолькоМодулиКода И Не ЗначениеЗаполнено(ПредыдущаяВерсия) Тогда + Лог.Информация(" Не найдена предыдущая установка версии, новая версия не установлена. Файл - %2", + ПредыдущаяВерсия, КлючЗначение.Ключ); + Иначе + Лог.Информация(" Предыдущая версия %1, файл - %2", ПредыдущаяВерсия, КлючЗначение.Ключ); + КонецЕсли; КонецЦикла; Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" new file mode 100644 index 00000000..e9a6081d --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200Ibcmd.os" @@ -0,0 +1,361 @@ + +#Использовать ibcmdrunner +#Использовать v8find + +#Область ОписаниеПеременных + +Перем Лог; // Содердит объект ллога +Перем ВременныйКаталогДанныхСервера; // Временный каталог данных автономного сервера +Перем КаталогВременнойИБ; +Перем УправлениеИБ; // :УправлениеИБ +Перем Локаль; // Локаль приложения + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт + + КаталогБазы = ОбщиеМетоды.КаталогФайловойИБ(СтрокаСоединения); + Лог.Отладка("Использовать каталог ИБ %1", КаталогБазы); + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.УстановитьПараметрыАвторизацииИБ(Пользователь, Пароль); + +КонецПроцедуры + +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + + ОбщиеМетоды.ОбеспечитьПустойКаталог(Новый Файл(КаталогБазы)); + + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогБазы); + УправлениеИБ.СоздатьИБИзФайлаВыгрузки(ПутьКШаблону, ЛокальДляЗапуска()); + + СтрокаСоединения = СтрШаблон("File=""%1""", КаталогБазы); + ДобавитьБазуВСписокБаз(ИмяБазыВСписке, СтрокаСоединения); + +КонецПроцедуры + +Процедура СобратьИзИсходниковТекущуюКонфигурацию(Знач ВходнойКаталог, + Знач СписокФайловДляЗагрузки = "", СниматьСПоддержки = Ложь, ОбновитьФайлВерсий = Истина) Экспорт + + ИмяРасширения = ""; + + Если ТипЗнч(СписокФайловДляЗагрузки) = Тип("Строка") Тогда + Если СписокФайловДляЗагрузки <> "" Тогда + СписокФайловДляЗагрузки = СтрРазделить(СписокФайловДляЗагрузки, ";"); + КонецЕсли; + КонецЕсли; + + Если СниматьСПоддержки Тогда + УправлениеИБ.СнятьСПоддержки(); + КонецЕсли; + + Если ЗначениеЗаполнено(СписокФайловДляЗагрузки) Тогда + УправлениеИБ.ЗагрузитьВыбранныеФайлыКонфигурации(ВходнойКаталог, СписокФайловДляЗагрузки, ИмяРасширения); + Иначе + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(ВходнойКаталог, ИмяРасширения); + КонецЕсли; + + Если ОбновитьФайлВерсий Тогда + УправлениеИБ.ВыгрузитьВФайлСостояниеКонфигурации(ВходнойКаталог, ИмяРасширения); + КонецЕсли; + +КонецПроцедуры + +// Выгружает информационную базу в файл +// +// Параметры: +// ПутьКВыгружаемомуФайлуСДанными - Строка - Путь к результату - выгружаемому файлу с данными (*.dt) +// +Процедура ВыгрузитьИнфобазуВФайл(Знач ПутьКВыгружаемомуФайлуСДанными) Экспорт + УправлениеИБ.ВыгрузитьДанныеИБ(ПутьКВыгружаемомуФайлуСДанными); +КонецПроцедуры + +// Загружает информационную базу из файла +// +// Параметры: +// ПутьКЗагружаемомуФайлуСДанными - Строка - Путь к файлу с данными (*.dt) +// КоличествоЗаданий - Число - Количество заданий (потоков) загрузки из файла с данными +// +Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными, Знач КоличествоЗаданий = 0) Экспорт + УправлениеИБ.ЗагрузитьДанныеИБ(ПутьКЗагружаемомуФайлуСДанными); +КонецПроцедуры + +Процедура ЗагрузитьФайлКонфигурации(Знач ПутьКФайлу, Знач СниматьСПоддержки = Истина) Экспорт + + ИмяРасширения = ""; + + Если СниматьСПоддержки Тогда + УправлениеИБ.СнятьСПоддержки(); + КонецЕсли; + + УправлениеИБ.ЗагрузитьКонфигурацию(ПутьКФайлу, ИмяРасширения); + +КонецПроцедуры + +Процедура ОбновитьКонфигурациюБазыДанных(ДинамическоеОбновление = Ложь) Экспорт + + Если ДинамическоеОбновление Тогда + РежимДинамическогоОбновления = "disable"; + Иначе + РежимДинамическогоОбновления = "auto"; + КонецЕсли; + ЗавершатьСеансы = "force"; + + ИмяРасширения = ""; + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения, РежимДинамическогоОбновления, ЗавершатьСеансы); + + Лог.Информация("Обновление конфигурации БД завершено."); + +КонецПроцедуры + +// ОбновитьРасширение +// +// Параметры: +// ИмяРасширения - Строка - <описание параметра> +// +Процедура ОбновитьРасширение(Знач ИмяРасширения) Экспорт + + РежимДинамическогоОбновления = "disable"; + ЗавершатьСеансы = "force"; + + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения, РежимДинамическогоОбновления, ЗавершатьСеансы); +КонецПроцедуры + +Процедура ПоказатьСписокВсехРасширенийКонфигурации() Экспорт + СписокРасширений = УправлениеИБ.СписокРасширений(); + Лог.Информация("Список расширений конфигурации:%2%1", СписокРасширений, Символы.ПС); +КонецПроцедуры + +Процедура ВыгрузитьКонфигурациюВФайл(Знач ПутьКНужномуФайлуКонфигурации) Экспорт + + УправлениеИБ.ВыгрузитьКонфигурациюВФайл(ПутьКНужномуФайлуКонфигурации); + +КонецПроцедуры + +// Разбор текущей конфигураций на исходники штатной выгрузкой 1С +// +// Параметры: +// КаталогВыгрузки - Строка - Путь к каталогу выгрузки +// ФайлВерсии - Строка - Путь к файлу версии +// ТолькоИзмененные - Булево - Выгружать только измененные файлы для ускорения выгрузки +// ИспользоватьПереименования - Булево - Переименовывать файлы в удобные имена и раскладывать по папкам согласно иерархии метаданных +// +Процедура РазобратьНаИсходникиТекущуюКонфигурацию(КаталогВыгрузки, Знач ФайлВерсии = "", + Знач ТолькоИзмененные = Истина, + Знач ИспользоватьПереименования = Ложь) Экспорт + + НеВыгружатьНеСуществующиеОбъекты = Истина; + ИмяРасширения = ""; + ВАрхив = Ложь; + НаСервере = Ложь; + КоличествоПотоков = 0; + + ФС.ОбеспечитьКаталог(КаталогВыгрузки); + Синхронизировать = ТолькоИзмененные И ФС.ФайлСуществует(ФайлВерсии); + + УправлениеИБ.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки, ФайлВерсии, ИмяРасширения, + Синхронизировать, ВАрхив, НаСервере, КоличествоПотоков, НеВыгружатьНеСуществующиеОбъекты); + +КонецПроцедуры + +// Выгружает расширение в исходники +// +// Параметры: +// КаталогВыгрузки - Строка - Путь к каталогу выгрузки +// ИмяРасширения - Строка - Имя расширения +// ФайлВерсии - Строка - Путь к файлу версии +// ТолькоИзмененные - Булево - Выгружать только измененные файлы для ускорения выгрузки +// +Процедура РазобратьРасширениеНаИсходники(КаталогВыгрузки, ИмяРасширения, + Знач ФайлВерсии = "", Знач ТолькоИзмененные = Истина) Экспорт + + НеВыгружатьНеСуществующиеОбъекты = Истина; + ВАрхив = Ложь; + НаСервере = Ложь; + КоличествоПотоков = 0; + + ФС.ОбеспечитьКаталог(КаталогВыгрузки); + Синхронизировать = ТолькоИзмененные И ФС.ФайлСуществует(ФайлВерсии); + + УправлениеИБ.ВыгрузитьКонфигурациюВФайлы(КаталогВыгрузки, ФайлВерсии, ИмяРасширения, + Синхронизировать, ВАрхив, НаСервере, КоличествоПотоков, НеВыгружатьНеСуществующиеОбъекты); + +КонецПроцедуры + +// Выгружает файл конфигурации в исходники +// +// Параметры: +// ФайлКонфигурации - Строка - Путь к источнику - выгружаемому файлу конфигурации (*.cf) +// ВыходнойКаталог - Строка - Путь к каталогу выгрузки +// ФайлВерсии - Строка - Путь к файлу версии +// ИспользоватьПереименования - Булево - Переименовывать файлы в удобные имена и раскладывать по папкам согласно иерархии метаданных +// +Процедура ВыгрузитьКонфигурациюВИсходники(Знач ФайлКонфигурации, Знач ВыходнойКаталог, + Знач ФайлВерсии = "", Знач ИспользоватьПереименования = Ложь) Экспорт + + ЗагрузитьФайлКонфигурации(ФайлКонфигурации); + РазобратьНаИсходникиТекущуюКонфигурацию(ВыходнойКаталог, ФайлВерсии, Истина, ИспользоватьПереименования); + +КонецПроцедуры + +Процедура СобратьИзИсходниковРасширение(Каталог, ИмяРасширения, Обновить = Ложь) Экспорт + + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(Каталог, ИмяРасширения); + + Если Обновить Тогда + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения); + КонецЕсли; + +КонецПроцедуры + +// Выгружает файл расширения из ИБ +// +// Параметры: +// ПутьКНужномуФайлуРасширения - Строка - Путь к результату - выгружаемому файлу конфигурации (*.cfe) +// ИмяРасширения - Строка - Имя расширения +// +Процедура ВыгрузитьРасширениеВФайл(Знач ПутьКНужномуФайлуРасширения, Знач ИмяРасширения) Экспорт + УправлениеИБ.ВыгрузитьКонфигурациюВФайл(ПутьКНужномуФайлуРасширения, ИмяРасширения); +КонецПроцедуры + +// Загружает файл расширения в текущую базу данных. +// Параметры: +// ПутьКФайлу - Строка - Путь к файлу *.cfe +// ИмяРасширения - Строка +// ОбновитьКонфигурациюИБ - Булево +// +Процедура ЗагрузитьФайлРасширения(Знач ПутьКФайлу, Знач ИмяРасширения, Знач ОбновитьКонфигурациюИБ = Ложь) Экспорт + + УправлениеИБ.ЗагрузитьКонфигурацию(ПутьКФайлу, ИмяРасширения); + + Если ОбновитьКонфигурациюИБ Тогда + УправлениеИБ.ОбновитьКонфигурациюБазыДанных(ИмяРасширения); + КонецЕсли; + +КонецПроцедуры + +// Возвращает каталог времнной ИБ +// +// Возвращаемое значение: +// Строка - Каталог временной ИБ +// +Функция КаталогВременнойИБ() Экспорт + Возврат КаталогВременнойИБ; +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта() + + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + ВременныйКаталогДанныхСервера = ВременныеФайлы.СоздатьКаталог(); + Локаль = ""; + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыАвтономногоСервера(ВременныйКаталогДанныхСервера); + +КонецПроцедуры + +Процедура Конструктор(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт + + ВерсияПлатформы = ДанныеПодключения.ВерсияПлатформы; + Если ЗначениеЗаполнено(ВерсияПлатформы) Тогда + Если ЗначениеЗаполнено(ДанныеПодключения.РазрядностьПлатформы) Тогда + Разрядность = ОбщиеМетоды.РазрядностьПлатформы(ДанныеПодключения.РазрядностьПлатформы); + Лог.Отладка("Разрядность платформы 1С указана %1", ДанныеПодключения.РазрядностьПлатформы); + Иначе + Разрядность = ОбщиеМетоды.РазрядностьПлатформы("x64x86"); + Лог.Отладка("Разрядность платформы 1С не указана"); + КонецЕсли; + + ПутьКIbcmd = ПутьКIbcmd(ВерсияПлатформы, Разрядность); + УправлениеИБ.ПутьКПриложению(ПутьКIbcmd); + КонецЕсли; + Лог.Информация("Используется ibcmd платформы %1", ТекущаяВерсияПлатформы()); + + ИспользоватьВременнуюБазу = ДанныеПодключения.ИспользоватьВременнуюБазу; + Если ИспользоватьВременнуюБазу Тогда + Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); + + КаталогВременнойИБ = ОбъединитьПути(ВременныйКаталогДанныхСервера, "db_data"); + + СтрокаСоединения = СтрШаблон("/F%1", КаталогВременнойИБ); + Пользователь = ""; + Пароль = ""; + + УстановитьКонтекст(СтрокаСоединения, Пользователь, Пароль); + + Иначе + УстановитьКонтекст(ДанныеПодключения.ПутьБазы, + ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль); + КонецЕсли; + +КонецПроцедуры + +Процедура Деструктор() Экспорт + + Попытка + ВременныеФайлы.УдалитьФайл(ВременныйКаталогДанныхСервера); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Отладка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + ВременныйКаталогДанныхСервера = ""; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПутьКIbcmd(ВерсияПлатформы, Разрядность) + + Если Не СтрНачинаетсяС(ВерсияПлатформы, "8.3") Тогда + ВызватьИсключение "Неверная версия платформы <" + ВерсияПлатформы + ">"; + КонецЕсли; + + Возврат Платформа1С.ПутьКIBCMD(ВерсияПлатформы, Разрядность); + +КонецФункции + +Функция ЛокальДляЗапуска() + + Если ЗначениеЗаполнено(Локаль) Тогда + Возврат Локаль; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Процедура ДобавитьБазуВСписокБаз(ИмяБазыВСписке, СтрокаСоединения) + + Если ПустаяСтрока(ИмяБазыВСписке) Тогда + Возврат; + КонецЕсли; + + КорневойПутьПроекта = ПараметрыСистемы.КорневойПутьПроекта; + + ДопДанныеСпискаБаз = Новый Структура; + ДопДанныеСпискаБаз.Вставить("RootPath", КорневойПутьПроекта); + ДопДанныеСпискаБаз.Вставить("Version", УправлениеИБ.Версия()); + + ПолныйПуть = Новый Файл(КорневойПутьПроекта).ИмяБезРасширения; + + Попытка + МенеджерСпискаБаз.ДобавитьБазуВСписокБаз(СтрокаСоединения, ПолныйПуть, ДопДанныеСпискаБаз); + Исключение + Лог.Предупреждение("Добавление базы в список " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Функция ТекущаяВерсияПлатформы() + Возврат СокрЛП(УправлениеИБ.Версия()); +КонецФункции + +#КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" index fc2dec1f..165ddec3 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" @@ -1,5 +1,6 @@ #Использовать logos #Использовать fs +#Использовать fluent #Область ОписаниеПеременных @@ -12,11 +13,11 @@ // Возвращает версию конфигурации из исходников конфигурации или расширения // // Параметры: -// ПутьФайлаКонфигурации - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему +// ПутьФайлаКонфигурации - Строка - путь к файлу Configuration.xml или Configuration.mdo или к каталогу, его содержащему // // Возвращаемое значение: // Соответствие - текущая версия конфигурации -// * Ключ - Строка - путь найденного файла Configuration.xml +// * Ключ - Строка - путь найденного файла Configuration.xml или Configuration.mdo // * Значение - Строка - предыдущая версия из этого файла // Функция ВерсияКонфигурации(Знач ПутьФайлаКонфигурации) Экспорт @@ -25,7 +26,7 @@ Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьФайлаКонфигурации, Ложь) Цикл + Для каждого Файл Из ФайлыИсходников(ПутьФайлаКонфигурации, Ложь) Цикл СтрокаXML = ПрочитатьФайл(Файл.ПолноеИмя); Результат.Вставить(Файл.ПолноеИмя, ВерсияКонфигурацииПоХМЛ(СтрокаXML)); КонецЦикла; @@ -37,21 +38,22 @@ // Устанавливает новую версию конфигурации или расширения в исходниках // // Параметры: -// ПутьИсходников - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему +// ПутьИсходников - Строка - путь к файлу Configuration.xml или Configuration.mdo или к каталогу, его содержащему // если в каталоге нет этого файла, выполняется рекурсивный поиск всех таких файлов в подкаталогах // НовыйНомерВерсии - Строка - версия для установки +// ТолькоМодулиКода - Булево - выполнять поиск в модулях конфигурации (ObjectModule.bsl или Module.bsl) // // Возвращаемое значение: // Соответствие - текущая версия конфигурации -// * Ключ - Строка - путь найденного файла Configuration.xml +// * Ключ - Строка - путь найденного файла Configuration.xml или Configuration.mdo // * Значение - Строка - предыдущая версия из этого файла // -Функция УстановитьВерсиюКонфигурации(Знач ПутьИсходников, Знач НовыйНомерВерсии) Экспорт +Функция УстановитьВерсиюКонфигурации(Знач ПутьИсходников, Знач НовыйНомерВерсии, Знач ТолькоМодулиКода) Экспорт Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл - ПредыдущаяВерсия = ЗаписатьНомерВерсии(Файл.ПолноеИмя, НовыйНомерВерсии); + Для каждого Файл Из ФайлыИсходников(ПутьИсходников, Истина, ТолькоМодулиКода) Цикл + ПредыдущаяВерсия = ЗаписатьНомерВерсии(Файл.ПолноеИмя, НовыйНомерВерсии, ТолькоМодулиКода); Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); КонецЦикла; @@ -63,20 +65,20 @@ // Например, если старая версия 5.4.3.124, а номер сборки 125, то новая версия 5.4.3.125 // // Параметры: -// ПутьИсходников - Строка - путь к файлу Configuration.xml или к каталогу, его содержащему +// ПутьИсходников - Строка - путь к файлу Configuration.xml или Configuration.mdo или к каталогу, его содержащему // если в каталоге нет этого файла, выполняется рекурсивный поиск всех таких файлов в подкаталогах // НовыйНомерСборки - Строка - номер сборки для установки // // Возвращаемое значение: // Соответствие - текущая версия конфигурации -// * Ключ - Строка - путь найденного файла Configuration.xml +// * Ключ - Строка - путь найденного файла Configuration.xml или Configuration.mdo // * Значение - Строка - предыдущая версия из этого файла // Функция УстановитьНомерСборкиДляКонфигурации(Знач ПутьИсходников, Знач НовыйНомерСборки) Экспорт Результат = Новый Соответствие; - Для каждого Файл Из ФайлыКонфигураций(ПутьИсходников) Цикл + Для каждого Файл Из ФайлыИсходников(ПутьИсходников) Цикл ПредыдущаяВерсия = ЗаписатьНомерСборки(Файл.ПолноеИмя, НовыйНомерСборки); Результат.Вставить(Файл.ПолноеИмя, ПредыдущаяВерсия); КонецЦикла; @@ -85,24 +87,127 @@ КонецФункции +// Поиск файла подходящего под шаблон номера версии. +// +// Параметры: +// ПутьКФайлуКонфигурации - Строка - Файл с шаблоном номера версии. Например: 1cv8_$version.cf +// +// Возвращаемое значение: +// Строка - Имя файла подходящего под шаблон версии. Например: 1cv8_1.2.3.4.cf +// +Функция НайтиФайлСВерсией(Знач ПутьКФайлуКонфигурации) Экспорт + + ШаблонВерсии = "$version"; + + Если СтрНайти(ПутьКФайлуКонфигурации, ШаблонВерсии) = 0 Тогда + Возврат ПутьКФайлуКонфигурации; + КонецЕсли; + + Файл = Новый Файл(ПутьКФайлуКонфигурации); + Путь = Файл.Путь; + + ПутьКФайлу = ""; + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)"); + + Если ПустаяСтрока(Файл.Расширение) Тогда + МаскаПоиска = ПолучитьМаскуВсеФайлы(); + Иначе + МаскаПоиска = "*" + Файл.Расширение; + КонецЕсли; + + Лог.Отладка("Используем каталог поиска: %1", Путь); + Лог.Отладка("Используем маску поиска: %1", МаскаПоиска); + + НайденныеФайлы = НайтиФайлы(Путь, МаскаПоиска); + Для каждого НайденныйФайл Из НайденныеФайлы Цикл + + Лог.Отладка("Ищем номер версии в имени файла: %1", НайденныйФайл.Имя); + Совпадения = РегулярноеВыражение.НайтиСовпадения(НайденныйФайл.Имя); + Если Совпадения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ВерсияФайла = Совпадения[0].Группы[1].Значение; + Лог.Отладка("Нашли номер версии: %1", ВерсияФайла); + ИмяФайлаСВерсией = СтрЗаменить(Файл.Имя, ШаблонВерсии, ВерсияФайла); + Если ИмяФайлаСВерсией = НайденныйФайл.Имя Тогда + ПутьКФайлу = НайденныйФайл.ПолноеИмя; + Лог.Информация("Используем файл с версией " + ПутьКФайлу); + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ПустаяСтрока(ПутьКФайлу) Тогда + ВызватьИсключение "Не найден файл с шаблоном версии " + ПутьКФайлуКонфигурации; + КонецЕсли; + + Возврат ПутьКФайлу; + +КонецФункции + +// Подставляет номер версии в строку с шаблонной переменной $version +// +// Параметры: +// ПутьИсходников - Строка - Путь к исходникам конфигурации для получения версии +// СтрокаДляПодстановки - Строка - Строка для подставновки номера версии +// +// Возвращаемое значение: +// Строка - Итоговая строка с результатом подстановки +// +Функция ПодставитьНомерВерсии(ПутьИсходников, СтрокаДляПодстановки) Экспорт + + ШаблонВерсии = "$version"; + + Если СтрНайти(СтрокаДляПодстановки, ШаблонВерсии) = 0 Тогда + Возврат СтрокаДляПодстановки; + КонецЕсли; + + ВерсииКонфигураций = ВерсияКонфигурации(ПутьИсходников); + Если ВерсииКонфигураций.Количество() = 0 Тогда + ВызватьИсключение "Не найден файл конфигурации в каталоге " + ПутьИсходников; + КонецЕсли; + + Для Каждого КлючЗначение Из ВерсииКонфигураций Цикл + ВерсияКонфигурации = КлючЗначение.Значение; + Прервать; + КонецЦикла; + + Лог.Информация("Используем для подстановки в %1 версию %2", СтрокаДляПодстановки, ВерсияКонфигурации); + Возврат СтрЗаменить(СтрокаДляПодстановки, ШаблонВерсии, ВерсияКонфигурации); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции -Функция ПрочитатьФайл(Знач ПутьФайлаКонфигурации) +Функция ПрочитатьФайл(Знач ПутьФайла) ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.Прочитать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + ТекстовыйДокумент.Прочитать(ПутьФайла, КодировкаТекста.UTF8); Возврат ТекстовыйДокумент.ПолучитьТекст(); КонецФункции +Процедура ЗаписатьФайл(Знач ПутьФайла, ТекстФайла) + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.УстановитьТекст(ТекстФайла); + ТекстовыйДокумент.Записать(ПутьФайла, КодировкаТекста.UTF8); + +КонецПроцедуры + Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайлаКонфигурации) - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+)<\/Version>"); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)<\/Version>"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайлаКонфигурации); - Если Совпадения.Количество() = 0 Тогда + Если Не ЗначениеЗаполнено(Совпадения) Тогда РегулярноеВыражение = Новый РегулярноеВыражение(""); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + Если РегулярноеВыражение.Совпадает(ХМЛСтрокаФайлаКонфигурации) Тогда Возврат ""; КонецЕсли; @@ -118,31 +223,71 @@ КонецФункции -Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НомерВерсии) +Функция ВерсияМодуля(Знач ТекстФайла) - Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурации); - СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации); + Совпадения = НоваяРегуляркаДляВерсииМодуля().НайтиСовпадения(ТекстФайла); + Если Не ЗначениеЗаполнено(Совпадения) Тогда + Возврат ""; + КонецЕсли; - ПредыдущаяВерсия = ВерсияКонфигурацииПоХМЛ(СтрокаXML); + Результат = Совпадения[0].Группы[1].Значение; + + Лог.Отладка("текущая версия модуля %1", Результат); + + Возврат Результат; + +КонецФункции + +Функция НоваяРегуляркаДляВерсииМодуля() + + РегулярноеВыражение = Новый РегулярноеВыражение("^\s*Версия\s*=\s*""(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)"";\s*$"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; + Возврат РегулярноеВыражение; +КонецФункции + +Процедура ИзменитьНомерВерсииМодуля(ПутьФайла, ТекстФайла, НомерВерсии) - ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии); + ШаблонПодстановки = СтрШаблон(" Версия = ""%1"";", НомерВерсии); + НовыйТекстФайла = НоваяРегуляркаДляВерсииМодуля().Заменить(ТекстФайла, ШаблонПодстановки); + ЗаписатьФайл(ПутьФайла, НовыйТекстФайла); + +КонецПроцедуры + +Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурацииИлиМодуля, НомерВерсии, ТолькоМодулиКода) + + Если ТолькоМодулиКода Тогда + Лог.Отладка("устанавливаю версию %1 в исходниках модуля %2", НомерВерсии, ПутьФайлаКонфигурацииИлиМодуля); + Иначе + Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурацииИлиМодуля); + КонецЕсли; + ТекстФайла = ПрочитатьФайл(ПутьФайлаКонфигурацииИлиМодуля); + + Если ТолькоМодулиКода Тогда + ПредыдущаяВерсия = ВерсияМодуля(ТекстФайла); + + ИзменитьНомерВерсииМодуля(ПутьФайлаКонфигурацииИлиМодуля, ТекстФайла, НомерВерсии); + Иначе + ПредыдущаяВерсия = ВерсияКонфигурацииПоХМЛ(ТекстФайла); + + ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурацииИлиМодуля, ТекстФайла, НомерВерсии); + КонецЕсли; Возврат ПредыдущаяВерсия; КонецФункции -Процедура ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии) +Процедура ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурации, СтрокаXML, НомерВерсии) ШаблонПодстановки = СтрШаблон("%1", НомерВерсии); - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+<\/Version>)"); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+\.\d+<\/Version>)|(\d+\.\d+\.\d+<\/Version>)"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки); РегулярноеВыражение = Новый РегулярноеВыражение("()"); + РегулярноеВыражение.ИгнорироватьРегистр = Истина; НоваяСтрокаXML = РегулярноеВыражение.Заменить(НоваяСтрокаXML, ШаблонПодстановки); - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.УстановитьТекст(НоваяСтрокаXML); - ТекстовыйДокумент.Записать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + ЗаписатьФайл(ПутьФайлаКонфигурации, НоваяСтрокаXML); КонецПроцедуры @@ -155,7 +300,7 @@ ВерсияСоСборкой = ВерсияСоСборкой(ПредыдущаяВерсия, НомерСборки); - ИзменитьНомерВерсии(ПутьФайлаКонфигурации, СтрокаXML, ВерсияСоСборкой); + ИзменитьНомерВерсииХМЛ(ПутьФайлаКонфигурации, СтрокаXML, ВерсияСоСборкой); Возврат ПредыдущаяВерсия; @@ -164,48 +309,166 @@ Функция ВерсияСоСборкой(Знач НомерВерсии, Знач НомерСборки) ШаблонПодстановки = СтрШаблон("$1.%1", НомерСборки); - РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+).(\d+)"); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+)\.(\d+)|(\d+\.\d+)\.(\d+)"); Возврат РегулярноеВыражение.Заменить(НомерВерсии, ШаблонПодстановки); КонецФункции +Функция ФайлыИсходников(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина, + Знач ТолькоМодулиКода = Ложь) + + Если ТолькоМодулиКода Тогда + Результат = ФайлыМодулей(ПутьФайлаИлиКаталогИсходников, ИскатьВПодкаталогах); + ПоказатьИменаМодулейВРежимеОтладка(Результат); + Результат = СвернутьМассивФайлов(Результат); + Возврат Результат; + КонецЕсли; + + Результат = ФайлыКонфигураций(ПутьФайлаИлиКаталогИсходников, ИскатьВПодкаталогах); + Результат = СвернутьМассивФайлов(Результат); + ПоказатьИменаМодулейВРежимеОтладка(Результат); + Возврат Результат; + +КонецФункции + +Процедура ПоказатьИменаМодулейВРежимеОтладка(Знач Массив) + Лог.Отладка("Найдено файлов %1", Массив.Количество()); // TODO + Для каждого Элем Из Массив Цикл + Лог.Отладка(" файл %1", Элем.ПолноеИмя); // TODO + КонецЦикла; +КонецПроцедуры + +Функция СвернутьМассивФайлов(Знач Массив) + Соответствие = Новый Соответствие; + Для каждого Элемент Из Массив Цикл + Соответствие.Вставить(Элемент.ПолноеИмя, Элемент); + КонецЦикла; + Результат = Новый Массив; + Для каждого КлючЗначение Из Соответствие Цикл + Результат.Добавить(КлючЗначение.Значение); + КонецЦикла; + Возврат Результат; + // код ниже пока не работает, жду приема ПР https://github.com/nixel2007/oscript-fluent/pull/23 и выпуска релиза - + // Возврат ПроцессорыКоллекций.ИзКоллекции(Массив) + // .Различные("Результат = Элемент1.ПолноеИмя <> Элемент2.ПолноеИмя") + // .ВМассив(); +КонецФункции + Функция ФайлыКонфигураций(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина) Результат = Новый Массив; ИмяФайлаКонфигурации = "Configuration.xml"; + ИмяФайлаКонфигурацииЕДТ = "Configuration.mdo"; //TODO нужно учесть и файл для EDT Файл = Новый Файл(ПутьФайлаИлиКаталогИсходников); Если Файл.ЭтоКаталог() Тогда ФайлКонфигурации = Новый Файл(ОбъединитьПути(Файл.ПолноеИмя, ИмяФайлаКонфигурации)); - Если Не ФайлКонфигурации.Существует() Тогда - Если ИскатьВПодкаталогах Тогда - Возврат НайтиФайлы(Файл.ПолноеИмя, ИмяФайлаКонфигурации, Истина); - Иначе - ВызватьИсключение СтрШаблон("В каталоге %1 не существует файл конфигурации %2", - Файл.ПолноеИмя, ИмяФайлаКонфигурации); - КонецЕсли; + Если ФайлКонфигурации.Существует() Тогда + Результат.Добавить(ФайлКонфигурации); + Возврат Результат; + КонецЕсли; + ФайлКонфигурацииЕДТ = Новый Файл(ОбъединитьПути(Файл.ПолноеИмя, ИмяФайлаКонфигурацииЕДТ)); + Если ФайлКонфигурацииЕДТ.Существует() Тогда + Результат.Добавить(ФайлКонфигурацииЕДТ); + Возврат Результат; КонецЕсли; - Результат.Добавить(ФайлКонфигурации); - Возврат Результат; - ИначеЕсли НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурации) Тогда + Если ИскатьВПодкаталогах Тогда + Результат = НайтиФайлы(Файл.ПолноеИмя, ИмяФайлаКонфигурации, Истина); + РезультатЕДТ = НайтиФайлы(Файл.ПолноеИмя, ИмяФайлаКонфигурацииЕДТ, Истина); + ОбщиеМетоды.ДополнитьМассив(Результат, РезультатЕДТ); + Возврат Результат; + Иначе + ВызватьИсключение СтрШаблон("В каталоге %1 не существует ни файла конфигурации %2, ни файл конфигурации EDT %3", + Файл.ПолноеИмя, ИмяФайлаКонфигурации, ИмяФайлаКонфигурацииЕДТ); + КонецЕсли; + + ИначеЕсли НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурации) Или + НРег(Файл.Имя) = НРег(ИмяФайлаКонфигурацииЕДТ) Тогда Результат.Добавить(Файл); Возврат Результат; - ИначеЕсли ИскатьВПодкаталогах Тогда - Возврат НайтиФайлы(ПутьФайлаИлиКаталогИсходников, ИмяФайлаКонфигурации, Истина); Иначе - ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файл конфигурации %1 или на каталог, его содержащий - %2", - ИмяФайлаКонфигурации, ПутьФайлаИлиКаталогИсходников); + ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файл конфигурации %1 или файл конфигурации EDT %2 + |или на каталог, их содержащий - %3", + ИмяФайлаКонфигурации, ИмяФайлаКонфигурацииЕДТ, ПутьФайлаИлиКаталогИсходников); КонецЕсли; КонецФункции -Функция ПолучитьЛог() +Функция ФайлыМодулей(Знач ПутьФайлаИлиКаталогИсходников, Знач ИскатьВПодкаталогах = Истина) + + ИмяКаталогаСМодулем = "Ext"; + + ИменаМодулей = Новый Массив; + ИменаМодулей.Добавить("ObjectModule.bsl"); + ИменаМодулей.Добавить("Module.bsl"); + + ФункцияМодульНаходитсяВКаталогеExt = Новый ОписаниеОповещения("МодульНаходитсяВКаталогеExt", ЭтотОбъект, + Новый Структура("ИмяКаталогаСМодулем", ИмяКаталогаСМодулем)); + + Результат = Новый Массив; + + Файл = Новый Файл(ПутьФайлаИлиКаталогИсходников); + Лог.Отладка("Передан путь %1", Файл.ПолноеИмя); + Если Файл.ЭтоКаталог() Тогда + Результат = ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Обработать("Результат = Новый Файл(ОбъединитьПути(ДополнительныеПараметры.ПолноеИмяФайла, Элемент))", + Новый Структура("ПолноеИмяФайла", Файл.ПолноеИмя)) + .Фильтровать("Результат = Элемент.Существует()") + .Фильтровать(ФункцияМодульНаходитсяВКаталогеExt) + .ВМассив(); + + ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Обработать("Результат = Новый Файл( + | ОбъединитьПути(ДополнительныеПараметры.ПолноеИмяФайла, + | ДополнительныеПараметры.ИмяКаталогаСМодулем, Элемент))", + Новый Структура("ПолноеИмяФайла, ИмяКаталогаСМодулем", + Файл.ПолноеИмя, ИмяКаталогаСМодулем)) + .Фильтровать("Результат = Элемент.Существует()") + .Фильтровать(ФункцияМодульНаходитсяВКаталогеExt) + .ДляКаждого("ДополнительныеПараметры.Коллекция.Добавить(Элемент)", + Новый Структура("Коллекция", Результат)); + + Если ИскатьВПодкаталогах Тогда + ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Обработать("Результат = НайтиФайлы(ДополнительныеПараметры.ПолноеИмяФайла, Элемент, Истина);", + Новый Структура("ПолноеИмяФайла", Файл.ПолноеИмя)) + .Развернуть("Результат = ПроцессорыКоллекций.ИзКоллекции(Элемент)") + .Фильтровать(ФункцияМодульНаходитсяВКаталогеExt) + .ДляКаждого("ДополнительныеПараметры.Коллекция.Добавить(Элемент)", + Новый Структура("Коллекция", Результат)); + + КонецЕсли; + + Возврат Результат; + КонецЕсли; + + НайденныеМодули = ПроцессорыКоллекций.ИзКоллекции(ИменаМодулей) + .Фильтровать("Результат = (ДополнительныеПараметры.ИмяФайла = НРег(Элемент))", + Новый Структура("ИмяФайла", НРег(Файл.Имя))) + .ВМассив(); + Если ЗначениеЗаполнено(НайденныеМодули) Тогда + Результат.Добавить(Файл); + Возврат Результат; + КонецЕсли; + + ВызватьИсключение СтрШаблон("Переданный путь должен указывать на файлы модулей (Ext/%1) или на каталог, их содержащий - %2", + СтрСоединить(ИменаМодулей, ", Ext/"), ПутьФайлаИлиКаталогИсходников); + +КонецФункции + +Процедура МодульНаходитсяВКаталогеExt(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Родитель = Новый Файл(Элемент.Путь); + + Результат = (НРег(Родитель.Имя) = НРег(ДополнительныеПараметры.ИмяКаталогаСМодулем)); +КонецПроцедуры + +Процедура ПолучитьЛог() Если Лог = Неопределено Тогда Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); КонецЕсли; - Возврат Лог; -КонецФункции +КонецПроцедуры #КонецОбласти diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" index 87d032ab..c2e85351 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -17,23 +17,70 @@ Возврат УправлениеКонфигуратором; КонецФункции -Процедура ИнициализацияИзПараметровКоманды(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт +// пост-конструктор +// +// Параметры: +// ДанныеПодключения - ФиксированнаяСтруктура, Структура +// ПараметрыКоманды - Соответствие - параметры выполняемый команды +// +Процедура Конструктор(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт + + // чтобы не было расхождений при передаче параметров + ПараметрыКоманды.Вставить("ДанныеПодключения", ДанныеПодключения); - Инициализация(ДанныеПодключения.СтрокаПодключения, + Инициализация(ПараметрыКоманды, ДанныеПодключения.СтрокаПодключения, ДанныеПодключения.Пользователь, ДанныеПодключения.Пароль, ПараметрыКоманды["--v8version"], ПараметрыКоманды["--uccode"], - ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса, - ПараметрыКоманды); + ДанныеПодключения.КодЯзыка, ДанныеПодключения.КодЯзыкаСеанса); +КонецПроцедуры + +// пост-конструкторДляНеобязательнойСтрокиСоединения - если строка соединения не передана, используется временная ИБ +// +// Параметры: +// ДанныеПодключения - ФиксированнаяСтруктура, Структура +// ПараметрыКоманды - Соответствие - параметры выполняемый команды +// +Процедура КонструкторДляНеобязательнойСтрокиСоединения(Знач ДанныеПодключения, Знач ПараметрыКоманды) Экспорт + + СтрокаПодключения = ДанныеПодключения.СтрокаПодключения; + Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда + ДанныеПодключения = Новый Структура(ДанныеПодключения); + ДанныеПодключения.ИспользоватьВременнуюБазу = Истина; + КонецЕсли; + Конструктор(ДанныеПодключения, ПараметрыКоманды); КонецПроцедуры -Процедура Инициализация(Знач СтрокаПодключения, Знач Пользователь = "", Знач Пароль = "", +// еще один пост-конструктор с явной передачей кучи параметров +// +// Параметры: +// ПараметрыКоманды - Соответствие - параметры выполняемый команды +// СтрокаПодключения - Строка - СтрокаПодключения +// Пользователь - Строка - Пользователь +// Пароль - Строка - Пароль +// ВерсияПлатформы - Строка +// КлючРазрешенияЗапуска - Строка +// КодЯзыка - Строка - КодЯзыка +// КодЯзыкаСеанса - Строка - КодЯзыкаСеанса +// +Процедура Инициализация(Знач ПараметрыКоманды, Знач СтрокаПодключения, Знач Пользователь = "", Знач Пароль = "", Знач ВерсияПлатформы = "", Знач КлючРазрешенияЗапуска = "", - Знач КодЯзыка = "", Знач КодЯзыкаСеанса = "", - Знач ПараметрыКоманды = Неопределено) Экспорт + Знач КодЯзыка = "", Знач КодЯзыкаСеанса = "") Экспорт ТекущаяПроцедура = "Инициализация"; - Ожидаем.Что(СтрокаПодключения, ТекущаяПроцедура + ": не задана строка подключения").Заполнено(); + ИспользоватьВременнуюБазу = Ложь; + Лог.Отладка("Заданы ПараметрыКоманды %1", ЗначениеЗаполнено(ПараметрыКоманды)); + Если ЗначениеЗаполнено(ПараметрыКоманды) Тогда + ИспользоватьВременнуюБазу = ПараметрыКоманды["ДанныеПодключения"].ИспользоватьВременнуюБазу; + Лог.Отладка("ИспользоватьВременнуюБазу %1", ИспользоватьВременнуюБазу); + КонецЕсли; + Если ИспользоватьВременнуюБазу Тогда + СтрокаПодключения = ""; + Пользователь = ""; + Пароль = ""; + Иначе + Ожидаем.Что(СтрокаПодключения, ТекущаяПроцедура + ": не задана строка подключения").Заполнено(); + КонецЕсли; УправлениеКонфигуратором = Новый УправлениеКонфигуратором(); @@ -51,7 +98,11 @@ Лог.Отладка("Разрядность платформы 1С не указана"); КонецЕсли; УправлениеКонфигуратором.ИспользоватьВерсиюПлатформы(ВерсияПлатформы, Разрядность); + Иначе + ПутьКПредприятию = Платформа1С.ПутьКПредприятию("8.3"); + УправлениеКонфигуратором.ПутьКПлатформе1С(ПутьКПредприятию); КонецЕсли; + Лог.Информация("Используется версия платформы %1", ТекущаяВерсияПлатформы()); Если Не ПустаяСтрока(КлючРазрешенияЗапуска) Тогда УправлениеКонфигуратором.УстановитьКлючРазрешенияЗапуска(КлючРазрешенияЗапуска); @@ -62,7 +113,7 @@ КонецЕсли; Если ЗначениеЗаполнено(КодЯзыкаСеанса) Тогда - УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыка); + УправлениеКонфигуратором.УстановитьКодЯзыкаСеанса(КодЯзыкаСеанса); КонецЕсли; КонецПроцедуры @@ -79,6 +130,10 @@ КаталогВременнойИБ = Неопределено; КонецПроцедуры +Процедура УстановитьКонтекст(Знач СтрокаСоединения, Знач Пользователь, Знач Пароль) Экспорт + УправлениеКонфигуратором.УстановитьКонтекст(СтрокаСоединения, Пользователь, Пароль); +КонецПроцедуры + // Установить параметры подключения к хранилищу 1С // // Параметры: @@ -97,7 +152,6 @@ // Процедура ЗапуститьКонфигуратор(Знач ДопСообщения, Знач ДополнительныеКлючиЗапуска, Знач ОжидатьЗавершения) Экспорт - ПредставлениеКоманды = ДопСообщения.Ключ; Лог.Информация("Выполняю команду Конфигуратора"); Лог.Отладка("ДополнительныеКлючиЗапуска:" + ДополнительныеКлючиЗапуска); @@ -139,6 +193,29 @@ КонецПроцедуры +Процедура СоздатьФайловуюБазу(Знач КаталогБазы, Знач ПутьКШаблону = "", Знач ИмяБазыВСписке = "") Экспорт + + Попытка + УправлениеКонфигуратором.СоздатьФайловуюБазу(КаталогБазы, ПутьКШаблону, ИмяБазыВСписке); + Текст = УправлениеКонфигуратором.ВыводКоманды(); + Если ЗначениеЗаполнено(Текст) Тогда + Лог.Информация(Текст); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если НЕ (СтрНайти(Текст, "успешно завершено") = 0 + ИЛИ СтрНайти(Текст, "completed successfully") = 0) Тогда + + ВызватьИсключение "Результат работы не успешен"; + + КонецЕсли; + +КонецПроцедуры + // Обновить конфигурацию БД на сервере // // Параметры: @@ -196,10 +273,10 @@ КонецПроцедуры -// <Описание процедуры> +// ОбновитьРасширение // // Параметры: -// ИмяРасширения - <Строка> - <описание параметра> +// ИмяРасширения - Строка - <описание параметра> // Процедура ОбновитьРасширение(Знач ИмяРасширения) Экспорт ТекущаяПроцедура = "ОбновитьРасширение"; @@ -253,12 +330,12 @@ // // Параметры: // ДопСообщения - Структура - из метода НовыеДопСообщенияДляЗапускаПредприятия -// ПараметрЗапуска - <Строка> - <описание параметра> -// ОбработкаДляЗапуска - <Строка> - <описание параметра> -// ТолстыйКлиент - <Булево> - признак запуска толстого клиента -// ДополнительныеКлючиЗапуска - <Строка> - <описание параметра> -// ОжидатьЗавершения - <Булево> - признак запуска толстого клиента -// ПутьФайлаИнформации - Строка - путь файла информации 1С по ключу "/out". +// ПараметрЗапуска - Строка - параметр запуска, передаваемый в 1С +// ОбработкаДляЗапуска - Строка -запускаемая обработка +// ТолстыйКлиент - Булево - признак запуска толстого клиента +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> +// ОжидатьЗавершения - Булево - признак запуска толстого клиента +// ПутьЛогаВыполненияСценариев - Строка - путь файла информации 1С по ключу "/out". // ПутьКФайлуСтатусаВыполнения - Строка - путь файла статуса (внутри файла должно быть 1 или 0) // Процедура ЗапуститьВРежимеПредприятияСПроверкойВыполнения( @@ -271,8 +348,6 @@ Знач ПутьЛогаВыполненияСценариев = Неопределено, Знач ПутьКФайлуСтатусаВыполнения = Неопределено) Экспорт - ПредставлениеКоманды = ДопСообщения.Ключ; - Если Не ОжидатьЗавершения И ЗначениеЗаполнено(ПутьЛогаВыполненияСценариев) Тогда ВызватьИсключение "Нельзя получать лог выполнения без включенного признака ожидания выполнения 1С"; КонецЕсли; @@ -334,250 +409,14 @@ КонецПроцедуры -// Выполнить команду/действие в режиме 1С:Предприятия -// -// Параметры: -// ПараметрЗапуска - <Строка> - <описание параметра> -// ОбработкаДляЗапуска - <Строка> - <описание параметра> -// ТолстыйКлиент - <Булево> - признак запуска толстого клиента -// ДополнительныеКлючиЗапуска - <Строка> - <описание параметра> -// ОжидатьЗавершения - Булево - по умолчанию Истина, Ложь - запускает и завершает свой процесс. -// -Процедура ЗапуститьВРежимеПредприятия(Знач ПараметрЗапуска, - Знач ОбработкаДляЗапуска, Знач ТолстыйКлиент, - Знач ДополнительныеКлючиЗапуска, - Знач ОжидатьЗавершения, Знач ДопСообщения) - - Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); - - ТекущаяПроцедура = ДопСообщения.Ключ; - - Если ТолстыйКлиент = Ложь Тогда - ТонкийКлиент1С = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(УправлениеКонфигуратором.ПутьКПлатформе1С()); - УправлениеКонфигуратором.ПутьКПлатформе1С(ТонкийКлиент1С); - КонецЕсли; - - УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(ОжидатьЗавершения); - - Если Не ОжидатьЗавершения Тогда - УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла()); - КонецЕсли; - - ДополнительныеКлючи = ДополнительныеКлючиЗапуска; - Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда - ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); - КонецЕсли; - - Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); - Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); - - Попытка - УправлениеКонфигуратором.ЗапуститьВРежимеПредприятия(ПараметрЗапуска, - ?(ТипЗнч(ТолстыйКлиент) = Тип("Булево"), Не ТолстыйКлиент, ТолстыйКлиент), - ДополнительныеКлючи - ); - Текст = УправлениеКонфигуратором.ВыводКоманды(); - Если Не ПустаяСтрока(Текст) Тогда - Лог.Информация(Текст); - КонецЕсли; - - Исключение - Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); - Лог.Ошибка(ОписаниеОшибки()); - ВызватьИсключение ТекущаяПроцедура; - КонецПопытки; - - Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); -КонецПроцедуры - -// Выполнить команду/действие в режиме 1С:Предприятия с ожиданием выполнения и чтением лог-файла -// -// Параметры: -// ПараметрЗапуска - <Строка> - <описание параметра> -// ОбработкаДляЗапуска - <Строка> - <описание параметра> -// ПутьФайлаИнформации - Строка - путь файла информации 1С по ключу "/out". -// ТолстыйКлиент - Булево, Неопределено - признак запуска толстого клиента -// ДополнительныеКлючиЗапуска - <Строка> - <описание параметра> -// -Функция ЗапуститьВРежимеПредприятияСЛогФайлом(Знач ПараметрЗапуска, - Знач ОбработкаДляЗапуска, - Знач ПутьЛогаВыполненияСценариев, - Знач ТолстыйКлиент, - Знач ДополнительныеКлючиЗапуска, - Знач ДопСообщения) - - Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); - - Результат = ""; - - ТекущаяПроцедура = "ЗапуститьВРежимеПредприятияСЛогФайлом"; - - УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(Истина); - - ПутьДамп = ВременныеФайлы.НовоеИмяФайла(); - УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ПутьДамп); - - ДополнительныеКлючи = ДополнительныеКлючиЗапуска; - Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда - ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); - КонецЕсли; - - Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); - Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); - - ПараметрыСвязиСБазой = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска(); - ПараметрыСвязиСБазой[0] = "ENTERPRISE"; - ПараметрыСвязиСБазой.Удалить(2); - - Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда - ПараметрыСвязиСБазой.Добавить("/C" + ПараметрЗапуска); - КонецЕсли; - - Если ТолстыйКлиент = Истина Тогда - ПараметрыСвязиСБазой.Добавить("/RunModeOrdinaryApplication "); - КонецЕсли; - - ПараметрыСвязиСБазой.Добавить("/out""" + ПутьДамп + """"); - - Если ДополнительныеКлючи <> Неопределено Тогда - ПараметрыСвязиСБазой.Добавить(ДополнительныеКлючи); - КонецЕсли; - - СтрокаЗапуска = ""; - Для Каждого Параметр Из ПараметрыСвязиСБазой Цикл - СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; - КонецЦикла; - - Приложение = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(); - Если ТолстыйКлиент = Истина Тогда - Приложение = УправлениеКонфигуратором.ПутьКПлатформе1С(); - КонецЕсли; - - Если Найти(Приложение, " ") > 0 Тогда - Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); - КонецЕсли; - Приложение = Приложение + " " + СтрокаЗапуска; - Лог.Отладка(Приложение); - - Попытка - ЗапуститьПроцесс1С(Приложение, ПутьЛогаВыполненияСценариев ); - Результат = ПоказатьЛогПредприятия(ПутьДамп, ДопСообщения.ПоказыватьДополнительноЛогПредприятия); - - Исключение - ОписаниеОшибки = ОписаниеОшибки(); - - Результат = ПоказатьЛогПредприятия(ПутьДамп, Истина); - - Лог.Ошибка(ОписаниеОшибки); - ВызватьИсключение ТекущаяПроцедура; - КонецПопытки; - - Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); - - Возврат Результат; -КонецФункции - -Процедура ЗапуститьПроцесс1С(Знач СтрокаЗапуска, Знач ПутьКФайлуЛога) - - ПериодОпросаВМиллисекундах = 1000; - - НадоЧитатьЛог = Истина; - КолСтрокЛогаПрочитано = 0; - - Процесс = СоздатьПроцесс(СтрокаЗапуска); - Процесс.Запустить(); - - ТаймаутПоУмолчанию = 500; - Приостановить(ТаймаутПоУмолчанию); - - Пока НЕ Процесс.Завершен Цикл - Если ПериодОпросаВМиллисекундах <> 0 Тогда - Приостановить(ПериодОпросаВМиллисекундах); - КонецЕсли; - - Если НадоЧитатьЛог Тогда - ВывестиНовыеСообщения(ПутьКФайлуЛога, КолСтрокЛогаПрочитано); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ВывестиНовыеСообщения(ИмяФайлаЛога, КолСтрокЛогаПрочитано) - Попытка - МассивСтрок = ПолучитьНовыеСтрокиЛога(ИмяФайлаЛога, КолСтрокЛогаПрочитано); - Для Каждого Стр Из МассивСтрок Цикл - Если СокрЛП(Стр) = "" Тогда - Продолжить; - КонецЕсли; - Лог.Информация(СокрЛП(Стр)); - КонецЦикла; - Исключение - Лог.Ошибка(ОписаниеОшибки()); - КонецПопытки; - -КонецПроцедуры - -Функция ПолучитьНовыеСтрокиЛога(Знач ИмяФайла, КолСтрокЛогаПрочитано) - Файл = Новый Файл(ИмяФайла); - Если Не Файл.Существует() Тогда - Возврат Новый Массив; - КонецЕсли; - - Текст = Новый ЧтениеТекста; - Текст.Открыть(ИмяФайла, "UTF-8", , , Ложь); - - ВесьТекст = Текст.Прочитать(); - - Текст.Закрыть(); - - Массив = Новый Массив(); - - МассивСтрок = СтрРазделить(ВесьТекст, Символы.ПС, Истина); - Если МассивСтрок[МассивСтрок.Количество() - 1] = "" Тогда - МассивСтрок.Удалить(МассивСтрок.Количество() - 1); - КонецЕсли; - - Для Ккк = (КолСтрокЛогаПрочитано + 1) По МассивСтрок.Количество() Цикл - Массив.Добавить(МассивСтрок[Ккк - 1]); - КонецЦикла; - - КолСтрокЛогаПрочитано = МассивСтрок.Количество(); - - Возврат Массив; -КонецФункции - -Функция ПоказатьЛогПредприятия(Знач ПутьДамп, Знач ПоказыватьДополнительноЛогПредприятия) - Результат = ""; - Если ФС.Существует(ПутьДамп) Тогда - Результат = ОбщиеМетоды.ПрочитатьФайл(ПутьДамп, КодировкаТекста.ANSI); - - Если Не ПустаяСтрока(Результат) Тогда - Сообщение = СтрШаблон("Дополнительный лог выполнения 1С:Предприятие - | - |%1", Результат); - Если ПоказыватьДополнительноЛогПредприятия Тогда - Лог.Информация(Сообщение); - Иначе - Лог.Отладка(Сообщение); - КонецЕсли; - КонецЕсли; - Иначе - Лог.Отладка("Не существует файл вывода от 1С - %1", ПутьДамп); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// <Описание процедуры> +// ЗапуститьОбновлениеИзХранилища // // Параметры: -// СтрокаПодключенияХранилище - <Тип.Вид> - <описание параметра> -// ПользовательХранилища - <Тип.Вид> - <описание параметра> -// ПарольХранилища - <Тип.Вид> - <описание параметра> -// ВерсияХранилища - <Тип.Вид> - <описание параметра> -// ДополнительныеКлючиЗапуска - <Тип.Вид> - <описание параметра> +// СтрокаПодключенияХранилище - Строка - <описание параметра> +// ПользовательХранилища - Строка - <описание параметра> +// ПарольХранилища - Строка - <описание параметра> +// ВерсияХранилища - Строка - <описание параметра> +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> // Процедура ЗапуститьОбновлениеИзХранилища( Знач СтрокаПодключенияХранилище = "", Знач ПользовательХранилища = "", Знач ПарольХранилища = "", @@ -627,9 +466,9 @@ // Создать хранилище 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> +// ПутьХранилища - Строка - <описание параметра> +// ЛогинАдминистратора - Строка - <описание параметра> +// ПарольАдминистратора - Строка - <описание параметра> // Процедура СоздатьХранилище(Знач ПутьХранилища, Знач ЛогинАдминистратора, Знач ПарольАдминистратора) Экспорт @@ -670,9 +509,11 @@ // Создать хранилище 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> +// ПутьХранилища - Строка - <описание параметра> +// Логин - Строка - <описание параметра> +// Пароль - Строка - <описание параметра> +// ИгнорироватьНаличиеПодключеннойБД - Булево - <описание параметра> +// ЗаменитьКонфигурациюБД - Булево - <описание параметра> // Процедура ПодключитьсяКХранилищу(Знач ПутьХранилища, Знач Логин, Знач Пароль, Знач ИгнорироватьНаличиеПодключеннойБД = Ложь, @@ -711,7 +552,7 @@ // Отлючить конфигурацию от хранилища // // Параметры: -// ДополнительныеКлючиЗапуска (необязательно) - Строка - дополнительные ключи запуска Конфигуратора +// ДополнительныеКлючиЗапуска - Строка - (необязательно) дополнительные ключи запуска Конфигуратора // Процедура ОтключитьсяОтХранилища(Знач ДополнительныеКлючиЗапуска = "") Экспорт @@ -745,12 +586,12 @@ // Создать пользователя хранилища 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> -// ЛогинПользователя - <Строка> - <описание параметра> -// ПарольПользователя - <Строка> - <описание параметра> -// РольПользователя - <Строка> - <описание параметра> +// ПутьХранилища - Строка - <описание параметра> +// Логин - Строка - <описание параметра> +// Пароль - Строка - <описание параметра> +// ЛогинПользователя - Строка - <описание параметра> +// ПарольПользователя - Строка - <описание параметра> +// РольПользователя - Строка - <описание параметра> // Процедура СоздатьПользователяХранилища(Знач ПутьХранилища, Знач Логин, Знач Пароль, Знач ЛогинПользователя, Знач ПарольПользователя, @@ -827,11 +668,11 @@ // Выгрузить файл конфигурации определенной версии из хранилища 1С // // Параметры: -// ПутьХранилища - <Строка> - <описание параметра> -// ЛогинАдминистратора - <Строка> - <описание параметра> -// ПарольАдминистратора - <Строка> - <описание параметра> -// ВерсияХранилища - <Строка> - версия хранилища -// ПутьКФайлу - <Строка> - путь к файлу выгрузки +// ПутьХранилища - Строка - <описание параметра> +// ЛогинАдминистратора - Строка - <описание параметра> +// ПарольАдминистратора - Строка - <описание параметра> +// ВерсияХранилища - Строка - версия хранилища +// ПутьКФайлу - Строка - путь к файлу выгрузки // Процедура СохранитьВерсиюХранилищаВФайл(Знач ПутьХранилища, Знач ЛогинАдминистратора, Знач ПарольАдминистратора, Знач ВерсияХранилища, Знач ПутьКФайлу) Экспорт @@ -914,13 +755,60 @@ КонецПроцедуры +// Отмена захвата объектов для редактирования в хранилище конфигурации +// +// Параметры: +// ПутьХранилища - Строка - <описание параметра> +// Логин - Строка - <описание параметра> +// Пароль - Строка - <описание параметра> +// ПутьКФайлуСоСпискомОбъектов - Строка - Строка путь к файлу xml с содержанием в формате http://its.1c.ru/db/v839doc#bookmark:adm:TI000000712 +// путь к файлу формата XML со списком объектов. Если опция используется, будет выполнена попытка отменить захват только +// для объектов, указанных в файле. Если опция не используется, захват будет отменен для всех объектов конфигурации. +// При наличии в списке объектов, не захваченных текущим пользователем или захваченных другим пользователем, ошибка выдана не будет +// Подробнее о формате файла см в документации. +// ИгнорироватьИзменения - Булево - Флаг игнорирования локальных изменений (По умолчанию равно "Ложь") +// Локально измененные объекты будут получены из хранилища, и внесенные изменения будут потеряны. +// Если опция не указана, то при наличии локально измененных объектов операция будет отменена и будет выдана ошибка. +// +Процедура ОтпуститьОбъектыВХранилище(Знач ПутьХранилища, Знач Логин, Знач Пароль, + Знач ПутьКФайлуСоСпискомОбъектов = "", + Знач ИгнорироватьИзменения = Ложь) Экспорт + + Лог.Информация("Отпускаю захваченные объекты в хранилище"); + + ТекущаяПроцедура = "ОтпуститьОбъектыВХранилище"; + + Ожидаем.Что(ПутьХранилища, ТекущаяПроцедура + " не задана строка подключения к хранилищу").Заполнено(); + Ожидаем.Что(Логин, ТекущаяПроцедура + " не задан пользователь хранилища").Заполнено(); + + ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации(); + ХранилищеКонфигурации.УстановитьУправлениеКонфигуратором(УправлениеКонфигуратором); + ХранилищеКонфигурации.УстановитьПараметрыАвторизации(Логин, Пароль); + + ХранилищеКонфигурации.УстановитьПутьКХранилищу(ПутьХранилища); + + Попытка + + ХранилищеКонфигурации.ОтменитьЗахватОбъектовВХранилище(ПутьКФайлуСоСпискомОбъектов, ИгнорироватьИзменения); + + Лог.Информация("Отменение захвата объектов завершено"); + + Исключение + Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + ВызватьИсключение ТекущаяПроцедура + " + |" + Сообщение; + КонецПопытки; + +КонецПроцедуры + // Помещение изменений объектов в хранилище конфигурации // // Параметры: // ПутьХранилища - Строка - <описание параметра> // Логин - Строка - <описание параметра> // Пароль - Строка - <описание параметра> -// СписокОбъектов - Строка - Строка путь к файлу xml с содержанием в формате http://its.1c.ru/db/v839doc#bookmark:adm:TI000000712 +// ПутьКФайлуСоСпискомОбъектов - Строка - Строка путь к файлу xml с содержанием в формате http://its.1c.ru/db/v839doc#bookmark:adm:TI000000712 // Если опция используется, будет выполнена попытка поместить только объекты, указанные в файле. // Если опция не используется, будут помещены изменения всех объектов конфигурации. // При наличии в списке объектов, не захваченных текущим пользователем или захваченных другим пользователем, ошибка выдана не будет @@ -1050,90 +938,26 @@ КонецПроцедуры -// Выполняет перенос файлов из каталога плоской выгрузки в каталог с иерархической структурой метаданных. +// Выгружает расширение в исходники // -Процедура РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(Знач КаталогПлоскойВыгрузки, - Знач КаталогИерархическойВыгрузки) - - Лог.Отладка("Раскладываем модули по папкам согласно иерархии метаданных"); - - КэшПереименований = Новый Соответствие; - - //УбедитьсяЧтоФайлИлиКаталогСуществует(КаталогПлоскойВыгрузки); - - Если ПустаяСтрока(КаталогИерархическойВыгрузки) Тогда - ВызватьИсключение "Не задан каталог выгрузки модулей по иерархии"; - КонецЕсли; - - ФайлВыгрузкиКаталог = Новый Файл(КаталогИерархическойВыгрузки); - Если Не ФайлВыгрузкиКаталог.Существует() Тогда - СоздатьКаталог(КаталогИерархическойВыгрузки); - //ЗарегистрироватьВременныйФайл(КаталогИерархическойСтруктурыМодулей); TODO выяснить почему временный? - КонецЕсли; - - Переименования = Новый ТаблицаЗначений; - Переименования.Колонки.Добавить("Источник"); - Переименования.Колонки.Добавить("Приемник"); - - ИскатьВПодкаталогах = Истина; - СписокФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы(), ИскатьВПодкаталогах); - Лог.Отладка("Найдено файлов выгрузки: " + СписокФайлов.Количество() + " шт."); - Для Каждого Файл Из СписокФайлов Цикл - ИмяФайлаДляПереименования = Файл.Имя; - - ИмяНовогоФайла = СтрЗаменить(Файл.ПолноеИмя, КаталогПлоскойВыгрузки, ""); - ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "/", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); - ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "\", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); - Если Файл.ЭтоКаталог() Тогда - ИмяКаталога = ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла); - ФайлКаталога = Новый Файл(ИмяКаталога); - Если ФайлКаталога.Существует() = Ложь Тогда - СоздатьКаталог(ИмяКаталога); - КонецЕсли; - Продолжить; - КонецЕсли; - ИмяФайлаДляПереименования = ИмяНовогоФайла; - - НовыйФайл = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла)); - НовыйКаталог = Новый Файл(НовыйФайл.Путь); - Если НЕ НовыйКаталог.Существует() Тогда - СоздатьКаталог(НовыйКаталог.ПолноеИмя); - КонецЕсли; - - ДобавитьПереименование(Переименования, ИмяФайлаДляПереименования, ИмяНовогоФайла); - - КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя); - - Если Нрег(Прав(Файл.ПолноеИмя, 5)) = ".form" Или Нрег(Файл.Имя) = "form.bin" Тогда - КаталогФормы = ОбъединитьПути(НовыйКаталог.ПолноеИмя, НовыйФайл.ИмяБезРасширения); - ФайлКаталога = Новый Файл(КаталогФормы); - Если ФайлКаталога.Существует() Тогда - УдалитьФайлы(ФайлКаталога.ПолноеИмя, ПолучитьМаскуВсеФайлы()); - КонецЕсли; - СоздатьКаталог(КаталогФормы); - УпаковщикМетаданных.РаспаковатьКонтейнерМетаданных(НовыйФайл.ПолноеИмя, КаталогФормы); - КонецЕсли; +// Параметры: +// КаталогВыгрузки - Строка - Путь к каталогу выгрузки +// ИмяРасширения - Строка - Имя расширения +// ФайлВерсии - Строка - Путь к файлу версии +// ТолькоИзмененные - Булево - Выгружать только измененные файлы для ускорения выгрузки +// +Процедура РазобратьРасширениеНаИсходники(КаталогВыгрузки, ИмяРасширения, + Знач ФайлВерсии = "", Знач ТолькоИзмененные = Истина) Экспорт - КонецЦикла; + ФС.ОбеспечитьКаталог(КаталогВыгрузки); + Синхронизировать = ТолькоИзмененные И ФС.ФайлСуществует(ФайлВерсии); - ТекстовыйДокумент = Новый ЗаписьТекста(ОбъединитьПути(КаталогИерархическойВыгрузки, "renames.txt")); - Для Каждого ЭлементСтроки Из Переименования Цикл - ТекстовыйДокумент.ЗаписатьСтроку(ЭлементСтроки.Источник + "-->" +СтрЗаменить(ЭлементСтроки.Приемник, "/", "\")); - КонецЦикла; - ТекстовыйДокумент.Закрыть(); + ФорматВыгрузки = ""; // Всегда иерархический + УправлениеКонфигуратором.ВыгрузитьРасширениеВФайлы(КаталогВыгрузки, ИмяРасширения, ФорматВыгрузки, + Синхронизировать, ФайлВерсии); КонецПроцедуры -Функция ДобавитьПереименование(Знач Переименования, Знач Источник, Знач Приемник) - - СтрокаПереименования = Переименования.Добавить(); - СтрокаПереименования.Источник = Источник; - СтрокаПереименования.Приемник = Приемник; - - Возврат СтрокаПереименования; - -КонецФункции - // Выгружает файл конфигурации в исходники // // Параметры: @@ -1146,7 +970,6 @@ Знач ФайлВерсии = "", Знач ИспользоватьПереименования = Ложь) Экспорт Лог.Информация("Запускаю выгрузку конфигурации в исходники"); - ТекущаяПроцедура = "ВыгрузитьКонфигурациюВИсходники"; ОбъектФайл = Новый Файл(ФайлКонфигурации); Если ОбъектФайл.Существует() = Ложь Тогда ВызватьИсключение СтроковыеФункции.ПодставитьПараметрыВСтроку("Файл cf %1 не найден", ФайлКонфигурации); @@ -1180,6 +1003,9 @@ Лог.Информация("Запускаю выгрузку расширения в файл"); ТекущаяПроцедура = "ВыгрузитьРасширенияВФайл"; + Файл = Новый Файл(ПутьКНужномуФайлуРасширения); + ФС.ОбеспечитьКаталог(Файл.Путь); + Попытка ПараметрыЗапуска = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска(); @@ -1264,21 +1090,21 @@ // // Параметры: // ПутьКЗагружаемомуФайлуСДанными - Строка - Путь к файлу с данными (*.dt) +// КоличествоЗаданий - Число - Количество заданий (потоков) загрузки из файла с данными // -Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными) Экспорт +Процедура ЗагрузитьИнфобазуИзФайла(Знач ПутьКЗагружаемомуФайлуСДанными, Знач КоличествоЗаданий = 0) Экспорт Лог.Информация("Запускаю загрузку информационной базы из файла"); - ТекущаяПроцедура = "ЗагрузитьИнфобазуИзФайла"; Попытка - УправлениеКонфигуратором.ЗагрузитьИнформационнуюБазу(ПутьКЗагружаемомуФайлуСДанными); + УправлениеКонфигуратором.ЗагрузитьИнформационнуюБазу(ПутьКЗагружаемомуФайлуСДанными, КоличествоЗаданий); Текст = УправлениеКонфигуратором.ВыводКоманды(); Если Не ПустаяСтрока(Текст) Тогда Лог.Информация(Текст); КонецЕсли; Исключение Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); - ВызватьИсключение ТекущаяПроцедура; + ВызватьИсключение; КонецПопытки; Лог.Информация("Загрузка из файла завершена."); @@ -1292,7 +1118,6 @@ Знач ПарольХранилища = "") Экспорт Лог.Информация("Выполняю синтакс-контроль конфигурации"); - ТекущаяПроцедура = "ВыполнитьСинтаксическийКонтроль"; РезультатПроверки = ""; Успешно = ПолучитьРезультатыСинтаксическогоКонтроля(УправлениеКонфигуратором, КоллекцияПроверок, РезультатПроверки, @@ -1300,7 +1125,7 @@ ПользовательХранилища, ПарольХранилища); - Лог.Информация("Результат синтакс-контроля: %1", РезультатПроверки); + Лог.Отладка("Результат синтакс-контроля: %1", РезультатПроверки); Возврат Успешно; @@ -1402,9 +1227,11 @@ // Загружает файл расширения в текущую базу данных. // Параметры: // ПутьКФайлу - Строка - Путь к файлу *.cfe +// ИмяРасширения - Строка +// ОбновитьКонфигурациюИБ - Булево // Процедура ЗагрузитьФайлРасширения(Знач ПутьКФайлу, Знач ИмяРасширения, Знач ОбновитьКонфигурациюИБ = Ложь) Экспорт - Перем ФайлЗагрузки, Конфигуратор, ПараметрыЗапуска; + Перем ФайлЗагрузки, Конфигуратор; Лог.Информация("Загружаю файл расширения %1", ПутьКФайлу); ФайлЗагрузки = Новый Файл(ПутьКФайлу); @@ -1418,6 +1245,15 @@ КонецПроцедуры +// Возвращает каталог времнной ИБ +// +// Возвращаемое значение: +// Строка - Каталог временной ИБ +// +Функция КаталогВременнойИБ() Экспорт + Возврат КаталогВременнойИБ; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1467,12 +1303,11 @@ КонецФункции -Функция ПолучитьЛог() +Процедура ПолучитьЛог() Если Лог = Неопределено Тогда Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); КонецЕсли; - Возврат Лог; -КонецФункции +КонецПроцедуры Функция ПодготовитьКаталогЗагрузкиПоФайлуПереименований(ВходнойКаталог, ФайлПереименований) Перем БылаОшибка; @@ -1505,8 +1340,9 @@ СоздатьКаталог(КаталогФормыНовый); МассивФайлов = НайтиФайлы(КаталогФормыСтарый, ПолучитьМаскуВсеФайлы()); Для Каждого Элемент из МассивФайлов Цикл - Лог.Отладка("Копируем " + Элемент.ПолноеИмя + "--> " +ОбъединитьПути(КаталогФормыНовый, Элемент.Имя)); - КопироватьФайл(Элемент.ПолноеИмя, ОбъединитьПути(КаталогФормыНовый, Элемент.Имя)); + НовыйПутьФормы = ОбъединитьПути(КаталогФормыНовый, Элемент.Имя); + Лог.Отладка("Копируем " + Элемент.ПолноеИмя + "--> " + НовыйПутьФормы); + КопироватьФайл(Элемент.ПолноеИмя, НовыйПутьФормы); КонецЦикла; УпаковщикМетаданных.УпаковатьКонтейнерМетаданных(КаталогФормыНовый, ФайлНовый.ПолноеИмя); @@ -1544,7 +1380,9 @@ Если ФайлПереименований.Существует() Тогда ПутьВыгрузки = ФайлПереименований.Путь; ФайлКонфигурации = Новый Файл(ОбъединитьПути(ПутьВыгрузки, "Configuration.xml")); - Если ФайлКонфигурации.ПолучитьВремяИзменения() <= ФайлПереименований.ПолучитьВремяИзменения() Тогда + ФайлКонфигурацииВремяИзменения = ФайлКонфигурации.ПолучитьВремяИзменения(); + ФайлПереименованийВремяИзменения = ФайлПереименований.ПолучитьВремяИзменения(); + Если ФайлКонфигурацииВремяИзменения <= ФайлПереименованийВремяИзменения Тогда Рез = Истина; Лог.Отладка("Файл конфигурации %1 создан не позже файла переименований %2", @@ -1554,9 +1392,9 @@ Лог.Отладка("Файл конфигурации %1 создан позже файла переименований %2", ФайлКонфигурации.Имя, ФайлПереименований.Имя); Лог.Отладка(" Дата/время файла конфигурации %1 - %2", - ФайлКонфигурации.Имя, ФайлКонфигурации.ПолучитьВремяИзменения()); + ФайлКонфигурации.Имя, ФайлКонфигурацииВремяИзменения); Лог.Отладка(" Дата/время файла переименований %1 - %2", - ФайлПереименований.Имя, ФайлПереименований.ПолучитьВремяИзменения()); + ФайлПереименований.Имя, ФайлПереименованийВремяИзменения); Лог.Отладка("Файл переименований использовать нельзя, использую только штатную загрузку через Конфигуратор."); КонецЕсли; Иначе @@ -1566,6 +1404,372 @@ Возврат Рез; КонецФункции +// Выполнить команду/действие в режиме 1С:Предприятия +// +// Параметры: +// ПараметрЗапуска - Строка - <описание параметра> +// ОбработкаДляЗапуска - Строка - <описание параметра> +// ТолстыйКлиент - Булево - признак запуска толстого клиента +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> +// ОжидатьЗавершения - Булево - по умолчанию Истина, Ложь - запускает и завершает свой процесс. +// ДопСообщения - Структура +// +Процедура ЗапуститьВРежимеПредприятия(Знач ПараметрЗапуска, + Знач ОбработкаДляЗапуска, Знач ТолстыйКлиент, + Знач ДополнительныеКлючиЗапуска, + Знач ОжидатьЗавершения, Знач ДопСообщения) + + Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); + + ТекущаяПроцедура = ДопСообщения.Ключ; + + Если ТолстыйКлиент = Ложь Тогда + ТонкийКлиент1С = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(УправлениеКонфигуратором.ПутьКПлатформе1С()); + УправлениеКонфигуратором.ПутьКПлатформе1С(ТонкийКлиент1С); + КонецЕсли; + + УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(ОжидатьЗавершения); + + Если Не ОжидатьЗавершения Тогда + УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ВременныеФайлы.НовоеИмяФайла()); + КонецЕсли; + + ДополнительныеКлючи = ДополнительныеКлючиЗапуска; + Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда + ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); + КонецЕсли; + + Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); + Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); + + Попытка + УправлениеКонфигуратором.ЗапуститьВРежимеПредприятия(ПараметрЗапуска, + ?(ТипЗнч(ТолстыйКлиент) = Тип("Булево"), Не ТолстыйКлиент, ТолстыйКлиент), + ДополнительныеКлючи + ); + Текст = УправлениеКонфигуратором.ВыводКоманды(); + Если Не ПустаяСтрока(Текст) Тогда + Лог.Информация(Текст); + КонецЕсли; + + Исключение + Лог.Ошибка(УправлениеКонфигуратором.ВыводКоманды()); + Лог.Ошибка(ОписаниеОшибки()); + ВызватьИсключение ТекущаяПроцедура; + КонецПопытки; + + Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); +КонецПроцедуры + +// Выполнить команду/действие в режиме 1С:Предприятия с ожиданием выполнения и чтением лог-файла +// +// Параметры: +// ПараметрЗапуска - Строка - <описание параметра> +// ОбработкаДляЗапуска - Строка - <описание параметра> +// ПутьЛогаВыполненияСценариев - Строка - путь файла информации 1С по ключу "/out". +// ТолстыйКлиент - Булево, Неопределено - признак запуска толстого клиента +// ДополнительныеКлючиЗапуска - Строка - <описание параметра> +// ДопСообщения - Структура - см. НовыеДопСообщенияДляЗапускаПредприятия +// * ПоказыватьДополнительноЛогПредприятия - Булево +// +// Возвращаемое значение: +// Строка - лог 1С:Предприятие +// +Функция ЗапуститьВРежимеПредприятияСЛогФайлом(Знач ПараметрЗапуска, + Знач ОбработкаДляЗапуска, + Знач ПутьЛогаВыполненияСценариев, + Знач ТолстыйКлиент, + Знач ДополнительныеКлючиЗапуска, + Знач ДопСообщения) + + Лог.Информация("Выполняю команду/действие в режиме 1С:Предприятие"); + + Результат = ""; + + ТекущаяПроцедура = "ЗапуститьВРежимеПредприятияСЛогФайлом"; + + УправлениеКонфигуратором.УстановитьПризнакОжиданияВыполненияПрограммы(Истина); + + ПутьДамп = ВременныеФайлы.НовоеИмяФайла(); + УправлениеКонфигуратором.УстановитьИмяФайлаСообщенийПлатформы(ПутьДамп); + + ДополнительныеКлючи = ДополнительныеКлючиЗапуска; + Если Не ПустаяСтрока(ОбработкаДляЗапуска) Тогда + ДополнительныеКлючи = "" + ДополнительныеКлючи + " /Execute" +ОбщиеМетоды.ОбернутьПутьВКавычки(ОбработкаДляЗапуска); + КонецЕсли; + + Лог.Отладка("ДополнительныеКлючи:" + ДополнительныеКлючи); + Лог.Отладка("ПараметрЗапуска:" + ПараметрЗапуска); + + ПараметрыСвязиСБазой = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска(); + ПараметрыСвязиСБазой[0] = "ENTERPRISE"; + ПараметрыСвязиСБазой.Удалить(2); + + Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда + ПараметрыСвязиСБазой.Добавить("/C" + ПараметрЗапуска); + КонецЕсли; + + Если ТолстыйКлиент = Истина Тогда + ПараметрыСвязиСБазой.Добавить("/RunModeOrdinaryApplication "); + КонецЕсли; + + ПараметрыСвязиСБазой.Добавить("/out""" + ПутьДамп + """"); + + Если ДополнительныеКлючи <> Неопределено Тогда + ПараметрыСвязиСБазой.Добавить(ДополнительныеКлючи); + КонецЕсли; + + СтрокаЗапуска = ""; + Для Каждого Параметр Из ПараметрыСвязиСБазой Цикл + СтрокаЗапуска = СтрокаЗапуска + " " + Параметр; + КонецЦикла; + + Приложение = УправлениеКонфигуратором.ПутьКТонкомуКлиенту1С(); + Если ТолстыйКлиент = Истина Тогда + Приложение = УправлениеКонфигуратором.ПутьКПлатформе1С(); + КонецЕсли; + + Если Найти(Приложение, " ") > 0 Тогда + Приложение = ОбщиеМетоды.ОбернутьПутьВКавычки(Приложение); + КонецЕсли; + Приложение = Приложение + " " + СтрокаЗапуска; + Лог.Отладка(Приложение); + + Попытка + ЗапуститьПроцесс1С(Приложение, ПутьЛогаВыполненияСценариев ); + Результат = ВыводПредприятия(ПутьДамп); + + ПроверитьЛогПредприятияНаИзвестныеОшибки(Результат); + + ПоказатьВыводПредприятия(Результат, ДопСообщения.ПоказыватьДополнительноЛогПредприятия); + + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + + Результат = ВыводПредприятия(ПутьДамп); + ПоказатьВыводПредприятия(Результат, Истина); + + Лог.Ошибка(ОписаниеОшибки); + ВызватьИсключение ТекущаяПроцедура; + КонецПопытки; + + Лог.Информация("Выполнение команды/действия в режиме 1С:Предприятие завершено."); + + Возврат Результат; +КонецФункции + +Процедура ЗапуститьПроцесс1С(Знач СтрокаЗапуска, Знач ПутьКФайлуЛога) + + ПериодОпросаВМиллисекундах = 1000; + + НадоЧитатьЛог = Истина; + КолСтрокЛогаПрочитано = 0; + + Процесс = СоздатьПроцесс(СтрокаЗапуска); + Процесс.Запустить(); + + ТаймаутПоУмолчанию = 500; + Приостановить(ТаймаутПоУмолчанию); + + Пока НЕ Процесс.Завершен Цикл + Если ПериодОпросаВМиллисекундах <> 0 Тогда + Приостановить(ПериодОпросаВМиллисекундах); + КонецЕсли; + + Если НадоЧитатьЛог Тогда + ВывестиНовыеСообщения(ПутьКФайлуЛога, КолСтрокЛогаПрочитано); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Выполняет перенос файлов из каталога плоской выгрузки в каталог с иерархической структурой метаданных. +// +Процедура РазложитьМодули1СПоПапкамСогласноИерархииМетаданных(Знач КаталогПлоскойВыгрузки, + Знач КаталогИерархическойВыгрузки) + + Лог.Отладка("Раскладываем модули по папкам согласно иерархии метаданных"); + + Если ПустаяСтрока(КаталогИерархическойВыгрузки) Тогда + ВызватьИсключение "Не задан каталог выгрузки модулей по иерархии"; + КонецЕсли; + + ФайлВыгрузкиКаталог = Новый Файл(КаталогИерархическойВыгрузки); + Если Не ФайлВыгрузкиКаталог.Существует() Тогда + СоздатьКаталог(КаталогИерархическойВыгрузки); + //ЗарегистрироватьВременныйФайл(КаталогИерархическойСтруктурыМодулей); TODO выяснить почему временный? + КонецЕсли; + + Переименования = Новый ТаблицаЗначений; + Переименования.Колонки.Добавить("Источник"); + Переименования.Колонки.Добавить("Приемник"); + + ИскатьВПодкаталогах = Истина; + СписокФайлов = НайтиФайлы(КаталогПлоскойВыгрузки, ПолучитьМаскуВсеФайлы(), ИскатьВПодкаталогах); + Лог.Отладка("Найдено файлов выгрузки: " + СписокФайлов.Количество() + " шт."); + Для Каждого Файл Из СписокФайлов Цикл + + ИмяНовогоФайла = СтрЗаменить(Файл.ПолноеИмя, КаталогПлоскойВыгрузки, ""); + ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "/", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); + ИмяНовогоФайла = ?(Лев(ИмяНовогоФайла, 1) = "\", Сред(ИмяНовогоФайла, 2), ИмяНовогоФайла); + Если Файл.ЭтоКаталог() Тогда + ИмяКаталога = ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла); + ФайлКаталога = Новый Файл(ИмяКаталога); + Если ФайлКаталога.Существует() = Ложь Тогда + СоздатьКаталог(ИмяКаталога); + КонецЕсли; + Продолжить; + КонецЕсли; + ИмяФайлаДляПереименования = ИмяНовогоФайла; + + НовыйФайл = Новый Файл(ОбъединитьПути(КаталогИерархическойВыгрузки, ИмяНовогоФайла)); + НовыйКаталог = Новый Файл(НовыйФайл.Путь); + Если НЕ НовыйКаталог.Существует() Тогда + СоздатьКаталог(НовыйКаталог.ПолноеИмя); + КонецЕсли; + + ДобавитьПереименование(Переименования, ИмяФайлаДляПереименования, ИмяНовогоФайла); + + КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя); + + Если Нрег(Прав(Файл.ПолноеИмя, 5)) = ".form" Или Нрег(Файл.Имя) = "form.bin" Тогда + КаталогФормы = ОбъединитьПути(НовыйКаталог.ПолноеИмя, НовыйФайл.ИмяБезРасширения); + ФайлКаталога = Новый Файл(КаталогФормы); + Если ФайлКаталога.Существует() Тогда + УдалитьФайлы(ФайлКаталога.ПолноеИмя, ПолучитьМаскуВсеФайлы()); + КонецЕсли; + СоздатьКаталог(КаталогФормы); + УпаковщикМетаданных.РаспаковатьКонтейнерМетаданных(НовыйФайл.ПолноеИмя, КаталогФормы); + КонецЕсли; + + КонецЦикла; + + ТекстовыйДокумент = Новый ЗаписьТекста(ОбъединитьПути(КаталогИерархическойВыгрузки, "renames.txt")); + Для Каждого ЭлементСтроки Из Переименования Цикл + ТекстовыйДокумент.ЗаписатьСтроку(ЭлементСтроки.Источник + "-->" +СтрЗаменить(ЭлементСтроки.Приемник, "/", "\")); + КонецЦикла; + ТекстовыйДокумент.Закрыть(); + +КонецПроцедуры + +Процедура ДобавитьПереименование(Знач Переименования, Знач Источник, Знач Приемник) + СтрокаПереименования = Переименования.Добавить(); + СтрокаПереименования.Источник = Источник; + СтрокаПереименования.Приемник = Приемник; +КонецПроцедуры + +Процедура ВывестиНовыеСообщения(ИмяФайлаЛога, КолСтрокЛогаПрочитано) + Попытка + МассивСтрок = ПолучитьНовыеСтрокиЛога(ИмяФайлаЛога, КолСтрокЛогаПрочитано); + Для Каждого Стр Из МассивСтрок Цикл + Если СокрЛП(Стр) = "" Тогда + Продолжить; + КонецЕсли; + Лог.Информация(СокрЛП(Стр)); + КонецЦикла; + Исключение + Лог.Ошибка(ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьНовыеСтрокиЛога(Знач ИмяФайла, КолСтрокЛогаПрочитано) + Файл = Новый Файл(ИмяФайла); + Если Не Файл.Существует() Тогда + Возврат Новый Массив; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ИмяФайла, "UTF-8", , , Ложь); + + ВесьТекст = Текст.Прочитать(); + + Текст.Закрыть(); + + Массив = Новый Массив(); + + МассивСтрок = СтрРазделить(ВесьТекст, Символы.ПС, Истина); + Если ЗначениеЗаполнено(МассивСтрок) Тогда + КоличествоМинус1 = МассивСтрок.Количество() - 1; + Если МассивСтрок[КоличествоМинус1] = "" Тогда + МассивСтрок.Удалить(КоличествоМинус1); + КонецЕсли; + КонецЕсли; + + Для Ккк = (КолСтрокЛогаПрочитано + 1) По МассивСтрок.Количество() Цикл + Массив.Добавить(МассивСтрок[Ккк - 1]); + КонецЦикла; + + КолСтрокЛогаПрочитано = МассивСтрок.Количество(); + + Возврат Массив; +КонецФункции + +Процедура ПроверитьЛогПредприятияНаИзвестныеОшибки(ЛогПредприятия) + + НормализованныйЛог = НРег(ЛогПредприятия); + Для каждого Ошибка Из ИзвестныеНормализованныеОшибки() Цикл + Если Найти(НормализованныйЛог, Ошибка) > 0 Тогда + ВызватьИсключение Ошибка; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ИзвестныеНормализованныеОшибки() + Ошибки = Новый Массив; + Ошибки.Добавить("Пользователь ИБ не идентифицирован"); + Ошибки.Добавить("Уже существуют пользователи. Пользователь-администратор не создан"); + + Результат = Новый Массив; + Для каждого Ошибка Из Ошибки Цикл + Результат.Добавить(НРег(Ошибка)); + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция ВыводПредприятия(Знач ПутьДамп) + Результат = ""; + Если ФС.Существует(ПутьДамп) Тогда + Результат = ОбщиеМетоды.ПрочитатьФайл(ПутьДамп, КодировкаТекста.ANSI); + Иначе + Лог.Отладка("Не существует файл вывода от 1С - %1", ПутьДамп); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ПоказатьВыводПредприятия(Знач ТекстВывода, Знач ПоказыватьВЛоге) + + Если Не ПустаяСтрока(ТекстВывода) Тогда + Сообщение = СтрШаблон("Дополнительный лог выполнения 1С:Предприятие + | + |%1", ТекстВывода); + + Если ПоказыватьВЛоге Тогда + Лог.Информация(Сообщение); + Иначе + Лог.Отладка(Сообщение); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ТекущаяВерсияПлатформы() + + ПутьПредприятия = УправлениеКонфигуратором.ПутьКПлатформе1С(); + ШаблонВерсии = Новый РегулярноеВыражение("8(\.\d+){3}"); + ВсеСовпадения = ШаблонВерсии.НайтиСовпадения(ПутьПредприятия); + Если ВсеСовпадения.Количество() = 0 Тогда + ВызватьИсключение "Неопределена версия платформы!"; + КонецЕсли; + + Возврат ВсеСовпадения[0].Значение; + +КонецФункции + #КонецОбласти ПолучитьЛог(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" index 335ad444..ea10dba1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\320\260\320\272\320\276\320\262\321\211\320\270\320\272\320\222\320\275\320\265\321\210\320\275\320\270\321\205\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\276\320\272.os" @@ -18,15 +18,13 @@ Процедура Разобрать(Знач Путь, Знач КаталогВыгрузки, Знач СтрокаПодключения = "", Знач Пользователь = "", Знач Пароль = "", Знач ВерсияПлатформы = "", Знач КлючКэша = Неопределено) Экспорт - Перем КаталогВременнойИБ; - Инициализировать(); Файл = Новый Файл(Путь); КорневойПутьВыходной = Файл.ПолноеИмя; КлючКэша = ?(КлючКэша = Неопределено ИЛИ Не ЗначениеЗаполнено(КлючКэша), "compileepfrunner", КлючКэша); - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json", "./build/cache.json"); + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, ИмяКешФайла(), ИмяКешФайла()); Если НастройкиИзФайла.Количество() = 0 Тогда НастройкиИзФайла = Новый Соответствие(); @@ -48,19 +46,15 @@ ЕстьИзмененияДляЗаписи = Ложь; СледитьЗаИзменениямиФайловВРабочемКаталоге(ЗначенияПараметровСборки, НастройкиИзФайла, , ЕстьИзмененияДляЗаписи); Если ЕстьИзмененияДляЗаписи Тогда - ПутьККэшу = Новый Файл(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json")).Путь; - Если Новый Файл(ПутьККэшу).Существует() Тогда - ЗаписатьФайлJSON(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json"), НастройкиИзФайла); - КонецЕсли; + ЗаписатьВКешФайл(НастройкиИзФайла); КонецЕсли; -КонецПроцедуры // Разобрать +КонецПроцедуры Процедура Собрать(Знач Путь, Знач КаталогВыгрузки, Знач СтрокаПодключения = "", Знач Пользователь = "", Знач Пароль = "", Знач ВерсияПлатформы = "", Знач ТолькоКопировать = Ложь, Знач КлючКэша = Неопределено) Экспорт Перем КаталогВременнойИБ; - Рекурсивно = Истина; ПутьКИсходникам = ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, Путь); ПапкаИсходников = Новый Файл(ПутьКИсходникам); @@ -82,7 +76,7 @@ НастройкиИзФайла.Вставить(КлючКэша, Новый Соответствие); Иначе Лог.Отладка("Начали читать"); - НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json", "./build/cache.json"); + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ПараметрыСистемы.КорневойПутьПроекта, ИмяКешФайла(), ИмяКешФайла()); Лог.Отладка("Закончили читать"); Если НастройкиИзФайла.Количество() = 0 Тогда НастройкиИзФайла = Новый Соответствие(); @@ -106,12 +100,7 @@ СледитьЗаИзменениямиФайловВРепозиторииИсходников(ЗначенияПараметровСборки, НастройкиИзФайла, , ЕстьИзмененияДляЗаписи); Лог.Отладка("Закончили собирать " + ЕстьИзмененияДляЗаписи + " " + ТолькоКопировать); Если ЕстьИзмененияДляЗаписи И НЕ ТолькоКопировать Тогда - ПутьККэшу = Новый Файл(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json")).Путь; - Если Новый Файл(ПутьККэшу).Существует() Тогда - Лог.Отладка("Начали записывать"); - ЗаписатьФайлJSON(ОбъединитьПути(ПараметрыСистемы.КорневойПутьПроекта, "./build/cache.json"), НастройкиИзФайла); - Лог.Отладка("закончили записывать"); - КонецЕсли; + ЗаписатьВКешФайл(НастройкиИзФайла); КонецЕсли; КонецПроцедуры @@ -213,7 +202,11 @@ ЕстьИзменения = Истина; - Если НЕ ЭтоБинарныйОбъект1С И НЕ РежимОдногоКаталога Тогда + Если НЕ ЭтоБинарныйОбъект1С Тогда + Если РежимОдногоКаталога Тогда + Продолжить; + КонецЕсли; + ФайлНовый = Новый Файл(ПутьФайлаНазначения); КаталогНовый = Новый Файл(ФайлНовый.Путь); Если НЕ КаталогНовый.Существует() Тогда @@ -233,8 +226,7 @@ Кэш.Вставить(ФайлНовый.ПолноеИмя, ХэшФайла(ФайлНовый)); КэшОбновляемый.Вставить(ФайлНовый.ПолноеИмя, Кэш.Получить(ФайлНовый.ПолноеИмя)); Лог.Отладка(СтрШаблон("Завершено копирование файла %1 в каталог %2", Файл.Имя, ФайлНовый.ПолноеИмя)); - Продолжить; - ИначеЕсли НЕ ЭтоБинарныйОбъект1С И РежимОдногоКаталога Тогда + Продолжить; КонецЕсли; @@ -245,7 +237,6 @@ Лог.Отладка(" назначение :%1", КаталогИсходящий); Лог.Отладка(" новый путь :%1", ПутьФайлаНазначения); - Лог.Отладка("Разбираем внешнюю обработку/отчет %1", Файл.ПолноеИмя); СоздатьКаталог(ПутьФайлаНазначения); КаталогРазобранный = РазобратьФайлВнешняяОбработка(Файл, КаталогИсходящий, КаталогВходящийДляРазбора, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); @@ -522,22 +513,21 @@ КонецЕсли; Для Каждого Файл Из Файлы Цикл - Если Лев(Файл.Имя, 4) = ".git" Или Врег(Файл.Имя) = Врег("build") Или Врег(Файл.Имя) = Врег("cache.txt") Тогда + ИмяФайла = Файл.Имя; + ИмяФайлаВРег = Врег(ИмяФайла); + Если Лев(ИмяФайла, 4) = ".git" Или ИмяФайлаВРег = "BUILD" Или ИмяФайлаВРег = "CACHE.TXT" Тогда Продолжить; КонецЕсли; Если Файл.ЭтоКаталог() Тогда - Если Лев(Файл.Имя, 4) = ".git" Тогда - Продолжить; - КонецЕсли; - Если Файл.ЭтоКаталог() И - ОбъединитьПути(Новый Файл(Файл.ПолноеИмя).ПолноеИмя, "./") = ОбъединитьПути(Новый Файл(КаталогВыгрузки).ПолноеИмя, "./") Тогда + ПолноеИмяКаталога = Файл.ПолноеИмя; + ФайлНовый = Новый Файл(ПолноеИмяКаталога); + Если ОбъединитьПути(ФайлНовый.ПолноеИмя, "./") = ОбъединитьПути(Новый Файл(КаталогВыгрузки).ПолноеИмя, "./") Тогда Продолжить; КонецЕсли; - ФайлНовый = Новый Файл(Файл.ПолноеИмя); ФайлКаталогВВыгрузке = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталога)); Если НЕ ФайлКаталогВВыгрузке.Существует() Тогда Лог.Отладка(СтрШаблон("Создаем новый каталог %1", ФайлКаталогВВыгрузке.ПолноеИмя)); @@ -547,13 +537,13 @@ РазобратьКаталог(ФайлНовый, КаталогВыгрузки, КаталогКорень, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); ИначеЕсли ОбщиеМетоды.ТипФайлаПоддерживается(Файл) Тогда - Лог.Отладка(СтрШаблон("Подготовка выгрузки файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); + Лог.Отладка(СтрШаблон("Подготовка выгрузки файла %1 в каталог %2", ИмяФайла, ИмяКаталогаВыгрузки)); РазобратьФайлВнешняяОбработка(Файл, КаталогВыгрузки, КаталогКорень, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы); - Лог.Отладка(СтрШаблон("Завершена выгрузка файла %1 в каталог %2", Файл.Имя, ИмяКаталогаВыгрузки)); + Лог.Отладка(СтрШаблон("Завершена выгрузка файла %1 в каталог %2", ИмяФайла, ИмяКаталогаВыгрузки)); Иначе - ОтносительныйПутьКаталогаФайла = ФС.ОтносительныйПуть(КаталогКорень, Файл.ПолноеИмя); + ОтносительныйПутьКаталогаФайла = ФС.ОтносительныйПуть(КаталогКорень, ПолноеИмяКаталога); Лог.Отладка("ОтносительныйПутьКаталогаФайла <" + ОтносительныйПутьКаталогаФайла + ">"); ПутьФайлаИсходников = ОбъединитьПути(КаталогВыгрузки, ОтносительныйПутьКаталогаФайла); Лог.Отладка("ПутьФайлаИсходников <" + ПутьФайлаИсходников + ">"); @@ -575,9 +565,9 @@ КонецЕсли; - КопироватьФайл(Файл.ПолноеИмя, ФайлНовый.ПолноеИмя); + КопироватьФайл(ПолноеИмяКаталога, ФайлНовый.ПолноеИмя); - Лог.Отладка(СтрШаблон("Завершено копирование файла %1 в каталог %2", Файл.Имя, ФайлНовый.ПолноеИмя)); + Лог.Отладка(СтрШаблон("Завершено копирование файла %1 в каталог %2", ИмяФайла, ФайлНовый.ПолноеИмя)); КонецЕсли; КонецЦикла; @@ -625,7 +615,6 @@ КонецФункции - Процедура ЗапуститьРаспаковкуВнешнихОбработок(Знач Файл, Знач ПапкаИсходников, СтрокаПодключения, Пользователь, Пароль, ВерсияПлатформы) Лог.Отладка("Запускаем распаковку файла"); @@ -660,7 +649,6 @@ Лог.Отладка("Очищаем каталог временной ИБ"); УдалитьФайлы(Конфигуратор.ФайлИнформации()); - ИскатьВПодкаталогах = Истина; СписокФайлов = НайтиФайлы(ВременныйКаталог, "*.bin", ИскатьВПодкаталогах); Лог.Отладка("Найдено файлов выгрузки: " + СписокФайлов.Количество() + " шт."); @@ -694,18 +682,15 @@ КонецПроцедуры - -Функция ЗаписатьФайлJSON(ИмяФайла, Значение) +Процедура ЗаписатьФайлJSON(ИмяФайла, Значение) Лог.Отладка(ИмяФайла); - ФайлСуществующий = Новый Файл(ИмяФайла); ПарсерJSON = Новый ПарсерJSON(); JsonСтрока = ПарсерJSON.ЗаписатьJSON(Значение); Запись = Новый ЗаписьТекста(ИмяФайла); Запись.Записать(JsonСтрока); Запись.Закрыть(); - Возврат Истина; -КонецФункции +КонецПроцедуры Процедура ОбновитьЗависимыйКэш(АвтоОбновление, КэшПутей, КэшОбновляемый) @@ -738,14 +723,10 @@ КонецПроцедуры - Функция СобратьФайлВнешнейОбработки(Знач ПутьКИсходникам, Знач КаталогВыгрузки, Знач СтрокаПодключения, Знач Пользователь, Знач Пароль, Знач ВерсияПлатформы) Лог.Отладка("Собираю исходники <" + ПутьКИсходникам + ">"); - ПапкаИсходников = Новый Файл(ПутьКИсходникам); - ИмяПапки = ПапкаИсходников.Имя; - НайденныйФайл = НайтиФайлы(ПутьКИсходникам, "*.xml"); Ожидаем.Что(НайденныйФайл.Количество(), "Базовый файл xml <" + ПутьКИсходникам + ">*.xml должен существовать").Больше(0); @@ -819,20 +800,18 @@ Функция ЭтоПутьКИсходнымКодамОбработок(ПутьКПапке) - Результат = Ложь; - МассивИмен = НайтиФайлы(ПутьКПапке, "*.xml", Ложь); Для Каждого Элемент Из МассивИмен Цикл ЧтениеТекста = Новый ЧтениеТекста(Элемент.ПолноеИмя); Содержание = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); - Если Найти(Врег(Содержание), Врег(" файл по пути <%2> существует, а его нет!", + ЗначениеПараметраФайлНастроек, + ФайлОбщихНастроек.ПолноеИмя) + ).ЭтоИстина(); + КонецЕсли; + + НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, + ЗначениеПараметраФайлНастроек, ПутьКФайлуНастроекПоУмолчанию); + + ЗначенияПараметровНизкийПриоритет = Новый Соответствие; + + Если ЗначениеЗаполнено(НастройкиИзФайла) Тогда + ОбщиеМетоды.ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); + КонецЕсли; + + СоответствиеПеременных = СоответствиеПеременныхОкруженияПараметрамКоманд(); + + ОбщиеМетоды.ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременных); + + ОбщиеМетоды.ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); + + // на случай переопределения этой настройки повторная установка + ТекущийКаталогПроекта = НайтиКаталогТекущегоПроекта(ЗначениеПараметра_КаталогПроекта(ЗначенияПараметров)); + + ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; + + ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); + ДобавитьДанныеПодключения(ЗначенияПараметров); + + НастройкиДля1С.ДобавитьШаблоннуюПеременную("workspaceRoot", ТекущийКаталогПроекта); + НастройкиДля1С.ДобавитьШаблоннуюПеременную("runnerRoot", ОбщиеМетоды.КаталогПроекта()); + + НастройкиДля1С.ЗаменитьШаблонныеПеременныеВКоллекции(ЗначенияПараметров); + + ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров); + +КонецПроцедуры // ДополнитьЗначенияПараметров + +Процедура ВключитьВыводОтладочногоЛогаВОтдельныйФайл(Знач ЗначенияПараметров) + + Лог = Лог(); + + ПутьФайлаВывода = ""; + Если ЗначенияПараметров["--debuglogfile"] <> Неопределено Тогда + ПутьФайлаВывода = ЗначенияПараметров["--debuglogfile"]; + ФайлВывода = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайлаВывода)); + ФС.ОбеспечитьКаталог(ФайлВывода.Путь); + ИначеЕсли ЗначенияПараметров["--debuglog"] Тогда + // специально не через ВременныеФайлы для возможности сохранения файла после завершения + ПутьФайлаВывода = ПолучитьИмяВременногоФайла(".log"); // BSLLS:MissingTemporaryFileDeletion-off + ФайлВывода = Новый Файл(ПутьФайлаВывода); + ПутьФайлаВывода = ОбъединитьПути(ФайлВывода.Путь, "vrunner-" + ФайлВывода.Имя); // BSLLS:MissingTemporaryFileDeletion-off + Иначе + Возврат; + КонецЕсли; + + ФайлЖурнала = Новый ВыводЛогаВФайл; + ФайлЖурнала.ОткрытьФайл(ПутьФайлаВывода); + + Если Не Лог.ДобавленыСобственныеСпособыВывода() Тогда + ВыводПоУмолчанию = Новый ВыводЛогаВКонсоль(); + Лог.ДобавитьСпособВывода(ВыводПоУмолчанию); + КонецЕсли; + + Лог.ДобавитьСпособВывода(ФайлЖурнала, УровниЛога.Отладка); + + Лог.Отладка("Подключил вывод отладочного лога в отдельный файл %1", ПутьФайлаВывода); + +КонецПроцедуры + +Процедура ДобавитьДанныеПодключения(ЗначенияПараметров) + + Лог = ДополнительныеПараметры.Лог; + + ИмяСтрокаСоединения = "--ibconnection"; + ИмяСтрокаСоединенияСтарое = "--ibname"; + СтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединения]; + ИмяБазы = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; + + Если ЗначениеЗаполнено(СтрокаПодключения) И ЗначениеЗаполнено(ИмяБазы) Тогда + ВызватьИсключение СтрШаблон("Запрещено одновременно задавать ключи %1 и %2", ИмяСтрокаСоединения, "--ibname"); + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПодключения) Тогда + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, СтрокаПодключения); + Иначе + ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИмяБазы); + + Если ЗначениеЗаполнено(ИмяБазы) Тогда + Лог.Предупреждение("------------------------------------------------------------------"); + Лог.Предупреждение("Параметр --ibname устарел. Используйте --ibconnection вместо него!"); + Лог.Предупреждение("------------------------------------------------------------------"); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]) Тогда + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, + ОбщиеМетоды.ПереопределитьПолныйПутьВСтрокеПодключения(ЗначенияПараметров[ИмяСтрокаСоединенияСтарое])); + + ИсходнаяСтрокаПодключения = ЗначенияПараметров[ИмяСтрокаСоединенияСтарое]; + + НоваяСтрокаПодключения = МенеджерСпискаБаз.ПолучитьСтрокуПодключенияСКэшем( + ИсходнаяСтрокаПодключения, + ЗначенияПараметров["--nocacheuse"]); + + ЗначенияПараметров.Вставить(ИмяСтрокаСоединенияСтарое, НоваяСтрокаПодключения); + ЗначенияПараметров.Вставить(ИмяСтрокаСоединения, ИсходнаяСтрокаПодключения); + + КонецЕсли; + + ЗначенияПараметров.Вставить("ДанныеПодключения", ДанныеПодключения(ЗначенияПараметров)); +КонецПроцедуры + +Функция ДанныеПодключения(ЗначенияПараметров) + СтруктураПодключения = Новый Структура; + + // здесь может находиться и имя базы и строка подключения + СтруктураПодключения.Вставить("СтрокаПодключения", ЗначенияПараметров["--ibname"]); + + // если ИспользоватьВременнуюБазу, тогда используется временная база, + // что важно для некоторых команд, например, при работе с хранилищем + СтруктураПодключения.Вставить("ИспользоватьВременнуюБазу", Ложь); + + // здесь может находиться только строка подключения в виде пути к базе + СтруктураПодключения.Вставить("ПутьБазы", ЗначенияПараметров["--ibconnection"]); + + СтруктураПодключения.Вставить("Пользователь", ЗначенияПараметров["--db-user"]); + СтруктураПодключения.Вставить("Пароль", ЗначенияПараметров["--db-pwd"]); + СтруктураПодключения.Вставить("КодЯзыка", ЗначенияПараметров["--language"]); + СтруктураПодключения.Вставить("КодЯзыкаСеанса", ЗначенияПараметров["--locale"]); + СтруктураПодключения.Вставить("ВерсияПлатформы", ЗначенияПараметров["--v8version"]); + СтруктураПодключения.Вставить("РазрядностьПлатформы", ЗначенияПараметров["--bitness"]); + + Рез = Новый Структура; + Для каждого КлючЗначение Из СтруктураПодключения Цикл + Значение = КлючЗначение.Значение; + Если Значение = Неопределено Тогда + Значение = ""; + КонецЕсли; + Рез.Вставить(КлючЗначение.Ключ, Значение); + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Рез); +КонецФункции + +Функция ЗначениеПараметра_КаталогПроекта(Знач ЗначенияПараметров) + Рез = ЗначенияПараметров["--root"]; + Если Не ЗначениеЗаполнено(Рез) Тогда + Рез = ЗначенияПараметров["--workspace"]; + Если Не ЗначениеЗаполнено(Рез) Тогда + Рез = ""; + КонецЕсли; + КонецЕсли; + Возврат Рез; +КонецФункции + +Процедура ПроверитьНаличиеСлешаКакПоследнегоСимволаВПараметрах(ЗначенияПараметров) + Если Не ПараметрыСистемы.ЭтоWindows Тогда + Возврат; + КонецЕсли; + РегулярноеВыражение = Новый РегулярноеВыражение("[\\\/]\s*$"); + РегулярноеВыражение.Многострочный = Истина; + Для каждого КлючЗначение Из ЗначенияПараметров Цикл + Значение = КлючЗначение.Значение; + Если ЗначениеЗаполнено(Значение) И РегулярноеВыражение.Совпадает(Значение) Тогда + ВызватьИсключение СтрШаблон( + "Запрещено использование слешей как последних символов в параметрах.%1" + + " Это может привести к проблемам при запуске в командной строке.%1%1 Ключ %2 = %3", + Символы.ПС, КлючЗначение.Ключ, Значение); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" index 6bd73474..6c221cdd 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\277\320\270\321\201\320\272\320\260\320\221\320\260\320\267.os" @@ -14,23 +14,26 @@ КонецФункции -// Возвращает парсер списка баз, для возможности его модификации. +// Возвращает парсер списка баз для возможности его модификации. +// +// Возвращаемое значение: +// ПарсерСпискаБаз - результат +// Функция ПолучитьПарсерБаз() Экспорт - Перем Парсер; - Парсер = Новый ПарсерСпискаБаз; + Результат = Новый ПарсерСпискаБаз; Если ЗначениеЗаполнено(ФайлПарсераСпискаБаз) Тогда - Парсер.УстановитьФайл(ФайлПарсераСпискаБаз); + Результат.УстановитьФайл(ФайлПарсераСпискаБаз); Иначе СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; Если НЕ ЭтоWindows Тогда - ЗначениеПеременной = ПолучитьПеременнуюСреды(ВРег("HOME")); + ЗначениеПеременной = ПолучитьПеременнуюСреды("HOME"); ФайлСпискаБаз = Новый Файл(ОбъединитьПути(ЗначениеПеременной, ".1C/1cestart/ibases.v8i")).ПолноеИмя; - Парсер.УстановитьФайл(ФайлСпискаБаз); + Результат.УстановитьФайл(ФайлСпискаБаз); КонецЕсли; КонецЕсли; - Возврат Парсер; + Возврат Результат; КонецФункции // Получает строку названия базы в списке подключения @@ -46,9 +49,8 @@ // Неопределено - в случаи ошибки поиска, парсинга или какой другой. // Функция ПолучитьИмяБазыВСписке(Знач СтрокаПодключения, Знач ВидЗначения = "Name", Знач Парсер = Неопределено) Экспорт - Лог = ПолучитьЛог(); Результат = Неопределено; - СтрокаПоиска = ""; + Лог = ПолучитьЛог(); Попытка Если Парсер = Неопределено Тогда Парсер = ПолучитьПарсерБаз(); @@ -92,7 +94,7 @@ Возврат Результат; -КонецФункции // ПолучитьИмяБазыВСписке +КонецФункции // Добавляет в список базу новую базу по наименованию проекта, в случаи задвоения к наименованию // добавляем еще и CRC32 от полного пути проекта. @@ -129,7 +131,6 @@ Возврат; КонецЕсли; - ДобавилиБазу = Ложь; Попытка Парсер = ПолучитьПарсерБаз(); СписокБаз = Парсер.ПолучитьСписокБаз(); @@ -140,7 +141,6 @@ Для Каждого ИмяБазы из МассивНаименований Цикл Если Парсер.НайтиПоИмени(ИмяБазы) = Неопределено Тогда - ДобавилиБазу = Истина; ОписаниеБазы = ОписаниеБазыВСписке(ДопПараметры); ОписаниеБазы.Вставить("Name", ИмяБазы); ОписаниеБазы.Вставить("Connect", Новый Структура("String", СтрокаКоннекта(СтрокаПодключения))); @@ -155,11 +155,12 @@ КонецЕсли; КонецЦикла; -КонецПроцедуры // ДобавитьБазуВСписокБаз +КонецПроцедуры Функция СтрокаКоннекта(Знач СтрокаПодключения) Результат = ""; - Если Врег(Лев(СтрокаПодключения, 2)) = "/F" Тогда + ВариантСтрокиПодключения = Врег(Лев(СтрокаПодключения, 2)); + Если ВариантСтрокиПодключения = "/F" Тогда // Connect=File="/home/evgensosna/projects/land/build/ib"; // Кавычки убираем два раза, вдруг кавычки в кавычках. СтрокаПредварительно = ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3, СтрДлина(СтрокаПодключения) - 2)); @@ -167,7 +168,7 @@ СтрокаПредварительно = СтрЗаменить(СтрокаПредварительно, "\", ПолучитьРазделительПути()); СтрокаПредварительно = Новый Файл(СтрокаПредварительно).ПолноеИмя; Результат = "Connect=File=""" + СтрокаПредварительно + """"; - ИначеЕсли Врег(Лев(СтрокаПодключения, 2)) = "/S" Тогда + ИначеЕсли ВариантСтрокиПодключения = "/S" Тогда // Connect=Srvr="serverssl.service.th.consul";Ref="ssl"; РезультатПромежуточный = ОбщиеМетоды.УбратьКавычкиВокругПути( ОбщиеМетоды.УбратьКавычкиВокругПути(Сред(СтрокаПодключения, 3)) @@ -182,7 +183,7 @@ Результат = СтрокаПодключения; КонецЕсли; Возврат Результат; -КонецФункции // СтрокаКоннекта(Знач СтрокаПодключения) +КонецФункции // Возвращает структуру с описанием базы данных // @@ -211,7 +212,7 @@ КонецЕсли; Возврат Результат; -КонецФункции // ОписаниеБазыВСписке +КонецФункции Функция ПреобразоватьСтрокуПодключения(Знач СтрокаПодключения = Неопределено) Экспорт Лог = ПолучитьЛог(); @@ -241,7 +242,7 @@ Возврат Результат; -КонецФункции // ПреобразоватьСтрокуПодключения +КонецФункции // Возвращает строку с именем в общем списке баз или же исходную, с условием использования кэша. // Параметры: @@ -263,4 +264,4 @@ Результат = ?(НеИспользоватьКэш, СтрокаПодключения, ПреобразоватьСтрокуПодключения(СтрокаПодключения)); Возврат Результат; -КонецФункции // ПолучитьСтрокуПодключенияСКэшем() +КонецФункции diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" index b328ef64..2caf423b 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\224\320\273\321\2171\320\241.os" @@ -64,13 +64,27 @@ // Значение - Строка - значение, на которое нужно заменить // Процедура ДобавитьШаблоннуюПеременную(Знач Переменная, Знач Значение) Экспорт + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); - Если Не ЗначениеЗаполнено(Переменные) Тогда - Переменные = Новый Структура; - КонецЕсли; - Лог.Отладка("Добавляю шаблонную переменную %1, значение <%2>", Переменная, Значение); - Переменные.Вставить(Переменная, Значение); + БлокировкаРесурса = Новый БлокировкаРесурса(Переменные); + БлокировкаРесурса.Заблокировать(); + + Попытка + + Лог.Отладка("Добавляю шаблонную переменную %1, значение <%2>", Переменная, Значение); + Переменные.Вставить(Переменная, Значение); + + Исключение + + БлокировкаРесурса.Разблокировать(); + + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + КонецПопытки; + + БлокировкаРесурса.Разблокировать(); + КонецПроцедуры // ЗаменитьШаблонныеПеременныеВКоллекции @@ -96,15 +110,36 @@ Функция ЗаменитьШаблонныеПеременныеВСтроке(Знач ИсходнаяСтрока) Рез = ИсходнаяСтрока; - Для каждого КлючЗначение Из Переменные Цикл - Рез = СтрЗаменить(Рез, "$" + КлючЗначение.Ключ, КлючЗначение.Значение); - Рез = СтрЗаменить(Рез, "$" + НРег(КлючЗначение.Ключ), КлючЗначение.Значение); - Рез = СтрЗаменить(Рез, "$" + ВРег(КлючЗначение.Ключ), КлючЗначение.Значение); - КонецЦикла; + + БлокировкаРесурса = Новый БлокировкаРесурса(Переменные); + БлокировкаРесурса.Заблокировать(); + + Попытка + + Для каждого КлючЗначение Из Переменные Цикл + Рез = СтрЗаменить(Рез, "$" + КлючЗначение.Ключ, КлючЗначение.Значение); + Рез = СтрЗаменить(Рез, "$" + НРег(КлючЗначение.Ключ), КлючЗначение.Значение); + Рез = СтрЗаменить(Рез, "$" + ВРег(КлючЗначение.Ключ), КлючЗначение.Значение); + КонецЦикла; + + Исключение + + БлокировкаРесурса.Разблокировать(); + + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + КонецПопытки; + + БлокировкаРесурса.Разблокировать(); + Если Рез <> ИсходнаяСтрока Тогда Лог.Отладка("Выполнена замена с помощью шаблонных переменных. | Исходное значение <%1>, | Результат <%2>", ИсходнаяСтрока, Рез); КонецЕсли; + Возврат Рез; + КонецФункции + +Переменные = Новый Структура; \ No newline at end of file diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" index e3290338..20d012a0 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\270\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" @@ -152,17 +152,23 @@ Если КоллекцияДоп = Неопределено Тогда Возврат; КонецЕсли; - + ПолучитьЛог(); Для Каждого Элемент Из КоллекцияДоп Цикл + Лог.Отладка("Обрабатываю параметр: %1", Элемент.Ключ); + ЗначениеПодстановки = Элемент.Значение; + Лог.Отладка("Значение параметра: %1 Тип: %2", ЗначениеПодстановки, ТипЗнч(ЗначениеПодстановки)); + Если ТипЗнч(ЗначениеПодстановки) = Тип("Строка") Тогда + ЗначениеПодстановки = ПодставитьЗначенияПеременныхСреды(ЗначениеПодстановки); + КонецЕсли; Значение = КоллекцияОсновная.Получить(Элемент.Ключ); Если Значение = Неопределено Тогда - КоллекцияОсновная.Вставить(Элемент.Ключ, Элемент.Значение); + КоллекцияОсновная.Вставить(Элемент.Ключ, ЗначениеПодстановки); ИначеЕсли ТипЗнч(Значение) = Тип("Булево") И НЕ Значение Тогда - Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда - Если Элемент.Значение = "1" ИЛИ Нрег(Элемент.Значение) = "истина" ИЛИ Нрег(Элемент.Значение) = "true" Тогда + Если ТипЗнч(ЗначениеПодстановки) = Тип("Строка") Тогда + Если ЗначениеПодстановки = "1" ИЛИ Нрег(ЗначениеПодстановки) = "истина" ИЛИ Нрег(ЗначениеПодстановки) = "true" Тогда КоллекцияОсновная.Вставить(Элемент.Ключ, Истина); КонецЕсли; - ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Булево") И Элемент.Значение Тогда + ИначеЕсли ТипЗнч(ЗначениеПодстановки) = Тип("Булево") И ЗначениеПодстановки Тогда КоллекцияОсновная.Вставить(Элемент.Ключ, Истина); КонецЕсли; КонецЕсли; @@ -318,7 +324,7 @@ Лог.Отладка("Использован системный корневой путь проекта - <%1>", КаталогПроекта); КонецЕсли; - Если Лев(Путь, 1) = "." И КаталогПроекта <> Путь Тогда + Если ЭтоОтносительныйПуть(Путь) И КаталогПроекта <> Путь Тогда Путь = ОбъединитьПути(КаталогПроекта, Путь); Лог.Отладка("Нашли абсолютный путь проекта - <%1>", Путь); КонецЕсли; @@ -329,6 +335,27 @@ КонецФункции // ПолныйПуть() + +Функция ЭтоОтносительныйПуть(Знач Путь) + + // BSLLS:IfElseDuplicatedCodeBlock-off + Если СтрНачинаетсяС(Путь, ".") Тогда + Возврат Истина; + + ИначеЕсли СтрНачинаетсяС(Путь, "/") Тогда + Возврат Ложь; + + ИначеЕсли Сред(Путь, 2, 1) = ":" Тогда + Возврат Ложь; + + Иначе + Возврат Истина; + + КонецЕсли; + // BSLLS:IfElseDuplicatedCodeBlock-on + +КонецФункции + Функция КаталогПроекта() Экспорт ФайлИсточника = Новый Файл(ТекущийСценарий().Источник); Возврат ОбъединитьПути(ФайлИсточника.Путь, "..", ".."); @@ -375,6 +402,27 @@ Возврат ?(Параметры[Ключ1] = Неопределено, ЗначениеПоУмолчанию, Параметры[Ключ1]); КонецФункции +// Получить значение флага по полному и краткому ключу +// +// Параметры: +// Параметры - Соответствие - разобранные параметры командной строки +// КраткийКлючФлага - Строка - Краткий ключ флага (например "-f") +// ПолныйКлючФлага - Строка - Полный ключ флага (например "--force") +// +// Возвращаемое значение: +// Булево - Истина, если в параметрах задано хоть одно значение флага +// +Функция ЕстьФлагКоманды(Параметры, КраткийКлючФлага, ПолныйКлючФлага) Экспорт + + ЗначениеКраткогоФлага = (Параметры[КраткийКлючФлага] = Истина); + ЗначениеПолногоФлага = (Параметры[ПолныйКлючФлага] = Истина); + ЗначениеФлага = ЗначениеКраткогоФлага Или ЗначениеПолногоФлага; + Лог.Отладка("Результат вычисления флага (%1=%2) Или (%3=%4) = %5", + КраткийКлючФлага, ЗначениеКраткогоФлага, ПолныйКлючФлага, ЗначениеПолногоФлага, ЗначениеФлага); + Возврат ЗначениеФлага; + +КонецФункции + // Показать параметры командной строки через Лог.Отладка() // // Параметры: @@ -481,7 +529,7 @@ КонецЕсли; Исключение МенеджерКонфигуратора.Деструктор(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -503,48 +551,154 @@ // Получить стек вызовов методов скриптов с отступами вправо // +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке +// // Возвращаемое значение: // Строка - стек вызовов кода с отступами вправо // -Функция СтекВызовов() Экспорт +Функция СтекВызовов(ИнформацияОбОшибке) Экспорт + + СтекВызовов = ИнформацияОбОшибке.ПолучитьСтекВызовов(); + МассивТекстИсключения = Новый Массив; + МассивТекстИсключения.Добавить("Стек вызовов:"); + + Отступ = ""; + СимволОтступа = " "; + ПервыйКадр = Истина; + Для Каждого КадрСтекаВызовов Из СтекВызовов Цикл + // пропустим первый кадр стека, т.к. он ведет на служебный вызов исключения + Если ПервыйКадр Тогда + ПервыйКадр = Ложь; + Продолжить; + КонецЕсли; - ТекстИсключения = ""; - Попытка - ВызватьИсключение ТекстИсключения; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - СтекВызовов = ИнформацияОбОшибке.ПолучитьСтекВызовов(); - МассивТекстИсключения = Новый Массив; - МассивТекстИсключения.Добавить(ТекстИсключения); - МассивТекстИсключения.Добавить("Стек вызовов:"); - - Отступ = ""; - СимволОтступа = " "; - ПервыйКадр = Истина; - Для Каждого КадрСтекаВызовов Из СтекВызовов Цикл - // пропустим первый кадр стека, т.к. он ведет на служебный вызов исключения - Если ПервыйКадр Тогда - ПервыйКадр = Ложь; - Продолжить; + Отступ = Отступ + СимволОтступа; + + СтрокаСтекТрейса = СтрШаблон( + "%1%2 / Метод %3 / Строка %4", + Отступ, + КадрСтекаВызовов.ИмяМодуля, + КадрСтекаВызовов.Метод, + Формат(КадрСтекаВызовов.НомерСтроки, "ЧГ=") + ); + МассивТекстИсключения.Добавить(СтрокаСтекТрейса); + КонецЦикла; + Результат = СтрСоединить(МассивТекстИсключения, Символы.ПС); + + Возврат Результат; +КонецФункции + +// Подменяет значения параметров значением переменных среды. +// +// Параметры: +// СтрокаПодстановки - Строка - Строка в которую необходимо подставить переменные среды +// Возвращаемое значение: +// Строка - Значение после подстановки переменных среды +// +Функция ПодставитьЗначенияПеременныхСреды(СтрокаПодстановки) + СтрокаРезультат = СтрокаПодстановки; + ПолучитьЛог(); + РВ = Новый РегулярноеВыражение("(?<=\${)([^\s{""]*?)(?=})"); + Совпадения = РВ.НайтиСовпадения(СтрокаПодстановки); + Для каждого Совпадение Из Совпадения Цикл + ИмяПеременнойСреды = Совпадение.Значение; + ЗначениеПеременнойСреды = ПолучитьПеременнуюСреды(ИмяПеременнойСреды); + Если Не ЗначениеЗаполнено(ЗначениеПеременнойСреды) Тогда + Лог.Отладка("Не удалось получить значение переменной среды, или передано пустое значение: %1", ИмяПеременнойСреды); + КонецЕсли; + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "${" + ИмяПеременнойСреды + "}", ЗначениеПеременнойСреды); + Лог.Отладка("Значение переменной среды ""%1"" изменено на ""%2""", ИмяПеременнойСреды, ЗначениеПеременнойСреды); + КонецЦикла; + Возврат СтрокаРезультат; +КонецФункции + +// Дополняет массив (взята типовая процедура) +// +// Параметры: +// МассивПриемник - Массив - массив, в который необходимо добавить значения. +// МассивИсточник - Массив - массив значений для заполнения. +// ТолькоУникальныеЗначения - Булево - если истина, то в массив будут включены только уникальные значения. +// +Процедура ДополнитьМассив(МассивПриемник, Знач МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт + + Если ТолькоУникальныеЗначения Тогда + + УникальныеЗначения = Новый Соответствие; + + Для Каждого Значение Из МассивПриемник Цикл + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + + Для Каждого Значение Из МассивИсточник Цикл + Если УникальныеЗначения[Значение] = Неопределено Тогда + МассивПриемник.Добавить(Значение); + УникальныеЗначения.Вставить(Значение, Истина); КонецЕсли; + КонецЦикла; - Отступ = Отступ + СимволОтступа; + Иначе - СтрокаСтекТрейса = СтрШаблон( - "%1%2 / Метод %3 / Строка %4", - Отступ, - КадрСтекаВызовов.ИмяМодуля, - КадрСтекаВызовов.Метод, - Формат(КадрСтекаВызовов.НомерСтроки, "ЧГ=") - ); - МассивТекстИсключения.Добавить(СтрокаСтекТрейса); + Для Каждого Значение Из МассивИсточник Цикл + МассивПриемник.Добавить(Значение); КонецЦикла; - ТекстИсключения = СтрСоединить(МассивТекстИсключения, Символы.ПС); - КонецПопытки; + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоФайловаяИБ(СтрокаСоединения) Экспорт + Возврат СтрНачинаетсяС(СтрокаСоединения, "/F"); +КонецФункции + +Функция КаталогФайловойИБ(СтрокаСоединения) Экспорт + + Если ЭтоФайловаяИБ(СтрокаСоединения) Тогда + Возврат УбратьКавычкиВокругПути(Сред(СтрокаСоединения, 3)); + Иначе + Возврат ""; + КонецЕсли; - Возврат ТекстИсключения; КонецФункции +Функция ФабрикаМенеджераСборки(ПараметрыКоманды) Экспорт + + ИспользоватьIbcm = ПараметрыКоманды["--ibcmd"]; + СтрокаПодключенияИБ = ПараметрыКоманды["ДанныеПодключения"].ПутьБазы; + + Если Не ИспользоватьIbcm Тогда + Лог.Отладка("Используем конфигуратор."); + Возврат НовыйМенеджерКонфигуратора(); + + ИначеЕсли ЗначениеЗаполнено(СтрокаПодключенияИБ) И Не ОбщиеМетоды.ЭтоФайловаяИБ(СтрокаПодключенияИБ) Тогда + Лог.Информация("Серверные ИБ не поддерживаются ibcmd. Используем конфигуратор."); + Возврат НовыйМенеджерКонфигуратора(); + + Иначе + Лог.Отладка("Используем ibcmd."); + Возврат Новый МенеджерIbcmd(); + + КонецЕсли; + +КонецФункции + +Функция НовыйМенеджерКонфигуратора() Экспорт + Логирование.ПолучитьЛог("oscript.lib.v8runner").УстановитьУровень(Лог.Уровень()); + Возврат Новый МенеджерКонфигуратора(); +КонецФункции + +Функция ЛогКоманды(ДополнительныеПараметры) Экспорт + Возврат ДополнительныеПараметры.Лог; +КонецФункции + +Процедура УстановитьИспользованиеВременнойБазы(ПараметрыКоманды) Экспорт + + ДанныеПодключения = Новый Структура(ПараметрыКоманды["ДанныеПодключения"]); + ДанныеПодключения.ИспользоватьВременнуюБазу = Истина; + ПараметрыКоманды["ДанныеПодключения"] = Новый ФиксированнаяСтруктура(ДанныеПодключения); + +КонецПроцедуры + // из-за особенностей загрузки модуль ОбщиеМетоды грузится раньше ПараметрыСистемы, // поэтому сразу в конце кода модуля использовать ПараметрыСистемы нельзя diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index f371c90a..a8530986 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -30,7 +30,7 @@ // Функция ВерсияПродукта() Экспорт - Версия = "1.11.11"; // присвоение "Версия = " важно для проверки Сонара + Версия = "2.2.2"; // присвоение "Версия = " важно для проверки Сонара Возврат Версия; КонецФункции @@ -87,12 +87,14 @@ мВозможныеКоманды.Вставить("ЗахватитьВХранилище", "lockrepo"); мВозможныеКоманды.Вставить("ПоместитьВХранилище", "commit"); мВозможныеКоманды.Вставить("ОтключитьсяОтХранилища", "unbindrepo"); + мВозможныеКоманды.Вставить("ОтпуститьВХранилище", "unlockrepo"); мВозможныеКоманды.Вставить("СобратьИзИсходниковФайлКонфигурации", "compile"); мВозможныеКоманды.Вставить("РазборкаКонфигурации", "decompile"); мВозможныеКоманды.Вставить("ЗагрузитьФайлКонфигурации", "load"); мВозможныеКоманды.Вставить("ОбъединитьСФайломКонфигурации", "merge"); мВозможныеКоманды.Вставить("ОбновитьКонфигурацию", "update"); + мВозможныеКоманды.Вставить("СравнитьКонфигурации", "compare"); мВозможныеКоманды.Вставить("УправлениеСеансами", "session"); мВозможныеКоманды.Вставить("УправлениеРегламентнымиЗаданиями", "scheduledjobs"); @@ -159,12 +161,14 @@ КлассыРеализацииКоманд[ВозможныеКоманды().ЗахватитьВХранилище] = "КомандаЗахватитьВХранилище"; КлассыРеализацииКоманд[ВозможныеКоманды().ПоместитьВХранилище] = "КомандаПоместитьВХранилище"; КлассыРеализацииКоманд[ВозможныеКоманды().ОтключитьсяОтХранилища] = "КомандаОтключитьсяОтХранилища"; + КлассыРеализацииКоманд[ВозможныеКоманды().ОтпуститьВХранилище] = "КомандаОтпуститьВХранилище"; КлассыРеализацииКоманд[ВозможныеКоманды().СобратьИзИсходниковФайлКонфигурации] = "КомандаСобратьИзИсходников"; КлассыРеализацииКоманд[ВозможныеКоманды().РазборкаКонфигурации] = "КомандаРазборкаКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().ЗагрузитьФайлКонфигурации] = "КомандаЗагрузитьФайлКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().ОбъединитьСФайломКонфигурации] = "КомандаОбъединитьСФайломКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().ОбновитьКонфигурацию] = "КомандаОбновитьКонфигурацию"; + КлассыРеализацииКоманд[ВозможныеКоманды().СравнитьКонфигурации] = "КомандаСравнитьКонфигурации"; КлассыРеализацииКоманд[ВозможныеКоманды().УправлениеСеансами] = "КомандаУправлениеСеансами"; КлассыРеализацииКоманд[ВозможныеКоманды().УправлениеРегламентнымиЗаданиями] = "КомандаУправлениеСеансами"; diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/tasks/oscript.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git a/tests/fixtures/1Cv8.dt b/tests/fixtures/1Cv8.dt new file mode 100644 index 00000000..d7e9a89e Binary files /dev/null and b/tests/fixtures/1Cv8.dt differ diff --git a/tests/fixtures/1cv8.cf b/tests/fixtures/1cv8.cf new file mode 100644 index 00000000..fec9c587 Binary files /dev/null and b/tests/fixtures/1cv8.cf differ diff --git a/tests/fixtures/feature/env.json b/tests/fixtures/feature/env.json index 8e79ebb4..7a0fefb8 100644 --- a/tests/fixtures/feature/env.json +++ b/tests/fixtures/feature/env.json @@ -2,11 +2,11 @@ "$schema": "https://raw.githubusercontent.com/vanessa-opensource/vanessa-runner/develop/vanessa-runner-schema.json", "default": { "--ibconnection":"/F./build/ib", + "--workspace":".", "--db-user":"", "--db-pwd":"" }, "xunit":{ - "--workspace":"./build", "--ibconnection": "/Fbuild/ib", // "--db-user": "Admin", // "--db-pwd": "", @@ -18,7 +18,6 @@ }, "vanessa":{ "--vanessasettings":"./build/feature/vb-conf.json", - "--workspace":"./build", "--additional":"/DisplayAllFunctions" }, "create":{ diff --git a/tests/fixtures/feature/vb-conf.json b/tests/fixtures/feature/vb-conf.json index 918e0af7..10ad7e26 100644 --- a/tests/fixtures/feature/vb-conf.json +++ b/tests/fixtures/feature/vb-conf.json @@ -6,24 +6,24 @@ "$instrumentsRoot/./features/libraries/" ], "ВыполнитьСценарии": "Истина", - "ЗавершитьРаботуСистемы": "Истина", + "ЗавершитьРаботуСистемы": true, "ЗакрытьTestClientПослеЗапускаСценариев": "Истина", "ДелатьЛогВыполненияСценариевВЖР": "Истина", "ДелатьОтчетВФорматеАллюр": "Истина", "ДелатьОтчетВФорматеjUnit": "Истина", "ДелатьОтчетВФорматеCucumberJson": "Истина", - "ДелатьЛогВыполненияСценариевВТекстовыйФайл": "Истина", + "ДелатьЛогВыполненияСценариевВТекстовыйФайл": true, + "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/vanessaonline.txt", "КаталогOutputAllureБазовый": "$workspaceRoot/allurereport", "КаталогOutputjUnit": "$workspaceRoot/junitreport", "КаталогOutputCucumberJson": "$workspaceRoot/cucumber", "СоздаватьПодкаталогВКаталогеAllureДляЭтойСборки": "Ложь", "ДелатьСкриншотПриВозникновенииОшибки": "Ложь", "КаталогOutputСкриншоты": "$workspaceRoot/allurereport/screen", - "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/vanessaonline.txt", "КомандаСделатьСкриншот": "nircmd.exe savescreenshot ", "ВыгружатьСтатусВыполненияСценариевВФайл": "Истина", - "ДобавлятьКИмениСценарияУсловияВыгрузки": "Ложь", "ПутьКФайлуДляВыгрузкиСтатусаВыполненияСценариев": "$workspaceRoot/buildstatus.log", + "ДобавлятьКИмениСценарияУсловияВыгрузки": "Ложь", "СписокТеговИсключение":[ "IgnoreOnCIMainBuild", "IgnoreOn8310", @@ -37,4 +37,3 @@ "СписокТеговОтбор":[ ] } - \ No newline at end of file diff --git a/tests/xunits/compile.os b/tests/xunits/compile.os new file mode 100644 index 00000000..ff0cdb4b --- /dev/null +++ b/tests/xunits/compile.os @@ -0,0 +1,73 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СобратьКонфигурациюИзИсходниковВТекущуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compile"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьФлаг("--current"); + Исполнитель.ДобавитьФлаг("--noupdate"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка конфигурации из исходников в текущую ИБ завершена."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СобратьКонфигурациюИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compile"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "1Cv8.cf"); + Исполнитель.ДобавитьФлаг("--noupdate"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка конфигурации из исходников в файл cf завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("1Cv8.cf"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/tests/xunits/compileext.os b/tests/xunits/compileext.os new file mode 100644 index 00000000..3b0c5fb7 --- /dev/null +++ b/tests/xunits/compileext.os @@ -0,0 +1,53 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СобратьРасширениеИзИсходниковВТекущуюБазуIbcmd() Экспорт + + // Дано + ИмяРасширения = "РасширениеНовое1"; + + Исполнитель = Новый Тест_ИсполнительКоманд("compileext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.ДобавитьПараметр(КаталогSrc); + Исполнитель.ДобавитьПараметр(ИмяРасширения); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка расширения из исходников завершена."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/tests/xunits/compileexttocfe.os b/tests/xunits/compileexttocfe.os new file mode 100644 index 00000000..c5324f63 --- /dev/null +++ b/tests/xunits/compileexttocfe.os @@ -0,0 +1,73 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СобратьРасширениеИзИсходниковВТекущуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compileexttocfe"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.ДобавитьФлаг("--current"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "./Расширение1.cfe"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка расширения из исходников в текущую ИБ завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("Расширение1.cfe"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СобратьКонфигурациюИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("compileexttocfe"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "Расширение1.cfe"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Сборка расширения из исходников в файл cfe завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("Расширение1.cfe"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/tests/xunits/decompile.os b/tests/xunits/decompile.os new file mode 100644 index 00000000..f13fe92c --- /dev/null +++ b/tests/xunits/decompile.os @@ -0,0 +1,73 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_РазобратьТекущуюКонфигурациюНаИсходникиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("decompile"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.УстановитьКонтекстИБИзФайловКонфигурации(КаталогSrc); + Исполнитель.ДобавитьПараметр("--out", "src"); + Исполнитель.ДобавитьФлаг("--current"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Разборка конфигурации текущей ИБ на исходники завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Configuration.xml"); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Catalogs/Справочник1.xml"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_РазобратьФайлКонфигурацииНаИсходникиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("decompile"); + ФайлCf = Исполнитель.ПутьТестовыхДанных("1Cv8.cf"); + Исполнитель.ДобавитьПараметр("--in", ФайлCf); + Исполнитель.ДобавитьПараметр("--out", "src"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Разборка cf-файла на исходники завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Configuration.xml"); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Catalogs/Справочник1.xml"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/decompileext.os b/tests/xunits/decompileext.os new file mode 100644 index 00000000..d616bd69 --- /dev/null +++ b/tests/xunits/decompileext.os @@ -0,0 +1,56 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_РазобратьРасширениеНаИсходникиIbcmd() Экспорт + + // Дано + ИмяРасширения = "РасширениеНовое1"; + + Исполнитель = Новый Тест_ИсполнительКоманд("decompileext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cfe"); + Исполнитель.СоздатьРасширениеИзФайлов(ИмяРасширения, КаталогSrc); + + Исполнитель.ДобавитьПараметр(ИмяРасширения); + Исполнитель.ДобавитьПараметр("src"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Разборка расширения на исходники завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Configuration.xml"); + Исполнитель.ОжидаемЧтоФайлСуществует("src/Ext/ManagedApplicationModule.bsl"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/dump.os b/tests/xunits/dump.os new file mode 100644 index 00000000..a668d686 --- /dev/null +++ b/tests/xunits/dump.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьИнформационноюБазуВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("dump"); + Исполнитель.ДобавитьПараметр("1Cv8.dt"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Выгрузка информационной базы в dt завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("1Cv8.dt"); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/init-dev.os b/tests/xunits/init-dev.os new file mode 100644 index 00000000..70b14ae2 --- /dev/null +++ b/tests/xunits/init-dev.os @@ -0,0 +1,100 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_СоздатьПустуюФайловуюБазуIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана пустая база данных."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из исходников."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзФайлаВыгрузкиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + ФайлDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр("--dt", ФайлDt); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из файла выгрузки."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьФайловуюБазуИзФайлаКонфигурацииIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("init-dev"); + ФайлCf = Исполнитель.ПутьТестовыхДанных("1cv8.cf"); + Исполнитель.ДобавитьПараметр("--cf", ФайлCf); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Создана информационная база из файла конфигурации."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/load.os b/tests/xunits/load.os new file mode 100644 index 00000000..2af3feb0 --- /dev/null +++ b/tests/xunits/load.os @@ -0,0 +1,49 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ЗагузитьКонфигурациюИзФайлаIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("load"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + ФайлCf = Исполнитель.ПутьТестовыхДанных("1cv8.cf"); + Исполнитель.ДобавитьПараметр("--src", ФайлCf); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Загрузка конфигурации из cf завершена."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/loadext.os b/tests/xunits/loadext.os new file mode 100644 index 00000000..c6611ebf --- /dev/null +++ b/tests/xunits/loadext.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ЗагузитьРасширениеИзФайлаIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("loadext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + ФайлCfe = Исполнитель.ПутьТестовыхДанных("Extension1.cfe"); + Исполнитель.ДобавитьПараметр("--file", ФайлCfe); + Исполнитель.ДобавитьПараметр("--extension", "Расширение1"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Загрузка расширения из cfe завершена."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/restore.os b/tests/xunits/restore.os new file mode 100644 index 00000000..7e38145e --- /dev/null +++ b/tests/xunits/restore.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьИнформационноюБазуВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("restore"); + ФайлDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр(ФайлDt); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Загрузка информационной базы из dt завершена."); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/unload.os b/tests/xunits/unload.os new file mode 100644 index 00000000..f51d965b --- /dev/null +++ b/tests/xunits/unload.os @@ -0,0 +1,50 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьКонфигурациюВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("unload"); + Исполнитель.ДобавитьПараметр("1Cv8.cf"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Выгрузка конфигурации в cf завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("1Cv8.cf"); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/unloadext.os b/tests/xunits/unloadext.os new file mode 100644 index 00000000..bb3ce417 --- /dev/null +++ b/tests/xunits/unloadext.os @@ -0,0 +1,51 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьРасширениеВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("unloadext"); + Исполнитель.ДобавитьПараметр("РасширениеНовое1.cfe"); + Исполнитель.ДобавитьПараметр("Расширение1"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.СоздатьПустоеРасширение("Расширение1", "Расш1_"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Выгрузка расширения в cfe завершена."); + Исполнитель.ОжидаемЧтоФайлСуществует("РасширениеНовое1.cfe"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/update-dev.os b/tests/xunits/update-dev.os new file mode 100644 index 00000000..3c374f9a --- /dev/null +++ b/tests/xunits/update-dev.os @@ -0,0 +1,143 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать gitrunner +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ОбновитьФайловуюБазуИзИсходниковIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("update-dev"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.ДобавитьПараметр("--src", КаталогSrc); + Исполнитель.ДобавитьПараметр("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Информационная база обновлена из исходников."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОбновитьФайловуюБазуИзФайлаВыгрузкиIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("update-dev"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + ФайлDt = Исполнитель.ПутьТестовыхДанных("1cv8.dt"); + Исполнитель.ДобавитьПараметр("--dt", ФайлDt); + Исполнитель.ДобавитьПараметр("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Информационная база обновлена из файла выгрузки."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОбновитьФайловуюБазуИнкрементальноIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("update-dev"); + УстановитьКонтекстИнкрементальнойЗагрузки(Исполнитель); + Исполнитель.ДобавитьПараметр("--src", "src/cf"); + Исполнитель.ДобавитьПараметр("--git-increment"); + Исполнитель.ДобавитьПараметр("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + //ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(Исполнитель.КаталогКоманды(), ".git")); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Будет выполнена инкрементальная загрузка"); + Исполнитель.ОжидаемЧтоВыводСодержит("ManagedApplicationModule.bsl"); + + Исполнитель.ОжидаемЧтоВыводСодержит("Информационная база обновлена из исходников"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление конфигурации БД завершено."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьТекст(ИмяФайла, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); + ЗаписьТекста.ЗаписатьСтроку(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Процедура УстановитьКонтекстИнкрементальнойЗагрузки(Исполнитель) + + КаталогПроекта = Исполнитель.КаталогКоманды(); + КаталогИсходников = ОбъединитьПути(КаталогПроекта, "src", "cf"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + + ФС.КопироватьСодержимоеКаталога(КаталогSrc, КаталогИсходников); + + Репозиторий = Новый ГитРепозиторий(); + Репозиторий.УстановитьРабочийКаталог(КаталогПроекта); + Репозиторий.Инициализировать(); + + _gitignore = ОбъединитьПути(КаталогПроекта, ".gitignore"); + ЗаписатьТекст(_gitignore, "lastUploadedCommit.txt"); + + Репозиторий.ДобавитьФайлВИндекс("."); + Репозиторий.Закоммитить("first commit"); + + ПараметрыКоманды = Новый Массив; + ПараметрыКоманды.Добавить("rev-parse"); + ПараметрыКоманды.Добавить("--short"); + ПараметрыКоманды.Добавить("HEAD"); + Репозиторий.ВыполнитьКоманду(ПараметрыКоманды); + ПоследнийКоммит = Репозиторий.ПолучитьВыводКоманды(); + + lastUploadedCommit = ОбъединитьПути(КаталогИсходников, "lastUploadedCommit.txt"); + ЗаписатьТекст(lastUploadedCommit, ПоследнийКоммит); + + Исполнитель.УстановитьКонтекстИБИзФайловКонфигурации(КаталогИсходников); + + ManagedApplicationModule = ОбъединитьПути(КаталогИсходников, "Ext", "ManagedApplicationModule.bsl"); + ЗаписатьТекст(ManagedApplicationModule, "Процедура ПриНачалеРаботыСистемы() КонецПроцедуры"); + Репозиторий.ДобавитьФайлВИндекс("."); + Репозиторий.Закоммитить("second commit"); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/updatedb.os b/tests/xunits/updatedb.os new file mode 100644 index 00000000..ba6f44d9 --- /dev/null +++ b/tests/xunits/updatedb.os @@ -0,0 +1,48 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ВыгрузитьИнформационноюБазуВФайлIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("updatedb"); + КаталогSrc = Исполнитель.ПутьТестовыхДанных("cf"); + Исполнитель.УстановитьКонтекстИБИзФайловКонфигурации(КаталогSrc); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление конфигурации базы данных завершено."); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git a/tests/xunits/updateext.os b/tests/xunits/updateext.os new file mode 100644 index 00000000..cdbed212 --- /dev/null +++ b/tests/xunits/updateext.os @@ -0,0 +1,68 @@ +#Использовать asserts +#Использовать tempfiles +#Использовать "utils" +#Использовать "..\.." + +#Область ОписаниеПеременных + +Перем НакопленныеВременныеФайлы; // фиксация накопленных времнных файлов для сброса + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +&Тест +Процедура ТестДолжен_ОбновитьРасширение() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("updateext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.СоздатьПустоеРасширение("Расширение1", "Расш1_"); + Исполнитель.ДобавитьПараметр("Расширение1"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется версия платформы"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление базы данных расширения завершено."); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОбновитьРасширениеIbcmd() Экспорт + + // Дано + Исполнитель = Новый Тест_ИсполнительКоманд("updateext"); + Исполнитель.УстановитьКонтекстПустаяИБ(); + Исполнитель.СоздатьПустоеРасширение("Расширение1", "Расш1_"); + Исполнитель.ДобавитьПараметр("Расширение1"); + Исполнитель.ДобавитьФлаг("--ibcmd"); + + // Когда + Исполнитель.ВыполнитьКоманду(); + + // Тогда + Исполнитель.ОжидаемЧтоВыводСодержит("Используется ibcmd"); + Исполнитель.ОжидаемЧтоВыводСодержит("Обновление базы данных расширения завершено."); + +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПередЗапускомТеста() Экспорт + + НакопленныеВременныеФайлы = ВременныеФайлы.Файлы(); + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + + ВременныеФайлы.УдалитьНакопленныеВременныеФайлы(НакопленныеВременныеФайлы); + +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" new file mode 100644 index 00000000..4a3ed034 --- /dev/null +++ "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\222\321\213\320\262\320\276\320\264\320\233\320\276\320\263\320\260.os" @@ -0,0 +1,38 @@ +#Использовать tempfiles + +Перем ТекстовыйДокумент; + +#Область ПрограммныйИнтерфейс + +Функция ВыводЛога() Экспорт + Возврат ТекстовыйДокумент.ПолучитьТекст(); +КонецФункции + +#КонецОбласти + +#Область InterfaceImplementaion + +Процедура ВывестиСобытие(Знач СобытиеЛога) Экспорт + + Сообщение = СобытиеЛога.ПолучитьФорматированноеСообщение(); + ТекстовыйДокумент.ДобавитьСтроку(Сообщение); + +КонецПроцедуры + +Процедура Закрыть() Экспорт +КонецПроцедуры + +// Устанавливает свойство аппендера, заданное в конфигурационном файле +// +Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт +КонецПроцедуры // УстановитьСвойство() + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта() + ТекстовыйДокумент = Новый ТекстовыйДокумент(); +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" new file mode 100644 index 00000000..85de8a6c --- /dev/null +++ "b/tests/xunits/utils/classes/\320\242\320\265\321\201\321\202_\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -0,0 +1,139 @@ +#Использовать "..\..\..\.." +#Использовать cmdline +#Использовать ibcmdrunner +#Использовать asserts + +#Область ОписаниеПеременных + +Перем Команда; +Перем Аргументы; +Перем СпособВывода; +Перем КаталогКоманды; +Перем УправлениеИБ; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ДобавитьПараметр(ИмяПараметра, ЗначениеПараметра = Неопределено) Экспорт + + Аргументы.Добавить(ИмяПараметра); + Если ЗначениеПараметра <> Неопределено Тогда + Аргументы.Добавить(ЗначениеПараметра); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьФлаг(ИмяФлага) Экспорт + Аргументы.Добавить(ИмяФлага); +КонецПроцедуры + +Процедура ВыполнитьКоманду() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + ПараметрыСистемы.ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; + + ДобавитьПараметр("--root", КаталогКоманды); + ДобавитьФлаг("--nocacheuse"); + + МенеджерКомандПриложения.РегистраторКоманд(ПараметрыСистемы); + + ДобавитьСпособВывода(МенеджерКомандПриложения); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + МенеджерКомандПриложения.ЗарегистрироватьКоманды(Парсер); + ПараметрыКоманды = Парсер.Разобрать(Аргументы); + МенеджерКомандПриложения.ВыполнитьКоманду(Команда, ПараметрыКоманды.ЗначенияПараметров); + +КонецПроцедуры + +Функция ЛогКоманды() Экспорт + Возврат СпособВывода; +КонецФункции + +Функция КаталогКоманды() Экспорт + Возврат КаталогКоманды; +КонецФункции + +Функция ПутьТестовыхДанных(Путь1, Путь2 = Неопределено, Путь3 = Неопределено) Экспорт + + КаталогШаблонов = ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures"); + Возврат ОбъединитьПути(КаталогШаблонов, Путь1, Путь2, Путь3); + +КонецФункции + +Процедура ОжидаемЧтоВыводСодержит(Строка) Экспорт + Ожидаем.Что(СпособВывода.ВыводЛога()).Содержит(Строка); +КонецПроцедуры + +Процедура ОжидаемЧтоФайлСуществует(ПутьКФайлу) Экспорт + + ПолныйПуть = ОбъединитьПути(КаталогКоманды, ПутьКФайлу); + Файл = Новый Файл(ПолныйПуть); + ФайлСуществует = Файл.Существует() И Файл.ЭтоФайл(); + Сообщение = СтрШаблон("Ожидали, что файл %1 существует", ПутьКФайлу); + + Ожидаем.Что(ФайлСуществует, Сообщение).ЭтоИстина(); + +КонецПроцедуры + +Процедура УстановитьКонтекстПустаяИБ() Экспорт + + КаталогПустойИБ = ОбъединитьПути(КаталогКоманды, "db-data"); + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогПустойИБ); + УправлениеИБ.СоздатьИБИзФайлаВыгрузки(""); + + СтрокаСоединения = СтрШаблон("/F""%1""", КаталогПустойИБ); + ДобавитьПараметр("--ibconnection", СтрокаСоединения); + +КонецПроцедуры + +Процедура УстановитьКонтекстИБИзФайловКонфигурации(Каталог) Экспорт + + КаталогИБ = ОбъединитьПути(КаталогКоманды, "db-data"); + + УправлениеИБ = Новый УправлениеИБ; + УправлениеИБ.УстановитьПараметрыФайловойИБ(КаталогИБ); + УправлениеИБ.СоздатьИБИзФайловКонфигурации(Каталог); + + СтрокаСоединения = СтрШаблон("/F""%1""", КаталогИБ); + ДобавитьПараметр("--ibconnection", СтрокаСоединения); + +КонецПроцедуры + +Процедура СоздатьПустоеРасширение(ИмяРасширения, ПрефиксИмен) Экспорт + УправлениеИБ.СоздатьРасширение(ИмяРасширения, ПрефиксИмен); +КонецПроцедуры + +Процедура СоздатьРасширениеИзФайлов(ИмяРасширения, КаталогИсходников) Экспорт + УправлениеИБ.ЗагрузитьКонфигурациюИзФайлов(КаталогИсходников, ИмяРасширения); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриСозданииОбъекта(КомандаПриложения) + + Команда = КомандаПриложения; + Аргументы = Новый Массив; + Аргументы.Добавить(Команда); + + КаталогКоманды = ВременныеФайлы.СоздатьКаталог(); + + СпособВывода = Новый Тест_ВыводЛога(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьСпособВывода(МенеджерКомандПриложения) + Лог = МенеджерКомандПриложения.Лог(); + Лог.ДобавитьСпособВывода(СпособВывода); +КонецПроцедуры + +#КонецОбласти diff --git a/tools/oscript-template.cfg b/tools/oscript-template.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/tools/oscript-template.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git a/tools/oscript.cfg b/tools/oscript.cfg new file mode 100644 index 00000000..92b1258f --- /dev/null +++ b/tools/oscript.cfg @@ -0,0 +1,2 @@ +lib.system=../oscript_modules +lib.additional=../oscript_modules diff --git a/tools/runner.os b/tools/runner.os index 0b5f1ced..eda8036c 100644 --- a/tools/runner.os +++ b/tools/runner.os @@ -16,11 +16,9 @@ Перем Лог; Перем КодВозврата; Перем мВозможныеКоманды; -Перем ЭтоWindows; Перем КаталогЛогов; Перем КорневойПутьПроекта; Перем ЭтоЗапускВКоманднойСтроке; -Перем ОтключитьОтладочныеЛоги; Перем УпаковщикВнешнихОбработок; Функция Версия() Экспорт @@ -167,20 +165,17 @@ Функция ЭтоПутьКИсходнымКодамОбработок(ПутьКПапке) - Результат = Ложь; - МассивИмен = НайтиФайлы(ПутьКПапке, "*.xml", Ложь); Для Каждого Элемент Из МассивИмен Цикл ЧтениеТекста = Новый ЧтениеТекста(Элемент.ПолноеИмя); - Содержание = ЧтениеТекста.Прочитать(); + СодержаниеВрег = Врег(ЧтениеТекста.Прочитать()); ЧтениеТекста.Закрыть(); - Если Найти(Врег(Содержание), Врег("