├── var
└── log
│ └── .gitkeep
├── settings
├── repo_connect_test.xml
└── merge.xml
├── .gitignore
├── bat
├── close_config_BASE.bat
├── commands
│ ├── close_config.yaml
│ └── update_all.yaml
└── update_all.bat
├── src
├── Модули
│ ├── ПрообразованияТипов.os
│ ├── РаботаСКомандами.os
│ ├── Общий.os
│ └── РаботаСФайлами.os
├── cli
│ └── Классы
│ │ ├── cli_ОписаниеПриложения.os
│ │ └── cli_ЗапускПриложения.os
├── core
│ └── Классы
│ │ ├── Дуб_Соединитель.os
│ │ ├── ФиксаторОшибок.os
│ │ ├── ПервыйЗапуск.os
│ │ ├── ПодставлятельМетодовВКоманды.os
│ │ ├── Телеграм.os
│ │ ├── УправлятельКластераАсинх.os
│ │ ├── КонтрольРасписания.os
│ │ ├── Завершатель.os
│ │ ├── УправлятельКластера.os
│ │ ├── УправлятельГит.os
│ │ ├── УправлятельКонфигуратора.os
│ │ ├── УправлятельХранилища.os
│ │ ├── УправлятельSQL.os
│ │ ├── Настройки.os
│ │ ├── ОбработкаРезультатаSQL.os
│ │ ├── Логирователь.os
│ │ ├── Выполнитель.os
│ │ ├── Запускатель.os
│ │ └── ЗаполнительНастроек.os
├── commands
│ └── Классы
│ │ ├── КомандаПроверитьБлокировкуИБ.os
│ │ ├── КомандаПоУмолчанию.os
│ │ ├── КомандаПроверитьНаличиеАктивныхСеансовИБ.os
│ │ ├── КомандаПоказатьНачало.os
│ │ ├── КомандаУстановитьПаузу.os
│ │ ├── КомандаВыполнитьКомандныйФайл.os
│ │ ├── КомандаПоказатьЗавершение.os
│ │ ├── КомандаВыполнитьРасширенныйСинтаксическийКонтроль.os
│ │ ├── КомандаВыгрузитьКонфигурациюВФайл.os
│ │ ├── КомандаВыполнитьСинтаксическийКонтроль.os
│ │ ├── КомандаПолучитьВерсиюКонфигурацииИзХранилища.os
│ │ ├── КомандаСнятьБлокировкуИБ.os
│ │ ├── КомандаОбъединитьКонфигурациюСФайлом.os
│ │ ├── КомандаОтключитьКонфигураторОтИнформационнойБазы.os
│ │ ├── КомандаЗадатьВопрос.os
│ │ ├── КомандаПоместитьИзмененияОбъектовВХранилище.os
│ │ ├── КомандаВыполнитьСкриптSQL.os
│ │ ├── КомандаВыполнитьЗапросSQL.os
│ │ ├── КомандаЗапуститьВРежимеПредприятия.os
│ │ ├── КомандаЗаблокироватьИБ.os
│ │ ├── КомандаОтменитьЗахватОбъектовВХранилище.os
│ │ ├── КомандаПоказатьПриветствие.os
│ │ ├── КомандаЗагрузитьРасширениеИзФайла.os
│ │ ├── КомандаЗагрузитьРасширениеВРежимеПредприятия.os
│ │ ├── КомандаЗагрузитьКонфигурациюИзХранилища.os
│ │ ├── КомандаЗахватитьОбъектыВХранилище.os
│ │ ├── КомандаПодключитьсяКХранилищу.os
│ │ ├── КомандаЗахватитьОбъектыВХранилищеПоСпискуИзФайла.os
│ │ ├── КомандаЗапуститьВнешниеОбработкиИзРепозитория.os
│ │ ├── КомандаОтключитьСеансыИнформационнойБазы.os
│ │ └── КомандаОбновитьКонфигурациюБазыДанных.os
├── templates
│ └── Классы
│ │ ├── СкриптыSQL.os
│ │ └── Emoji.os
└── import
│ └── Классы
│ └── КомандныйФайлSR.os
├── .vscode
├── tasks.json
└── launch.json
├── logos.cfg
├── sync_repo.os
├── autumn-properties_example.yml
├── .bsl-language-server.json
├── install.bat
├── config_example.yaml
├── Jenkinsfile
└── README.md
/var/log/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/settings/repo_connect_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.cf
2 | *.log
3 | *.txt
4 |
5 | autumn-properties.yml
6 | metadata_merge.xml
7 |
8 | # example
9 | !settings/metadata_example.txt
10 |
11 | # config
12 | bat/config/*.yaml
13 | !bat/config/config_task.yaml
14 |
--------------------------------------------------------------------------------
/bat/close_config_BASE.bat:
--------------------------------------------------------------------------------
1 | CHCP 65001
2 | @echo Off
3 |
4 | cd ..
5 |
6 | echo Работа с конфигуратором
7 | @set command=--Commands \bat\commands\close_config.yaml
8 | oscript "sync_repo.os" --ИдентификаторБазы "BASE1" %command%
9 |
10 | PAUSE
--------------------------------------------------------------------------------
/src/Модули/ПрообразованияТипов.os:
--------------------------------------------------------------------------------
1 | Функция БулевоИзСтроки(Значение) Экспорт
2 |
3 | Если Значение <> Неопределено Тогда
4 | ЗначениеПреобразованное = Булево(Значение);
5 | Иначе
6 | ЗначениеПреобразованное = Ложь;
7 | КонецЕсли;
8 |
9 | Возврат ЗначениеПреобразованное;
10 |
11 | КонецФункции
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "bsl",
6 | "command": "oscript",
7 | "args": [
8 | "${file}"
9 | ],
10 | "problemMatcher": [
11 | "$OneScript Linter"
12 | ],
13 | "group": "build",
14 | "label": "oscript: OneScript: run"
15 | }
16 | ]
17 | }
--------------------------------------------------------------------------------
/logos.cfg:
--------------------------------------------------------------------------------
1 | logger.oscript.lib.stream=INFO, stream
2 | appender.stream=ВыводЛогаВФайл
3 | appender.stream.file=var\log\stream.log
4 | logger.oscript.lib.v8runner=INFO, v8runner
5 | appender.v8runner=ВыводЛогаВФайл
6 | appender.v8runner.file=var\log\v8runner.log
7 | logger.oscript.lib.gitrunner=INFO, gitrunner
8 | appender.gitrunner=ВыводЛогаВФайл
9 | appender.gitrunner.file=var\log\gitrunner.log
--------------------------------------------------------------------------------
/sync_repo.os:
--------------------------------------------------------------------------------
1 | #Использовать autumn
2 | #Использовать autumn-cli
3 | #Использовать autumn-async
4 |
5 | #Использовать "src/core"
6 | #Использовать "src/commands"
7 | #Использовать "src/templates"
8 | #Использовать "src/cli"
9 | #Использовать "src/import"
10 |
11 | #Область Основной_блок
12 |
13 | Поделка = Новый Поделка();
14 | Поделка.ЗапуститьПриложение();
15 |
16 | #КонецОбласти
17 |
--------------------------------------------------------------------------------
/src/cli/Классы/cli_ОписаниеПриложения.os:
--------------------------------------------------------------------------------
1 | Функция ИмяПриложения() Экспорт
2 | Возврат "sync_repo";
3 | КонецФункции
4 |
5 | Функция ПолноеИмяПриложения() Экспорт
6 | Возврат "Автоматизация обновления конфигурации 1С";
7 | КонецФункции
8 |
9 | Функция ВерсияПриложения() Экспорт
10 | Возврат "2.12.1";
11 | КонецФункции
12 |
13 | &Желудь("ОписаниеКонсольногоПриложения")
14 | &Верховный
15 | Процедура ПриСозданииОбъекта()
16 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/Дуб_Соединитель.os:
--------------------------------------------------------------------------------
1 | &Завязь(Тип = "Массив")
2 | Функция КомандыПоКлючу(&Пластилин(Значение = "Команда", Тип = "Массив") Команды) Экспорт
3 | КомандыПоКлючу = Новый Соответствие();
4 | Для Каждого Команда Из Команды Цикл
5 | КомандыПоКлючу.Вставить(ВРег(Команда.Ключ()), Команда);
6 | КонецЦикла;
7 |
8 | Возврат КомандыПоКлючу;
9 | КонецФункции
10 |
11 | &Дуб
12 | Процедура ПриСозданииОбъекта()
13 |
14 | КонецПроцедуры
--------------------------------------------------------------------------------
/settings/merge.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ConfigurationsNotRelated
5 | true
6 | false
7 |
8 |
--------------------------------------------------------------------------------
/src/Модули/РаботаСКомандами.os:
--------------------------------------------------------------------------------
1 | Функция ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, Желудь) Экспорт // BSLLS:Typo-off
2 |
3 | ДанныеРезультата = Новый Структура("Результат, ОписаниеОшибки, ПараметрыКоманды",
4 | Ложь,
5 | "",
6 | ПараметрыКоманды);
7 |
8 | Попытка
9 | ДанныеРезультата.Результат = Желудь.ВыполнитьКоманду(ПараметрыКоманды);
10 | Исключение
11 | ДанныеРезультата.ОписаниеОшибки = ОписаниеОшибки();
12 | КонецПопытки;
13 |
14 | Возврат ДанныеРезультата;
15 |
16 | КонецФункции
17 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Отладка 1Script",
9 | "type": "oscript",
10 | "request": "launch",
11 | "program": "${file}",
12 | "args": [],
13 | "cwd": "${workspaceRoot}",
14 | "env": {},
15 | "runtimeExecutable": null,
16 | "runtimeArgs": [],
17 | "debugPort": 2801
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПроверитьБлокировкуИБ.os:
--------------------------------------------------------------------------------
1 | // ПроверитьБлокировкуИБ
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем КомандаЗаблокироватьИБ;
6 |
7 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт
8 | ПараметрыКоманды.Вставить("Проверка", Истина);
9 | Возврат КомандаЗаблокироватьИБ.ВыполнитьКоманду(ПараметрыКоманды);
10 | КонецФункции
11 |
12 | &Асинх
13 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
14 |
15 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
16 |
17 | КонецФункции
18 |
19 | &Желудь
20 | &Прозвище("Команда")
21 | Процедура ПриСозданииОбъекта()
22 |
23 | КонецПроцедуры
--------------------------------------------------------------------------------
/bat/commands/close_config.yaml:
--------------------------------------------------------------------------------
1 | Команды: &commands
2 | Команды:
3 | Параметры:
4 | ОтправлятьСообщенияВТелеграм: true
5 | Приветствие: "Закрываю конфигуратор #ИмяБазы через #Пауза"
6 | Окончание: "Конфигуратор базы #ИмяБазы закрыт"
7 | ТекстВопроса: "Закрыть конфигуратор базы #ИмяБазы?"
8 | Пауза: 300
9 | Команды:
10 | - ЗадатьВопрос
11 | - ПоказатьПриветствие
12 | - УстановитьПаузу
13 | - ОтключитьКонфигураторОтИнформационнойБазы
14 | - ПоказатьЗавершение
15 | BASE1:
16 | <<: *commands
17 | BASE2:
18 | <<: *commands
19 |
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПоУмолчанию.os:
--------------------------------------------------------------------------------
1 | // КомандаПоУмолчанию
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Логирователь; // BSLLS:Typo-off
6 |
7 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт
8 |
9 | ТекстСообщения = "Неизвестная команда - " + ПараметрыКоманды.Ключ;
10 | Логирователь.ВЛог(ТекстСообщения, Истина);
11 | Возврат Истина;
12 |
13 | КонецФункции
14 |
15 | &Асинх
16 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
17 |
18 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
19 |
20 | КонецФункции
21 |
22 | &Верховный
23 | &Желудь
24 | &Прозвище("Команда")
25 | Процедура ПриСозданииОбъекта()
26 |
27 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПроверитьНаличиеАктивныхСеансовИБ.os:
--------------------------------------------------------------------------------
1 | // ПроверитьНаличиеАктивныхСеансовИБ
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем КомандаОтключитьСеансыИнформационнойБазы;
6 |
7 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт
8 | ПараметрыКоманды.Вставить("Проверка", Истина);
9 | Возврат КомандаОтключитьСеансыИнформационнойБазы.ВыполнитьКоманду(ПараметрыКоманды);
10 | КонецФункции
11 |
12 | &Асинх
13 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
14 |
15 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
16 |
17 | КонецФункции
18 |
19 | &Желудь
20 | &Прозвище("Команда")
21 | Процедура ПриСозданииОбъекта()
22 |
23 | КонецПроцедуры
--------------------------------------------------------------------------------
/autumn-properties_example.yml:
--------------------------------------------------------------------------------
1 | Общие:
2 | Ответственный: "Фамилия Имя"
3 | КаталогНастроек: settings
4 | ПутьККаталогуCF: "\\cf"
5 | ПутьККаталогуCFe: "\\cfe"
6 | Файлы:
7 | repo_test: repo_connect_test.xml
8 | merge: merge.xml
9 | metadata: metadata.txt
10 | metadata_merge: metadata_merge.xml
11 | Телеграм:
12 | BotID: ""
13 | Токен: ""
14 | Debug:
15 | ИдентификаторБазы: "REPO"
16 | ФайлНастроек: "tests\\config_debug.yaml"
17 | ФайлКоманд: "tests\\commands_debug.yaml"
18 | ИдентификаторКоманд: "Команды"
19 | # ФайлГрупповыхКоманд: "tests\\group_commands_debug.yaml"
20 | ИдентификаторГрупповыхКоманд: "Запуск"
21 | КаталогСкрипта: "sync_repo"
--------------------------------------------------------------------------------
/src/core/Классы/ФиксаторОшибок.os:
--------------------------------------------------------------------------------
1 | #Использовать "..//../../src/Модули"
2 |
3 | Перем ПутьКФайлу;
4 |
5 | Процедура ЗафиксироватьОшибку(ТекстСообщения) Экспорт
6 | РаботаСФайлами.ДобавитьТекстВФайл(ТекстСообщения, ПутьКФайлу);
7 | КонецПроцедуры
8 |
9 | Процедура Инициализировать(Позиция) Экспорт
10 | ПутьКФайлуЛогов(Позиция);
11 | УдалитьФайлыЛогов();
12 | КонецПроцедуры
13 |
14 | Процедура ПутьКФайлуЛогов(Позиция)
15 |
16 | ПутьКФайлу = ОбъединитьПути(ТекущийКаталог(), "var\errors\" + "error" + "_" + Строка(Позиция) + ".log");
17 |
18 | КонецПроцедуры
19 |
20 | Процедура УдалитьФайлыЛогов()
21 |
22 | Если РаботаСФайлами.ФайлСуществует(ПутьКФайлу) Тогда
23 | УдалитьФайлы(ПутьКФайлу);
24 | КонецЕсли;
25 |
26 | КонецПроцедуры
27 |
28 | &Желудь
29 | Процедура ПриСозданииОбъекта()
30 |
31 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/ПервыйЗапуск.os:
--------------------------------------------------------------------------------
1 | #Использовать "..//../../src/Модули"
2 | // BSLLS:LatinAndCyrillicSymbolInWord-off
3 |
4 | Процедура Инициализация() Экспорт
5 |
6 | Инициализировать_Autumn_properties_example();
7 |
8 | КонецПроцедуры
9 |
10 | Процедура Инициализировать_Autumn_properties_example()
11 | ИнициализироватьФайлОтБазового("autumn-properties.yml");
12 | КонецПроцедуры
13 |
14 | Процедура ИнициализироватьФайлОтБазового(ИмяФайла)
15 |
16 | ПутьКФайлу = ОбъединитьПути(ТекущийКаталог(), ИмяФайла);
17 |
18 | Если РаботаСФайлами.ФайлСуществует(ПутьКФайлу) Тогда
19 | Возврат;
20 | КонецЕсли;
21 |
22 | БазовыйФайл = СтрЗаменить(ИмяФайла, ".y", "_example.y");
23 | ПутьКБазовому = ОбъединитьПути(ТекущийКаталог(), БазовыйФайл);
24 |
25 | КопироватьФайл(ПутьКБазовому, ПутьКФайлу);
26 |
27 | КонецПроцедуры
28 |
29 | &Желудь
30 | Процедура ПриСозданииОбъекта()
31 |
32 | КонецПроцедуры
--------------------------------------------------------------------------------
/.bsl-language-server.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json",
3 | "language": "ru",
4 | "diagnostics":
5 | {
6 | "computeTrigger": "onType",
7 | "parameters":
8 | {
9 | "LineLength":
10 | {
11 | "maxLineLength": 120
12 | },
13 | "NumberOfOptionalParams":
14 | {
15 | "maxOptionalParamsCount": 6
16 | },
17 | "CommentedCode":
18 | {
19 | "threshold": 0.9,
20 | "exclusionPrefixes": ""
21 | },
22 | "CognitiveComplexity":
23 | {
24 | "complexityThreshold": 20,
25 | "checkModuleBody": true
26 | },
27 | "MissingVariablesDescription": false,
28 | "MethodSize": false,
29 | "MissingReturnedValueDescription": {
30 | "allowShortDescriptionReturnValues": true
31 | },
32 | "MissingParameterDescription": false,
33 | "IfConditionComplexity":
34 | {
35 | "maxIfConditionComplexity": 5
36 | }
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/bat/update_all.bat:
--------------------------------------------------------------------------------
1 | @echo Off
2 |
3 | CHCP 65001
4 | set /p var=Запустить полное обновление?[Y/N]:
5 | if %var%== Y goto start
6 | if not %var%== Y exit
7 |
8 | :start
9 |
10 | cd ..
11 |
12 |
13 | CHCP 65001
14 | echo Обновление
15 | @set command_update=--Commands \bat\commands\update_all.yaml
16 | oscript "sync_repo.os" --ИдентификаторБазы "REPO" %command_update% --ИдентификаторКоманд "Уведомление"
17 | if ERRORLEVEL = 1 goto error
18 | oscript "sync_repo.os" --ИдентификаторБазы "REPO" %command_update%
19 | if ERRORLEVEL = 1 goto error
20 | oscript "sync_repo.os" --ИдентификаторБазы "BASE1" %command_update%
21 | if ERRORLEVEL = 1 goto error
22 |
23 | CHCP 866
24 | @set groupCommand=--GroupCommands \bat\commands\update_all.yaml
25 | oscript "sync_repo.os" %groupCommand%
26 |
27 | CHCP 65001
28 | goto end
29 |
30 | :error
31 | CHCP 65001
32 | echo ОШИБКА - Получен ненулевой код возврата %ERRORLEVEL%. Выполнение скрипта остановлено!
33 |
34 | :end
35 | PAUSE
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПоказатьНачало.os:
--------------------------------------------------------------------------------
1 | // ПоказатьНачало
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем Emoji;
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
14 |
15 | Начало = ПараметрыКоманды.Параметры.Получить("Начало");
16 | Если Начало = Неопределено Тогда
17 | Начало = Настройки.ПараметрыКоманд.Начало;
18 | КонецЕсли;
19 |
20 | Если Не ЗначениеЗаполнено(Начало) Тогда
21 | Логирователь.ВЛог("Не заполнен текст начала");
22 | Возврат Ложь;
23 | КонецЕсли;
24 |
25 | Логирователь.ВЛог(Начало, , Истина, , Emoji.Начало());
26 | Возврат Истина;
27 |
28 | КонецФункции
29 |
30 | &Асинх
31 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
32 |
33 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
34 |
35 | КонецФункции
36 |
37 | &Желудь
38 | &Прозвище("Команда")
39 | Процедура ПриСозданииОбъекта()
40 |
41 | КонецПроцедуры
--------------------------------------------------------------------------------
/install.bat:
--------------------------------------------------------------------------------
1 | CHCP 65001
2 | @Echo Off
3 |
4 | @Set OneScript=c:\Program Files\OneScript\bin
5 |
6 | @If not Exist "%OneScript%\*.*" (
7 | goto OneScript32
8 | ) Else (
9 | goto opm_install
10 | )
11 |
12 | :OneScript32
13 | @Set OneScript=c:\Program Files (x86)\OneScript\bin
14 | @If not Exist "%OneScript%\*.*" (
15 | Echo Установи oscript - https://oscript.io/docs/page/install
16 | goto end
17 | )
18 |
19 | :opm_install
20 |
21 | chdir /d %OneScript%
22 |
23 | start cmd /C opm update --all
24 | timeout 15
25 |
26 | start cmd /C opm install v8runner
27 | start cmd /C opm install cmdline
28 | start cmd /C opm install logos
29 | start cmd /C opm install v8rac
30 | start cmd /C opm install configor
31 | start cmd /C opm install messenger
32 | start cmd /C opm install 1commands
33 | start cmd /C opm install v8storage
34 | start cmd /C opm install gui
35 | start cmd /C opm install autumn
36 | start cmd /C opm install autumn-logos
37 | start cmd /C opm install autumn-cli
38 | start cmd /C opm install autumn-async
39 | start cmd /C opm install sql
40 |
41 | echo Пакеты установлены
42 |
43 | :end
44 | pause
45 | exit
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаУстановитьПаузу.os:
--------------------------------------------------------------------------------
1 | // УстановитьПаузу
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки; // BSLLS:Typo-off
6 |
7 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
8 |
9 | СекундПаузы = ПараметрыКоманды.Параметры.Получить("Пауза");
10 | Если СекундПаузы = Неопределено Тогда
11 | СекундПаузы = Настройки.ПаузаПередЗапуском; // переопределение настройки из окружения SYNC_REPO_PAUSE_PRED_BUILD
12 | КонецЕсли;
13 | Если СекундПаузы = 0 Тогда
14 | СекундПаузы = Настройки.ПараметрыКоманд.Пауза;
15 | КонецЕсли;
16 |
17 |
18 | Если ЗначениеЗаполнено(СекундПаузы) Тогда
19 |
20 | Миллисекунда = 1000;
21 | Приостановить(СекундПаузы * Миллисекунда);
22 |
23 | КонецЕсли;
24 |
25 | Возврат Истина;
26 |
27 | КонецФункции
28 |
29 | &Асинх
30 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
31 |
32 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
33 |
34 | КонецФункции
35 |
36 | &Желудь
37 | &Прозвище("Команда")
38 | Процедура ПриСозданииОбъекта()
39 |
40 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/templates/Классы/СкриптыSQL.os:
--------------------------------------------------------------------------------
1 |
2 | Функция Получить(Имя, Параметр1 = Неопределено) Экспорт
3 |
4 | Если Имя = "ЗапуститьЗадание" Тогда
5 | Возврат ЗапуститьЗадание(Параметр1);
6 | ИначеЕсли Имя = "АктивностьЗадания" Тогда
7 | Возврат АктивностьЗадания(Параметр1);
8 | ИначеЕсли Имя = "WhoIsActive" Тогда
9 | Возврат WhoIsActive(Параметр1);
10 | Иначе
11 | Возврат Неопределено;
12 | КонецЕсли;
13 |
14 | КонецФункции
15 |
16 | Функция ЗапуститьЗадание(ИмяЗадания) Экспорт
17 |
18 | Возврат "USE msdb
19 | |EXEC sp_start_job N'" + ИмяЗадания + "'";
20 |
21 | КонецФункции
22 |
23 | Функция АктивностьЗадания(ИмяЗадания) Экспорт
24 |
25 | Возврат "USE msdb
26 | |EXEC sp_help_job
27 | |@job_name = N'" + ИмяЗадания + "',
28 | |@job_aspect = N'JOB',
29 | |@execution_status = 1";
30 |
31 | КонецФункции
32 |
33 | Функция WhoIsActive(ИмяБД) Экспорт
34 |
35 | Возврат "exec sp_WhoIsActive
36 | |@filter_type = 'database',
37 | |@filter = '" + ИмяБД + "',
38 | |@output_column_list = '[sql_text][start_time][reads][writes]'";
39 |
40 | КонецФункции
41 |
42 | &Желудь
43 | Процедура ПриСозданииОбъекта()
44 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/ПодставлятельМетодовВКоманды.os:
--------------------------------------------------------------------------------
1 | #Использовать autumn
2 | #Использовать decorator
3 |
4 | Функция ОбработатьЖелудь(Желудь, ОпределениеЖелудя) Экспорт
5 |
6 | Конструктор = ОпределениеЖелудя.Завязь().ДанныеМетода();
7 |
8 | Аннотация = РаботаСАннотациями.ПолучитьАннотацию(Конструктор, "Прозвище");
9 | Если Аннотация = Неопределено Тогда
10 | Возврат Желудь;
11 | КонецЕсли;
12 |
13 | Прозвище = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация);
14 |
15 | Если Прозвище <> "Команда" Тогда
16 | Возврат Желудь;
17 | КонецЕсли;
18 |
19 | Метод_Ключ = Метод_Ключ(ОпределениеЖелудя);
20 |
21 | НовыйЖелудь = Новый ПостроительДекоратора(Желудь)
22 | .Метод(Метод_Ключ)
23 | .Построить();
24 |
25 | Возврат НовыйЖелудь;
26 |
27 | КонецФункции
28 |
29 | Функция Метод_Ключ(ОпределениеЖелудя)
30 |
31 | КлючКоманды = СтрЗаменить(ОпределениеЖелудя.Имя(), "Команда", "");
32 |
33 | Метод = Новый Метод("Ключ")
34 | .Публичный()
35 | .ТелоМетода("Возврат """ + КлючКоманды + """;");
36 |
37 | Возврат Метод;
38 |
39 | КонецФункции
40 |
41 | &Напильник
42 | Процедура ПриСозданииОбъекта()
43 |
44 | КонецПроцедуры
--------------------------------------------------------------------------------
/config_example.yaml:
--------------------------------------------------------------------------------
1 | Общие:
2 | Идентификатор: "Проект"
3 | Ответственный: "Фамилия Имя"
4 | КаталогНастроек: settings
5 | ПутьККаталогуCF: "\\cf"
6 | Файлы:
7 | repo_test: repo_connect_test.xml
8 | merge: merge.xml
9 | metadata: metadata.txt
10 | metadata_merge: metadata_merge.xml
11 | Телеграм:
12 | BotID: ""
13 | Токен: ""
14 | Debug:
15 | ИдентификаторБазы: ""
16 | ИдентификаторКоманд: ""
17 | КаталогСкрипта: "sync_repo"
18 | Платформа:
19 | 1cv8: "C:\\Program Files\\1Cv8\\8.3.20.1838\\bin\\1cv8.exe"
20 | Версия: "8.3.20.1838"
21 | RAS:
22 | Сервер: ""
23 | Порт: ""
24 | Обновление:
25 | Сообщение: "Идет обновление"
26 | КодДоступа: "321"
27 | REPO:
28 | Сервер: ""
29 | Порт: ""
30 | ИмяБазы: ""
31 | Конфигуратор:
32 | Логин: ""
33 | Пароль: ""
34 | Хранилище:
35 | Путь: ""
36 | Логин: ""
37 | Пароль: ""
38 | BASE1:
39 | Сервер: ""
40 | Порт: ""
41 | ИмяБазы: ""
42 | Конфигуратор:
43 | Логин: ""
44 | Пароль: ""
45 | Хранилище:
46 | Путь: ""
47 | Логин: ""
48 | Пароль: ""
--------------------------------------------------------------------------------
/src/core/Классы/Телеграм.os:
--------------------------------------------------------------------------------
1 | #Использовать messenger
2 |
3 | Перем Телеграм;
4 |
5 | &Пластилин
6 | Перем Настройки;
7 |
8 | &Пластилин
9 | Перем Emoji;
10 |
11 | Перем ПозицияСообщения;
12 |
13 | Процедура ВЛог(Знач ТекстСообщения, Ошибка = Ложь, Эмодзи = "") Экспорт
14 |
15 | Если Не Настройки.ПараметрыТелеграм.ОтправлятьСообщения Тогда
16 | Возврат;
17 | КонецЕсли;
18 |
19 | Если Ошибка Тогда
20 | Emoji.ДобавитьВНачалоСтроки(ТекстСообщения, Emoji.Ошибка());
21 | Иначе
22 | Если ЗначениеЗаполнено(Эмодзи) Тогда
23 | Emoji.ДобавитьВНачалоСтроки(ТекстСообщения, Эмодзи);
24 | Иначе
25 | ПозицияСообщения = ПозицияСообщения + 1;
26 | Emoji.ДобавитьВНачалоСтроки(ТекстСообщения, Emoji.Цифра(ПозицияСообщения));
27 | КонецЕсли;
28 | КонецЕсли;
29 |
30 | ТипСообщения = "html";
31 | Телеграм.ОтправитьСообщение("telegram",
32 | Настройки.ПараметрыТелеграм.BotID,
33 | ТекстСообщения, , ТипСообщения);
34 |
35 | КонецПроцедуры
36 |
37 | Процедура УстановитьТокен(Токен) Экспорт
38 | Телеграм.ИнициализироватьТранспорт("telegram", Новый Структура("Логин", Токен));
39 | КонецПроцедуры
40 |
41 | &Желудь
42 | Процедура ПриСозданииОбъекта()
43 |
44 | Телеграм = Новый Мессенджер();
45 | ПозицияСообщения = 0;
46 |
47 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/УправлятельКластераАсинх.os:
--------------------------------------------------------------------------------
1 | Перем ПаузаМеждуВызовами;
2 | Перем КоличествоОперацийЗаВызов;
3 |
4 | &Пластилин
5 | Перем Логирователь; // BSLLS:Typo-off
6 |
7 | &Асинх
8 | Функция ОтключитьСеансыИнформационнойБазы(Кластер, Сеансы) Экспорт
9 |
10 | Для каждого Сеанс Из Сеансы Цикл
11 |
12 | Логирователь.Отладка("Отключаю сеанс %3 - <%1>, <%2>", Сеанс.Пользователь, Сеанс.Приложение, Сеанс.НомерСеанса);
13 |
14 | Идентификатор = Сеанс.Идентификатор;
15 | идКластера = Сеанс.Кластер;
16 |
17 | Попытка
18 | Кластер.ОтключитьСеанс(Идентификатор, идКластера);
19 | Исключение
20 | ОписаниеОшибки = ОписаниеОшибки();
21 | Если СтрНайти(ОписаниеОшибки, "Сеанс с указанным идентификатором не найден") = 0 Тогда
22 | Логирователь.ВЛог(ОписаниеОшибки, Истина);
23 | Возврат Ложь;
24 | КонецЕсли;
25 | КонецПопытки;
26 |
27 | КонецЦикла;
28 |
29 | Возврат Истина;
30 |
31 | КонецФункции
32 |
33 | Функция ПаузаМеждуВызовами() Экспорт
34 | Возврат ПаузаМеждуВызовами;
35 | КонецФункции
36 |
37 | Функция КоличествоОперацийЗаВызов() Экспорт
38 | Возврат КоличествоОперацийЗаВызов;
39 | КонецФункции
40 |
41 | &Желудь
42 | Процедура ПриСозданииОбъекта()
43 | ПаузаМеждуВызовами = 1000;
44 | КоличествоОперацийЗаВызов = 10;
45 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/КонтрольРасписания.os:
--------------------------------------------------------------------------------
1 | Перем Настройки;
2 |
3 | // Проверяем попадание текущего времени в расписание
4 | // Расписание - Структура
5 | // ДеньНедели - Число
6 | // Время - Массив
7 | // Элемент - Структура
8 | // С - Час
9 | // По - Час
10 |
11 | Функция РазрешеноПоРасписанию() Экспорт
12 |
13 | Расписание = Настройки.Расписание;
14 | Если Расписание.Количество() = 0 Тогда
15 | Возврат Истина;
16 | КонецЕсли;
17 |
18 | Разрешен = Ложь;
19 |
20 | ТекущаяДата = ТекущаяДата();
21 |
22 | ДеньНеделиТекущий = ДеньНедели(ТекущаяДата);
23 | ЧасТекущий = Час(ТекущаяДата);
24 |
25 | Для каждого ДанныеРасписания Из Расписание Цикл
26 |
27 | ДеньНедели = ДанныеРасписания.ДеньНедели;
28 | Если ДеньНедели <> 0 И ДеньНедели <> ДеньНеделиТекущий Тогда
29 | Продолжить;
30 | КонецЕсли;
31 |
32 | Для каждого Время Из ДанныеРасписания.Время Цикл
33 |
34 | ВремяС = Время.С;
35 | ВремяПо = Время.По;
36 |
37 | Если ВремяС <= ЧасТекущий И ВремяПо >= ЧасТекущий Тогда
38 | Разрешен = Истина;
39 | Возврат Разрешен;
40 | КонецЕсли;
41 |
42 | КонецЦикла;
43 |
44 | КонецЦикла;
45 |
46 | Возврат Разрешен;
47 |
48 | КонецФункции
49 |
50 | &Желудь
51 | Процедура ПриСозданииОбъекта(&Пластилин("Настройки") _Настройки)
52 | Настройки = _Настройки;
53 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаВыполнитьКомандныйФайл.os:
--------------------------------------------------------------------------------
1 | // ВыполнитьКомандныйФайл
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Выполнитель; // BSLLS:Typo-off
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
11 |
12 | Параметры = ПараметрыКоманды.Параметры;
13 |
14 | Имя = Параметры.Получить("Имя");
15 | СтрокаКоманды = Параметры.Получить("СтрокаКоманды");
16 |
17 | Если Не ЗначениеЗаполнено(СтрокаКоманды) Тогда
18 | Логирователь.ВЛог("Не указан обязательный параметр ""СтрокаКоманды"" для команды ""ВыполнитьКомандныйФайл""", Истина);
19 | Возврат Ложь;
20 | КонецЕсли;
21 |
22 | Если Не ЗначениеЗаполнено(Имя) Тогда
23 | Имя = СтрокаКоманды;
24 | КонецЕсли;
25 |
26 | Позиция = 101; // чтобы не пересекались с фоновыми
27 |
28 | СтруктураВозврата = Выполнитель.ВыполнитьКомандныйФайл(СтрокаКоманды, Позиция, Ложь, Имя);
29 | Если СтруктураВозврата.КодВозврата <> 0 Тогда
30 | Возврат Ложь;
31 | Иначе
32 | Возврат Истина;
33 | КонецЕсли;
34 |
35 | КонецФункции
36 |
37 | &Асинх
38 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
39 |
40 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
41 |
42 | КонецФункции
43 |
44 | &Желудь
45 | &Прозвище("Команда")
46 | Процедура ПриСозданииОбъекта()
47 |
48 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПоказатьЗавершение.os:
--------------------------------------------------------------------------------
1 | // ПоказатьЗавершение
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем УправлятельКонфигуратора; // BSLLS:Typo-off
12 |
13 | &Пластилин
14 | Перем Emoji;
15 |
16 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
17 |
18 | Окончание = ПараметрыКоманды.Параметры.Получить("Окончание");
19 | Если Окончание = Неопределено Тогда
20 | Окончание = Настройки.ПараметрыКоманд.Окончание;
21 | КонецЕсли;
22 |
23 | Если НЕ ЗначениеЗаполнено(Окончание) Тогда
24 | Логирователь.ВЛог("Не заполнен текст окончания");
25 | Возврат Ложь;
26 | КонецЕсли;
27 |
28 | ВремяОбновленияБазы = УправлятельКонфигуратора.ВремяОбновленияБазы();
29 | Если ЗначениеЗаполнено(ВремяОбновленияБазы) Тогда
30 | Окончание = Окончание + " Время обновления: " + Формат(ВремяОбновленияБазы, "ЧДЦ=2") + " мин.";
31 | КонецЕсли;
32 |
33 | Логирователь.ВЛог(Окончание, , Истина, , Emoji.Конец());
34 |
35 | Возврат Истина;
36 |
37 | КонецФункции
38 |
39 | &Асинх
40 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
41 |
42 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
43 |
44 | КонецФункции
45 |
46 | &Желудь
47 | &Прозвище("Команда")
48 | Процедура ПриСозданииОбъекта()
49 |
50 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/Завершатель.os:
--------------------------------------------------------------------------------
1 | #Использовать "..//../../src/Модули"
2 |
3 | &Пластилин
4 | Перем Настройки;
5 |
6 | &Пластилин
7 | Перем Логирователь; // BSLLS:Typo-off
8 |
9 | Процедура Завершить(КодВозврата = 0) Экспорт
10 | Деструктор();
11 | ЗавершитьРаботу(КодВозврата);
12 | КонецПроцедуры
13 |
14 | Процедура ЗавершитьПоОшибке(ОписаниеОшибки = "", ВТелеграм = Ложь) Экспорт
15 | Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
16 | Логирователь.ВЛог(ОписаниеОшибки, Истина, ВТелеграм);
17 | КонецЕсли;
18 | Завершить(1);
19 | КонецПроцедуры
20 |
21 | Процедура Деструктор()
22 |
23 | УдалитьФайлБлокировкиЗапуска();
24 | УдалитьВременныеФайлы();
25 |
26 | ВыполнитьСборкуМусора();
27 |
28 | КонецПроцедуры
29 |
30 | Процедура УдалитьВременныеФайлы()
31 |
32 | Каталог = ТекущийКаталог();
33 |
34 | Если Настройки.ПозицияВГрупповой = 0 Тогда
35 |
36 | Попытка
37 | УдалитьФайлы(Каталог, "*.txt");
38 | Исключение
39 | Логирователь.ВЛог("Не удалось удалить временные файлы", Ложь, Ложь);
40 | КонецПопытки;
41 | КонецЕсли;
42 |
43 | КонецПроцедуры
44 |
45 | Процедура УдалитьФайлБлокировкиЗапуска()
46 |
47 | ПутьКФайлуБлокировки = Настройки.ПутьКФайлуБлокировкиЗапуска;
48 | Если ЗначениеЗаполнено(ПутьКФайлуБлокировки) Тогда
49 | РаботаСФайлами.УдалитьФайл(ПутьКФайлуБлокировки);
50 | КонецЕсли;
51 |
52 | КонецПроцедуры
53 |
54 | &Желудь
55 | Процедура ПриСозданииОбъекта()
56 |
57 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаВыполнитьРасширенныйСинтаксическийКонтроль.os:
--------------------------------------------------------------------------------
1 | // ВыполнитьРасширенныйСинтаксическийКонтроль
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельКонфигуратора;
6 | &Пластилин
7 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
8 |
9 | &Пластилин
10 | Перем Логирователь; // BSLLS:Typo-off
11 |
12 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
13 |
14 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
15 | Возврат Ложь;
16 | КонецЕсли;
17 |
18 | Конфигуратор = УправлятельКонфигуратора.Получить();
19 | Логирователь.ВЛог("Запускаю расширенный синтаксический контроль", , Ложь);
20 |
21 | Проверки = Новый Массив();
22 | Проверки.Добавить("ТонкийКлиент");
23 | Проверки.Добавить("Сервер");
24 | Проверки.Добавить("РасширеннаяПроверка");
25 |
26 | Попытка
27 | Конфигуратор.ПроверкаКонфигурации(Проверки);
28 | Исключение
29 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
30 | Возврат Ложь;
31 | КонецПопытки;
32 |
33 | Логирователь.ВЛог("Расширенный синтаксический контроль выполнен");
34 |
35 | Возврат Истина;
36 |
37 | КонецФункции
38 |
39 | &Асинх
40 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
41 |
42 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
43 |
44 | КонецФункции
45 |
46 | &Желудь
47 | &Прозвище("Команда")
48 | Процедура ПриСозданииОбъекта()
49 |
50 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаВыгрузитьКонфигурациюВФайл.os:
--------------------------------------------------------------------------------
1 | // ВыгрузитьКонфигурациюВФайл
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКонфигуратора;
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 | &Пластилин
12 |
13 | &Пластилин
14 | Перем Логирователь; // BSLLS:Typo-off
15 |
16 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
17 |
18 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
19 | Возврат Ложь;
20 | КонецЕсли;
21 |
22 | Конфигуратор = УправлятельКонфигуратора.Получить();
23 |
24 | Логирователь.ВЛог("Выгружаю конфигурацию в файл");
25 |
26 | ФайлыНастроек = Настройки.ФайлыНастроек;
27 |
28 | ФайлКонечный = ФайлыНастроек.ПутьККаталогуCF
29 | + "\"
30 | + РаботаСФайлами.СформироватьИмяФайла(Настройки.Идентификатор, "cf");
31 |
32 | Попытка
33 | Конфигуратор.ВыгрузитьКонфигурациюВФайл(ФайлКонечный);
34 | Исключение
35 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
36 | Возврат Ложь;
37 | КонецПопытки;
38 |
39 | Логирователь.ВЛог("Конфигурация в файл выгружена");
40 |
41 | Возврат Истина;
42 |
43 | КонецФункции
44 |
45 | &Асинх
46 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
47 |
48 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
49 |
50 | КонецФункции
51 |
52 | &Желудь
53 | &Прозвище("Команда")
54 | Процедура ПриСозданииОбъекта()
55 |
56 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаВыполнитьСинтаксическийКонтроль.os:
--------------------------------------------------------------------------------
1 | // ВыполнитьСинтаксическийКонтроль
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельКонфигуратора;
6 | &Пластилин
7 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
8 |
9 | &Пластилин
10 | Перем Логирователь; // BSLLS:Typo-off
11 |
12 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
13 |
14 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
15 | Возврат Ложь;
16 | КонецЕсли;
17 |
18 | Конфигуратор = УправлятельКонфигуратора.Получить();
19 |
20 | Логирователь.ВЛог("Запускаю синтаксической контроль", , Ложь);
21 |
22 | ТонкийКлиент = Истина;
23 | ВебКлиент = Ложь;
24 | Сервер = Истина;
25 | ВнешнееСоединение = Ложь;
26 | ТолстыйКлиентОбычноеПриложение = Ложь;
27 |
28 | Попытка
29 | Конфигуратор.ВыполнитьСинтаксическийКонтроль(ТонкийКлиент,
30 | ВебКлиент,
31 | Сервер,
32 | ВнешнееСоединение,
33 | ТолстыйКлиентОбычноеПриложение);
34 | Исключение
35 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
36 | Возврат Ложь;
37 | КонецПопытки;
38 |
39 | Логирователь.ВЛог("Синтаксической контроль выполнен");
40 |
41 | Возврат Истина;
42 |
43 | КонецФункции
44 |
45 | &Асинх
46 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
47 |
48 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
49 |
50 | КонецФункции
51 |
52 | &Желудь
53 | &Прозвище("Команда")
54 | Процедура ПриСозданииОбъекта()
55 |
56 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/УправлятельКластера.os:
--------------------------------------------------------------------------------
1 | #Использовать v8rac
2 |
3 | Перем Кластер;
4 | Перем ЗакрытКонфигуратор;
5 |
6 | &Пластилин
7 | Перем Настройки;
8 |
9 | &Пластилин
10 | Перем Логирователь; // BSLLS:Typo-off
11 |
12 | Функция Получить() Экспорт
13 | Если Кластер = Неопределено Тогда
14 | ИнициализироватьКластер();
15 | КонецЕсли;
16 | Возврат Кластер;
17 | КонецФункции
18 |
19 | Процедура ЗакрытКонфигуратор_Установить() Экспорт
20 | ЗакрытКонфигуратор = Истина;
21 | КонецПроцедуры
22 |
23 | Функция ЗакрытКонфигуратор_Получить() Экспорт
24 | Возврат ЗакрытКонфигуратор;
25 | КонецФункции
26 |
27 | Процедура ИнициализироватьКластер()
28 |
29 | Логирователь.ВЛог("Подключение к кластеру");
30 |
31 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
32 |
33 | Кластер = Новый УправлениеКластером;
34 | Кластер.УстановитьКластер(ПараметрыПодключения.СерверRAS + ":" + ПараметрыПодключения.ПортRAS);
35 | Кластер.ИспользоватьВерсию(ПараметрыПодключения.ВерсияПлатформы);
36 |
37 | Попытка
38 | Кластер.Подключить();
39 | Исключение
40 | Кластер = Неопределено;
41 | ВызватьИсключение ОписаниеОшибки();
42 | КонецПопытки;
43 |
44 | Кластер.УстановитьАвторизациюИнформационнойБазы(ПараметрыПодключения.ИмяБазы,
45 | ПараметрыПодключения.ЛогинККонфигуратору,
46 | ПараметрыПодключения.ПарольККонфигуратору);
47 |
48 | Логирователь.ВЛог("Подключение к кластеру выполнено");
49 |
50 | КонецПроцедуры
51 |
52 | &Желудь
53 | Процедура ПриСозданииОбъекта()
54 |
55 | ЗакрытКонфигуратор = Ложь;
56 |
57 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПолучитьВерсиюКонфигурацииИзХранилища.os:
--------------------------------------------------------------------------------
1 | // ПолучитьВерсиюКонфигурацииИзХранилища
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельХранилища; // BSLLS:Typo-off
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 |
12 | &Пластилин
13 | Перем Логирователь; // BSLLS:Typo-off
14 |
15 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
16 |
17 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
18 | Возврат Ложь;
19 | КонецЕсли;
20 |
21 | Хранилище = УправлятельХранилища.Получить();
22 |
23 | Логирователь.ВЛог("Получение версии конфигурации из хранилища");
24 |
25 | ФайлыНастроек = Настройки.ФайлыНастроек;
26 |
27 | ПутьКФайлу = ФайлыНастроек.ПутьККаталогуCF
28 | + "\"
29 | + РаботаСФайлами.СформироватьИмяФайла(Настройки.Идентификатор, "cf");
30 |
31 | Попытка
32 | Хранилище.ПоследняяВерсияКонфигурацииВФайл(ПутьКФайлу);
33 | Исключение
34 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
35 | Возврат Ложь;
36 | КонецПопытки;
37 |
38 | Логирователь.ВЛог("Версия конфигурации из хранилища сохранена");
39 |
40 | Возврат Истина;
41 |
42 | КонецФункции
43 |
44 | &Асинх
45 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
46 |
47 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
48 |
49 | КонецФункции
50 |
51 | &Желудь
52 | &Прозвище("Команда")
53 | Процедура ПриСозданииОбъекта()
54 |
55 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаСнятьБлокировкуИБ.os:
--------------------------------------------------------------------------------
1 | // СнятьБлокировкуИБ
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельКластера; // BSLLS:Typo-off
6 |
7 | &Пластилин
8 | Перем Настройки;
9 |
10 | &Пластилин
11 | Перем Логирователь; // BSLLS:Typo-off
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
14 |
15 | Если НЕ ТребуетВыполнения() Тогда
16 | Возврат Истина;
17 | КонецЕсли;
18 |
19 | Кластер = УправлятельКластера.Получить();
20 |
21 | Логирователь.ВЛог("Снятие блокировки информационной базы");
22 |
23 | ПараметрыКоманд = Настройки.ПараметрыКоманд;
24 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
25 |
26 | ОставитьБлокировкуРеглЗаданий = НЕ Общий.ПризнакВключенияПараметра("СниматьБлокировкуРегламентныхЗаданий",
27 | ПараметрыКоманд);
28 | Попытка
29 | Кластер.СнятьБлокировкуИнформационнойБазы(ПараметрыПодключения.ИмяБазы, ОставитьБлокировкуРеглЗаданий);
30 | Исключение
31 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
32 | Возврат Ложь;
33 | КонецПопытки;
34 |
35 | Логирователь.ВЛог("Блокировка информационной базы снята");
36 |
37 | Возврат Истина;
38 |
39 | КонецФункции
40 |
41 | &Асинх
42 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
43 |
44 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
45 |
46 | КонецФункции
47 |
48 | Функция ТребуетВыполнения()
49 |
50 | Если Настройки.ИспользоватьДинамическоеОбновление
51 | ИЛИ Настройки.ОставитьБлокировкуИБ Тогда
52 | Возврат Ложь;
53 | КонецЕсли;
54 |
55 | Возврат Истина;
56 |
57 | КонецФункции
58 |
59 | &Желудь
60 | &Прозвище("Команда")
61 | Процедура ПриСозданииОбъекта()
62 |
63 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/УправлятельГит.os:
--------------------------------------------------------------------------------
1 | #Использовать "..//../../src/Модули"
2 | #Использовать gitrunner
3 |
4 | &Пластилин
5 | Перем Логирователь; // BSLLS:Typo-off
6 |
7 | Функция КлонироватьИлиПолучитьИзмененияРепозитория(РабочийКаталог, ИмяРепозитория, АдресУдаленногоРепозитория) Экспорт
8 |
9 | Результат = Ложь;
10 |
11 | ПолныйПуть = ОбъединитьПути(РабочийКаталог, ИмяРепозитория);
12 |
13 | Если Не РаботаСФайлами.ФайлСуществует(ПолныйПуть) Тогда
14 | СоздатьКаталог(ПолныйПуть);
15 | КонецЕсли;
16 |
17 | ГитРепозиторий = Новый ГитРепозиторий();
18 | ГитРепозиторий.УстановитьРабочийКаталог(ПолныйПуть);
19 | Если НайтиФайлы(ПолныйПуть, "*").Количество() > 0 Тогда
20 | Логирователь.ВЛог("Получаю изменения с удаленного репозитория " + ИмяРепозитория, , Ложь);
21 | Попытка
22 | ГитРепозиторий.Получить();
23 | Исключение
24 | Логирователь.ВЛог(ОписаниеОшибки(), Истина);
25 | Результат = Ложь;
26 | КонецПопытки;
27 | Иначе
28 | Логирователь.ВЛог("Клонирую удаленный репозиторий " + ИмяРепозитория, , Ложь);
29 | Результат = КлонироватьРепозиторий(РабочийКаталог, ИмяРепозитория, АдресУдаленногоРепозитория);
30 | КонецЕсли;
31 |
32 | Возврат Результат;
33 |
34 | КонецФункции
35 |
36 | Функция КлонироватьРепозиторий(РабочийКаталог, ИмяРепозитория, АдресУдаленногоРепозитория) Экспорт
37 |
38 | ГитРепозиторий = Новый ГитРепозиторий();
39 | ГитРепозиторий.УстановитьРабочийКаталог(РабочийКаталог);
40 | Попытка
41 | ГитРепозиторий.КлонироватьРепозиторий(АдресУдаленногоРепозитория, ИмяРепозитория);
42 | Исключение
43 | Логирователь.ВЛог(ОписаниеОшибки(), Истина);
44 | Возврат Ложь;
45 | КонецПопытки;
46 |
47 | Возврат Истина;
48 |
49 | КонецФункции
50 |
51 | &Желудь
52 | Процедура ПриСозданииОбъекта()
53 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаОбъединитьКонфигурациюСФайлом.os:
--------------------------------------------------------------------------------
1 | // ОбъединитьКонфигурациюСФайлом
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКонфигуратора;
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 |
12 | &Пластилин
13 | Перем Логирователь; // BSLLS:Typo-off
14 |
15 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
16 |
17 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
18 | Возврат Ложь;
19 | КонецЕсли;
20 |
21 | Конфигуратор = УправлятельКонфигуратора.Получить();
22 |
23 | Логирователь.ВЛог("Начинаю объединение конфигурации с файлом");
24 |
25 | ФайлыНастроек = Настройки.ФайлыНастроек;
26 |
27 | ФайлКонфигурации = ФайлыНастроек.ПутьККаталогуCF
28 | + "\"
29 | + РаботаСФайлами.СформироватьИмяФайла(Настройки.Идентификатор, "cf");
30 |
31 | Если НЕ РаботаСФайлами.ФайлСуществует(ФайлКонфигурации) Тогда
32 | Логирователь.ВЛог("Не найден CF файл - " + ФайлКонфигурации, Истина);
33 | Возврат Ложь;
34 | КонецЕсли;
35 |
36 | ФайлMerge = Настройки.ПолныйПутьКФайлуНастроек(ФайлыНастроек.merge);
37 |
38 | Попытка
39 | Конфигуратор.ОбъединитьКонфигурациюСФайлом(ФайлКонфигурации, ФайлMerge);
40 | Исключение
41 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
42 | Возврат Ложь;
43 | КонецПопытки;
44 |
45 | Логирователь.ВЛог("Объединение конфигурации с файлом выполнено");
46 |
47 | Возврат Истина;
48 |
49 | КонецФункции
50 |
51 | &Асинх
52 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
53 |
54 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
55 |
56 | КонецФункции
57 |
58 | &Желудь
59 | &Прозвище("Команда")
60 | Процедура ПриСозданииОбъекта()
61 |
62 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/templates/Классы/Emoji.os:
--------------------------------------------------------------------------------
1 | // https://emojidb.org/telegram-emojis
2 | // https://emojidb.org/jenkins-emojis
3 | Перем Цифры;
4 |
5 | Процедура ДобавитьВНачалоСтроки(ИсходнаяСтрока, Эмодзи) Экспорт
6 |
7 | Если НЕ ЗначениеЗаполнено(Эмодзи) Тогда
8 | Возврат;
9 | КонецЕсли;
10 |
11 | ИсходнаяСтрока = Эмодзи + " " + ИсходнаяСтрока;
12 |
13 | КонецПроцедуры
14 |
15 | Функция Инфо() Экспорт
16 | Возврат "⚠️";
17 | КонецФункции
18 |
19 | Функция Начало() Экспорт
20 | Возврат "▶️";
21 | КонецФункции
22 |
23 | Функция Конец() Экспорт
24 | Возврат "✅";
25 | КонецФункции
26 |
27 | Функция Ошибка() Экспорт
28 | Возврат "🆘";
29 | КонецФункции
30 |
31 | Функция Ошибка_v2() Экспорт // BSLLS:LatinAndCyrillicSymbolInWord-off
32 | Возврат "❌";
33 | КонецФункции
34 |
35 | Функция Прервано() Экспорт
36 | Возврат "🛑";
37 | КонецФункции
38 |
39 | Функция Упало() Экспорт
40 | Возврат "💩";
41 | КонецФункции
42 |
43 | Функция Список() Экспорт
44 | Возврат "📰";
45 | КонецФункции
46 |
47 | Функция Звезда() Экспорт
48 | Возврат "🌟";
49 | КонецФункции
50 |
51 | Функция Цифра(Значение) Экспорт
52 |
53 | Эмодзи = Цифры.Получить(Значение);
54 | Если Эмодзи = Неопределено Тогда
55 | Возврат Строка(Значение);
56 | Иначе
57 | Возврат Эмодзи;
58 | КонецЕсли;
59 |
60 | Возврат "";
61 |
62 | КонецФункции
63 |
64 | Процедура ИнициализироватьЦифры()
65 |
66 | Цифры = Новый Соответствие;
67 | Цифры.Вставить(1, "1️⃣");
68 | Цифры.Вставить(2, "2️⃣");
69 | Цифры.Вставить(3, "3️⃣");
70 | Цифры.Вставить(4, "4️⃣");
71 | Цифры.Вставить(5, "5️⃣");
72 | Цифры.Вставить(6, "6️⃣");
73 | Цифры.Вставить(7, "7️⃣");
74 | Цифры.Вставить(8, "8️⃣");
75 | Цифры.Вставить(9, "9️⃣");
76 | Цифры.Вставить(10, "🔟");
77 |
78 | КонецПроцедуры
79 |
80 | &Желудь
81 | Процедура ПриСозданииОбъекта()
82 | ИнициализироватьЦифры();
83 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаОтключитьКонфигураторОтИнформационнойБазы.os:
--------------------------------------------------------------------------------
1 | // ОтключитьКонфигураторОтИнформационнойБазы
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКластера;
9 |
10 | &Пластилин
11 | Перем Логирователь; // BSLLS:Typo-off
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды = Неопределено) Экспорт // BSLLS:UnusedParameters-off
14 |
15 | Если УправлятельКластера.ЗакрытКонфигуратор_Получить() = Истина Тогда
16 | Возврат Истина;
17 | КонецЕсли;
18 |
19 | Кластер = УправлятельКластера.Получить();
20 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
21 |
22 | ИмяПриложения = "Designer";
23 |
24 | Попытка
25 | ТаблицаСеансов = Кластер.СписокСеансовИнформационнойБазы(ПараметрыПодключения.ИмяБазы);
26 | Исключение
27 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
28 | Возврат Ложь;
29 | КонецПопытки;
30 |
31 | СтруктураПоиска = Новый Структура("Приложение", ИмяПриложения);
32 | Сеансы = ТаблицаСеансов.НайтиСтроки(СтруктураПоиска);
33 | Если Сеансы.Количество() <> 0 Тогда
34 |
35 | Логирователь.ВЛог("Закрытие конфигуратора в ИБ");
36 |
37 | Для каждого Сеанс Из Сеансы Цикл
38 | Попытка
39 | Кластер.ОтключитьСеанс(Сеанс.Идентификатор, Сеанс.Кластер);
40 | Исключение
41 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
42 | Возврат Ложь;
43 | КонецПопытки;
44 | КонецЦикла;
45 |
46 | Логирователь.ВЛог("Конфигуратор закрыт");
47 |
48 | КонецЕсли;
49 |
50 | УправлятельКластера.ЗакрытКонфигуратор_Установить();
51 | Возврат Истина;
52 |
53 | КонецФункции
54 |
55 | &Асинх
56 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
57 |
58 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
59 |
60 | КонецФункции
61 |
62 | &Желудь
63 | &Прозвище("Команда")
64 | Процедура ПриСозданииОбъекта()
65 |
66 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗадатьВопрос.os:
--------------------------------------------------------------------------------
1 | // ЗадатьВопрос
2 | #Использовать gui
3 | #Использовать "..//../../src/Модули"
4 |
5 | &Пластилин
6 | Перем Настройки;
7 |
8 | &Пластилин
9 | Перем Завершатель;
10 |
11 | &Пластилин
12 | Перем Логирователь; // BSLLS:Typo-off
13 |
14 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
15 |
16 | Результат = Истина;
17 | Если Настройки.Фоново Тогда
18 | Возврат Результат;
19 | КонецЕсли;
20 |
21 | ПараметрыКоманд = Настройки.ПараметрыКоманд;
22 | ПараметрыОбщие = Настройки.ПараметрыОбщие;
23 |
24 | ТекстВопроса = ПараметрыКоманды.Параметры.Получить("ТекстВопроса");
25 | Если ТекстВопроса = Неопределено Тогда
26 | ТекстВопроса = ПараметрыКоманд.ТекстВопроса;
27 | КонецЕсли;
28 |
29 | Если Не ЗначениеЗаполнено(ТекстВопроса) Тогда
30 | ТекстКоманд = ПараметрыОбщие.Получить("ПутьКФайлуCommands");
31 | Если Не ЗначениеЗаполнено(ТекстКоманд) Тогда
32 | ТекстКоманд = ПараметрыОбщие.Получить("ИдентификаторКоманд");
33 | КонецЕсли;
34 | ТекстВопроса = "Запустить " + ТекстКоманд + "?";
35 | КонецЕсли;
36 |
37 | Логирователь.ЗаменитьПараметрыВТексте(ТекстВопроса);
38 | Логирователь.ДополнитьОсновныеПараметрыВТексте(ТекстВопроса);
39 |
40 | УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
41 | Диалоги = УправляемыйИнтерфейс.СтандартныеДиалоги;
42 | Ответ = Диалоги.Вопрос(ТекстВопроса,
43 | РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет , "sync_repo", КодВозвратаДиалога.Нет);
44 | Если Ответ <> КодВозвратаДиалога.Да Тогда
45 | Завершатель.ЗавершитьПоОшибке();
46 | КонецЕсли;
47 |
48 | Возврат Истина;
49 |
50 | КонецФункции
51 |
52 | &Асинх
53 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
54 |
55 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
56 |
57 | КонецФункции
58 |
59 | &Желудь
60 | &Прозвище("Команда")
61 | Процедура ПриСозданииОбъекта()
62 |
63 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПоместитьИзмененияОбъектовВХранилище.os:
--------------------------------------------------------------------------------
1 | // ПоместитьИзмененияОбъектовВХранилище
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКонфигуратора;
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 |
12 | &Пластилин
13 | Перем Логирователь; // BSLLS:Typo-off
14 |
15 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
16 |
17 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
18 | Возврат Ложь;
19 | КонецЕсли;
20 |
21 | Логирователь.ВЛог("Помещаю изменения объектов в хранилище");
22 |
23 | Конфигуратор = УправлятельКонфигуратора.Получить();
24 | ПараметрыКоманд = Настройки.ПараметрыКоманд;
25 |
26 | Комментарий = ПараметрыКоманд.КомментарийПриПомещенииВХранилище;
27 | Логирователь.ЗаменитьПараметрыВТексте(Комментарий);
28 |
29 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
30 |
31 | ОставитьОбъектыЗахваченными = Ложь;
32 | ИгнорироватьУдаленные = Истина;
33 |
34 | Попытка
35 | Конфигуратор.ПоместитьИзмененияОбъектовВХранилище(ПараметрыПодключения.ПутьКХранилищу,
36 | ПараметрыПодключения.ЛогинКХранилищу,
37 | ПараметрыПодключения.ПарольКХранилищу,
38 | ,
39 | Комментарий,
40 | ОставитьОбъектыЗахваченными,
41 | ИгнорироватьУдаленные);
42 | Исключение
43 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
44 | Возврат Ложь;
45 | КонецПопытки;
46 |
47 | Логирователь.ВЛог("Изменения объектов помещены в хранилище");
48 |
49 | Возврат Истина;
50 |
51 | КонецФункции
52 |
53 | &Асинх
54 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
55 |
56 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
57 |
58 | КонецФункции
59 |
60 | &Желудь
61 | &Прозвище("Команда")
62 | Процедура ПриСозданииОбъекта()
63 |
64 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаВыполнитьСкриптSQL.os:
--------------------------------------------------------------------------------
1 | // ВыполнитьКомандуSQL
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельSQL; // BSLLS:Typo-off
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем СкриптыSQL;
12 |
13 | &Пластилин(Значение = "ОбработчикРезультатаSQL", Тип = "Массив")
14 | Перем ОбработчикиРезультата;
15 |
16 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
17 |
18 | ПараметрыСкрипта = ПараметрыКоманды.Параметры;
19 | ПропускатьПриОшибке = ПрообразованияТипов.БулевоИзСтроки(ПараметрыСкрипта.Получить("ПропускатьПриОшибке"));
20 |
21 | Имя = ПараметрыСкрипта.Получить("Имя");
22 |
23 | Логирователь.ВЛог("Выполняю скрипт SQL: " + Имя);
24 |
25 | Параметр1 = ПараметрыСкрипта.Получить("Параметр1");
26 |
27 | ТекстКоманды = СкриптыSQL.Получить(Имя, Параметр1);
28 | Если ТекстКоманды = Неопределено Тогда
29 | ТекстОшибки = "Не определен текст скрипта - " + Имя;
30 | Логирователь.ВЛог(ТекстОшибки, Истина);
31 | Возврат Ложь;
32 | КонецЕсли;
33 |
34 | Попытка
35 | Результат = УправлятельSQL.ВыполнитьКоманду(ТекстКоманды);
36 | Исключение
37 | Логирователь.ВЛог("Скрипт SQL не выполнен - " + Имя + "." + ОписаниеОшибки(), Истина);
38 | Возврат ПропускатьПриОшибке;
39 | КонецПопытки;
40 |
41 | Для каждого ОбработчикРезультата Из ОбработчикиРезультата Цикл
42 | РезультатОбработки = ОбработчикРезультата.Обработать(Результат, ЭтотОбъект, "Скрипт", ПараметрыКоманды);
43 | Если РезультатОбработки = Ложь Тогда
44 | Возврат ПропускатьПриОшибке;
45 | КонецЕсли;
46 | КонецЦикла;
47 |
48 | Возврат Истина;
49 |
50 | КонецФункции
51 |
52 | &Асинх
53 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
54 |
55 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
56 |
57 | КонецФункции
58 |
59 | &Желудь
60 | &Прозвище("Команда")
61 | Процедура ПриСозданииОбъекта()
62 |
63 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/УправлятельКонфигуратора.os:
--------------------------------------------------------------------------------
1 | #Использовать v8runner
2 |
3 | Перем Конфигуратор;
4 | Перем ВремяОбновленияБазы; // Время обновления базы в минутах
5 |
6 | &Пластилин
7 | Перем Настройки;
8 |
9 | Функция Получить() Экспорт
10 | Если Конфигуратор = Неопределено Тогда
11 | ИнициализироватьКонфигуратор();
12 | КонецЕсли;
13 | Возврат Конфигуратор;
14 | КонецФункции
15 |
16 | Функция ВремяОбновленияБазы() Экспорт
17 | Возврат ВремяОбновленияБазы;
18 | КонецФункции
19 |
20 | Процедура ВремяОбновленияБазы_Установить(Время) Экспорт
21 | ВремяОбновленияБазы = Время;
22 | КонецПроцедуры
23 |
24 | Процедура УстановитьПутьКТонкомуКлиенту() Экспорт
25 |
26 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
27 | ПутьКПлатформе = ПараметрыПодключения.ПутьКПлатформе;
28 |
29 | ПутьКПлатформеТонкий = СтрЗаменить(ПутьКПлатформе, "1cv8.exe", "1cv8c.exe");
30 | Конфигуратор.ПутьКПлатформе1С(ПутьКПлатформеТонкий);
31 |
32 | КонецПроцедуры
33 |
34 | Процедура УстановитьПутьКПлатформе() Экспорт
35 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
36 | Конфигуратор.ПутьКПлатформе1С(ПараметрыПодключения.ПутьКПлатформе);
37 | КонецПроцедуры
38 |
39 | Процедура ИнициализироватьКонфигуратор()
40 |
41 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
42 |
43 | Конфигуратор = Новый УправлениеКонфигуратором();
44 | Конфигуратор.ПутьКПлатформе1С(ПараметрыПодключения.ПутьКПлатформе);
45 | Конфигуратор.УстановитьКлючРазрешенияЗапуска(ПараметрыПодключения.КодДоступаПриБлокировкиИБ);
46 |
47 | ПараметрыСтрокиСоединения = Конфигуратор.ПараметрыСтрокиСоединения();
48 | ПараметрыСтрокиСоединения.Сервер = ПараметрыПодключения.СерверБазы;
49 | ПараметрыСтрокиСоединения.Порт = ПараметрыПодключения.ПортБазы;
50 | ПараметрыСтрокиСоединения.ИмяБазы = ПараметрыПодключения.ИмяБазы;
51 |
52 | Конфигуратор.УстановитьКонтекст(ПараметрыСтрокиСоединения,
53 | ПараметрыПодключения.ЛогинККонфигуратору,
54 | ПараметрыПодключения.ПарольККонфигуратору);
55 |
56 | КонецПроцедуры
57 |
58 | &Желудь
59 | Процедура ПриСозданииОбъекта()
60 |
61 | ВремяОбновленияБазы = Неопределено;
62 | Конфигуратор = Неопределено;
63 |
64 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/УправлятельХранилища.os:
--------------------------------------------------------------------------------
1 | #Использовать v8storage
2 |
3 | Перем сХранилища;
4 |
5 | &Пластилин
6 | Перем УправлятельКонфигуратора; // BSLLS:Typo-off
7 |
8 | &Пластилин
9 | Перем Настройки;
10 |
11 | Функция Получить(ИмяРасширения = Неопределено) Экспорт
12 |
13 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
14 | Имя = ИмяРасширения;
15 | Иначе
16 | Имя = ИмяОсновной();
17 | КонецЕсли;
18 |
19 | Хранилище = сХранилища.Получить(Имя);
20 | Если Хранилище <> Неопределено Тогда
21 | Возврат Хранилище;
22 | КонецЕсли;
23 |
24 | Хранилище = Инициализировать(ИмяРасширения);
25 | сХранилища.Вставить(Имя, Хранилище);
26 |
27 | Возврат Хранилище;
28 |
29 | КонецФункции
30 |
31 | Функция Инициализировать(ИмяРасширения = Неопределено)
32 |
33 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
34 | НастройкиХранилища = НастройкиПоРасширению(ИмяРасширения);
35 | Иначе
36 | НастройкиХранилища = НастройкиОсновной();
37 | КонецЕсли;
38 |
39 | Хранилище = Новый МенеджерХранилищаКонфигурации();
40 | Хранилище.УстановитьПутьКХранилищу(НастройкиХранилища.ПутьКХранилищу);
41 | Хранилище.УстановитьПараметрыАвторизации(НастройкиХранилища.ЛогинКХранилищу, НастройкиХранилища.ПарольКХранилищу);
42 |
43 | Конфигуратор = УправлятельКонфигуратора.Получить();
44 | Хранилище.УстановитьУправлениеКонфигуратором(Конфигуратор);
45 |
46 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
47 | Хранилище.УстановитьРасширениеХранилища(ИмяРасширения);
48 | КонецЕсли;
49 |
50 | Возврат Хранилище;
51 |
52 | КонецФункции
53 |
54 | Функция НастройкиОсновной()
55 | Возврат Настройки;
56 | КонецФункции
57 |
58 | Функция НастройкиПоРасширению(ИмяРасширения)
59 | НастройкиРасширения = Настройки.РасширенияКонфигурации.Получить(ИмяРасширения);
60 | Если НастройкиРасширения = Неопределено Тогда
61 | ВызватьИсключение "Нет настроек расширения - " + ИмяРасширения;
62 | КонецЕсли;
63 | Возврат НастройкиРасширения;
64 | КонецФункции
65 |
66 | Функция ИмяОсновной()
67 | Возврат "Осн";
68 | КонецФункции
69 |
70 | &Желудь
71 | Процедура ПриСозданииОбъекта()
72 | сХранилища = Новый Соответствие;
73 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаВыполнитьЗапросSQL.os:
--------------------------------------------------------------------------------
1 | // ВыполнитьЗапросSQL
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельSQL; // BSLLS:Typo-off
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем СкриптыSQL;
12 |
13 | &Пластилин(Значение = "ОбработчикРезультатаSQL", Тип = "Массив")
14 | Перем ОбработчикиРезультата;
15 |
16 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
17 |
18 | ПараметрыСкрипта = ПараметрыКоманды.Параметры;
19 |
20 | ПовторноеВыполнение = ЗначениеЗаполнено(ПараметрыСкрипта.Получить("ПовторнаяОтправка"));
21 |
22 | ПропускатьПриОшибке = ПрообразованияТипов.БулевоИзСтроки(ПараметрыСкрипта.Получить("ПропускатьПриОшибке"));
23 |
24 | Имя = ПараметрыСкрипта.Получить("Имя");
25 |
26 | ТекстСообщения = "Выполняю запрос SQL: " + Имя;
27 | Если ПовторноеВыполнение Тогда
28 | Логирователь.Отладка(ТекстСообщения);
29 | Иначе
30 | Логирователь.ВЛог(ТекстСообщения);
31 | КонецЕсли;
32 |
33 | Параметр1 = ПараметрыСкрипта.Получить("Параметр1");
34 |
35 | ТекстЗапроса = СкриптыSQL.Получить(Имя, Параметр1);
36 | Если ТекстЗапроса = Неопределено Тогда
37 | ТекстОшибки = "Не определен текст запроса - " + Имя;
38 | Логирователь.ВЛог(ТекстОшибки, Истина);
39 | Возврат Ложь;
40 | КонецЕсли;
41 |
42 | Попытка
43 | Результат = УправлятельSQL.ВыполнитьЗапрос(ТекстЗапроса);
44 | Исключение
45 | Логирователь.ВЛог("Запрос SQL не выполнен - " + Имя + "." + ОписаниеОшибки(), Истина);
46 | Возврат ПропускатьПриОшибке;
47 | КонецПопытки;
48 |
49 | Для каждого ОбработчикРезультата Из ОбработчикиРезультата Цикл
50 | РезультатОбработки = ОбработчикРезультата.Обработать(Результат, ЭтотОбъект, "Запрос", ПараметрыКоманды);
51 | Если РезультатОбработки = Ложь Тогда
52 | Возврат ПропускатьПриОшибке;
53 | КонецЕсли;
54 | КонецЦикла;
55 |
56 | Возврат Истина;
57 |
58 | КонецФункции
59 |
60 | &Асинх
61 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
62 |
63 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
64 |
65 | КонецФункции
66 |
67 | &Желудь
68 | &Прозвище("Команда")
69 | Процедура ПриСозданииОбъекта()
70 |
71 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗапуститьВРежимеПредприятия.os:
--------------------------------------------------------------------------------
1 | // ЗапуститьВРежимеПредприятия
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКонфигуратора;
9 |
10 | &Пластилин
11 | Перем Логирователь; // BSLLS:Typo-off
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
14 |
15 | Логирователь.ВЛог("Запускаю в режиме предприятия");
16 |
17 | ПараметрыКоманд = Настройки.ПараметрыКоманд;
18 | ДополнительныеКлючи = ПараметрыКоманд.КлючиЗапускаПредприятия;
19 |
20 | Параметры = ПараметрыКоманды.Параметры;
21 | ОжидатьВыполнения = Параметры.Получить("ОжидатьВыполнения");
22 | Если ЗначениеЗаполнено(ОжидатьВыполнения) Тогда
23 | ОжидатьВыполнения = Булево(ОжидатьВыполнения);
24 | Иначе
25 | ОжидатьВыполнения = Истина;
26 | КонецЕсли;
27 |
28 | Возврат ЗапуститьВРежимеПредприятия(ОжидатьВыполнения, ДополнительныеКлючи);
29 |
30 | КонецФункции
31 |
32 | Функция ЗапуститьВРежимеПредприятия(ОжидатьВыполнения = Истина, ДополнительныеКлючи = "") Экспорт
33 |
34 | Конфигуратор = УправлятельКонфигуратора.Получить();
35 |
36 | ОтключенПризнакОжидания = Ложь;
37 | Если ОжидатьВыполнения = Ложь Тогда
38 | Конфигуратор.УстановитьПризнакОжиданияВыполненияПрограммы(Ложь);
39 | ОтключенПризнакОжидания = Истина;
40 | КонецЕсли;
41 |
42 | УправлятельКонфигуратора.УстановитьПутьКТонкомуКлиенту();
43 |
44 | ЕстьОшибка = Ложь;
45 | УправляемыйРежим = Истина;
46 | Попытка
47 | Конфигуратор.ЗапуститьВРежимеПредприятия(, УправляемыйРежим, ДополнительныеКлючи);
48 | Исключение
49 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
50 | ЕстьОшибка = Истина;
51 | КонецПопытки;
52 |
53 | УправлятельКонфигуратора.УстановитьПутьКПлатформе();
54 |
55 | Если ОтключенПризнакОжидания Тогда
56 | Конфигуратор.УстановитьПризнакОжиданияВыполненияПрограммы(Истина);
57 | КонецЕсли;
58 |
59 | Возврат НЕ ЕстьОшибка;
60 |
61 | КонецФункции
62 |
63 | &Асинх
64 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
65 |
66 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
67 |
68 | КонецФункции
69 |
70 | &Желудь
71 | &Прозвище("Команда")
72 | Процедура ПриСозданииОбъекта()
73 |
74 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗаблокироватьИБ.os:
--------------------------------------------------------------------------------
1 | // ЗаблокироватьИБ
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКластера; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем Логирователь; // BSLLS:Typo-off
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт
14 |
15 | Если НЕ ТребуетВыполнения() Тогда
16 | Возврат Истина;
17 | КонецЕсли;
18 |
19 | Проверка = Общий.СвойствоСтруктуры(ПараметрыКоманды, "Проверка", Ложь);
20 | Возврат ВыполнитьКомандуСПараметрами(Проверка, ПараметрыКоманды);
21 |
22 | КонецФункции
23 |
24 | &Асинх
25 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
26 |
27 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
28 |
29 | КонецФункции
30 |
31 | Функция ТребуетВыполнения()
32 |
33 | Если Настройки.ИспользоватьДинамическоеОбновление Тогда
34 | Возврат Ложь;
35 | КонецЕсли;
36 |
37 | Возврат Истина;
38 |
39 | КонецФункции
40 |
41 | Функция ВыполнитьКомандуСПараметрами(Проверка = Ложь,
42 | ПараметрыКоманды = Неопределено) Экспорт // BSLLS:UnusedParameters-off
43 |
44 | Кластер = УправлятельКластера.Получить();
45 |
46 | Если Проверка Тогда
47 | // Периодически снимается сама блокировку,
48 | // поэтому приходится проверять несколько раз, тут просто устанавливаем её заного
49 | Логирователь.ВЛог("Проверяю блокировку информационной базы");
50 | Иначе
51 | Логирователь.ВЛог("Устанавливаю блокировку информационной базы", , Истина);
52 | КонецЕсли;
53 |
54 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
55 |
56 | Попытка
57 | Кластер.БлокировкаИнформационнойБазы(ПараметрыПодключения.ИмяБазы,
58 | ПараметрыПодключения.СообщениеПриБлокировкиИБ,
59 | ПараметрыПодключения.КодДоступаПриБлокировкиИБ, , , Истина);
60 | Исключение
61 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
62 | Возврат Ложь;
63 | КонецПопытки;
64 |
65 | Если Проверка Тогда
66 | Логирователь.ВЛог("Проверка блокировки информационной базы выполнена");
67 | Иначе
68 | Логирователь.ВЛог("Блокировка информационной базы установлена");
69 | КонецЕсли;
70 |
71 | Возврат Истина;
72 |
73 | КонецФункции
74 |
75 | &Желудь
76 | &Прозвище("Команда")
77 | Процедура ПриСозданииОбъекта()
78 |
79 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаОтменитьЗахватОбъектовВХранилище.os:
--------------------------------------------------------------------------------
1 | // ОтменитьЗахватОбъектовВХранилище
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельХранилища; // BSLLS:Typo-off
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 |
12 | &Пластилин
13 | Перем Логирователь; // BSLLS:Typo-off
14 |
15 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
16 |
17 | Возврат ВыполнитьКомандуСПараметрами(, , , ПараметрыКоманды);
18 |
19 | КонецФункции
20 |
21 | &Асинх
22 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
23 |
24 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
25 |
26 | КонецФункции
27 |
28 | Функция ВыполнитьКомандуСПараметрами(ПоФайлу = Ложь, ИмяФайла = "",
29 | ПроверкаПодключения = Ложь, ПараметрыКоманды = Неопределено) Экспорт // BSLLS:UnusedParameters-off
30 |
31 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
32 | Возврат Ложь;
33 | КонецЕсли;
34 |
35 | Если ПоФайлу Тогда
36 | Логирователь.ВЛог("Отменяю объекты в хранилище по файлу " + ИмяФайла);
37 | Иначе
38 | Логирователь.ВЛог("Отменяю захват объектов в хранилище");
39 | КонецЕсли;
40 |
41 | ИгнорироватьИзменения = Истина;
42 |
43 | Если ПоФайлу Тогда
44 | ПутьКФайлуСоСпискомОбъектов = Настройки.ПолныйПутьКФайлуНастроек(ИмяФайла);
45 | Иначе
46 | ПутьКФайлуСоСпискомОбъектов = Неопределено;
47 | КонецЕсли;
48 |
49 | Хранилище = УправлятельХранилища.Получить();
50 |
51 | Попытка
52 | Хранилище.ОтменитьЗахватОбъектовВХранилище(ПутьКФайлуСоСпискомОбъектов,
53 | ИгнорироватьИзменения);
54 | Исключение
55 | Если ПроверкаПодключения Тогда
56 | ВызватьИсключение ОписаниеОшибки();
57 | Иначе
58 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
59 | Возврат Ложь;
60 | КонецЕсли;
61 | КонецПопытки;
62 |
63 | Если ПоФайлу Тогда
64 | Логирователь.ВЛог("Отмена захвата объектов в хранилище по файлу " + ИмяФайла + " выполнена");
65 | Иначе
66 | Логирователь.ВЛог("Отмена захвата объектов в хранилище выполнена");
67 | КонецЕсли;
68 |
69 | Возврат Истина;
70 |
71 | КонецФункции
72 |
73 | &Желудь
74 | &Прозвище("Команда")
75 | Процедура ПриСозданииОбъекта()
76 |
77 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПоказатьПриветствие.os:
--------------------------------------------------------------------------------
1 | // ПоказатьПриветствие
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем Emoji;
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
14 |
15 | ТекстПриветствия = ПараметрыКоманды.Параметры.Получить("Приветствие");
16 | Если ТекстПриветствия = Неопределено Тогда
17 | ТекстПриветствия = Настройки.ПараметрыКоманд.Приветствие;
18 | КонецЕсли;
19 | Если Не ЗначениеЗаполнено(ТекстПриветствия) Тогда
20 | Логирователь.ВЛог("Не заполнен текст приветствия");
21 | Возврат Ложь;
22 | КонецЕсли;
23 |
24 | Если Общий.ПризнакВключенияПараметра("УстановитьПаузу", Настройки.КомандыВыполнения) Тогда
25 | ПаузаПередЗапуском = Настройки.ПаузаПередЗапуском;
26 | Если ЗначениеЗаполнено(ПаузаПередЗапуском) Тогда
27 | стрСекундПаузы = Строка(ПаузаПередЗапуском);
28 | Иначе
29 | стрСекундПаузы = Настройки.ПараметрыКоманд.Пауза;
30 | КонецЕсли;
31 | Иначе
32 | стрСекундПаузы = "";
33 | КонецЕсли;
34 |
35 | Если СтрНайти(ТекстПриветствия, "Пауза") > 0
36 | И ЗначениеЗаполнено(стрСекундПаузы) Тогда
37 |
38 | СекундПаузы = Число(стрСекундПаузы);
39 |
40 | Минута = 60;
41 | МинутПаузы = Цел(СекундПаузы / Минута);
42 |
43 | Если МинутПаузы > 0 Тогда
44 | СтрокаПаузы = Строка(МинутПаузы) + " мин";
45 | ИначеЕсли СекундПаузы > 0 Тогда
46 | СтрокаПаузы = Строка(СекундПаузы) + " сек";
47 | Иначе
48 | СтрокаПаузы = "";
49 | КонецЕсли;
50 |
51 | ТекстПриветствия = Логирователь.ЗаменитьПараметрВТексте(ТекстПриветствия, "Пауза", СтрокаПаузы);
52 |
53 | Иначе
54 |
55 | ТекстПриветствия = Логирователь.ЗаменитьПараметрВТексте(ТекстПриветствия, " через #Пауза", "", "");
56 |
57 | КонецЕсли;
58 |
59 | Логирователь.ВЛог(ТекстПриветствия, , Истина, , Emoji.Инфо());
60 |
61 | Возврат Истина;
62 |
63 | КонецФункции
64 |
65 | &Асинх
66 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
67 |
68 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
69 |
70 | КонецФункции
71 |
72 | &Желудь
73 | &Прозвище("Команда")
74 | Процедура ПриСозданииОбъекта()
75 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/УправлятельSQL.os:
--------------------------------------------------------------------------------
1 | #Использовать sql
2 |
3 | Перем Соединение;
4 |
5 | &Пластилин
6 | Перем Настройки;
7 |
8 | &Пластилин
9 | Перем Логирователь; // BSLLS:Typo-off
10 |
11 | &Пластилин
12 | Перем Завершатель; // BSLLS:Typo-off
13 |
14 | Функция ВыполнитьЗапрос(ТекстЗапроса) Экспорт
15 |
16 | Инициализировать();
17 |
18 | Если Не ОткрытьСоединение() Тогда
19 | Возврат Неопределено;
20 | КонецЕсли;
21 |
22 | Запрос = Новый Запрос();
23 | Запрос.УстановитьСоединение(Соединение);
24 | Запрос.Текст = ТекстЗапроса;
25 |
26 | Результат = Запрос.Выполнить().Выгрузить();
27 |
28 | Соединение.Закрыть();
29 |
30 | Возврат Результат;
31 |
32 | КонецФункции
33 |
34 | Функция ВыполнитьКоманду(ТекстКоманды) Экспорт
35 |
36 | Инициализировать();
37 |
38 | Если Не ОткрытьСоединение() Тогда
39 | Возврат Неопределено;
40 | КонецЕсли;
41 |
42 | Запрос = Новый Запрос();
43 | Запрос.УстановитьСоединение(Соединение);
44 | Запрос.Текст = ТекстКоманды;
45 |
46 | Результат = Запрос.ВыполнитьКоманду();
47 |
48 | Соединение.Закрыть();
49 |
50 | Возврат Результат;
51 |
52 | КонецФункции
53 |
54 | Функция Получить() Экспорт
55 | Инициализировать();
56 | Возврат Соединение;
57 | КонецФункции
58 |
59 | Процедура Инициализировать()
60 |
61 | Если Соединение <> Неопределено Тогда
62 | Возврат;
63 | КонецЕсли;
64 |
65 | Соединение = Новый Соединение();
66 | Соединение.ТипСУБД = ТипСУБД(Соединение);
67 | Соединение.Сервер = Настройки.СерверSQL;
68 | Соединение.ИмяБазы = Настройки.ИмяБазыSQL;
69 | Соединение.ИмяПользователя = Настройки.ИмяПользователяSQL;
70 | Соединение.Пароль = Настройки.ПарольSQL;
71 |
72 | КонецПроцедуры
73 |
74 | Функция ОткрытьСоединение()
75 |
76 | Соединение.Открыть();
77 |
78 | Если Не Соединение.Открыто Тогда
79 | Логирователь.ВЛог("Не удалось установить соединение с СУБД", Истина);
80 | Возврат Ложь;
81 | КонецЕсли;
82 |
83 | Возврат Истина;
84 |
85 | КонецФункции
86 |
87 | Функция ТипСУБД(Соединение)
88 |
89 | ТипСУБД = Настройки.ТипСУБД;
90 | Если ТипСУБД = "MSSQLServer" Или Не ЗначениеЗаполнено(ТипСУБД) Тогда
91 | Возврат Соединение.ТипыСУБД.MSSQLServer;
92 | Иначе
93 | Завершатель.ЗавершитьПоОшибке("Не определен тип СУБД");
94 | Возврат Неопределено;
95 | КонецЕсли;
96 |
97 | КонецФункции
98 |
99 | &Желудь
100 | Процедура ПриСозданииОбъекта()
101 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗагрузитьРасширениеИзФайла.os:
--------------------------------------------------------------------------------
1 | // ЗагрузитьРасширениеИзФайла
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельКонфигуратора; // BSLLS:Typo-off
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 | &Пластилин
12 |
13 | &Пластилин
14 | Перем Логирователь; // BSLLS:Typo-off
15 |
16 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
17 |
18 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
19 | Возврат Ложь;
20 | КонецЕсли;
21 |
22 | Параметры = ПараметрыКоманды.Параметры;
23 | ИмяРасширения = Параметры.Получить("ИмяРасширения");
24 | ИмяФайла = Параметры.Получить("ИмяФайла");
25 |
26 | ОбновитьКонфигурациюИБ = Параметры.Получить("ОбновитьКонфигурациюИБ");
27 | Если Не ТипЗнч(ОбновитьКонфигурациюИБ) = Тип("Булево") Тогда
28 | ОбновитьКонфигурациюИБ = Ложь;
29 | КонецЕсли;
30 |
31 | Если НЕ ЗначениеЗаполнено(ИмяФайла) Или Не ЗначениеЗаполнено(ИмяРасширения) Тогда
32 | ТекстСообщения = "Не могу выполнить команду ""ЗагрузитьРасширениеИзФайла"""
33 | + " - не переданы параметры ""ИмяФайла"" или ""ИмяРасширения""";
34 | Логирователь.ВЛог(ТекстСообщения, Истина);
35 | Возврат Ложь;
36 | КонецЕсли;
37 |
38 | Конфигуратор = УправлятельКонфигуратора.Получить();
39 |
40 | Логирователь.ВЛог("Загружаю расширение " + ИмяРасширения + " из файла " + ИмяФайла);
41 |
42 | ПутьККаталогуCFe = Настройки.ПутьККаталогуCFe;
43 | ПутьКФайлу = ОбъединитьПути(ПутьККаталогуCFe, ИмяФайла);
44 |
45 | Если Не РаботаСФайлами.ФайлСуществует(ПутьКФайлу) Тогда
46 | Логирователь.ВЛог("Файл расширения на найден - " + ПутьКФайлу);
47 | Возврат Ложь;
48 | КонецЕсли;
49 |
50 | Попытка
51 | Конфигуратор.ЗагрузитьРасширениеИзФайла(ПутьКФайлу, ИмяРасширения, ОбновитьКонфигурациюИБ);
52 | Исключение
53 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
54 | Возврат Ложь;
55 | КонецПопытки;
56 |
57 | Логирователь.ВЛог("Расширение " + ИмяРасширения + " из файла " + ИмяФайла + " загружено");
58 |
59 | Возврат Истина;
60 |
61 | КонецФункции
62 |
63 | &Асинх
64 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
65 |
66 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
67 |
68 | КонецФункции
69 |
70 | &Желудь
71 | &Прозвище("Команда")
72 | Процедура ПриСозданииОбъекта()
73 |
74 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗагрузитьРасширениеВРежимеПредприятия.os:
--------------------------------------------------------------------------------
1 | // ЗагрузитьРасширениеВРежимеПредприятия
2 | #Использовать "..//../../src/Модули"
3 |
4 | Перем КомандаЗапуститьВРежимеПредприятия;
5 | Перем Логирователь; // BSLLS:Typo-off
6 |
7 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
8 |
9 | Параметры = ПараметрыКоманды.Параметры;
10 |
11 | ИмяРасширения = Параметры.Получить("ИмяРасширения");
12 | Если Не ЗначениеЗаполнено(ИмяРасширения) Тогда
13 | Логирователь.ВЛог("Команда: ЗагрузитьРасширениеВРежимеПредприятия - не указано имя расширения", Истина);
14 | Возврат Ложь;
15 | КонецЕсли;
16 |
17 | Путь = Параметры.Получить("Путь");
18 | Если Не ЗначениеЗаполнено(Путь) Тогда
19 | Путь = ПутьКФайлуРасширенияПоУмолчанию();
20 | КонецЕсли;
21 |
22 | Логирователь.ВЛог("Начинаю загрузку расширения """ + ИмяРасширения + """ в режиме предприятия");
23 |
24 | ОжидатьВыполнения = Истина;
25 | КлючиЗапуска = КлючЗапускаОбработки() + " " + КлючПараметровЗагрузкиРасширения(Путь, ИмяРасширения);
26 | КомандаЗапуститьВРежимеПредприятия.ЗапуститьВРежимеПредприятия(ОжидатьВыполнения, КлючиЗапуска);
27 | Возврат Истина;
28 |
29 | КонецФункции
30 |
31 | Функция КлючЗапускаОбработки()
32 |
33 | КлючЗапуска = СтрШаблон("/Execute ""%1\epf\ЗагрузитьРасширениеВРежимеПредприятия.epf""", ТекущийКаталог());
34 | Возврат КлючЗапуска;
35 |
36 | КонецФункции
37 |
38 | Функция КлючПараметровЗагрузкиРасширения(Путь, ИмяРасширения)
39 |
40 | Разделитель = ";";
41 | КлючЗапуска = СтрШаблон("Путь=%1%2", Путь, ИмяРасширения);
42 | КлючЗапуска = КлючЗапуска + Разделитель + "Перезаписывать";
43 | КлючЗапуска = КлючЗапуска + ";" + "ЗавершитьРаботуСистемы";
44 |
45 | КлючЗапуска = "/C " + """" + КлючЗапуска + """";
46 |
47 | Возврат КлючЗапуска;
48 |
49 | КонецФункции
50 |
51 | Функция ПутьКФайлуРасширенияПоУмолчанию()
52 | Возврат "./cfe/";
53 | КонецФункции
54 |
55 | &Асинх
56 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
57 |
58 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
59 |
60 | КонецФункции
61 |
62 | &Желудь
63 | &Прозвище("Команда")
64 | Процедура ПриСозданииОбъекта(&Пластилин("КомандаЗапуститьВРежимеПредприятия") _КомандаЗапуститьВРежимеПредприятия,
65 | &Пластилин("Логирователь") _Логирователь)
66 |
67 | КомандаЗапуститьВРежимеПредприятия = _КомандаЗапуститьВРежимеПредприятия;
68 | Логирователь = _Логирователь;
69 |
70 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗагрузитьКонфигурациюИзХранилища.os:
--------------------------------------------------------------------------------
1 | // ЗагрузитьКонфигурациюИзХранилища
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельКонфигуратора; // BSLLS:Typo-off
6 | &Пластилин
7 | Перем УправлятельХранилища; // BSLLS:Typo-off
8 |
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 |
12 | &Пластилин
13 | Перем Настройки;
14 |
15 | &Пластилин
16 | Перем Логирователь; // BSLLS:Typo-off
17 |
18 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
19 |
20 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
21 | Возврат Ложь;
22 | КонецЕсли;
23 |
24 | Параметры = ПараметрыКоманды.Параметры;
25 | ИмяРасширения = Параметры.Получить("ИмяРасширения");
26 | Если Не ЗначениеЗаполнено(ИмяРасширения) Тогда
27 | ИмяРасширения = "";
28 | КонецЕсли;
29 |
30 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
31 | ТекстДополнения = ". Расширение - " + ИмяРасширения;
32 | Иначе
33 | ТекстДополнения = "";
34 | КонецЕсли;
35 |
36 | Логирователь.ВЛог("Загрузка конфигурации из хранилища" + ТекстДополнения);
37 |
38 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
39 | Возврат ЗагрузитьКонфигурациюИзХранилищаДляРасширения(ИмяРасширения);
40 | Иначе
41 | Возврат ЗагрузитьКонфигурациюИзХранилища();
42 | КонецЕсли;
43 |
44 | КонецФункции
45 |
46 | Функция ЗагрузитьКонфигурациюИзХранилища()
47 |
48 | Конфигуратор = УправлятельКонфигуратора.Получить();
49 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
50 |
51 | Попытка
52 | НомерВерсии = 0;
53 | Конфигуратор.ЗагрузитьКонфигурациюИзХранилища(ПараметрыПодключения.ПутьКХранилищу,
54 | ПараметрыПодключения.ЛогинКХранилищу,
55 | ПараметрыПодключения.ПарольКХранилищу,
56 | НомерВерсии);
57 | Исключение
58 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
59 | Возврат Ложь;
60 | КонецПопытки;
61 |
62 | Возврат Истина;
63 |
64 | КонецФункции
65 |
66 | Функция ЗагрузитьКонфигурациюИзХранилищаДляРасширения(ИмяРасширения)
67 |
68 | Хранилище = УправлятельХранилища.Получить(ИмяРасширения);
69 |
70 | Попытка
71 | НомерВерсии = "";
72 | Хранилище.ОбновитьКонфигурациюНаВерсию(НомерВерсии);
73 | Исключение
74 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
75 | Возврат Ложь;
76 | КонецПопытки;
77 |
78 | Возврат Истина;
79 |
80 | КонецФункции
81 |
82 | &Асинх
83 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
84 |
85 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
86 |
87 | КонецФункции
88 |
89 | &Желудь
90 | &Прозвище("Команда")
91 | Процедура ПриСозданииОбъекта()
92 |
93 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/Модули/Общий.os:
--------------------------------------------------------------------------------
1 |
2 | Функция СвойствоСтруктуры(пСтруктура, Ключ, ЗначениеПоУмолчанию = Неопределено) Экспорт
3 |
4 | Если ТипЗнч(пСтруктура) <> Тип("Структура") Тогда
5 | Возврат ЗначениеПоУмолчанию;
6 | КонецЕсли;
7 |
8 | Результат = ЗначениеПоУмолчанию;
9 | Если пСтруктура.Свойство(Ключ, Результат) Тогда
10 | Возврат Результат;
11 | Иначе
12 | Возврат ЗначениеПоУмолчанию;
13 | КонецЕсли;
14 |
15 | КонецФункции
16 |
17 | Процедура ОбъединитьСоответствия(Приемник, Источник) Экспорт
18 |
19 | Для каждого КлючЗначение Из Источник Цикл
20 | Приемник.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
21 | КонецЦикла;
22 |
23 | КонецПроцедуры
24 |
25 | Функция ПризнакВключенияПараметра(ИмяПарамета, ДанныеПараметров) Экспорт
26 |
27 | Если ТипЗнч(ДанныеПараметров) = Тип("Структура") Тогда
28 | Признак = ДанныеПараметров[ИмяПарамета];
29 | ИначеЕсли ТипЗнч(ДанныеПараметров) = Тип("Массив") Тогда
30 | Признак = ДанныеПараметров.Найти(ИмяПарамета) <> Неопределено;
31 | Иначе
32 | Признак = ДанныеПараметров.Получить(ИмяПарамета);
33 | КонецЕсли;
34 |
35 | Если НЕ ЗначениеЗаполнено(Признак) Тогда
36 | Возврат Ложь;
37 | КонецЕсли;
38 |
39 | Возврат Булево(Признак);
40 |
41 | КонецФункции
42 |
43 | #Область Копирование_коллекций
44 |
45 | Функция СкопироватьРекурсивно(Источник) Экспорт
46 |
47 | Перем Приемник;
48 |
49 | ТипИсточника = ТипЗнч(Источник);
50 | Если ТипИсточника = Тип("Структура") Тогда
51 | Приемник = СкопироватьСтруктуру(Источник);
52 | ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда
53 | Приемник = СкопироватьСоответствие(Источник);
54 | ИначеЕсли ТипИсточника = Тип("Массив") Тогда
55 | Приемник = СкопироватьМассив(Источник);
56 | Иначе
57 | Приемник = Источник;
58 | КонецЕсли;
59 |
60 | Возврат Приемник;
61 |
62 | КонецФункции
63 |
64 | Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт
65 |
66 | СтруктураРезультат = Новый Структура;
67 |
68 | Для Каждого КлючИЗначение Из СтруктураИсточник Цикл
69 | СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
70 | КонецЦикла;
71 |
72 | Возврат СтруктураРезультат;
73 |
74 | КонецФункции
75 |
76 | Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт
77 |
78 | СоответствиеРезультат = Новый Соответствие;
79 |
80 | Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл
81 | СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
82 | КонецЦикла;
83 |
84 | Возврат СоответствиеРезультат;
85 |
86 | КонецФункции
87 |
88 | Функция СкопироватьМассив(МассивИсточник) Экспорт
89 |
90 | МассивРезультат = Новый Массив;
91 |
92 | Для Каждого Элемент Из МассивИсточник Цикл
93 | МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент));
94 | КонецЦикла;
95 |
96 | Возврат МассивРезультат;
97 |
98 | КонецФункции
99 |
100 | #КонецОбласти
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗахватитьОбъектыВХранилище.os:
--------------------------------------------------------------------------------
1 | // ЗахватитьОбъектыВХранилище
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельХранилища; // BSLLS:Typo-off
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 |
12 | &Пластилин
13 | Перем Логирователь; // BSLLS:Typo-off
14 |
15 | &Пластилин
16 | Перем Emoji;
17 |
18 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт
19 |
20 | Возврат ВыполнитьКомандуСПараметрами(, , , ПараметрыКоманды);
21 |
22 | КонецФункции
23 |
24 | &Асинх
25 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
26 |
27 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
28 |
29 | КонецФункции
30 |
31 | Функция ВыполнитьКомандуСПараметрами(ПоФайлу = Ложь, ИмяФайла = "",
32 | ПроверкаПодключения = Ложь, ПараметрыКоманды = Неопределено) Экспорт // BSLLS:UnusedParameters-off
33 |
34 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
35 | Возврат Ложь;
36 | КонецЕсли;
37 |
38 | СписокМетаданных = Настройки.СписокМетаданных;
39 | Если ПоФайлу
40 | И ПроверкаПодключения = Ложь
41 | И ЗначениеЗаполнено(СписокМетаданных)
42 | И СокрЛП(СписокМетаданных) = "*" Тогда
43 | ПоФайлу = Ложь;
44 | КонецЕсли;
45 |
46 | Если НЕ ПоФайлу Тогда
47 | Логирователь.ВЛог("Захватываю объекты в хранилище");
48 | Иначе
49 |
50 | ТекстСообщения = "Захватываю";
51 | Если Настройки.ОбновлятьОбъектыРекурсивно Тогда
52 | ТекстСообщения = ТекстСообщения + " рекурсивно";
53 | КонецЕсли;
54 |
55 | Если ЗначениеЗаполнено(СписокМетаданных) Тогда
56 | ТекстСообщения = ТекстСообщения + " объекты по списку метаданных: " + Символы.ПС + СписокМетаданных;
57 | Логирователь.ВЛог(ТекстСообщения, , Истина, , Emoji.Звезда());
58 | Иначе
59 | ТекстСообщения = ТекстСообщения + " объекты в хранилище по файлу ";
60 | Логирователь.ВЛог(ТекстСообщения + ИмяФайла);
61 | КонецЕсли;
62 |
63 | КонецЕсли;
64 |
65 | Хранилище = УправлятельХранилища.Получить();
66 |
67 | ПолучатьЗахваченныеОбъекты = Истина;
68 |
69 | Если ПоФайлу Тогда
70 | ПутьКФайлуСоСпискомОбъектов = Настройки.ПолныйПутьКФайлуНастроек(ИмяФайла);
71 | Иначе
72 | ПутьКФайлуСоСпискомОбъектов = "";
73 | КонецЕсли;
74 |
75 | Попытка
76 | Хранилище.ЗахватитьОбъектыВХранилище(ПутьКФайлуСоСпискомОбъектов,
77 | ПолучатьЗахваченныеОбъекты);
78 | Исключение
79 | Если ПроверкаПодключения Тогда
80 | ВызватьИсключение ОписаниеОшибки();
81 | Иначе
82 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
83 | Возврат Ложь;
84 | КонецЕсли;
85 | КонецПопытки;
86 |
87 | Если НЕ ПоФайлу Тогда
88 | Логирователь.ВЛог("Захват объектов в хранилище выполнен");
89 | Иначе
90 | Логирователь.ВЛог("Захват объектов в хранилище по файлу " + ИмяФайла + " выполнен");
91 | КонецЕсли;
92 |
93 | Возврат Истина;
94 |
95 | КонецФункции
96 |
97 | &Желудь
98 | &Прозвище("Команда")
99 | Процедура ПриСозданииОбъекта()
100 |
101 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаПодключитьсяКХранилищу.os:
--------------------------------------------------------------------------------
1 | // ПодключитьсяКХранилищу
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем УправлятельХранилища; // BSLLS:Typo-off
9 | &Пластилин
10 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
11 | &Пластилин
12 | Перем КомандаЗахватитьОбъектыВХранилище;
13 | &Пластилин
14 | Перем КомандаОтменитьЗахватОбъектовВХранилище;
15 |
16 | &Пластилин
17 | Перем Логирователь; // BSLLS:Typo-off
18 |
19 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
20 |
21 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
22 | Возврат Ложь;
23 | КонецЕсли;
24 |
25 | Параметры = ПараметрыКоманды.Параметры;
26 | ИмяРасширения = Параметры.Получить("ИмяРасширения");
27 | Если Не ЗначениеЗаполнено(ИмяРасширения) Тогда
28 | ИмяРасширения = "";
29 | КонецЕсли;
30 |
31 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
32 |
33 | ТекстДополнения = ". Расширение - " + ИмяРасширения;
34 |
35 | Иначе
36 |
37 | ТекстДополнения = "";
38 |
39 | // Проверка что база уже поключена, так быстрее.
40 | Отказ = Ложь;
41 | Подключено = ПодключеноКХранилищу(Отказ);
42 | Если Отказ Тогда
43 | Возврат Ложь;
44 | КонецЕсли;
45 |
46 | Если Подключено Тогда
47 | Логирователь.ВЛог("База к хранилищу подключена");
48 | Возврат Истина;
49 | КонецЕсли;
50 |
51 | КонецЕсли;
52 |
53 | ТекстСообщения = "Подключение к хранилищу";
54 | Логирователь.ВЛог(ТекстСообщения + ТекстДополнения);
55 |
56 | Хранилище = УправлятельХранилища.Получить(ИмяРасширения);
57 |
58 | Попытка
59 | ИгнорироватьНаличиеПодключеннойБД = Истина;
60 | ЗаменитьКонфигурациюБД = Истина;
61 | Хранилище.ПодключитьсяКХранилищу(ИгнорироватьНаличиеПодключеннойБД, ЗаменитьКонфигурациюБД);
62 | Исключение
63 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
64 | Возврат Ложь;
65 | КонецПопытки;
66 |
67 | ТекстСообщения = "Подключение к хранилищу выполнено";
68 | Логирователь.ВЛог(ТекстСообщения + ТекстДополнения);
69 |
70 | Возврат Истина;
71 |
72 | КонецФункции
73 |
74 | Функция ПодключеноКХранилищу(Отказ = Ложь)
75 |
76 | ФайлыНастроек = Настройки.ФайлыНастроек;
77 |
78 | Логирователь.ВЛог("Проверяю подключение базы к хранилищу");
79 |
80 | ПоФайлу = Истина;
81 | ИмяФайлаОбъектов = ФайлыНастроек.repo_test;
82 |
83 | Подключено = Истина;
84 |
85 | Попытка
86 | КомандаЗахватитьОбъектыВХранилище.ВыполнитьКомандуСПараметрами(ПоФайлу, ИмяФайлаОбъектов, Истина);
87 | КомандаОтменитьЗахватОбъектовВХранилище.ВыполнитьКомандуСПараметрами(ПоФайлу, ИмяФайлаОбъектов, Истина);
88 | Исключение
89 | ОписаниеОшибки = ОписаниеОшибки();
90 | Если СтрНайти(ОписаниеОшибки, "Ошибка захвата объектов в хранилище") > 0 Тогда
91 | Подключено = Ложь;
92 | Иначе
93 | Логирователь.ВЛог(ОписаниеОшибки, Истина, Истина);
94 | Отказ = Истина;
95 | Возврат Ложь;
96 | КонецЕсли;
97 | КонецПопытки;
98 |
99 | Возврат Подключено;
100 |
101 | КонецФункции
102 |
103 | &Асинх
104 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
105 |
106 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
107 |
108 | КонецФункции
109 |
110 | &Желудь
111 | &Прозвище("Команда")
112 | Процедура ПриСозданииОбъекта()
113 |
114 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/Модули/РаботаСФайлами.os:
--------------------------------------------------------------------------------
1 | Функция ПрочитатьYAMLФайл(Знач ПутьКФайлу) Экспорт // BSLLS:LatinAndCyrillicSymbolInWord-off
2 |
3 | Если СтрНачинаетсяС(ПутьКФайлу, "\") Тогда
4 | ПутьКФайлу = ТекущийКаталог() + ПутьКФайлу;
5 | КонецЕсли;
6 |
7 | МенеджерПараметров = Новый МенеджерПараметров();
8 | МенеджерПараметров.ИспользоватьПровайдерYAML();
9 | МенеджерПараметров.УстановитьФайлПараметров(ПутьКФайлу);
10 |
11 | МенеджерПараметров.Прочитать();
12 | Если Не МенеджерПараметров.ЧтениеВыполнено() Тогда
13 | ВызватьИсключение "Файл с настройками не найден по пути: " + ПутьКФайлу;
14 | КонецЕсли;
15 |
16 | Возврат МенеджерПараметров;
17 |
18 | КонецФункции
19 |
20 | Функция ПрочитатьФайлВМассивСтрок(ПутьКФайлу, ВызыватьИсключение = Истина,
21 | Логирователь = Неопределено, Монопольно = Ложь) Экспорт
22 |
23 | СтрокиДанных = Новый Массив;
24 |
25 | Файл = Новый Файл(ПутьКФайлу);
26 | Если Не Файл.Существует() Тогда
27 | ТекстСообщения = "Файл не найден - " + ПутьКФайлу;
28 | ВЛог(ТекстСообщения, ВызыватьИсключение, Логирователь, Истина);
29 | Возврат СтрокиДанных;
30 | КонецЕсли;
31 |
32 | ЧтениеТекста = Новый ЧтениеТекста;
33 |
34 | Попытка
35 | ЧтениеТекста.Открыть(ПутьКФайлу, "UTF-8", , , Монопольно);
36 | Исключение
37 | ВЛог(ОписаниеОшибки(), ВызыватьИсключение, Логирователь, Истина);
38 | Возврат СтрокиДанных;
39 | КонецПопытки;
40 |
41 | СтрокаДанных = ЧтениеТекста.ПрочитатьСтроку();
42 | Пока СтрокаДанных <> Неопределено Цикл
43 | Если ЗначениеЗаполнено(СтрокаДанных) Тогда
44 | СтрокиДанных.Добавить(СокрЛП(СтрокаДанных));
45 | КонецЕсли;
46 | СтрокаДанных = ЧтениеТекста.ПрочитатьСтроку();
47 | КонецЦикла;
48 |
49 | ЧтениеТекста.Закрыть();
50 |
51 | Возврат СтрокиДанных;
52 |
53 | КонецФункции
54 |
55 | Функция СформироватьИмяФайла(Имя, Расширение, НаДату = Неопределено) Экспорт
56 |
57 | Если НаДату = Неопределено Тогда
58 | НаДату = ТекущаяДата();
59 | КонецЕсли;
60 |
61 | Возврат Имя
62 | + "_"
63 | + Формат(НаДату, "ДФ=ггггММдд")
64 | + "."
65 | + СокрЛП(Расширение);
66 |
67 | КонецФункции
68 |
69 | Процедура ЗаписатьТекстовыйФайл(Текст, ПутьКФайлу) Экспорт
70 |
71 | ТекстовыйДокумент = Новый ТекстовыйДокумент;
72 | ТекстовыйДокумент.УстановитьТекст(Текст);
73 |
74 | ТекстовыйДокумент.Записать(ПутьКФайлу);
75 |
76 | КонецПроцедуры
77 |
78 | Процедура ДобавитьТекстВФайл(Текст, ПутьКФайлу) Экспорт
79 |
80 | Если НЕ ФайлСуществует(ПутьКФайлу) Тогда
81 | ЗаписатьТекстовыйФайл(Текст, ПутьКФайлу);
82 | Иначе
83 |
84 | ТекстовыйДокумент = Новый ТекстовыйДокумент;
85 | ТекстовыйДокумент.Прочитать(ПутьКФайлу);
86 |
87 | ТекстовыйДокумент.ДобавитьСтроку(Текст);
88 | ТекстовыйДокумент.Записать(ПутьКФайлу);
89 |
90 | КонецЕсли;
91 |
92 | КонецПроцедуры
93 |
94 | Процедура УдалитьФайл(ПутьКФайлу) Экспорт
95 |
96 | Если ФайлСуществует(ПутьКФайлу) Тогда
97 | УдалитьФайлы(ПутьКФайлу);
98 | КонецЕсли;
99 |
100 | КонецПроцедуры
101 |
102 | Функция ФайлСуществует(ПутьКФайлу) Экспорт
103 |
104 | ФайлПоиска = Новый Файл(ПутьКФайлу);
105 | Возврат ФайлПоиска.Существует();
106 |
107 | КонецФункции
108 |
109 | Процедура ВЛог(ТекстСообщения, ВызыватьИсключение = Истина, Логирователь = Неопределено, Ошибка = Ложь)
110 |
111 | Если ВызыватьИсключение Тогда
112 | ВызватьИсключение ТекстСообщения;
113 | Иначе
114 | Если Логирователь <> Неопределено Тогда
115 | Логирователь.ВЛог(ТекстСообщения, Ошибка);
116 | КонецЕсли;
117 | КонецЕсли;
118 |
119 | КонецПроцедуры
--------------------------------------------------------------------------------
/bat/commands/update_all.yaml:
--------------------------------------------------------------------------------
1 | Запуск:
2 | Параметры:
3 | sync_repo: "oscript sync_repo.os"
4 | command: "--Commands \\bat\\commands\\update_all.yaml"
5 | Команды:
6 | - "%sync_repo --ИдентификаторБазы BASE1 %command"
7 | - "%sync_repo --ИдентификаторБазы BASE2 %command"
8 | REPO:
9 | Уведомление:
10 | Параметры:
11 | ОтправлятьСообщенияВТелеграм: true
12 | Приветствие: "Забираю конфигурацию из хранилища через #Пауза. Ответственный #Ответственный #Nobase"
13 | Пауза: 180
14 | Команды:
15 | - ПоказатьПриветствие
16 | - УстановитьПаузу
17 | Команды:
18 | Параметры:
19 | ОтправлятьСообщенияВТелеграм: false
20 | Приветствие: "Работы с базой #ИмяБазы"
21 | Окончание: "Работы с базой #ИмяБазы завершены"
22 | КомментарийПриПомещенииВХранилище: "Обновление #Ответственный"
23 | КлючиЗапускаПредприятия: "/DisableStartupMessages /C ЗапуститьОбновлениеИнформационнойБазы,УдалитьРасширенияИнформационнойБазы"
24 | СниматьБлокировкуРегламентныхЗаданий: false
25 | Команды:
26 | - ПоказатьПриветствие
27 | - ПодключитьсяКХранилищу
28 | - ЗагрузитьКонфигурациюИзХранилища
29 | - ЗаблокироватьИБ
30 | - ОтключитьСеансыИнформационнойБазы
31 | - ОбновитьКонфигурациюБазыДанных
32 | - ПроверитьБлокировкуИБ
33 | - ПроверитьНаличиеАктивныйСеансовИБ
34 | - ЗапуститьВРежимеПредприятия
35 | - ПолучитьВерсиюКонфигурацииИзХранилища
36 | - СнятьБлокировкуИБ
37 | - ПоказатьЗавершение
38 | BASE1:
39 | Команды:
40 | Параметры:
41 | ОтправлятьСообщенияВТелеграм: true
42 | Приветствие: "Обновление базы #ИмяБазы через #Пауза. Ответственный #Ответственный"
43 | Начало: "Начинаю обновление базы #ИмяБазы"
44 | Окончание: "Обновление базы #ИмяБазы выполнено."
45 | Пауза: 0
46 | КлючиЗапускаПредприятия: "/DisableStartupMessages /C ЗапуститьОбновлениеИнформационнойБазы,УдалитьРасширенияИнформационнойБазы"
47 | СниматьБлокировкуРегламентныхЗаданий: true
48 | Команды:
49 | - ПоказатьНачало
50 | - ЗаблокироватьИБ
51 | - ОтключитьСеансыИнформационнойБазы
52 | - ЗагрузитьКонфигурациюИзХранилища
53 | - ОбновитьКонфигурациюБазыДанных
54 | - ПроверитьБлокировкуИБ
55 | - ПроверитьНаличиеАктивныйСеансовИБ
56 | - ЗапуститьВРежимеПредприятия
57 | - СнятьБлокировкуИБ
58 | - ПоказатьЗавершение
59 | BASE2:
60 | Команды:
61 | Параметры:
62 | ОтправлятьСообщенияВТелеграм: true
63 | Приветствие: "Обновление базы #ИмяБазы через #Пауза. Ответственный #Ответственный"
64 | Начало: "Начинаю обновление базы #ИмяБазы"
65 | Окончание: "Обновление базы #ИмяБазы выполнено."
66 | Пауза: 0
67 | КлючиЗапускаПредприятия: "/DisableStartupMessages /C ЗапуститьОбновлениеИнформационнойБазы,УдалитьРасширенияИнформационнойБазы"
68 | СниматьБлокировкуРегламентныхЗаданий: true
69 | Команды:
70 | - ПоказатьНачало
71 | - ЗаблокироватьИБ
72 | - ОтключитьСеансыИнформационнойБазы
73 | - ЗагрузитьКонфигурациюИзХранилища
74 | - ОбновитьКонфигурациюБазыДанных
75 | - ПроверитьБлокировкуИБ
76 | - ПроверитьНаличиеАктивныйСеансовИБ
77 | - ЗапуститьВРежимеПредприятия
78 | - СнятьБлокировкуИБ
79 | - ПоказатьЗавершение
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗахватитьОбъектыВХранилищеПоСпискуИзФайла.os:
--------------------------------------------------------------------------------
1 | // BSLLS:LatinAndCyrillicSymbolInWord-off
2 | // ЗахватитьОбъектыВХранилищеПоСпискуИзФайла
3 | #Использовать "..//../../src/Модули"
4 |
5 | &Пластилин
6 | Перем КомандаЗахватитьОбъектыВХранилище;
7 |
8 | &Пластилин
9 | Перем Настройки;
10 |
11 | Перем ТаблицаМетаданных;
12 |
13 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
14 |
15 | СписокМетаданных = СокрЛП(Настройки.СписокМетаданных);
16 | Если ЗначениеЗаполнено(СписокМетаданных) Тогда
17 | ПреобразоватьДанныеИзСпискаВТаблицуМетаданных(СписокМетаданных);
18 | Иначе
19 | ПутьКФайлу_meta = Настройки.ПолныйПутьКФайлуНастроек(Настройки.ФайлыНастроек.metadata);
20 | ПреобразоватьДанныеИзФайлаВТаблицуМетаданных(ПутьКФайлу_meta);
21 | КонецЕсли;
22 |
23 | ИмяФайлаMetadata_merge = Настройки.ФайлыНастроек.metadata_merge;
24 | ОбработатьТаблицуМетаданныхВXML(ИмяФайлаMetadata_merge);
25 |
26 | Возврат КомандаЗахватитьОбъектыВХранилище.ВыполнитьКомандуСПараметрами(Истина, ИмяФайлаMetadata_merge);
27 |
28 | КонецФункции
29 |
30 | Процедура ПреобразоватьДанныеИзФайлаВТаблицуМетаданных(ПутьКФайлу_meta)
31 |
32 | Метаданные = РаботаСФайлами.ПрочитатьФайлВМассивСтрок(ПутьКФайлу_meta);
33 | ПреобразоватьДанныеИзМассиваВТаблицуМетаданных(Метаданные);
34 |
35 | КонецПроцедуры
36 |
37 | Процедура ПреобразоватьДанныеИзСпискаВТаблицуМетаданных(СписокМетаданных)
38 |
39 | Метаданные = СтрРазделить(СписокМетаданных, Символы.ПС);
40 | ПреобразоватьДанныеИзМассиваВТаблицуМетаданных(Метаданные);
41 |
42 | КонецПроцедуры
43 |
44 | Процедура ПреобразоватьДанныеИзМассиваВТаблицуМетаданных(Метаданные)
45 |
46 | ИмяКонфигурации = Настройки.ИмяКонфигурации;
47 |
48 | Рекурсивно = Настройки.ОбновлятьОбъектыРекурсивно;
49 |
50 | ТаблицаМетаданных.Очистить();
51 | Для каждого ПолноеИмя Из Метаданные Цикл
52 |
53 | Если НЕ ЗначениеЗаполнено(ПолноеИмя) Тогда
54 | Продолжить;
55 | КонецЕсли;
56 |
57 | НоваяСтрока = ТаблицаМетаданных.Добавить();
58 | НоваяСтрока.ПолноеИмя = СокрЛП(ПолноеИмя);
59 |
60 | Если ПолноеИмя = ИмяКонфигурации Тогда
61 | НоваяСтрока.Рекурсивно = Ложь;
62 | Иначе
63 | НоваяСтрока.Рекурсивно = Рекурсивно;
64 | КонецЕсли;
65 |
66 | КонецЦикла;
67 |
68 | КонецПроцедуры
69 |
70 | Процедура ОбработатьТаблицуМетаданныхВXML(ИмяФайлаMetadata_merge)
71 |
72 | ПутьКФайлу_merge = Настройки.ПолныйПутьКФайлуНастроек(ИмяФайлаMetadata_merge);
73 |
74 | ЗаписьXML = Новый ЗаписьXML;
75 | ЗаписьXML.ОткрытьФайл(ПутьКФайлу_merge);
76 |
77 | ЗаписьXML.ЗаписатьНачалоЭлемента("Objects");
78 | ЗаписьXML.ЗаписатьАтрибут("xmlns", XMLСтрока("http://v8.1c.ru/8.3/config/objects"));
79 | ЗаписьXML.ЗаписатьАтрибут("version", XMLСтрока("1.0"));
80 |
81 | Для каждого СтрокаТаблицы Из ТаблицаМетаданных Цикл
82 |
83 | ЗаписьXML.ЗаписатьНачалоЭлемента("Object");
84 |
85 | ЗаписьXML.ЗаписатьАтрибут("fullName", СтрокаТаблицы.ПолноеИмя);
86 |
87 | Если СтрокаТаблицы.Рекурсивно = Истина Тогда
88 | includeChildObjects = "true";
89 | Иначе
90 | includeChildObjects = "false";
91 | КонецЕсли;
92 | ЗаписьXML.ЗаписатьАтрибут("includeChildObjects", includeChildObjects);
93 |
94 | ЗаписьXML.ЗаписатьКонецЭлемента();
95 |
96 | КонецЦикла;
97 |
98 | ЗаписьXML.ЗаписатьКонецЭлемента();
99 | ЗаписьXML.Закрыть();
100 |
101 | КонецПроцедуры
102 |
103 | &Асинх
104 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
105 |
106 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
107 |
108 | КонецФункции
109 |
110 | &Желудь
111 | &Прозвище("Команда")
112 | Процедура ПриСозданииОбъекта()
113 |
114 | ТаблицаМетаданных = Новый ТаблицаЗначений();
115 | ТаблицаМетаданных.Колонки.Добавить("ПолноеИмя");
116 | ТаблицаМетаданных.Колонки.Добавить("Рекурсивно", Новый ОписаниеТипов("Булево"));
117 |
118 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаЗапуститьВнешниеОбработкиИзРепозитория.os:
--------------------------------------------------------------------------------
1 | // ЗапуститьВнешниеОбработкиИзРепозитория
2 | #Использовать "..//../../src/Модули"
3 |
4 | Перем КомандаЗапуститьВРежимеПредприятия;
5 | Перем УправлятельГит; // BSLLS:Typo-off
6 | Перем Логирователь; // BSLLS:Typo-off
7 |
8 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт // BSLLS:UnusedParameters-off
9 |
10 | Параметры = ПараметрыКоманды.Параметры;
11 | РабочийКаталог = Параметры.Получить("РабочийКаталог");
12 | РабочийКаталогПолный = ОбъединитьПути(ТекущийКаталог(), РабочийКаталог);
13 | ИмяРепозитория = Параметры.Получить("ИмяРепозитория");
14 |
15 | ПропускатьПриОшибке = ПрообразованияТипов.БулевоИзСтроки(Параметры.Получить("ПропускатьПриОшибке"));
16 |
17 | Логирователь.ВЛог("Начинаю запуск внешних обработок из репозитория", , Ложь);
18 |
19 | РезультатКлонирования = КлонироватьРепозиторий(РабочийКаталогПолный, ИмяРепозитория, Параметры);
20 | Если РезультатКлонирования = Ложь И ПропускатьПриОшибке <> Истина Тогда
21 | Возврат РезультатКлонирования;
22 | КонецЕсли;
23 |
24 | КаталогОбработокПолный = КаталогОбработокПолный(РабочийКаталогПолный, ИмяРепозитория);
25 | РезультатВыполнения = ЗапуститьОбработкиИзКаталога(КаталогОбработокПолный);
26 |
27 | Возврат РезультатВыполнения;
28 |
29 | КонецФункции
30 |
31 | Функция ЗапуститьОбработкиИзКаталога(КаталогПолный)
32 |
33 | НайденныеФайлы = НайтиФайлы(КаталогПолный, "*.epf");
34 | Если НайденныеФайлы.Количество() > 0 Тогда
35 |
36 | Для каждого ИмяФайлаОбработки Из НайденныеФайлы Цикл
37 |
38 | Логирователь.ВЛог("Запускаю обработку: " + ИмяФайлаОбработки);
39 |
40 | ОжидатьВыполнения = Истина;
41 | КлючиЗапуска = КлючЗапускаОбработки(КаталогПолный, ИмяФайлаОбработки)
42 | + " "
43 | + КлючиПараметров();
44 | КомандаЗапуститьВРежимеПредприятия.ЗапуститьВРежимеПредприятия(ОжидатьВыполнения, КлючиЗапуска);
45 |
46 | КонецЦикла;
47 |
48 | Иначе
49 | Логирователь.ВЛог("Обработок в каталоге: " + КаталогПолный + " не обнаружено");
50 | КонецЕсли;
51 |
52 | Возврат Истина;
53 |
54 | КонецФункции
55 |
56 | Функция КлючЗапускаОбработки(КаталогОбработокПолный, ИмяФайлабработки)
57 |
58 | КлючЗапуска = СтрШаблон("/Execute ""%1\%2""", КаталогОбработокПолный, ИмяФайлабработки);
59 | Возврат КлючЗапуска;
60 |
61 | КонецФункции
62 |
63 | Функция КаталогОбработокПолный(РабочийКаталог, ИмяРепозитория)
64 |
65 | КаталогРепозитория = ОбъединитьПути(РабочийКаталог, ИмяРепозитория);
66 |
67 | // Пример: 20240701
68 | КаталогОбработок = Формат(ТекущаяДата(), "ДФ=ггММдд");
69 |
70 | ПолныйПуть = ОбъединитьПути(КаталогРепозитория, КаталогОбработок);
71 | Возврат ПолныйПуть;
72 |
73 | КонецФункции
74 |
75 | Функция КлючиПараметров()
76 |
77 | КлючиПараметров = "ЗапуститьОбработчик;ЗавершитьРаботуСистемы";
78 | КлючиПараметров = "/C " + """" + КлючиПараметров + """";
79 |
80 | Возврат КлючиПараметров;
81 |
82 | КонецФункции
83 | Функция КлонироватьРепозиторий(РабочийКаталог, ИмяРепозитория, Параметры)
84 |
85 | АдресРепозитория = Параметры.Получить("АдресРепозитория");
86 | Токен = Параметры.Получить("Токен");
87 |
88 | ПутьРепозиторияСТокеном = "https://oauth2:"
89 | + Токен
90 | + "@"
91 | + АдресРепозитория
92 | + ".git";
93 |
94 | Результат = УправлятельГит.КлонироватьИлиПолучитьИзмененияРепозитория(РабочийКаталог,
95 | ИмяРепозитория,
96 | ПутьРепозиторияСТокеном);
97 | Возврат Результат;
98 |
99 | КонецФункции
100 |
101 | &Асинх
102 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
103 |
104 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
105 |
106 | КонецФункции
107 |
108 | &Желудь
109 | &Прозвище("Команда")
110 | Процедура ПриСозданииОбъекта(&Пластилин("КомандаЗапуститьВРежимеПредприятия") _КомандаЗапуститьВРежимеПредприятия,
111 | &Пластилин("УправлятельГит") _УправлятельГит,
112 | &Пластилин("Логирователь") _Логирователь)
113 |
114 | КомандаЗапуститьВРежимеПредприятия = _КомандаЗапуститьВРежимеПредприятия;
115 | УправлятельГит = _УправлятельГит;
116 | Логирователь = _Логирователь;
117 |
118 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/Настройки.os:
--------------------------------------------------------------------------------
1 | // BSLLS:ExportVariables-off
2 |
3 | // Массивы данных
4 | Перем КомандыВыполнения Экспорт; // порядок выполнения команд
5 | Перем ГрупповыеКоманды Экспорт;
6 |
7 | // Соответствия параметров из конфига
8 | &Деталька("Общие")
9 | Перем ПараметрыОбщие Экспорт;
10 | Перем ПараметрыРасписания Экспорт;
11 | Перем ПараметрыПлатформы Экспорт;
12 | Перем ПараметрыБазы Экспорт;
13 | Перем ПараметрыКонфигурации Экспорт;
14 |
15 | // Структуры собранных параметров
16 | Перем ПараметрыПодключения Экспорт;
17 | Перем ПараметрыКоманд Экспорт;
18 | Перем ПараметрыТелеграм Экспорт;
19 | Перем ПараметрыDebug Экспорт;
20 | Перем ФайлыНастроек Экспорт;
21 |
22 | Перем Идентификатор Экспорт;
23 | Перем ИмяКонфигурации Экспорт;
24 |
25 | // Контроль расписания
26 | Перем Расписание Экспорт;
27 |
28 | // Платформа
29 | Перем ПутьКПлатформе Экспорт;
30 | Перем ВерсияПлатформы Экспорт;
31 |
32 | // База
33 | Перем ИмяБазы Экспорт;
34 | Перем СерверБазы Экспорт;
35 | Перем ПортБазы Экспорт;
36 |
37 | // RAS
38 | Перем СерверRAS Экспорт;
39 | Перем ПортRAS Экспорт;
40 |
41 | // Конфигуратор
42 | Перем ЛогинККонфигуратору Экспорт;
43 | Перем ПарольККонфигуратору Экспорт;
44 |
45 | // Хранилище
46 | Перем ПутьКХранилищу Экспорт;
47 | Перем ЛогинКХранилищу Экспорт;
48 | Перем ПарольКХранилищу Экспорт;
49 |
50 | // SQL
51 | Перем ТипСУБД Экспорт;
52 | Перем СерверSQL Экспорт;
53 | Перем ИмяБазыSQL Экспорт;
54 | Перем ИмяПользователяSQL Экспорт;
55 | Перем ПарольSQL Экспорт;
56 |
57 | // Блокировка
58 | Перем СообщениеПриБлокировкиИБ Экспорт;
59 | Перем КодДоступаПриБлокировкиИБ Экспорт;
60 |
61 | // Соответствие расширений конфигурации со структурой настроек
62 | // Имя
63 | // ПутьКХранилищу
64 | // ЛогинКХранилищу
65 | // ПарольКХранилищу
66 | Перем РасширенияКонфигурации Экспорт;
67 |
68 | // Каталоги
69 | Перем ПутьККаталогуCF Экспорт;
70 | Перем ПутьККаталогуCFe Экспорт;
71 |
72 | // Доп. параметры
73 | Перем ИдентификаторБазы Экспорт;
74 | Перем ИдентификаторГрупповыхКоманд Экспорт;
75 | Перем РежимDebug Экспорт;
76 | Перем ПозицияВГрупповой Экспорт;
77 | Перем ПутьКФайлуБлокировкиЗапуска Экспорт;
78 | Перем Фоново Экспорт;
79 | Перем ИспользоватьPowerShell Экспорт;
80 | Перем ПаузаПередЗапуском Экспорт;
81 | Перем СписокМетаданных Экспорт;
82 | Перем ОбновлятьОбъектыРекурсивно Экспорт;
83 | Перем ИспользоватьДинамическоеОбновление Экспорт;
84 | Перем ОставитьБлокировкуИБ Экспорт;
85 |
86 | // autumn-properties.yml;
87 | &Деталька("Общие.Ответственный")
88 | Перем Ответственный Экспорт;
89 | &Деталька("Общие.Debug.ФайлНастроек")
90 | Перем Debug_ФайлНастроек Экспорт;
91 |
92 | // Личные
93 | &Деталька("Личные.Конфигуратор.Логин")
94 | Перем ЛичныеЛогинККонфигуратору Экспорт;
95 | &Деталька("Личные.Конфигуратор.Пароль")
96 | Перем ЛичныеПарольККонфигуратору Экспорт;
97 |
98 | Функция ПолныйПутьКФайлуНастроек(ИмяФайла, КаталогНастроек = Неопределено) Экспорт
99 |
100 | Если КаталогНастроек = Неопределено Тогда
101 | КаталогНастроек = ФайлыНастроек.Каталог;
102 | КонецЕсли;
103 |
104 | Возврат ТекущийКаталог()
105 | + "\"
106 | + КаталогНастроек
107 | + "\"
108 | + ИмяФайла;
109 |
110 | КонецФункции
111 |
112 | Функция СформироватьПутьКФайлуБлокировкиЗапуска(Позиция) Экспорт
113 |
114 | стрПозиция = Формат(Позиция, "ЧН=; ЧГ=");
115 | ИмяФайла = "synclock_" + стрПозиция;
116 | ПутьКФайлу = ОбъединитьПути(ТекущийКаталог(), ИмяФайла);
117 | ПутьКФайлу = ПутьКФайлу + ".txt";
118 |
119 | Возврат ПутьКФайлу;
120 |
121 | КонецФункции
122 |
123 | &Желудь
124 | Процедура ПриСозданииОбъекта()
125 |
126 | КомандыВыполнения = Новый Массив;
127 | ГрупповыеКоманды = Новый Массив;
128 |
129 | ПараметрыПодключения = Новый Структура;
130 | ПараметрыКоманд = Новый Структура;
131 | ПараметрыТелеграм = Новый Структура;
132 | ПараметрыDebug = Новый Структура;
133 | ФайлыНастроек = Новый Структура;
134 |
135 | ИдентификаторБазы = "";
136 | ИдентификаторГрупповыхКоманд = "";
137 |
138 | Расписание = Новый Массив;
139 |
140 | Фоново = Ложь;
141 | ИспользоватьPowerShell = Ложь;
142 |
143 | РежимDebug = Истина;
144 | ПозицияВГрупповой = 0;
145 |
146 | Идентификатор = "";
147 | СписокМетаданных = "";
148 |
149 | РасширенияКонфигурации = Новый Соответствие;
150 | ПаузаПередЗапуском = 0;
151 |
152 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаОтключитьСеансыИнформационнойБазы.os:
--------------------------------------------------------------------------------
1 | // ОтключитьСеансыИнформационнойБазы
2 | #Использовать "..//../../src/Модули"
3 | #Использовать async
4 |
5 | &Пластилин
6 | Перем Настройки;
7 |
8 | &Пластилин
9 | Перем УправлятельКластера; // BSLLS:Typo-off
10 | &Пластилин
11 | Перем УправлятельКластераАсинх; // BSLLS:Typo-off
12 |
13 | &Пластилин
14 | Перем Логирователь; // BSLLS:Typo-off
15 |
16 | Функция ВыполнитьКоманду(ПараметрыКоманды) Экспорт
17 |
18 | Если НЕ ТребуетВыполнения() Тогда
19 | Возврат Истина;
20 | КонецЕсли;
21 |
22 | Проверка = Общий.СвойствоСтруктуры(ПараметрыКоманды, "Проверка", Ложь);
23 | Возврат ВыполнитьКомандуСПараметрами(, , , Проверка, ПараметрыКоманды);
24 |
25 | КонецФункции
26 |
27 | &Асинх
28 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
29 |
30 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
31 |
32 | КонецФункции
33 |
34 | Функция ТребуетВыполнения()
35 |
36 | Если Настройки.ИспользоватьДинамическоеОбновление Тогда
37 | Возврат Ложь;
38 | КонецЕсли;
39 |
40 | Возврат Истина;
41 |
42 | КонецФункции
43 |
44 | Функция ВыполнитьКомандуСПараметрами(ПопыткаОтключения = 1,
45 | КоличествоПопыток = 10,
46 | ВыводитьЛог = Истина,
47 | Проверка = Ложь,
48 | ПараметрыКоманды = Неопределено) // BSLLS:UnusedParameters-off
49 |
50 |
51 | Параметры = ПараметрыКоманды.Параметры;
52 |
53 | ПриложенияИсключения = Параметры.Получить("ПриложенияИсключения");
54 | Если ПриложенияИсключения = Неопределено Тогда
55 | ПриложенияИсключения = "";
56 | КонецЕсли;
57 |
58 | Кластер = УправлятельКластера.Получить();
59 |
60 | ВТелеграм = НЕ Проверка;
61 |
62 | Если ВыводитьЛог Тогда
63 | Если Проверка Тогда
64 | Логирователь.ВЛог("Проверяю наличие активных сеансов ИБ", , Ложь);
65 | Иначе
66 | Если ПопыткаОтключения = 1 Тогда
67 | Логирователь.ВЛог("Отключаю сеансы и соединения ИБ", , ВТелеграм);
68 | КонецЕсли;
69 | Логирователь.ВЛог("Попытка №" + Строка(ПопыткаОтключения) + " отключения сеансов и соединений ИБ");
70 | КонецЕсли;
71 | КонецЕсли;
72 |
73 | ПараметрыПодключения = Настройки.ПараметрыПодключения;
74 | ИмяБазы = ПараметрыПодключения.ИмяБазы;
75 |
76 | КоличествоИсключений = 0;
77 |
78 | Попытка
79 | ОтключитьСеансыИнформационнойБазы(ИмяБазы, Кластер, ПриложенияИсключения, КоличествоИсключений);
80 | Исключение
81 | Логирователь.ВЛог(ОписаниеОшибки(), Ложь, Истина); // не уходим, пытаемся повторно запустить
82 | КонецПопытки;
83 |
84 | Попытка
85 | ТаблицаСеансов = Кластер.СписокСеансовИнформационнойБазы(ИмяБазы);
86 | Исключение
87 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
88 | Возврат Ложь;
89 | КонецПопытки;
90 |
91 | Если ТаблицаСеансов.Количество() - КоличествоИсключений > 0 Тогда
92 |
93 | ПопыткаОтключения = ПопыткаОтключения + 1;
94 | Если ПопыткаОтключения > КоличествоПопыток Тогда
95 | Логирователь.ВЛог("Не удалось отключить соединения ИБ", Истина, ВТелеграм);
96 | Возврат Ложь;
97 | Иначе
98 | ВыполнитьКомандуСПараметрами(ПопыткаОтключения, КоличествоПопыток, ВыводитьЛог, Проверка, ПараметрыКоманды);
99 | КонецЕсли;
100 |
101 | ПопыткаОтключения = ПопыткаОтключения + 1;
102 |
103 | КонецЕсли;
104 |
105 | Если ВыводитьЛог Тогда
106 | Если Проверка Тогда
107 | Логирователь.ВЛог("Проверка наличие активных сеансов выполнена");
108 | Иначе
109 | Логирователь.ВЛог("Сеансы и соединения ИБ отключены");
110 | КонецЕсли;
111 | КонецЕсли;
112 |
113 | Возврат Истина;
114 |
115 | КонецФункции
116 |
117 | Функция ОтключитьСеансыИнформационнойБазы(ИмяБазы, Кластер, ПриложенияИсключения = "", КоличествоИсключений = 0)
118 |
119 | Ждем = Новый Массив();
120 |
121 | СеансыБазы = Кластер.СписокСеансовИнформационнойБазы(ИмяБазы);
122 |
123 | ПаузаМеждуВызовами = УправлятельКластераАсинх.ПаузаМеждуВызовами();
124 | КоличествоОперацийЗаВызов = УправлятельКластераАсинх.КоличествоОперацийЗаВызов();
125 |
126 | КоличествоСеансов = СеансыБазы.Количество();
127 | СеансыКОтключению = Новый Массив;
128 | ПозицияСеанса = 0;
129 |
130 | Для Каждого Сеанс Из СеансыБазы Цикл
131 |
132 | ПозицияСеанса = ПозицияСеанса + 1;
133 |
134 | Если ЗначениеЗаполнено(ПриложенияИсключения)
135 | И СтрНайти(ПриложенияИсключения, Сеанс.Приложение) > 0 Тогда
136 |
137 | КоличествоИсключений = КоличествоИсключений + 1;
138 | Продолжить;
139 |
140 | КонецЕсли;
141 |
142 | СеансыКОтключению.Добавить(Сеанс);
143 | Если СеансыКОтключению.Количество() >= КоличествоОперацийЗаВызов
144 | Или ПозицияСеанса = КоличествоСеансов Тогда
145 |
146 | СеансыКОтключениюКопия = Общий.СкопироватьМассив(СеансыКОтключению);
147 | Обещание = УправлятельКластераАсинх.ОтключитьСеансыИнформационнойБазы(Кластер, СеансыКОтключениюКопия);
148 | Ждем.Добавить(Обещание);
149 |
150 | СеансыКОтключению.Очистить();
151 |
152 | Если ПозицияСеанса < КоличествоСеансов Тогда
153 | Приостановить(ПаузаМеждуВызовами);
154 | КонецЕсли;
155 |
156 | КонецЕсли;
157 |
158 | КонецЦикла;
159 |
160 | Если Ждем.Количество() = 0 Тогда
161 | Возврат Истина;
162 | КонецЕсли;
163 |
164 | Обещания.ОжидатьВсе(Ждем);
165 |
166 | Для каждого Обещание Из Ждем Цикл
167 |
168 | Результат = Обещание.Получить();
169 | Если Результат <> Истина Тогда
170 | Возврат Ложь;
171 | КонецЕсли;
172 |
173 | КонецЦикла;
174 |
175 | Возврат Истина;
176 |
177 | КонецФункции
178 |
179 | &Желудь
180 | &Прозвище("Команда")
181 | Процедура ПриСозданииОбъекта()
182 |
183 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/ОбработкаРезультатаSQL.os:
--------------------------------------------------------------------------------
1 | &Пластилин
2 | Перем Логирователь; // BSLLS:Typo-off
3 |
4 | Функция Обработать(Результат, Команда, ТипКоманды, ПараметрыКоманды) Экспорт
5 |
6 | ПараметрыСкрипта = ПараметрыКоманды.Параметры;
7 | Имя = ПараметрыСкрипта.Получить("Имя");
8 |
9 | Если ЭтоЗапрос(ТипКоманды) Тогда
10 | ЭтоЗапрос = Истина;
11 | ПредставлениеКоманды = "Запрос " + Имя;
12 | Иначе
13 | ЭтоЗапрос = Ложь;
14 | ПредставлениеКоманды = "Скрипт " + Имя;
15 | КонецЕсли;
16 |
17 | Если Результат = Неопределено Тогда
18 | Логирователь.ВЛог("Не удалось выполнить - " + ПредставлениеКоманды + " СУБД");
19 | Возврат Ложь;
20 | КонецЕсли;
21 |
22 | Если ЭтоЗапрос Тогда
23 | Возврат ОбработатьРезультатЗапроса(Результат, Команда, Имя, ПараметрыКоманды);
24 | Иначе
25 | Возврат ОбработатьРезультатВыполненияСкрипта(Результат, Команда, Имя, ПараметрыКоманды);
26 | КонецЕсли;
27 |
28 | КонецФункции
29 |
30 | Функция ОбработатьРезультатВыполненияСкрипта(Результат, Команда, Имя, ПараметрыКоманды) // BSLLS:UnusedParameters-off
31 |
32 | ПараметрыСкрипта = ПараметрыКоманды.Параметры;
33 | ОжидатьРезультат = ПараметрыСкрипта.Получить("ОжидатьРезультат");
34 | Если ОжидатьРезультат = Неопределено Тогда
35 | ОжидатьРезультат = 1;
36 | Иначе
37 | ОжидатьРезультат = Число(ОжидатьРезультат);
38 | КонецЕсли;
39 |
40 | Если Результат = ОжидатьРезультат Тогда
41 | Возврат Истина;
42 | Иначе
43 | ТекстОшибки = "
44 | |Не верный результат выполнения скрипта " + Имя + ".
45 | | Результат: " + Строка(Результат) + "
46 | | Ожидаем: " + Строка(ОжидатьРезультат);
47 | Логирователь.ВЛог(ТекстОшибки, Истина, , , , Ложь);
48 | Возврат Ложь;
49 | КонецЕсли;
50 |
51 | КонецФункции
52 |
53 | Функция ОбработатьРезультатЗапроса(Результат, Команда, Имя, ПараметрыКоманды) // BSLLS:UnusedParameters-off
54 |
55 | ТипРезультата = ТипЗнч(Результат);
56 | Если ТипРезультата <> Тип("ТаблицаЗначений") Тогда
57 | Логирователь.ВЛог("Не определен тип результата запроса - " + Имя + ", тип: " + Строка(ТипРезультата));
58 | Возврат Ложь;
59 | КонецЕсли;
60 |
61 | ПараметрыСкрипта = ПараметрыКоманды.Параметры;
62 | ОжидатьКоличествоСтрок = ПараметрыСкрипта.Получить("ОжидатьКоличествоСтрок");
63 | Если ОжидатьКоличествоСтрок <> Неопределено Тогда
64 | Возврат ОбработатьРезультатЗапросаПоКоличествуСтрок(Результат, ОжидатьКоличествоСтрок,
65 | Команда, Имя, ПараметрыКоманды);
66 | Иначе
67 | Возврат ВывестиРезультатЗапроса(Результат, Команда, Имя, ПараметрыКоманды);
68 | КонецЕсли;
69 |
70 | КонецФункции
71 |
72 | Функция ОбработатьРезультатЗапросаПоКоличествуСтрок(Результат, ОжидатьКоличествоСтрок, Команда, Имя, ПараметрыКоманды)
73 |
74 | ОжидатьКоличествоСтрок = Число(ОжидатьКоличествоСтрок);
75 |
76 | КоличествоСтрок = Результат.Количество();
77 |
78 | Если КоличествоСтрок = ОжидатьКоличествоСтрок Тогда
79 | Возврат Истина;
80 | КонецЕсли;
81 |
82 | ПараметрыСкрипта = ПараметрыКоманды.Параметры;
83 |
84 | ПовторныхОтправок = ПараметрыСкрипта.Получить("ПовторныхОтправок");
85 | Если ПовторныхОтправок = Неопределено Тогда
86 | ПовторныхОтправок = 0;
87 | Иначе
88 | ПовторныхОтправок = Число(ПовторныхОтправок);
89 | КонецЕсли;
90 |
91 | ПовторнаяОтправка = ПараметрыСкрипта.Получить("ПовторнаяОтправка");
92 | Если ПовторнаяОтправка = Неопределено Тогда
93 | ПовторнаяОтправка = 0;
94 | Иначе
95 | ПовторнаяОтправка = Число(ПовторнаяОтправка);
96 | КонецЕсли;
97 |
98 | ПовторнаяОтправка = ПовторнаяОтправка + 1;
99 |
100 | ТекстСообщения = "
101 | |Результат выполнения запроса - " + Имя + "
102 | | Количество строк: " + Строка(КоличествоСтрок) + "
103 | | Ожидаемых: " + Строка(ОжидатьКоличествоСтрок);
104 |
105 | Если ПовторнаяОтправка > ПовторныхОтправок Тогда
106 | Логирователь.ВЛог(ТекстСообщения, Истина, , , , Ложь);
107 | Возврат Ложь;
108 | КонецЕсли;
109 |
110 | СекундаМлс = 1000;
111 | ПаузаСекунд = ПараметрыСкрипта.Получить("Пауза");
112 | Если ПаузаСекунд <> Неопределено Тогда
113 | ПаузаСекунд = Число(ПаузаСекунд);
114 | Приостановить(ПаузаСекунд * СекундаМлс);
115 | КонецЕсли;
116 |
117 | ПараметрыСкрипта.Вставить("ПовторнаяОтправка", ПовторнаяОтправка);
118 | ПараметрыКоманды.Вставить("Параметры", ПараметрыСкрипта);
119 |
120 | ТекстСообщения = ТекстСообщения + "
121 | |Повторное выполнение запроса - " + Имя
122 | + ". Попытка №" + Строка(ПовторнаяОтправка);
123 | Логирователь.Отладка(ТекстСообщения);
124 |
125 | Возврат Команда.ВыполнитьКоманду(ПараметрыКоманды);
126 |
127 | КонецФункции
128 |
129 | Функция ВывестиРезультатЗапроса(ТаблицаРезультата, Команда, Имя, ПараметрыКоманды) // BSLLS:UnusedParameters-off
130 |
131 | ТекстНачало = "Результат запроса: " + Имя;
132 | Если ТаблицаРезультата.Количество() = 0 Тогда
133 | Логирователь.ВЛог(ТекстНачало + " - Пусто");
134 | Возврат Истина;
135 | КонецЕсли;
136 |
137 | ТекстРезультата = ТекстНачало + Символы.ПС;
138 | НомерПП = 0;
139 | Для каждого СтрокаТаблицы Из ТаблицаРезультата Цикл
140 | НомерПП = НомерПП + 1;
141 | ТекстРезультата = " Строка №" + Строка(НомерПП);
142 | Для каждого Колонка Из ТаблицаРезультата.Колонки Цикл
143 | ИмяКолонки = Колонка.Имя;
144 |
145 | Значение = СокрЛП(СтрокаТаблицы[ИмяКолонки]);
146 | ТекстРезультата = ТекстРезультата + Символы.ПС + " " + ИмяКолонки + ": " + Значение;
147 |
148 | КонецЦикла;
149 | Логирователь.ВЛог(Символы.ПС + ТекстРезультата, , , , , Ложь);
150 | КонецЦикла;
151 |
152 | РезультатВозврата = Истина;
153 | Возврат РезультатВозврата;
154 |
155 | КонецФункции
156 |
157 | Функция ЭтоЗапрос(ТипКоманды)
158 | Возврат ТипКоманды = "Запрос";
159 | КонецФункции
160 |
161 | &Желудь
162 | &Прозвище("ОбработчикРезультатаSQL")
163 | Процедура ПриСозданииОбъекта()
164 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/commands/Классы/КомандаОбновитьКонфигурациюБазыДанных.os:
--------------------------------------------------------------------------------
1 | // ОбновитьКонфигурациюБазыДанных
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем УправлятельКонфигуратора;
6 | &Пластилин
7 | Перем КомандаОтключитьКонфигураторОтИнформационнойБазы;
8 |
9 | &Пластилин
10 | Перем Логирователь; // BSLLS:Typo-off
11 |
12 | &Пластилин
13 | Перем Настройки; // BSLLS:Typo-off
14 |
15 | // Параметры
16 | // РежимРеструктуризации - Первый или Второй
17 | Функция ВыполнитьКоманду(ПараметрыКоманды, // BSLLS:MissingReturnedValueDescription-off
18 | Знач РежимРеструктуризации = Неопределено) Экспорт
19 |
20 | Если Не КомандаОтключитьКонфигураторОтИнформационнойБазы.ВыполнитьКоманду() Тогда
21 | Возврат Ложь;
22 | КонецЕсли;
23 |
24 | Параметры = ПараметрыКоманды.Параметры;
25 |
26 | Если РежимРеструктуризации = Неопределено Тогда
27 | РежимРеструктуризации = Параметры.Получить("РежимРеструктуризации");
28 | КонецЕсли;
29 |
30 | ИмяРасширения = Параметры.Получить("ИмяРасширения");
31 | Если Не ЗначениеЗаполнено(ИмяРасширения) Тогда
32 | ИмяРасширения = "";
33 | КонецЕсли;
34 |
35 | Конфигуратор = УправлятельКонфигуратора.Получить();
36 |
37 | ДинамическоеОбновление = Настройки.ИспользоватьДинамическоеОбновление;
38 |
39 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
40 | ТекстДополнения = ". Расширение - " + ИмяРасширения;
41 | РежимРеструктуризации = Неопределено;
42 | ВТелеграм = Ложь;
43 | Иначе
44 |
45 | ТекстДополнения = "";
46 | ВТелеграм = Истина;
47 |
48 | Если ДинамическоеОбновление Тогда
49 | РежимРеструктуризации = Неопределено;
50 | Иначе
51 | РежимРеструктуризации = ОпределитьРежимРеструктуризации(РежимРеструктуризации, Конфигуратор);
52 | КонецЕсли;
53 |
54 | КонецЕсли;
55 |
56 | ТекстСообщения = "Начинаю обновление конфигурации базы данных" + ТекстДополнения;
57 | Если ДинамическоеОбновление Тогда
58 | ТекстСообщения = СтрЗаменить(ТекстСообщения, "обновление", "динамическое обновление");
59 | КонецЕсли;
60 | Если ЗначениеЗаполнено(РежимРеструктуризации) Тогда
61 | ТекстСообщения = ТекстСообщения + ". Режим реструктуризации: " + РежимРеструктуризации;
62 | КонецЕсли;
63 | Логирователь.ВЛог(ТекстСообщения, , ВТелеграм);
64 |
65 | Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
66 |
67 | ПредупрежденияКакОшибки = Ложь;
68 | ДинамическоеОбновление = Настройки.ИспользоватьДинамическоеОбновление;
69 |
70 | Если ЗначениеЗаполнено(ИмяРасширения) Тогда
71 |
72 | НаСервере = Ложь; // Расширения обновляются только на клиенте
73 |
74 | Попытка
75 | Конфигуратор.ОбновитьКонфигурациюБазыДанных(ПредупрежденияКакОшибки,
76 | НаСервере,
77 | ДинамическоеОбновление,
78 | ИмяРасширения);
79 | Исключение
80 | Логирователь.ВЛог(ОписаниеОшибки(), Истина, Истина);
81 | Возврат Ложь;
82 | КонецПопытки;
83 |
84 | Иначе
85 |
86 | ЕстьОшибка = Ложь;
87 | ОписаниеОшибки = "";
88 |
89 | Попытка
90 | Конфигуратор.ОбновитьКонфигурациюБазыДанныхНаСервере(ПредупрежденияКакОшибки,
91 | ДинамическоеОбновление,
92 | РежимРеструктуризации);
93 | Исключение
94 | ЕстьОшибка = Истина;
95 | ОписаниеОшибки = ОписаниеОшибки();
96 | Логирователь.ВЛог(ОписаниеОшибки, Истина, Истина);
97 | КонецПопытки;
98 |
99 | Если ЕстьОшибка Тогда
100 | Возврат ОбработчикОшибокОбновления(ОписаниеОшибки, ПараметрыКоманды, ВТелеграм);
101 | КонецЕсли;
102 |
103 | КонецЕсли;
104 |
105 | Конец = ТекущаяУниверсальнаяДатаВМиллисекундах();
106 |
107 | ВремяОбновления = Конец - Начало;
108 | Логирователь.ВЛог("Конфигурация базы данных обновлена" + ТекстДополнения);
109 |
110 | Если НЕ ЗначениеЗаполнено(ИмяРасширения) Тогда
111 | ЗафиксироватьВремяОбновления(ВремяОбновления);
112 | КонецЕсли;
113 |
114 | Возврат Истина;
115 |
116 | КонецФункции
117 |
118 | Функция ОбработчикОшибокОбновления(ОписаниеОшибки, ПараметрыКоманды, ВТелеграм = Ложь)
119 |
120 | Если Не ЕстьЗначениеВСтрокеИзМассиваСтрок(ОписаниеОшибки, ОшибкиОбновления())
121 | И ЕстьЗначениеВСтрокеИзМассиваСтрок(ОписаниеОшибки, ОшибкиПереходаНаПервыйРежим()) Тогда
122 |
123 | Логирователь.ВЛог("Повторное обновление в первом режиме реструктуризации", , ВТелеграм);
124 |
125 | РежимРеструктуризации = "Первый";
126 | Возврат ВыполнитьКоманду(ПараметрыКоманды, РежимРеструктуризации);
127 |
128 | Иначе
129 | Возврат Ложь; // Фиксируем ошибку
130 | КонецЕсли;
131 |
132 | КонецФункции
133 |
134 | Функция ОшибкиОбновления()
135 |
136 | мОшибки = Новый Массив();
137 | мОшибки.Добавить("Записи регистра сведений стали неуникальными");
138 | Возврат мОшибки;
139 |
140 | КонецФункции
141 |
142 | Функция ОшибкиПереходаНаПервыйРежим()
143 |
144 | мОшибки = Новый Массив();
145 | мОшибки.Добавить("оптимизированного механизма обновления");
146 | мОшибки.Добавить("Не определен путь до каталога установки Java");
147 | Возврат мОшибки;
148 |
149 | КонецФункции
150 |
151 | Функция ЕстьЗначениеВСтрокеИзМассиваСтрок(ЗначениеСтроки, мСтроки)
152 |
153 | Для каждого СтрокаПоика Из мСтроки Цикл
154 | Если СтрНайти(ЗначениеСтроки, СтрокаПоика) > 0 Тогда
155 | Возврат Истина;
156 | КонецЕсли;
157 | КонецЦикла;
158 |
159 | Возврат Ложь;
160 |
161 | КонецФункции
162 |
163 | Функция ОпределитьРежимРеструктуризации(Режим, Конфигуратор)
164 |
165 | Если Режим = "Первый" Тогда
166 | Возврат Конфигуратор.РежимыРеструктуризации().Первый;
167 | ИначеЕсли Режим = "Второй" Тогда
168 | Возврат Конфигуратор.РежимыРеструктуризации().Второй;
169 | Иначе
170 | Возврат Неопределено;
171 | КонецЕсли;
172 |
173 | КонецФункции
174 |
175 | Процедура ЗафиксироватьВремяОбновления(ВремяОбновления)
176 |
177 | Миллисекунда = 1000;
178 | Минута = 60;
179 | ВремяОбновленияБазыВМинутах = ВремяОбновления / Миллисекунда / Минута;
180 | УправлятельКонфигуратора.ВремяОбновленияБазы_Установить(ВремяОбновленияБазыВМинутах);
181 |
182 | КонецПроцедуры
183 | &Асинх
184 | Функция ВыполнитьКомандуАсинх(ПараметрыКоманды) Экспорт // BSLLS:Typo-off
185 |
186 | Возврат РаботаСКомандами.ПереопределитьВыполнитьКомандуАсинх(ПараметрыКоманды, ЭтотОбъект);
187 |
188 | КонецФункции
189 |
190 | &Желудь
191 | &Прозвище("Команда")
192 | Процедура ПриСозданииОбъекта()
193 |
194 | КонецПроцедуры
--------------------------------------------------------------------------------
/Jenkinsfile:
--------------------------------------------------------------------------------
1 | @Library("shared-libraries")
2 |
3 | import io.libs.Utils
4 | import io.libs.Telegram
5 | import groovy.transform.Field
6 |
7 | def utils = new Utils()
8 |
9 | @Field
10 | List jenkinsAgent_values = ['DEV-1C-UPD', 'DEV-1C', 'v_silchenkov']
11 |
12 | @Field
13 | List command_file_values = ['update_PP'
14 | ]
15 |
16 | pipeline {
17 |
18 | parameters {
19 |
20 | choice(name: 'command_file',
21 | choices: (params.command_file ? [params.command_file] : []) +
22 | (command_file_values -
23 | (params.command_file ? [params.command_file] : [])),
24 | description: 'Сценарий')
25 |
26 | choice(name: 'jenkinsAgent',
27 | choices: (params.jenkinsAgent ? [params.jenkinsAgent] : []) +
28 | (jenkinsAgent_values -
29 | (params.jenkinsAgent ? [params.jenkinsAgent] : [])),
30 | description: 'Нода дженкинса, на которой запускать пайплайн. По умолчанию master')
31 |
32 | text(defaultValue: "${env.listMetadataBuild}", description: 'Список метаданных, которые требуется обновить. Используется в сценариях с префиксом \"meta_\".' + '\n' +'Напишите символ *, чтобы обновить полностью все метаданные.', name: 'listMetadataBuild')
33 | booleanParam(defaultValue: "${env.includeChildObjects}", description: 'Обновлять объекты из списка метаданных рекурсивно', name: 'includeChildObjects')
34 | booleanParam(defaultValue: false, description: 'Использовать динамическое обновление', name: 'dynamicUpdate')
35 | booleanParam(defaultValue: false, description: 'Оставить блокировку ИБ', name: 'keepLockIB')
36 | string(defaultValue: "${env.pausePredBuild}", description: 'Пауза после отправки уведомления и запуском сценария (в секундах). Позволяет переопределить паузу из настроек по умолчанию (5 мин), если она включена в сценарии. (0 - оставить по умолчанию)', name: 'pausePredBuild')
37 | string(defaultValue: "1", description: 'Начать с указанной позиции. Использовать, если при обновлении вышла ошибка и нужно после исправления продолжить сценарий', name: 'startFromPosition')
38 | string(defaultValue: "${env.baseID}", description: 'Идентификатор базы. Используется в сценариях с постфиксом base_ID', name: 'baseID')
39 | string(defaultValue: "${env.platformID}", description: 'Идентификатор используемой платформы для базы base_ID. Используется в сценариях с постфиксом base_ID', name: 'platformID')
40 | booleanParam(defaultValue: "${env.sendMessageStatusJob}", description: 'Отправлять сообщение о статусе задания Jenkins', name: 'sendMessageStatusJob')
41 | booleanParam(defaultValue: "${env.debug}", description: 'Отладка', name: 'debug')
42 | }
43 |
44 | agent {
45 | label "${(env.jenkinsAgent == null || env.jenkinsAgent == 'null') ? "master" : env.jenkinsAgent}"
46 | }
47 | environment {
48 | LOGOS_LEVEL = logos_level()
49 | SYNC_REPO_BUILD_USER = build_user()
50 | SYNC_REPO_UPDATE_DYNAMIC = dynamicUpdate()
51 | SYNC_REPO_KEEP_LOCK_IB = keepLockIB()
52 | SYNC_REPO_BACKGROUND = true
53 | SYNC_REPO_USEPOWERSHELL = true
54 | SYNC_REPO_PAUSE_PRED_BUILD = pausePredBuildToInt()
55 | SYNC_REPO_BUILD_STARTFROMPOSITION = startFromPositionToInt()
56 | SYNC_REPO_BUILD_LISTMETADATA = "${listMetadataBuild}"
57 | SYNC_REPO_BUILD_LISTMETADATA_INCLUDECHILDOBJECTS = includeChildObjects()
58 | BASE_ID = "${baseID}"
59 | PLATFORM_ID = "${platformID}"
60 | }
61 | options {
62 | timeout(time: 8, unit: 'HOURS')
63 | buildDiscarder(logRotator(numToKeepStr:'10'))
64 | }
65 | stages {
66 | stage("Pre-Build") {
67 | steps {
68 | timestamps {
69 | script {
70 | returnCode = utils.cmd("oscript init.os")
71 | if (returnCode != 0) {
72 | utils.raiseError("Возникла ошибка при запуске скрипта init.os")
73 | }
74 | }
75 | }
76 | }
77 | }
78 | stage("Запуск") {
79 | steps {
80 | timestamps {
81 | script {
82 |
83 | sendTelegramMessage("▶️ Jenkins is start ${JOB_NAME} - ${command_file}")
84 |
85 | command_folder = command_file != "debug" ? "bat" : "tests"
86 |
87 | returnCode = utils.cmd("cd ${command_folder} \n ${command_file}.bat")
88 | if (returnCode != 0) {
89 |
90 | def pathFileErrors = "${WORKSPACE}/var/errors/error_0.log"
91 | def exists = fileExists pathFileErrors
92 | if (exists) {
93 | message = readFile pathFileErrors
94 | } else {
95 | message = "Возникла ошибка при запуске"
96 | }
97 | utils.raiseError(message)
98 |
99 | }
100 | }
101 | }
102 | }
103 | }
104 | }
105 | post {
106 | success{
107 | script {
108 | sendTelegramMessage("✅ ${JOB_NAME} - ${command_file} is Success")
109 | }
110 | }
111 | unstable{
112 | script {
113 | sendTelegramMessage("⚠️ ${JOB_NAME} - ${command_file} is Alarm")
114 | }
115 | }
116 | failure{
117 | script {
118 | sendTelegramMessage("🆘 ${JOB_NAME} - ${command_file} is Failure")
119 | }
120 | }
121 | }
122 |
123 | }
124 |
125 | def build_user() {
126 |
127 | wrap([$class: 'BuildUser']) {
128 | user = "${BUILD_USER}"
129 | }
130 |
131 | if (user == "") {
132 | user = "Jenkins"
133 | }
134 |
135 | return user
136 | }
137 |
138 | def logos_level() {
139 |
140 | return params.debug ? "DEBUG" : ""
141 |
142 | }
143 |
144 | def dynamicUpdate() {
145 |
146 | return params.dynamicUpdate
147 |
148 | }
149 |
150 | def includeChildObjects() {
151 |
152 | return params.includeChildObjects
153 |
154 | }
155 |
156 | def keepLockIB() {
157 |
158 | return params.keepLockIB
159 |
160 | }
161 |
162 | def pausePredBuildToInt() {
163 |
164 | value = 0
165 | value = params.pausePredBuild
166 | return value
167 |
168 | }
169 |
170 | def startFromPositionToInt() {
171 |
172 | value = 1
173 | value = params.startFromPosition
174 | return value
175 |
176 | }
177 |
178 | def sendTelegramMessage(message) {
179 |
180 | if (params.sendMessageStatusJob) {
181 | def telegram = new Telegram()
182 | telegram.sendTelegramMessage(message)
183 | }
184 |
185 | }
186 |
--------------------------------------------------------------------------------
/src/core/Классы/Логирователь.os:
--------------------------------------------------------------------------------
1 | #Использовать logos
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем Телеграм;
9 |
10 | &Пластилин
11 | Перем ФиксаторОшибок;
12 |
13 | Перем Лог;
14 |
15 | Процедура ВЛог(Знач ТекстСообщения, Ошибка = Ложь, ВТелеграм = Ложь,
16 | Знач ТекстСообщенияТелеграм = "", Эмодзи = "", ДополнятОсновныеПараметры = Истина) Экспорт
17 |
18 | УбратьвИсключенииСтокуКодаИзСтороннихКлассов(ТекстСообщения);
19 | ЗаменитьПараметрыВТексте(ТекстСообщения);
20 |
21 | Если ДополнятОсновныеПараметры Тогда
22 | ДополнитьОсновныеПараметрыВТексте(ТекстСообщения);
23 | КонецЕсли;
24 |
25 | Начало = ТекущаяДата();
26 | ТекстСообщенияПолный = Строка(Формат(Начало, "ДФ=ЧЧ:мм:сс")) + ": " + ТекстСообщения;
27 |
28 | Если Ошибка = Истина Тогда
29 | Лог.Ошибка(ТекстСообщенияПолный);
30 | ФиксаторОшибок.ЗафиксироватьОшибку(ТекстСообщенияПолный);
31 | Иначе
32 | Лог.Информация(ТекстСообщенияПолный);
33 | КонецЕсли;
34 |
35 | Если ВТелеграм Тогда
36 | Если ЗначениеЗаполнено(ТекстСообщенияТелеграм) Тогда
37 | УбратьвИсключенииСтокуКодаИзСтороннихКлассов(ТекстСообщенияТелеграм);
38 | ЗаменитьПараметрыВТексте(ТекстСообщенияТелеграм);
39 | ДополнитьОсновныеПараметрыВТексте(ТекстСообщенияТелеграм);
40 | Иначе
41 | ТекстСообщенияТелеграм = ТекстСообщения;
42 | КонецЕсли;
43 | Телеграм.ВЛог(ТекстСообщенияТелеграм, Ошибка, Эмодзи);
44 | КонецЕсли;
45 |
46 | КонецПроцедуры
47 |
48 | Процедура Отладка(ТекстСообщения,
49 | Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
50 | Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено) Экспорт
51 |
52 | Лог.Отладка(ТекстСообщения,
53 | Параметр1, Параметр2, Параметр3,
54 | Параметр4, Параметр5, Параметр6);
55 |
56 | КонецПроцедуры
57 |
58 | Процедура ВывестиЛогИзФайла(ПутьКФайлу, Выведенные = Неопределено, Позиция = 0) Экспорт
59 |
60 | Если Выведенные = Неопределено Тогда
61 | Выведенные = Новый Массив();
62 | КонецЕсли;
63 |
64 | Сообщения = РаботаСФайлами.ПрочитатьФайлВМассивСтрок(ПутьКФайлу, Ложь);
65 |
66 | Для каждого ИсходноеСообщение Из Сообщения Цикл
67 |
68 | Если Выведенные.Найти(ИсходноеСообщение) <> Неопределено Тогда
69 | Продолжить;
70 | КонецЕсли;
71 |
72 | Если СтрНайти(ИсходноеСообщение, "ОШИБКА -") > 0 Тогда
73 | Статус = СтатусСообщения.Важное;
74 | Иначе
75 | Статус = СтатусСообщения.БезСтатуса;
76 | КонецЕсли;
77 |
78 | Если Позиция > 0 Тогда
79 | ТекстСообщения = "Команда №" + Строка(Позиция) + " " + ИсходноеСообщение;
80 | Иначе
81 | ТекстСообщения = ИсходноеСообщение;
82 | КонецЕсли;
83 |
84 | Сообщить(ТекстСообщения, Статус);
85 | Выведенные.Добавить(ИсходноеСообщение);
86 |
87 | КонецЦикла;
88 |
89 | КонецПроцедуры
90 |
91 | Процедура ЗаменитьПараметрыВТексте(Текст, Разделитель = "#") Экспорт
92 |
93 | Если СтрНайти(Текст, Разделитель) = 0 Тогда
94 | Возврат;
95 | КонецЕсли;
96 |
97 | Для Каждого КлючЗначение Из Настройки.ПараметрыПодключения Цикл
98 | Ключ = КлючЗначение.Ключ;
99 | Если СтрНайти(Текст, Ключ) > 0 Тогда
100 | Текст = ЗаменитьПараметрВТексте(Текст, Ключ, КлючЗначение.Значение);
101 | КонецЕсли;
102 |
103 | КонецЦикла;
104 |
105 | КонецПроцедуры
106 |
107 | Функция ЗаменитьПараметрВТексте(Текст, ИмяПараметра, Знач ЗначениеПараметра, Разделитель = "#") Экспорт
108 |
109 | Если ИмяПараметра = "ИмяБазы" Тогда
110 | ЗначениеПараметра = """" + ЗначениеПараметра + """";
111 | КонецЕсли;
112 |
113 | Возврат СтрЗаменить(Текст, Разделитель + ИмяПараметра, ЗначениеПараметра);
114 |
115 | КонецФункции
116 |
117 | Процедура ДополнитьОсновныеПараметрыВТексте(Текст) Экспорт
118 |
119 | Если Не ТипЗнч(Настройки.ПараметрыПодключения) = Тип("Структура") Тогда
120 | Возврат;
121 | КонецЕсли;
122 |
123 | ПараметрNobase = "#Nobase"; // если установлен в тексте, то имя базы прибавляем
124 |
125 | ИмяБазы = Общий.СвойствоСтруктуры(Настройки.ПараметрыПодключения, "ИмяБазы", "");
126 | Если ЗначениеЗаполнено(ИмяБазы) И СтрНайти(Текст, ИмяБазы) = 0 Тогда
127 | Если СтрНайти(Текст, ПараметрNobase) = 0 Тогда
128 |
129 | Если СтрНайти(Текст, Символы.ПС) Тогда
130 | Разделитель = Символы.ПС;
131 | Иначе
132 | Разделитель = " ";
133 | КонецЕсли;
134 |
135 | Текст = Текст + Разделитель + """" + ИмяБазы + """";
136 |
137 | Иначе
138 | Текст = СтрЗаменить(Текст, ПараметрNobase, "");
139 | КонецЕсли;
140 | КонецЕсли;
141 |
142 | КонецПроцедуры
143 |
144 | Процедура УбратьвИсключенииСтокуКодаИзСтороннихКлассов(ОписаниеОшибки)
145 |
146 | УбратьВИсключенииСтрокуКода(ОписаниеОшибки, "v8runner");
147 | УбратьВИсключенииСтрокуКода(ОписаниеОшибки, "ГитРепозиторий");
148 |
149 | КонецПроцедуры
150 |
151 | Процедура УбратьВИсключенииСтрокуКода(ОписаниеОшибки, ИмяКласса)
152 |
153 | Если СтрНайти(ОписаниеОшибки, ИмяКласса) = 0 Тогда
154 | Возврат;
155 | КонецЕсли;
156 |
157 | СтрокаГотовая = "";
158 | Для каждого СтрокаРазделенная Из СтрРазделить(ОписаниеОшибки, "/") Цикл
159 | Если СтрНайти(СтрокаРазделенная, ИмяКласса) > 0 Тогда
160 | Продолжить;
161 | КонецЕсли;
162 | Если СтрНайти(СтрокаРазделенная, "Ошибка в строке") > 0 Тогда
163 | Продолжить;
164 | КонецЕсли;
165 | Если Не ПустаяСтрока(СтрокаГотовая) Тогда
166 | СтрокаГотовая = СтрокаГотовая + " ";
167 | КонецЕсли;
168 | СтрокаГотовая = СтрокаГотовая + СокрЛП(СтрокаРазделенная);
169 | КонецЦикла;
170 |
171 | // Удалим последний символ }, т.к. он уже в первой строке удален
172 | Если Прав(СтрокаГотовая, 1) = "}" Тогда
173 | СтрокаГотовая = Лев(СтрокаГотовая, СтрДлина(СтрокаГотовая)-1);
174 | КонецЕсли;
175 |
176 | ОписаниеОшибки = СтрокаГотовая;
177 |
178 | КонецПроцедуры
179 |
180 | Функция ПутьКФайлуЛога(ИмяКласса, Позиция, УдалитьСуществующий = Ложь) Экспорт
181 |
182 | ПутьКФайлу = ОбъединитьПути(ТекущийКаталог(), "var\log\" + ИмяКласса + "_" + Строка(Позиция) + ".log");
183 |
184 | Если УдалитьСуществующий И РаботаСФайлами.ФайлСуществует(ПутьКФайлу) Тогда
185 | УдалитьФайлы(ПутьКФайлу);
186 | КонецЕсли;
187 |
188 | Возврат ПутьКФайлу;
189 |
190 | КонецФункции
191 |
192 | Функция LOGOS_CONFIG(Позиция = 0,
193 | sync_repo_ВФайл = Ложь, // BSLLS:LatinAndCyrillicSymbolInWord-off
194 | ИзPowerShell = Ложь) Экспорт // BSLLS:LatinAndCyrillicSymbolInWord-off
195 |
196 | Если ИзPowerShell Тогда
197 | СтрокаКоманды = "$Env:LOGOS_CONFIG = '";
198 | Иначе
199 | СтрокаКоманды = "set LOGOS_CONFIG=";
200 | КонецЕсли;
201 |
202 | СтрокаКоманды = СтрокаКоманды + "logger.oscript.lib.stream=INFO, stream;"
203 | + "appender.stream=ВыводЛогаВФайл;"
204 | + "appender.stream.file=var\log\stream#Позиция.log;"
205 | + "logger.oscript.lib.v8runner=INFO, v8runner;"
206 | + "appender.v8runner=ВыводЛогаВФайл;"
207 | + "appender.v8runner.file=var\log\v8runner#Позиция.log;"
208 | + "logger.oscript.lib.gitrunner=INFO, gitrunner;"
209 | + "appender.gitrunner=ВыводЛогаВФайл;"
210 | + "appender.gitrunner.file=var\log\gitrunner#Позиция.log;";
211 |
212 | Если sync_repo_ВФайл Тогда
213 | СтрокаКоманды = СтрокаКоманды
214 | + "logger.oscript.lib.sync_repo=INFO, sync_repo;"
215 | + "appender.sync_repo=ВыводЛогаВФайл;"
216 | + "appender.sync_repo.file=var\log\sync_repo#Позиция.log;";
217 | КонецЕсли;
218 |
219 | Если Позиция = 0 Тогда
220 | ЗначениеПозиции = "";
221 | Иначе
222 | ЗначениеПозиции = "_" + Строка(Позиция);
223 | КонецЕсли;
224 |
225 | СтрокаКоманды = ЗаменитьПараметрВТексте(СтрокаКоманды, "Позиция", ЗначениеПозиции);
226 |
227 | Если ИзPowerShell Тогда
228 | СтрокаКоманды = СтрокаКоманды + "'";
229 | КонецЕсли;
230 |
231 | Возврат СтрокаКоманды;
232 |
233 | КонецФункции
234 |
235 | &Желудь
236 | Процедура ПриСозданииОбъекта()
237 | Лог = Логирование.ПолучитьЛог("oscript.lib.sync_repo");
238 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/Выполнитель.os:
--------------------------------------------------------------------------------
1 | #Использовать "..//../../src/Модули"
2 |
3 | Перем Поделка;
4 |
5 | &Пластилин
6 | Перем Настройки; // BSLLS:Typo-off
7 |
8 | &Пластилин
9 | Перем Логирователь; // BSLLS:Typo-off
10 |
11 | &Пластилин
12 | Перем Завершатель; // BSLLS:Typo-off
13 |
14 | Функция ВыполнитьКомандныйФайл(СтрокаКоманды, Позиция = 1, Фоново = Истина, Знач Имя = "") Экспорт
15 |
16 | Если Не ЗначениеЗаполнено(Имя) Тогда
17 | Имя = СтрокаКоманды;
18 | КонецЕсли;
19 |
20 | ТекстСообщения = "Выполняю команду";
21 | Если Позиция > 0 И Фоново Тогда
22 | стрПозиция = Строка(Позиция);
23 | ТекстСообщения = ТекстСообщения + " №" + стрПозиция;
24 | КонецЕсли;
25 |
26 | Логирователь.ВЛог(ТекстСообщения + ": " + Имя);
27 |
28 | ИспользоватьPowerShell = Настройки.ИспользоватьPowerShell;
29 |
30 | КомандныйФайл = Поделка.НайтиЖелудь("КомандныйФайлSR");
31 |
32 | Если ИспользоватьPowerShell Тогда
33 | КомандныйФайл.УстановитьПриложениеPowerShell();
34 | КомандныйФайл.СоздатьPowerShell();
35 | КомандныйФайл.УстановитьКодировкуВывода(КодировкаТекста.UTF8);
36 | Иначе
37 | КомандныйФайл.ДобавитьКоманду("@echo off");
38 | КонецЕсли;
39 |
40 | Попытка
41 |
42 | КомандныйФайл.ДобавитьКоманду(Логирователь.LOGOS_CONFIG(Позиция, Истина, ИспользоватьPowerShell));
43 | КомандныйФайл.ДобавитьКоманду(СтрокаКоманды);
44 |
45 | КодВозврата = КомандныйФайл.Исполнить();
46 | СтрокаВывода = КомандныйФайл.ПолучитьВывод();
47 |
48 | Исключение
49 | КодВозврата = 1;
50 | СтрокаВывода = ОписаниеОшибки();
51 | КонецПопытки;
52 |
53 | СтруктураВозврата = Новый Структура("КодВозврата, Вывод, Позиция",
54 | КодВозврата,
55 | СтрокаВывода,
56 | Позиция);
57 |
58 |
59 | ТекстРезультата = "Результат команды №" + стрПозиция + ": Код возврата " + КодВозврата;
60 | ТекстВывода = "Вывод команды №" + стрПозиция + Символы.ПС + СтрокаВывода;
61 |
62 | Если КодВозврата <> 0 Тогда
63 | Логирователь.ВЛог(ТекстРезультата, Истина);
64 | Логирователь.ВЛог(ТекстВывода, Истина);
65 | Иначе
66 |
67 | Логирователь.Отладка(ТекстРезультата);
68 | Логирователь.Отладка(ТекстВывода);
69 |
70 | Если НЕ Фоново Тогда
71 | Логирователь.ВЛог("Команда: " + Имя + " - выполнена");
72 | КонецЕсли;
73 |
74 | КонецЕсли;
75 |
76 | Возврат СтруктураВозврата;
77 |
78 | КонецФункции
79 |
80 | Процедура СледитьЗаЛогомЗадания(Задание, ПутьКФайлу, Позиция) Экспорт
81 |
82 | Выведенные = Новый Массив();
83 |
84 | ПоследняяПопытка = Ложь;
85 |
86 | Пока Истина Цикл
87 |
88 | Если Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда
89 |
90 | Если ПоследняяПопытка Тогда
91 | Прервать;
92 | КонецЕсли;
93 |
94 | ПоследняяПопытка = Истина;
95 |
96 | КонецЕсли;
97 |
98 | Логирователь.ВывестиЛогИзФайла(ПутьКФайлу, Выведенные, Позиция);
99 |
100 | Если Не ПоследняяПопытка Тогда
101 | Приостановить(1000);
102 | КонецЕсли;
103 |
104 | КонецЦикла;
105 |
106 | КонецПроцедуры
107 |
108 | Процедура ВыполнитьКомандыМногопоточно(Команды) Экспорт // BSLLS:Typo-off
109 |
110 | Задания = Новый Массив();
111 |
112 | Позиция = 0;
113 | Для каждого ДанныеКоманды Из Команды Цикл
114 |
115 | ТипДанныхКоманды = ТипЗнч(ДанныеКоманды);
116 | Если ТипДанныхКоманды = Тип("Строка") Тогда
117 | Позиция = Позиция + 1;
118 | ЗапуститьФоновуюКоманду(Задания, ДанныеКоманды, Позиция);
119 | ИначеЕсли ТипДанныхКоманды = Тип("Массив") Тогда
120 |
121 | // Последовательное выполнение
122 | ИДБлокирующегоЗадания = Неопределено;
123 | Для каждого ДанныеВложенной Из ДанныеКоманды Цикл
124 | Позиция = Позиция + 1;
125 | ЗапуститьФоновуюКоманду(Задания, ДанныеВложенной, Позиция, ИДБлокирующегоЗадания);
126 | ИДБлокирующегоЗадания = Позиция; // передаем в следующее задание
127 | КонецЦикла;
128 |
129 | Иначе
130 | Продолжить;
131 | КонецЕсли;
132 |
133 | КонецЦикла;
134 |
135 | ОжидатьФоновыеКоманды(Задания);
136 |
137 | ПроверитьРезультатВыполнения(Задания);
138 |
139 | КонецПроцедуры
140 |
141 | Процедура ЗапуститьФоновуюКоманду(Задания, СтрокаКоманды, Позиция,
142 | ИДБлокирующегоЗадания = Неопределено, ПаузаПередСледующим = 5000)
143 |
144 | Если ТипЗнч(СтрокаКоманды) <> Тип("Строка") Тогда
145 | ВызватьИсключение "Не верно переданы параметры групповой команды - " + Строка(СтрокаКоманды);
146 | КонецЕсли;
147 |
148 | Если Позиция > 1 Тогда
149 | Приостановить(ПаузаПередСледующим); // 5 секунд ожидаем пока запустится предудущее
150 | КонецЕсли;
151 |
152 | ИмяКласса = "sync_repo";
153 | Если СтрНайти(СтрокаКоманды, ИмяКласса) > 0 Тогда
154 | ПутьКФайлуЛога = Логирователь.ПутьКФайлуЛога(ИмяКласса, Позиция, Истина);
155 | СтрокаКоманды = СтрокаКоманды + " --GroupPosition " + Строка(Позиция);
156 | Если ЗначениеЗаполнено(ИДБлокирующегоЗадания) Тогда
157 | СтрокаКоманды = СтрокаКоманды + " --Lock " + Формат(ИДБлокирующегоЗадания, "ЧН=; ЧГ=");
158 | КонецЕсли;
159 | Иначе
160 | ПутьКФайлуЛога = Неопределено;
161 | КонецЕсли;
162 |
163 | // Основное задание
164 | Параметры = Новый Массив(2);
165 | Параметры[0] = СтрокаКоманды;
166 | Параметры[1] = Позиция;
167 |
168 | ОсновноеЗадание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВыполнитьКомандныйФайл", Параметры);
169 | Задания.Добавить(ОсновноеЗадание);
170 |
171 | // Следитель
172 | Если ПутьКФайлуЛога <> Неопределено Тогда
173 |
174 | Параметры = Новый Массив(3);
175 | Параметры[0] = ОсновноеЗадание;
176 | Параметры[1] = ПутьКФайлуЛога;
177 | Параметры[2] = Позиция;
178 |
179 | Следитель = ФоновыеЗадания.Выполнить(ЭтотОбъект, "СледитьЗаЛогомЗадания", Параметры); // BSLLS:Typo-off
180 | Задания.Добавить(Следитель);
181 |
182 | КонецЕсли;
183 |
184 | КонецПроцедуры
185 |
186 | Процедура ОжидатьФоновыеКоманды(Задания)
187 |
188 | Попытка
189 | ФоновыеЗадания.ОжидатьВсе(Задания);
190 | Исключение
191 |
192 | МассивЗаданий = ИнформацияОбОшибке().Параметры;
193 |
194 | Если МассивЗаданий <> Неопределено Тогда
195 |
196 | ШаблонТекстаОшибки =
197 | "Ошибки при выполнении команд:
198 | |%1";
199 |
200 | Для Каждого Задание Из МассивЗаданий Цикл
201 |
202 | МассивОшибок = Новый Массив();
203 | МассивОшибок.Добавить(Задание.ИнформацияОбОшибке.ПодробноеОписаниеОшибки());
204 |
205 | КонецЦикла;
206 |
207 | ВызватьИсключение СтрШаблон(
208 | ШаблонТекстаОшибки,
209 | СтрСоединить(МассивОшибок, Символы.ПС));
210 |
211 | КонецЕсли;
212 |
213 | КонецПопытки;
214 |
215 | КонецПроцедуры
216 |
217 | Процедура ПроверитьРезультатВыполнения(Задания) // BSLLS:CognitiveComplexity-off
218 |
219 | БылиОшибки = Ложь;
220 |
221 | Для каждого Задание Из Задания Цикл
222 |
223 | Состояние = Задание.Состояние;
224 | Если Состояние = СостояниеФоновогоЗадания.Завершено Тогда
225 |
226 | Результат = Задание.Результат;
227 |
228 | Если ТипЗнч(Результат) = Тип("Структура") Тогда
229 |
230 | ТекстСообщения = "";
231 |
232 | КодВозврата = Результат.КодВозврата;
233 | Если КодВозврата <> 0 Тогда
234 | БылиОшибки = Истина;
235 | ТекстСообщения = "
236 | |Код возврата команды №" + Результат.Позиция + ": " + Строка(КодВозврата);
237 | КонецЕсли;
238 |
239 | СтрокаВывода = Результат.Вывод;
240 | Если ЗначениеЗаполнено(СтрокаВывода) Тогда
241 | БылиОшибки = Истина;
242 | ТекстСообщения = ТекстСообщения + "
243 | |Вывод команды №" + Результат.Позиция + ": " + Строка(СтрокаВывода);
244 | КонецЕсли;
245 |
246 | Если ЗначениеЗаполнено(ТекстСообщения) Тогда
247 | Логирователь.ВЛог(ТекстСообщения);
248 | КонецЕсли;
249 |
250 | КонецЕсли;
251 |
252 | ИначеЕсли Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
253 | БылиОшибки = Истина;
254 | Завершатель.ЗавершитьПоОшибке(Задание.ИнформацияОбОшибке.Описание);
255 | Иначе
256 | Продолжить;
257 | КонецЕсли;
258 |
259 | КонецЦикла;
260 |
261 | Если БылиОшибки Тогда
262 | Завершатель.ЗавершитьПоОшибке();
263 | КонецЕсли;
264 |
265 | КонецПроцедуры
266 |
267 | &Желудь
268 | Процедура ПриСозданииОбъекта(&Пластилин("Поделка") _Поделка)
269 | Поделка = _Поделка;
270 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/cli/Классы/cli_ЗапускПриложения.os:
--------------------------------------------------------------------------------
1 | &Опция(Имя = "ИдентификаторБазы", Описание = "Идентификатор базы")
2 | &ВОкружении("SYNC_REPO_ID_BASE")
3 | Перем ИдентификаторБазы;
4 |
5 | &Опция(Имя = "ID", Описание = "Идентификатор базы (англ)")
6 | Перем ID;
7 |
8 | &Опция(Имя = "ИдентификаторКоманд", Описание = "Идентификатор на список команд, которые следует запускать")
9 | &ВОкружении("SYNC_REPO_ID_COMMAND")
10 | &ПоУмолчанию("Команды")
11 | Перем ИдентификаторКоманд;
12 |
13 | &Опция(Имя = "IDCommand", Описание = "Идентификатор на список команд, которые следует запускать (англ)")
14 | Перем IDCommand;
15 |
16 | &Опция(Имя = "ИдентификаторГрупповыхКоманд", Описание = "Идентификатор на список команд в групповом файле команд")
17 | &ВОкружении("SYNC_REPO_ID_GROUP_COMMAND")
18 | Перем ИдентификаторГрупповыхКоманд;
19 |
20 | &Опция(Имя = "IDCommandGroup", Описание = "Идентификатор на список команд в групповом файле команд (англ)")
21 | Перем IDCommandGroup;
22 |
23 | &Опция(Имя = "Config", Описание = "Имя или путь к файлу настроек, по умолчанию onfig.yaml")
24 | &ВОкружении("SYNC_REPO_CONFIG")
25 | &ПоУмолчанию("config.yaml")
26 | Перем Config;
27 |
28 | &Опция(Имя = "Platform", Описание = "Группа команд на указание платформы")
29 | &ВОкружении("SYNC_REPO_V8VERSION")
30 | &ПоУмолчанию("Платформа")
31 | Перем Platform;
32 |
33 | &Опция(Имя = "Commands", Описание = "Имя или путь к файлу с командами, если файл не передан, то команды будут искаться в файле config") // BSLLS:LineLength-off
34 | &ВОкружении("SYNC_REPO_COMMANDS")
35 | Перем Commands;
36 |
37 | &Опция(Имя = "GroupCommands", Описание = "Имя файла с групповыми командами, если файл передан, то будут запускаться групповые команды") // BSLLS:LineLength-off
38 | &ВОкружении("SYNC_REPO_GROUPCOMMANDS")
39 | Перем GroupCommands;
40 |
41 | &Опция(Имя = "BuildUser", Описание = "Ответственный, переопределение ответственного в настройках")
42 | &ВОкружении("SYNC_REPO_BUILD_USER")
43 | Перем BuildUser;
44 |
45 | &Опция(Имя = "PausePredBuild", Описание = "Переопределение параметра Пауза в настройках по умолчанию, имеет приоритет перед настройками") // BSLLS:LineLength-off
46 | &ВОкружении("SYNC_REPO_PAUSE_PRED_BUILD")
47 | Перем PausePredBuild;
48 |
49 | &Опция(Имя = "ListMetadata", Описание = "Список метаданных, которые требуется обновить, переопределение файла metadata.txt") // BSLLS:LineLength-off
50 | &ВОкружении("SYNC_REPO_BUILD_LISTMETADATA")
51 | Перем ListMetadata;
52 |
53 | &Опция(Имя = "IncludeChildObjects", Описание = "Обновлять объекты из списка метаданных рекурсивно") // BSLLS:LineLength-off
54 | &ВОкружении("SYNC_REPO_BUILD_LISTMETADATA_INCLUDECHILDOBJECTS")
55 | &ТБулево
56 | &ПоУмолчанию(Истина)
57 | Перем IncludeChildObjects;
58 |
59 | &Опция(Имя = "StartFromPosition", Описание = "Начать с указанной позиции") // BSLLS:LineLength-off
60 | &ВОкружении("SYNC_REPO_BUILD_STARTFROMPOSITION")
61 | Перем StartFromPosition;
62 |
63 | &Опция(Имя = "DynamicUpdate", Описание = "Использовать динамическое обновление")
64 | &ВОкружении("SYNC_REPO_UPDATE_DYNAMIC")
65 | &ТБулево
66 | &ПоУмолчанию(Ложь)
67 | Перем DynamicUpdate;
68 |
69 | &Опция(Имя = "KeepLockIB", Описание = "Оставить блокировку ИБ")
70 | &ВОкружении("SYNC_REPO_KEEP_LOCK_IB")
71 | &ТБулево
72 | &ПоУмолчанию(Ложь)
73 | Перем KeepLockIB;
74 |
75 | &Опция(Имя = "Background", Описание = "Фоновый запуск, отключает все диалоги, при ошибки сразу завершается") // BSLLS:LineLength-off
76 | &ВОкружении("SYNC_REPO_BACKGROUND")
77 | &ТБулево
78 | &ПоУмолчанию(Ложь)
79 | Перем Background;
80 |
81 | &Опция(Имя = "UsePowerShell", Описание = "Использовать PowerShell для запуска параллельных команд, вместо cmd") // BSLLS:LineLength-off
82 | &ВОкружении("SYNC_REPO_USEPOWERSHELL")
83 | &ТБулево
84 | &ПоУмолчанию(Ложь)
85 | Перем UsePowerShell;
86 |
87 | &Опция(Имя = "GroupPosition", Описание = "Служебный параметр для передачи порядка вызова групповых команд")
88 | &ТЧисло
89 | &ПоУмолчанию(0)
90 | Перем GroupPosition;
91 |
92 | &Опция(Имя = "Lock", Описание = "Служебный параметр для ожидания выполнения предыдущего задания")
93 | Перем Lock;
94 |
95 | &Опция(Имя = "Debug", Описание = "Включить режим debug (1)")
96 | &ВОкружении("SYNC_REPO_DEBUG")
97 | &ТЧисло
98 | &ПоУмолчанию(0)
99 | Перем РежимDebug;
100 |
101 | Перем Запускатель;
102 | Перем Лог;
103 |
104 | &КомандаПриложения(Имя = "run r", Описание = "Выполнение команд")
105 | Процедура ПриСозданииОбъекта(&Пластилин("Запускатель") _Запускатель,
106 | &Лог("oscript.lib.sync_repo_start") _Лог)
107 |
108 | Запускатель = _Запускатель;
109 | Лог = _Лог;
110 |
111 | КонецПроцедуры
112 |
113 | &ВыполнениеКоманды
114 | Процедура Запустить() Экспорт
115 |
116 | Если ЗначениеЗаполнено(ID) Тогда
117 | ИдентификаторБазы = ID;
118 | КонецЕсли;
119 |
120 | Если ЗначениеЗаполнено(IDCommand) Тогда
121 | ИдентификаторКоманд = IDCommand;
122 | КонецЕсли;
123 |
124 | Если ЗначениеЗаполнено(IDCommandGroup) Тогда
125 | ИдентификаторГрупповыхКоманд = IDCommandGroup;
126 | КонецЕсли;
127 |
128 | ПаузаПередЗапуском = ПривестиЗначениеВЧисло("PausePredBuild", PausePredBuild, 0);
129 | НачатьСПозиции = ПривестиЗначениеВЧисло("StartFromPosition", StartFromPosition, 1, 0);
130 |
131 | ОбновлятьОбъектыРекурсивно = ПривестиЗначениеВБулево("IncludeChildObjects", IncludeChildObjects, 1);
132 |
133 | Опции = Новый Структура();
134 | Опции.Вставить("ИдентификаторБазы", ИдентификаторБазы);
135 | Опции.Вставить("ИдентификаторКоманд", ИдентификаторКоманд);
136 | Опции.Вставить("Config", Config);
137 | Опции.Вставить("Commands", Commands);
138 | Опции.Вставить("Platform", Platform);
139 | Опции.Вставить("ИдентификаторГрупповыхКоманд", ИдентификаторГрупповыхКоманд);
140 | Опции.Вставить("СписокМетаданных", ListMetadata);
141 | Опции.Вставить("ОбновлятьОбъектыРекурсивно", ОбновлятьОбъектыРекурсивно);
142 | Опции.Вставить("НачатьСПозиции", НачатьСПозиции);
143 | Опции.Вставить("GroupCommands", GroupCommands);
144 | Опции.Вставить("Ответственный", BuildUser);
145 | Опции.Вставить("ПаузаПередЗапуском", ПаузаПередЗапуском);
146 | Опции.Вставить("Фоново", Background);
147 | Опции.Вставить("ИспользоватьДинамическоеОбновление", DynamicUpdate);
148 | Опции.Вставить("ОставитьБлокировкуИБ", KeepLockIB);
149 | Опции.Вставить("ИспользоватьPowerShell", UsePowerShell);
150 | Опции.Вставить("GroupPosition", GroupPosition);
151 | Опции.Вставить("Lock", Lock);
152 | Опции.Вставить("РежимDebug", РежимDebug);
153 |
154 | Запускатель.Запустить(Опции);
155 |
156 | КонецПроцедуры
157 |
158 | Функция ПривестиЗначениеВЧисло(Имя, Значение, ЗначениеПоУмолчанию = 0, ЗначениеИсключаемое = Неопределено)
159 |
160 | Лог.Отладка("Параметр: %1, Значение: %2", Имя, Значение);
161 | Лог.Отладка("Параметр: %1, Тип значения: %2", Имя, ТипЗнч(Значение));
162 |
163 | ТипЗначения = ТипЗнч(Значение);
164 |
165 | Если ТипЗначения = Тип("Число") Тогда
166 | Возврат Значение;
167 | КонецЕсли;
168 |
169 | Если ЗначениеЗаполнено(Значение) И ТипЗнч(Значение) = Тип("Строка") Тогда
170 |
171 | ОписаниеТипа = Новый ОписаниеТипов("Число");
172 | ЗначениеПриведенное = ОписаниеТипа.ПривестиЗначение(Значение);
173 |
174 | Если ЗначениеИсключаемое <> Неопределено И ЗначениеПриведенное = ЗначениеИсключаемое Тогда
175 | ЗначениеПриведенное = ЗначениеПоУмолчанию;
176 | КонецЕсли;
177 |
178 | Иначе
179 | ЗначениеПриведенное = ЗначениеПоУмолчанию;
180 | КонецЕсли;
181 |
182 | Лог.Отладка("Параметр: %1, Приведенное значение: %2", Имя, ЗначениеПриведенное);
183 |
184 | Возврат ЗначениеПриведенное;
185 |
186 | КонецФункции
187 |
188 | Функция ПривестиЗначениеВБулево(Имя, Значение, ЗначениеПоУмолчанию)
189 |
190 | Лог.Отладка("Параметр: %1, Значение: %2", Имя, Значение);
191 | Лог.Отладка("Параметр: %1, Тип значения: %2", Имя, ТипЗнч(Значение));
192 |
193 | ТипЗначения = ТипЗнч(Значение);
194 | Если ТипЗначения = Тип("Булево") Тогда
195 | Возврат Значение;
196 | КонецЕсли;
197 |
198 | Если ТипЗначения = Тип("Число") Тогда
199 | ЗначениеПриведенное = Значение = Истина;
200 | Лог.Отладка("Параметр: %1, Приведенное значение: %2", Имя, ЗначениеПриведенное);
201 | Возврат ЗначениеПриведенное;
202 | Иначе
203 | Возврат ЗначениеПоУмолчанию;
204 | КонецЕсли;
205 |
206 | КонецФункции
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Автоматизация обновления конфигурации 1С
2 |
3 | -
4 |
5 | ## Clone
6 |
7 | - Установить Git -
8 | - Склонировать репозиторий с помощью команды `git clone `, где токен указать из настроек в профиле пользователя.
9 | - Для получения изменений использовать команду `git pull`
10 |
11 | ## Установка
12 |
13 | - Установить OneScript - , перезагурзиться.
14 | - Запустить ```install.bat``` под полными правами.
15 |
16 | ## Настройка
17 |
18 | - Скопировать файл `autumn-properties_example.yml` и переименовать его в `autumn-properties.yml`.
19 | - В файле `autumn-properties.yml` в секции `Ответсвенный` указать свое имя.
20 |
21 | ## Настроенные скрипты в папке "bat"
22 |
23 | - `update_all.bat` - полное обновление всех тестовых баз из хранилища
24 | - `meta_update_all.bat` - выборочное обновление тестовых баз
25 | - `close_config_ИД` - скрипты закрытия конфигуратора под каждую базу
26 | - `update_ИД` - скрипты обновления конфигурации базы данных под каждую базу
27 |
28 | ## Контроль запуска по расписанию
29 |
30 | Будет разрешен запуск только в указанное время.
31 |
32 | ### Настройки
33 |
34 | ```yaml
35 | Расписание:
36 | - ДеньНедели: 7
37 | Параметры:
38 | - ВремяС: 9
39 | - ВремяПо: 10
40 | ```
41 |
42 | ## Возможные команды
43 |
44 | ### GUI
45 |
46 | - `ЗадатьВопрос` (Параметры: `ТекстВопроса`)
47 | - `ПоказатьПриветствие` (Параметры: `Приветствие`)
48 | - `УстановитьПаузу` (Параметры: `Пауза`)
49 | - `ПоказатьНачало` (Параметры: `Начало`)
50 | - `ПоказатьЗавершение` (Параметры: `Окончание`)
51 |
52 | ### Конфигуратор
53 |
54 | #### Настройки
55 |
56 | ```yaml
57 | Конфигуратор:
58 | Логин: "Логин"
59 | Пароль: "Пароль"
60 | ```
61 |
62 | #### Команды
63 |
64 | - `ОтключитьКонфигураторОтИнформационнойБазы`
65 | - `ВыгрузитьКонфигурациюВФайл`
66 | - `ОбъединитьКонфигурациюСФайлом`
67 | - `ВыполнитьСинтаксическийКонтроль`
68 | - `ВыполнитьРасширенныйСинтаксическийКонтроль`
69 | - `ОбновитьКонфигурациюБазыДанных` (Параметры: `РежимРеструктуризации` - Первый или Второй (по умолчанию "Первый"), `ИмяРасширения` - будет обновляться указанное расширение). При установки переменной окружения `SYNC_REPO_UPDATE_DYNAMIC`, будет попытка обновиться динамически.
70 |
71 | ### Хранилище
72 |
73 | #### Настройки:
74 |
75 | ```yaml
76 | Хранилище:
77 | Путь: "Путь"
78 | Логин: "Логин"
79 | Пароль: "Пароль"
80 | ```
81 |
82 | #### Команды
83 |
84 | - `ПодключитьсяКХранилищу` (Параметры: `ИмяРасширения` - будет подключаться указанное расширение по параметрам указанным в самом расширении)
85 | - `ПолучитьВерсиюКонфигурацииИзХранилища`
86 | - `ЗагрузитьКонфигурациюИзХранилища` (Параметры: `ИмяРасширения` - если указано, то будет загружать конфигурацию для расширения)
87 | - `ЗахватитьОбъектыВХранилище`
88 | - `ЗахватитьОбъектыВХранилищеПоСпискуИзФайла` - список объектов необходимо указать в файле ```settings/metadata.txt``` или передать в переменную окружения `listMetadataBuild` (если будет передана `*`, то будет выпоплняться команда `ЗахватитьОбъектыВХранилище` на все объекты). Необходимо передавать каждый объект на новой строке, объекты по умолчанию захватываются рекурсивно. Если установить переменную окружения `SYNC_REPO_BUILD_LISTMETADATA_INCLUDECHILDOBJECTS` в истина, то объекты будут захватываться рекурсивно.
89 | - `ОтменитьЗахватОбъектовВХранилище`
90 | - `ПоместитьИзмененияОбъектовВХранилище` (Параметры: `КомментарийПриПомещенииВХранилище`)
91 |
92 | ### Расширения
93 |
94 | #### Настройки:
95 |
96 | ```yaml
97 | Расширения:
98 | - Имя: "Имя"
99 | Хранилище:
100 | Путь: "Путь"
101 | Логин: "Логин"
102 | Пароль: "Пароль"
103 | ```
104 |
105 | #### Команды
106 |
107 | - `ЗагрузитьРасширениеВРежимеПредприятия` (Параметры команды: `ИмяРасширения` (обязательный) - имя файла расширения, `Путь` - путь к файлу расширения, если не указан, то будет осуществляться поиск файла в каталоге `cfe`)
108 |
109 | - `ЗагрузитьРасширениеИзФайла` (Устарела) (Параметры команды: `Имя` (обязательный), `ИмяФайла` (обязательный), `ОбновитьКонфигурациюИБ` (по умолчанию `Ложь`))
110 | По умолчнию поиск файлов осуществляться в каталоге `cfe`, но его можно переопределить в настройка `autumn-properties.yml`
111 |
112 | ```yaml
113 | Общие
114 | ПутьККаталогуCFe: "\\cfe"
115 | ```
116 |
117 | ### RAS
118 |
119 | #### Настройки:
120 |
121 | ```yaml
122 | RAS:
123 | Сервер: "Сервер"
124 | Порт: "Порт"
125 | ```
126 |
127 | #### Команды
128 |
129 | - `ЗаблокироватьИБ`
130 | - `ОтключитьСеансыИнформационнойБазы` (Параметры: `ПриложенияИсключения` - возможность указать имена приложений, которые не нужно отключать.)
131 | - `ПроверитьБлокировкуИБ`
132 | - `ПроверитьНаличиеАктивныхСеансовИБ`
133 | - `СнятьБлокировкуИБ` (Параметры: `СниматьБлокировкуРегламентныхЗаданий`). При установки переменной окружения `SYNC_REPO_KEEP_LOCK_IB` блокирова ИБ не будет снята.
134 |
135 | ### Предприятие
136 |
137 | - `ЗапуститьВРежимеПредприятия` (Параметры: `КлючиЗапускаПредприятия`, `ОжидатьВыполнения` - при установки false, не будет ожидать завершения)
138 |
139 | ### SQL
140 |
141 | #### Настройки:
142 |
143 | ```yaml
144 | SQL:
145 | ТипСУБД: "MSSQLServer"
146 | Сервер: "Имя сервера"
147 | ИмяБазы: "Имя базы"
148 | ИмяПользователя: ""
149 | Пароль: ""
150 | ```
151 |
152 | Если, не передан пользователь, то будет выполняться windows аудентификация.
153 | Возможные скрипты нужно добавлять в файл ```src/templates/Классы/СкриптыSQL.os``` отдельной функцией
154 |
155 | #### Команды
156 |
157 | ```yaml
158 | - Команда: ВыполнитьСкриптSQL # Выполняет скрипт SQL с проверкой результата
159 | Параметры:
160 | - Имя: "ЗапуститьЗадание"
161 | - Параметр1: "Имя"
162 | - ОжидатьРезультат: 1
163 | - Команда: ВыполнитьЗапросSQL # Выполняет запрос SQL на выборку с выгрузкой его в таблицу значений
164 | Параметры:
165 | - Имя: "АктивностьЗадания"
166 | - Параметр1: "Имя"
167 | - ОжидатьКоличествоСтрок: 0
168 | - Пауза: 3
169 | - ПовторныхОтправок: 5
170 | - Команда: ВыполнитьЗапросSQL # Показывает активные запросы в БД, при ошибки соединения к БД скрипт не останавливается
171 | Параметры: # Должна быть установлена в БД хранимая процедура https://whoisactive.com
172 | - Имя: "WhoIsActive"
173 | - Параметр1: "ИмяБД"
174 | - ПропускатьПриОшибке: Да
175 | ```
176 |
177 | ### CMD
178 |
179 | - `ВыполнитьКомандныйФайл` (Параметры: `СтрокаКоманды`(обязательный) ,`Имя`)
180 |
181 | ## Переопределение общих параметров команд
182 |
183 | В команде можно указать параметры, которые будет приоритетнее общих параметров
184 |
185 | ```yaml
186 | - Команда: ЗадатьВопрос
187 | Параметры:
188 | - ТекстВопроса: "Вопрос из команды"
189 | ```
190 |
191 | ## Асинхронное выполнение нескольних команд
192 |
193 | Скрипт пойдет далее, после того как будут выполнены все команды.
194 |
195 | ```yaml
196 | - Группа команд:
197 | - УстановитьПаузу
198 | - Команда: ПоказатьНачало
199 | Параметры:
200 | - Начало: "Начало в Асинх"
201 | ```
202 |
203 | ## Паралельное выполнение нескольких команд
204 |
205 | В строке запуске передать параметр ```groupCommand``` с именем файла настроек групповых команд.
206 |
207 | ```bat
208 | @set groupCommand=--GroupCommands \bat\commands\connect_repo.yaml
209 | oscript "sync_repo.os" run %groupCommand%
210 | ```
211 |
212 | При добавлении группы `Последовательно` - команды в группе будут выполняться последовательно.
213 |
214 | Пример файла настроек:
215 |
216 | ```yaml
217 | Запуск:
218 | Параметры:
219 | sync_repo: "oscript sync_repo.os run"
220 | command: "--Commands \\bat\\commands\\connect_repo.yaml"
221 | Команды:
222 | - "%sync_repo --ИдентификаторБазы PP %command"
223 | - "%sync_repo --ИдентификаторБазы QA %command"
224 | - Последовательно:
225 | - "%sync_repo --ИдентификаторБазы QP %command"
226 | - "%sync_repo --ИдентификаторБазы QV %command"
227 | ```
228 |
229 | ## Каталоги по умолчания
230 |
231 | - cf - Каталог для сохранения/загрузки конфигурации.
232 | - cfe - Каталог для загрузки расширений из файлов.
233 |
--------------------------------------------------------------------------------
/src/import/Классы/КомандныйФайлSR.os:
--------------------------------------------------------------------------------
1 | //////////////////////////////////////////////////////////////////////////
2 | // Работа с командными файлами
3 |
4 | #Использовать tempfiles
5 |
6 | Перем ЗаписьТекста;
7 | Перем ПутьКоманды;
8 | Перем Команда;
9 | Перем ТекстФайла;
10 | Перем Приложение;
11 |
12 | Перем ЭтоWindows;
13 | Перем Лог;
14 | Перем НемедленныйВывод;
15 | Перем КодировкаВывода;
16 |
17 | // Получить имя лога продукта
18 | //
19 | // Возвращаемое значение:
20 | // Строка - имя лога продукта
21 | //
22 | Функция ИмяЛога() Экспорт
23 | Возврат "oscript.lib.sync_repo";
24 | КонецФункции
25 |
26 | // Установить путь к приложению.
27 | //
28 | // Параметры:
29 | // ПутьПриложения - Путь приложения (Строка)
30 | // Например для запуска скриптов PowerShell
31 | // Для 64bit PowerShell если стоит 64 битная система или 32bit PowerShell, если стоит 32 битная система
32 | // "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
33 | // Для 32bit PowerShell на 64 битных системах находится в папке:
34 | // "C:\Windows\syswow64\Windowspowershell\v1.0\powershell.exe"
35 | //
36 | Процедура УстановитьПриложение(Знач ПутьПриложения) Экспорт
37 | Приложение = ПутьПриложения;
38 | КонецПроцедуры // УстановитьПриложение()
39 |
40 | // Получить путь командного файла
41 | //
42 | // Возвращаемое значение:
43 | // Строка - путь командного файла
44 | //
45 | Функция ПолучитьПуть() Экспорт
46 | Возврат ПутьКоманды;
47 | КонецФункции
48 |
49 | // Получить вывод выполненной команды.
50 | //
51 | // Возвращаемое значение:
52 | // Строка - Вывод команды
53 | //
54 | Функция ПолучитьВывод() Экспорт
55 | ПроверитьЧтоКомандаВыполнена();
56 | Возврат Команда.ПолучитьВывод();
57 | КонецФункции
58 |
59 | // Установить кодировку вывода для выполнения команды.
60 | //
61 | // Параметры:
62 | // Строка, Неопределено - кодировка вывода
63 | // Если Неопределено, кодировка сбрасывается и используется значение по умолчанию от операционной системы
64 | //
65 | Процедура УстановитьКодировкуВывода(Знач НоваяКодировкаВывода) Экспорт
66 | КодировкаВывода = НоваяКодировкаВывода;
67 | КонецПроцедуры
68 |
69 | // Получить кодировка вывода выполняемой команды.
70 | //
71 | // Возвращаемое значение:
72 | // Строка - кодировка вывода команды
73 | //
74 | Функция ПолучитьКодировкуВывода() Экспорт
75 | Возврат КодировкаВывода;
76 | КонецФункции
77 |
78 | // Получить код возврата выполненной команды.
79 | //
80 | // Возвращаемое значение:
81 | // Число - код возврата команды
82 | //
83 | Функция ПолучитьКодВозврата() Экспорт
84 | ПроверитьЧтоКомандаВыполнена();
85 | Возврат Команда.ПолучитьКодВозврата();
86 | КонецФункции
87 |
88 | // Создать новый командный файл по переданному пути или создать новый временный файл
89 | //
90 | // Параметры:
91 | // Путь - Строка - путь создаваемого файла. Необязательное значение.
92 | // Если не задан, создается временный файл в каталоге временных файлов
93 | // Расширение - Строка - расширение исполняемого командного файла.
94 | // Если не задано, подставляется ".bat" для Windows или ".sh" для Linux.
95 | //
96 | // Возвращаемое значение:
97 | // Строка - Путь созданного файла
98 | //
99 | Функция Создать(Знач Путь = "", Знач Расширение = "", Кодировка = Неопределено) Экспорт
100 |
101 | Если ПустаяСтрока(Расширение) Тогда
102 | Расширение = ?(ЭтоWindows, ".bat", ".sh");
103 | КонецЕсли;
104 | Если ПустаяСтрока(Путь) Тогда
105 | ПутьКоманды = ВременныеФайлы.НовоеИмяФайла(Расширение);
106 | Лог.Отладка("КомандныйФайл: задаю временный путь командного файла <%1>.", ПутьКоманды);
107 | Иначе
108 | ПутьКоманды = Путь;
109 | Лог.Отладка("КомандныйФайл: использую путь командного файла <%1>.", ПутьКоманды);
110 | КонецЕсли;
111 |
112 | Если Кодировка = Неопределено Тогда
113 | Кодировка = ?(ЭтоWindows, "cp866", КодировкаТекста.UTF8NoBOM);
114 | КонецЕсли;
115 |
116 | Если ЭтоWindows Тогда
117 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКоманды, Кодировка);
118 | Иначе
119 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКоманды, Кодировка, , , Символы.ПС);
120 | КонецЕсли;
121 |
122 | ТекстФайла = "";
123 |
124 | Возврат ПутьКоманды;
125 |
126 | КонецФункции
127 |
128 | // Добавить очередную команду в командный файл
129 | //
130 | // Параметры:
131 | // Команда - Строка - очередная команда
132 | //
133 | Процедура ДобавитьКоманду(Знач Команда) Экспорт
134 | ПроверитьЧтоФайлОткрыт();
135 | ЗаписьТекста.ЗаписатьСтроку(Команда);
136 | ТекстФайла = ТекстФайла + Команда + Символы.ПС;
137 | КонецПроцедуры
138 |
139 | // Выполнить командный файл и вернуть код возврата
140 | //
141 | // Возвращаемое значение:
142 | // Число - код возврата
143 | //
144 | Функция Исполнить() Экспорт
145 |
146 | Закрыть();
147 |
148 | Команда = Новый Команда;
149 | Команда.УстановитьКодировкуВывода(КодировкаВывода);
150 | Команда.ПоказыватьВыводНемедленно(НемедленныйВывод);
151 |
152 | Если ЗначениеЗаполнено(Приложение) Тогда
153 | СтрокаЗапуска = """%1""";
154 | ИначеЕсли ЭтоWindows Тогда
155 | Приложение = "cmd.exe";
156 | СтрокаЗапуска = "/C ""%1""";
157 | Иначе
158 | Приложение = "sh";
159 | СтрокаЗапуска = "'%1'";
160 | КонецЕсли;
161 | Команда.УстановитьКоманду(Приложение);
162 | Команда.ДобавитьПараметр(СтрШаблон(СтрокаЗапуска, ПутьКоманды));
163 |
164 | КодВозврата = Команда.Исполнить();
165 |
166 | Возврат КодВозврата;
167 |
168 | КонецФункции
169 |
170 | // Завершает запись командного файла
171 | //
172 | // Возвращаемое значение:
173 | // Строка - путь командного файла
174 | //
175 | Функция Закрыть() Экспорт
176 |
177 | Если ЗаписьТекста <> Неопределено Тогда
178 | ЗаписьТекста.Закрыть();
179 | ЗаписьТекста = Неопределено;
180 | КонецЕсли;
181 |
182 | Возврат ПутьКоманды;
183 |
184 | КонецФункции
185 |
186 | // Получить текст командного файла
187 | //
188 | // Возвращаемое значение:
189 | // Строка - текст командного файла
190 | //
191 | Функция ПолучитьТекстФайла() Экспорт
192 | Возврат ТекстФайла;
193 | КонецФункции
194 |
195 | // Управляет мгновенным выводом лога команды
196 | //
197 | // Параметры:
198 | // НемедленныйПоказ - Булево
199 | // Ложь: показывает вывод только после завершения выполнения команды
200 | // Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды
201 | //
202 | Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт
203 | НемедленныйВывод = НемедленныйПоказ;
204 | КонецПроцедуры
205 |
206 | // Получить строку перенаправления ввода-вывода "> файл"
207 | //
208 | // Параметры:
209 | // ИмяФайлаПриемника - Строка - имя файла для перенаправления вывода
210 | // УчитыватьStdErr - Булево - Если Истина, писать ошибки в этот же файл
211 | // ПерезаписыватьФайл - Булево - Если Истина, файл предварительно очищается
212 | //
213 | // Возвращаемое значение:
214 | // Строка - строка перенаправления ввода-вывода "> файл"
215 | //
216 | Функция СуффиксПеренаправленияВывода(Знач ИмяФайлаПриемника,
217 | Знач УчитыватьStdErr = Истина,
218 | Знач ПерезаписыватьФайл = Истина) Экспорт
219 | Рез = "> """ + ИмяФайлаПриемника + """" + ?(УчитыватьStdErr, " 2>&1", "");
220 | Если Не ПерезаписыватьФайл Тогда
221 | Рез = ">" + Рез;
222 | КонецЕсли;
223 | Возврат Рез;
224 | КонецФункции
225 |
226 | //////////////////////////////////////////////////////////////////////////
227 | // Служебные процедуры и функции
228 |
229 | Процедура ПроверитьЧтоФайлОткрыт()
230 | Если ЗаписьТекста = Неопределено Тогда
231 | Создать();
232 | КонецЕсли;
233 | КонецПроцедуры
234 |
235 | Процедура ПроверитьЧтоКомандаВыполнена()
236 | Если Не ЗначениеЗаполнено(Команда) Тогда
237 | ВызватьИсключение СтрШаблон("Команда еще не выполнялась. <%1>", ПутьКоманды);
238 | КонецЕсли;
239 | КонецПроцедуры
240 |
241 | Процедура УстановитьПриложениеPowerShell() Экспорт
242 | УстановитьПриложение(ПутьДоPowerShell());
243 | КонецПроцедуры
244 |
245 | Процедура СоздатьPowerShell(Кодировка = Неопределено) Экспорт
246 | Если Кодировка = Неопределено Тогда
247 | Кодировка = КодировкаТекста.UTF8;
248 | КонецЕсли;
249 | Создать("", РасширениеPowerShell(), Кодировка);
250 | КонецПроцедуры
251 |
252 | Функция ПутьДоPowerShell() // BSLLS:UnusedLocalMethod-off
253 | Возврат "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe";
254 | КонецФункции
255 |
256 | Функция РасширениеPowerShell() // BSLLS:UnusedLocalMethod-off
257 | Возврат "ps1";
258 | КонецФункции
259 |
260 | // Инициализация работы библиотеки.
261 | // Задает минимальные настройки.
262 | //
263 | Процедура Инициализация()
264 |
265 | Лог = Логирование.ПолучитьЛог(ИмяЛога());
266 |
267 | СистемнаяИнформация = Новый СистемнаяИнформация;
268 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
269 |
270 | ТекстФайла = "";
271 | НемедленныйВывод = Ложь;
272 | КодировкаВывода = КодировкаТекста.OEM;
273 |
274 | КонецПроцедуры
275 |
276 | &Желудь
277 | &Характер("Компанейский")
278 | Процедура ПриСозданииОбъекта()
279 | Инициализация();
280 | КонецПроцедуры
--------------------------------------------------------------------------------
/src/core/Классы/Запускатель.os:
--------------------------------------------------------------------------------
1 | #Использовать "..//../../src/Модули"
2 | #Использовать async
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем Выполнитель; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем Логирователь; // BSLLS:Typo-off
12 |
13 | &Пластилин
14 | Перем Завершатель; // BSLLS:Typo-off
15 |
16 | &Пластилин
17 | Перем Emoji; // BSLLS:Typo-off
18 |
19 | &Пластилин
20 | Перем КомандыПоКлючу;
21 |
22 | &Пластилин("Команда")
23 | Перем КомандаПоУмолчанию;
24 |
25 | Перем Опции;
26 | Перем ЗаполнительНастроек;
27 | Перем КонтрольРасписания;
28 |
29 | Процедура ВыполнитьКоманды(Позиция = 1) // BSLLS:CognitiveComplexity-off
30 |
31 | КомандыВыполнения = Настройки.КомандыВыполнения;
32 | КоличествоКоманд = КомандыВыполнения.Количество();
33 |
34 | Пока Позиция <= КоличествоКоманд Цикл
35 |
36 | ДанныеКоманды = КомандыВыполнения[Позиция - 1];
37 |
38 | Если ТипЗнч(ДанныеКоманды) = Тип("Соответствие") Тогда
39 | КлючКоманды = ДанныеКоманды.Получить("Команда");
40 | Если КлючКоманды = Неопределено Тогда
41 | Результат = ВыполнитьГруппуКоманд(ДанныеКоманды, Позиция); // Асинх
42 | Иначе
43 | ПараметрыКоманды = ДанныеКоманды.Получить("Параметры");
44 | Результат = ВыполнитьОдиночнуюКоманду(КлючКоманды, Позиция, ПараметрыКоманды);
45 | КонецЕсли;
46 | Иначе
47 | КлючКоманды = ДанныеКоманды;
48 | ПараметрыКоманды = Неопределено;
49 | Результат = ВыполнитьОдиночнуюКоманду(КлючКоманды, Позиция );
50 | КонецЕсли;
51 |
52 | Если Результат = Ложь Тогда
53 | Возврат;
54 | КонецЕсли;
55 |
56 | Позиция = Позиция + 1;
57 |
58 | КонецЦикла;
59 |
60 | КонецПроцедуры
61 |
62 | Функция ВыполнитьОдиночнуюКоманду(КлючКоманды, Позиция, ПараметрыКоманды = Неопределено)
63 | Результат = ВыполнитьКоманду(КлючКоманды, Позиция, , , ПараметрыКоманды);
64 | ПроверитьРезультатВыполненияКоманды(КлючКоманды, Результат, Позиция);
65 | Возврат Результат;
66 | КонецФункции
67 |
68 | Функция ВыполнитьГруппуКоманд(ГруппаКоманд, Позиция) // BSLLS:CognitiveComplexity-off
69 |
70 | Ждем = Новый Массив();
71 |
72 | ПозицияВГруппе = 1;
73 |
74 | Для каждого КлючЗначениеГруппы Из ГруппаКоманд Цикл
75 |
76 | КлючГруппы = КлючЗначениеГруппы.Ключ;
77 |
78 | КомандыГруппы = КлючЗначениеГруппы.Значение;
79 | Если ТипЗнч(КомандыГруппы) <> Тип("Массив") Тогда
80 | Продолжить;
81 | КонецЕсли;
82 |
83 | Для каждого ДанныеКоманды Из КомандыГруппы Цикл
84 |
85 | Если ТипЗнч(ДанныеКоманды) = Тип("Соответствие") Тогда
86 | КлючКоманды = ДанныеКоманды.Получить("Команда");
87 | ПараметрыКоманды = ДанныеКоманды.Получить("Параметры");
88 | Иначе
89 | КлючКоманды = ДанныеКоманды;
90 | ПараметрыКоманды = Неопределено;
91 | КонецЕсли;
92 |
93 | Если ПозицияВГруппе <> 1 Тогда
94 | Секунд = 1000;
95 | Приостановить(Секунд);
96 | КонецЕсли;
97 |
98 | Обещание = ВыполнитьКоманду(КлючКоманды, Позиция, ПозицияВГруппе, Истина, ПараметрыКоманды);
99 | Если ТипЗнч(Обещание) <> Тип("Обещание") Тогда
100 | СтрокаСообщения = "Задание не отрабатывает асинхронно.
101 | | Группа: " + Строка(КлючГруппы) + "
102 | | Ключ команды: " + КлючКоманды;
103 | Логирователь.ВЛог(СтрокаСообщения, Истина);
104 | ПроверитьРезультатВыполненияКоманды(КлючКоманды, Ложь, Позиция);
105 | Возврат Ложь;
106 | КонецЕсли;
107 |
108 | ПозицияВГруппе = ПозицияВГруппе + 1;
109 |
110 | Ждем.Добавить(Обещание);
111 |
112 | КонецЦикла;
113 |
114 | Если Ждем.Количество() = 0 Тогда
115 | Возврат Истина;
116 | КонецЕсли;
117 |
118 | Обещания.ОжидатьВсе(Ждем);
119 |
120 | ПозицияВГруппе = 0;
121 | Для каждого Обещание Из Ждем Цикл
122 | ПозицияВГруппе = ПозицияВГруппе + 1;
123 | Результат = ПроверитьРезультатОбещания(Обещание, КлючГруппы, ПозицияВГруппе);
124 | ПроверитьРезультатВыполненияКоманды(КлючКоманды, Результат, Позиция);
125 | Если Результат = Ложь Тогда
126 | Возврат Результат;
127 | КонецЕсли;
128 | КонецЦикла;
129 | КонецЦикла;
130 |
131 | Возврат Истина;
132 |
133 | КонецФункции
134 |
135 | Функция ВыполнитьКоманду(КлючКоманды, Позиция, ПозицияВГруппе = 0, ВызовАсинх = Ложь, Знач Параметры = Неопределено)
136 |
137 | ПараметрыКоманды = Новый Структура("Ключ, Позиция, ПозицияВГруппе, Параметры", "", 0, 0);
138 |
139 | ПараметрыКоманды.Ключ = КлючКоманды;
140 | ПараметрыКоманды.Позиция = Позиция;
141 | ПараметрыКоманды.ПозицияВГруппе = ПозицияВГруппе;
142 |
143 | ПараметрыКоманды.Параметры = ОбработатьВходящиеПараметрыКоманды(Параметры);
144 |
145 | Команда = КомандыПоКлючу[ВРег(КлючКоманды)];
146 | Если Команда = Неопределено Тогда
147 | Команда = КомандаПоУмолчанию;
148 | КонецЕсли;
149 |
150 | Попытка
151 | Если ВызовАсинх Тогда
152 | Обещание = Команда.ВыполнитьКомандуАсинх(ПараметрыКоманды);
153 | Возврат Обещание;
154 | Иначе
155 | Результат = Команда.ВыполнитьКоманду(ПараметрыКоманды);
156 | КонецЕсли;
157 | Исключение
158 | Логирователь.ВЛог(ОписаниеОшибки(), Истина);
159 | Результат = Ложь;
160 | КонецПопытки;
161 |
162 | Возврат Результат;
163 |
164 | КонецФункции
165 |
166 | Функция ОбработатьВходящиеПараметрыКоманды(Параметры)
167 |
168 | Полученные = Новый Соответствие;
169 |
170 | Если ТипЗнч(Параметры) = Тип("Массив") Тогда
171 | Для каждого ПараметрыВМассиве Из Параметры Цикл
172 | Входящие = ОбработатьВходящиеПараметрыКоманды(ПараметрыВМассиве);
173 | Общий.ОбъединитьСоответствия(Полученные, Входящие);
174 | КонецЦикла;
175 | Возврат Полученные;
176 | ИначеЕсли ТипЗнч(Параметры) <> Тип("Соответствие") Тогда
177 | Возврат Полученные;
178 | Иначе
179 | Возврат Параметры;
180 | КонецЕсли;
181 |
182 | КонецФункции
183 |
184 | Процедура ПроверитьРезультатВыполненияКоманды(КлючКоманды, Результат, Позиция)
185 |
186 | Если Результат = Истина Тогда
187 | Возврат;
188 | КонецЕсли;
189 |
190 | Если Настройки.РежимDebug = Истина
191 | Или Настройки.Фоново = Истина Тогда
192 |
193 | УведомитьИЗавершить = Истина;
194 | ТекстСообщения = "Прервано на команде: """ + Строка(КлючКоманды) + """"
195 | + ", позиция: " + Позиция;
196 | Логирователь.ВЛог(ТекстСообщения, , Истина, , Emoji.Прервано(), Ложь);
197 |
198 | Иначе
199 | УведомитьИЗавершить = Ложь;
200 | КонецЕсли;
201 |
202 | Если УведомитьИЗавершить
203 | Или Настройки.ПозицияВГрупповой > 0 Тогда
204 |
205 | Завершатель.ЗавершитьПоОшибке();
206 |
207 | КонецЕсли;
208 |
209 | СтрокаВвода = "";
210 | Подсказка = "Для продолжения набери команду"
211 | + Символы.ПС
212 | + "1 - запустить повторно этап: " + Строка(КлючКоманды)
213 | + Символы.ПС
214 | + "2 - запустить сначала сценарий: " + Настройки.ИдентификаторБазы
215 | + Символы.ПС
216 | + "0 - выйти"
217 | + Символы.ПС;
218 |
219 | Пока ВвестиСтроку(СтрокаВвода, Подсказка, 1, Ложь) Цикл
220 |
221 | Если СтрокаВвода = "1" Тогда
222 | ВыполнитьКомандыПовторно(Позиция);
223 | Прервать;
224 | ИначеЕсли СтрокаВвода = "2" Тогда
225 | ВыполнитьКомандыПовторно(1);
226 | Прервать;
227 | ИначеЕсли СтрокаВвода = "0" Тогда
228 | Завершатель.ЗавершитьПоОшибке();
229 | Иначе
230 | Сообщить("Введено неизвестное значение");
231 | СтрокаВвода = "";
232 | Продолжить;
233 | КонецЕсли;
234 |
235 | КонецЦикла;
236 |
237 | КонецПроцедуры
238 |
239 | Функция ПроверитьРезультатОбещания(Обещание, КлючГруппы, ПозицияВГруппе)
240 |
241 | Состояние = Обещание.Состояние();
242 |
243 | Если Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно
244 | Или Состояние = СостояниеФоновогоЗадания.НеВыполнялось Тогда
245 |
246 | ТекстСообщения = "Задание завершено аварийно.";
247 | ПоказатьСообщениеВыполненияЗадания(ТекстСообщения, КлючГруппы, , ПозицияВГруппе, , Истина);
248 | Возврат Ложь;
249 |
250 | Иначе
251 |
252 | ДанныеРезультата = Обещание.Получить();
253 | Если Не ТипЗнч(ДанныеРезультата) = Тип("Структура") Тогда
254 |
255 | ТекстСообщения = "Задание вернуло не структуру.";
256 | ПоказатьСообщениеВыполненияЗадания(ТекстСообщения, КлючГруппы, , ПозицияВГруппе, , Истина);
257 | Возврат Ложь;
258 |
259 | КонецЕсли;
260 |
261 | Результат = ДанныеРезультата.Результат;
262 | Если Результат = Ложь Тогда
263 |
264 | ТекстСообщения = "Задание не выполнено.";
265 | ПоказатьСообщениеВыполненияЗадания(ТекстСообщения, КлючГруппы, ДанныеРезультата.ПараметрыКоманды.Ключ, ,
266 | ДанныеРезультата.ОписаниеОшибки, Истина);
267 |
268 | КонецЕсли;
269 |
270 | Возврат Результат;
271 |
272 | КонецЕсли;
273 |
274 | КонецФункции
275 |
276 | Процедура ПоказатьСообщениеВыполненияЗадания(ТекстСообщения, КлючГруппы, КлючКоманды = "",
277 | ПозицияВГруппе = 0, ОписаниеОшибки = "", Ошибка = Ложь)
278 |
279 | СтрокаСообщения = ТекстСообщения + "
280 | | Группа: " + Строка(КлючГруппы);
281 |
282 | Если ЗначениеЗаполнено(КлючКоманды) Тогда
283 | СтрокаСообщения = СтрокаСообщения + "
284 | | Команда: " + Строка(КлючКоманды);
285 | Иначе
286 | СтрокаСообщения = СтрокаСообщения + "
287 | | Позиция в группе: " + Строка(ПозицияВГруппе);
288 | КонецЕсли;
289 |
290 | Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
291 | СтрокаСообщения = СтрокаСообщения + Символы.ПС + ОписаниеОшибки;
292 | КонецЕсли;
293 |
294 | Логирователь.ВЛог(СтрокаСообщения, Ошибка);
295 |
296 | КонецПроцедуры
297 |
298 | Процедура ВыполнитьКомандыПовторно(Позиция)
299 | ЗаполнительНастроек.ЗаполнитьНачальныеНастройки(Опции, Истина);
300 | ВыполнитьКоманды(Позиция);
301 | КонецПроцедуры
302 |
303 | Процедура ВыполнитьГрупповыеКоманды()
304 | Выполнитель.ВыполнитьКомандыМногопоточно(Настройки.ГрупповыеКоманды);
305 | КонецПроцедуры
306 |
307 | Процедура ЗаписатьФайлБлокировкиЗапуска()
308 |
309 | стрПозиция = Формат(Настройки.ПозицияВГрупповой, "ЧН=; ЧГ=");
310 | Инфо = "Выполнения команд №" + стрПозиция;
311 | ПутьКФайлу = Настройки.СформироватьПутьКФайлуБлокировкиЗапуска(Настройки.ПозицияВГрупповой);
312 |
313 | РаботаСФайлами.ЗаписатьТекстовыйФайл(Инфо, ПутьКФайлу);
314 | Настройки.ПутьКФайлуБлокировкиЗапуска = ПутьКФайлу;
315 |
316 | КонецПроцедуры
317 |
318 | Процедура БлокировкаОжиданияПредыдущегоЗадания(Опции)
319 |
320 | идБлокировки = Опции.Lock;
321 | Если Не ЗначениеЗаполнено(идБлокировки) Тогда
322 | Возврат;
323 | КонецЕсли;
324 |
325 | ПутьКФайлуБлокировки = Настройки.СформироватьПутьКФайлуБлокировкиЗапуска(идБлокировки);
326 | Пока РаботаСФайлами.ФайлСуществует(ПутьКФайлуБлокировки) Цикл
327 | Логирователь.Отладка("Ожидание выполнения задания №" + идБлокировки);
328 | Секунд = 3000;
329 | Приостановить(Секунд);
330 | КонецЦикла;
331 |
332 | КонецПроцедуры
333 |
334 | Процедура Запустить(_Опции) Экспорт
335 |
336 | Опции = _Опции;
337 | ЗаполнительНастроек.ЗаполнитьНачальныеНастройки(Опции);
338 |
339 | Если Не КонтрольРасписания.РазрешеноПоРасписанию() Тогда
340 | Завершатель.ЗавершитьПоОшибке("Запрещен запуск сценария по расписанию", Истина);
341 | КонецЕсли;
342 |
343 | Если Настройки.ГрупповыеКоманды.Количество() > 0 Тогда
344 | ВыполнитьГрупповыеКоманды();
345 | Иначе
346 | БлокировкаОжиданияПредыдущегоЗадания(Опции);
347 | ЗаписатьФайлБлокировкиЗапуска();
348 | ВыполнитьКоманды(Опции.НачатьСПозиции);
349 | КонецЕсли;
350 |
351 | Завершатель.Завершить();
352 |
353 | КонецПроцедуры
354 |
355 | &Желудь
356 | Процедура ПриСозданииОбъекта(&Пластилин("ЗаполнительНастроек") _ЗаполнительНастроек,
357 | &Пластилин("КонтрольРасписания") _КонтрольРасписания)
358 |
359 | ЗаполнительНастроек = _ЗаполнительНастроек;
360 | КонтрольРасписания = _КонтрольРасписания;
361 |
362 | КонецПроцедуры
363 |
--------------------------------------------------------------------------------
/src/core/Классы/ЗаполнительНастроек.os:
--------------------------------------------------------------------------------
1 | #Использовать configor
2 | #Использовать "..//../../src/Модули"
3 |
4 | &Пластилин
5 | Перем Настройки;
6 |
7 | &Пластилин
8 | Перем Логирователь; // BSLLS:Typo-off
9 |
10 | &Пластилин
11 | Перем ФиксаторОшибок;
12 |
13 | &Пластилин
14 | Перем Телеграм;
15 |
16 | &Пластилин
17 | Перем Завершатель; // BSLLS:Typo-off
18 |
19 | // BSLLS:CyclomaticComplexity-off
20 | // BSLLS:CognitiveComplexity-off
21 |
22 | Процедура ЗаполнитьНачальныеНастройки(Опции, Повторно = Ложь) Экспорт // BSLLS:MissingParameterDescription-off
23 |
24 | Если Не ПроверитьОбязательныеОпции(Опции) Тогда
25 | Возврат;
26 | КонецЕсли;
27 |
28 | ПутьКФайлуConfig = Опции.Config;
29 |
30 | УказательПлатформы = Опции.Platform;
31 | УказательПлатформыПоУмолчанию = "Платформа";
32 |
33 | Настройки.ИдентификаторБазы = Опции.ИдентификаторБазы;
34 |
35 | ПутьКФайлуCommands = Опции.Commands;
36 | ПутьКФайлуGroupCommands = Опции.GroupCommands;
37 | ПозицияВГрупповой = Опции.GroupPosition;
38 |
39 | ИдентификаторКоманд = Опции.ИдентификаторКоманд;
40 | ИдентификаторГрупповыхКоманд = Опции.ИдентификаторГрупповыхКоманд;
41 |
42 | Ответственный = Опции.Ответственный;
43 | Если ЗначениеЗаполнено(Ответственный) Тогда
44 | Настройки.Ответственный = Ответственный;
45 | КонецЕсли;
46 |
47 | Настройки.Фоново = Опции.Фоново = Истина;
48 | Настройки.ИспользоватьPowerShell = Опции.ИспользоватьPowerShell = Истина;
49 | Настройки.ИспользоватьДинамическоеОбновление = Опции.ИспользоватьДинамическоеОбновление = Истина;
50 | Настройки.ОставитьБлокировкуИБ = Опции.ОставитьБлокировкуИБ = Истина;
51 |
52 | Настройки.ПаузаПередЗапуском = Опции.ПаузаПередЗапуском;
53 | Настройки.СписокМетаданных = Опции.СписокМетаданных;
54 | Настройки.ОбновлятьОбъектыРекурсивно = Опции.ОбновлятьОбъектыРекурсивно = Истина;
55 |
56 | РежимDebug = Опции.РежимDebug = Истина;
57 | Настройки.РежимDebug = РежимDebug;
58 |
59 | Если РежимDebug = Истина Тогда
60 | ПутьКФайлуConfig = Настройки.Debug_ФайлНастроек;
61 | КонецЕсли;
62 |
63 | Настройки.ПараметрыDebug = Новый Структура("КаталогСкрипта", "");
64 | Настройки.ПозицияВГрупповой = ПозицияВГрупповой;
65 | ФиксаторОшибок.Инициализировать(ПозицияВГрупповой);
66 |
67 | Если НЕ ЗначениеЗаполнено(ПутьКФайлуGroupCommands) Тогда
68 |
69 | МенеджерПараметров = РаботаСФайлами.ПрочитатьYAMLФайл(ПутьКФайлуConfig);
70 |
71 | ПараметрыОбщие = МенеджерПараметров.Параметр("Общие");
72 | Настройки.Идентификатор = ПараметрыОбщие.Получить("Идентификатор");
73 |
74 | Настройки.ПараметрыРасписания = МенеджерПараметров.Параметр("Расписание");
75 | Настройки.ПараметрыКонфигурации = МенеджерПараметров.Параметр("Конфигурация");
76 |
77 | Настройки.ПараметрыПлатформы = МенеджерПараметров.Параметр(УказательПлатформы);
78 |
79 | Если Настройки.РежимDebug Тогда
80 | ПереопределитьПараметрыDebug(МенеджерПараметров, ИдентификаторКоманд, ПутьКФайлуCommands,
81 | ПутьКФайлуGroupCommands, ИдентификаторГрупповыхКоманд);
82 | КонецЕсли;
83 |
84 | Если Настройки.ПараметрыПлатформы = Неопределено Тогда
85 | Завершатель.ЗавершитьПоОшибке("Группа команд - " + УказательПлатформы
86 | + " в файле настроек " + ПутьКФайлуConfig + " не найдена");
87 | КонецЕсли;
88 |
89 | Настройки.ПараметрыБазы = МенеджерПараметров.Параметр(Настройки.ИдентификаторБазы);
90 |
91 | Если НЕ ЗначениеЗаполнено(ИдентификаторКоманд) Тогда
92 | Если Не ЗначениеЗаполнено(ПутьКФайлуCommands) Тогда
93 | Логирователь.ВЛог("Не передан параметр ""ИдентификаторКоманд"" - для базы " + Настройки.ИдентификаторБазы, Истина);
94 | Завершатель.ЗавершитьПоОшибке();
95 | Иначе
96 | // по умолчанию
97 | ИдентификаторКоманд = "Команды";
98 | КонецЕсли;
99 | КонецЕсли;
100 |
101 | Если Не ЗначениеЗаполнено(ПутьКФайлуCommands) Тогда
102 | КорневыеПараметрыКоманд = Настройки.ПараметрыБазы;
103 | Иначе
104 | МенеджерПараметров = РаботаСФайлами.ПрочитатьYAMLФайл(ПутьКФайлуCommands);
105 | КорневыеПараметрыКоманд = МенеджерПараметров.Параметр(Настройки.ИдентификаторБазы);
106 | КонецЕсли;
107 |
108 | Иначе
109 | Настройки.ПараметрыОбщие = Новый Соответствие();
110 | Настройки.ПараметрыРасписания = Новый Массив;
111 | Настройки.ПараметрыПлатформы = Новый Соответствие();
112 | Настройки.ПараметрыБазы = Новый Соответствие();
113 | КонецЕсли;
114 |
115 | Если ЗначениеЗаполнено(ПутьКФайлуGroupCommands) Тогда
116 | Если НЕ ЗначениеЗаполнено(ИдентификаторГрупповыхКоманд) Тогда
117 | ИдентификаторГрупповыхКоманд = "Запуск"; // по умолчанию
118 | КонецЕсли;
119 | Настройки.ИдентификаторГрупповыхКоманд = ИдентификаторГрупповыхКоманд;
120 | КонецЕсли;
121 |
122 | Если Не Повторно Тогда
123 |
124 | ТекстОписанияНастроек = Символы.ПС;
125 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "-----------------------------");
126 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Текущий каталог: " + ТекущийКаталог());
127 | Если ЗначениеЗаполнено(ПутьКФайлуGroupCommands) Тогда
128 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Идентификатор групповых команд: " + ИдентификаторГрупповыхКоманд);
129 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Файл групповых команд: " + ПутьКФайлуGroupCommands);
130 | Иначе
131 |
132 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Файл настроек: " + ПутьКФайлуConfig);
133 | Если УказательПлатформы <> УказательПлатформыПоУмолчанию Тогда
134 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Группа настроек платформы: " + УказательПлатформы);
135 | КонецЕсли;
136 | Если ЗначениеЗаполнено(ПутьКФайлуCommands) Тогда
137 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Файл команд: " + ПутьКФайлуCommands);
138 | КонецЕсли;
139 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "ИдентификаторБазы: " + Настройки.ИдентификаторБазы);
140 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "ИдентификаторКоманд: " + ИдентификаторКоманд);
141 |
142 | НачатьСПозиции = Опции.НачатьСПозиции;
143 | Если ЗначениеЗаполнено(НачатьСПозиции) И НачатьСПозиции <> 1 Тогда
144 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Запуск команд с позиции: " + Строка(НачатьСПозиции));
145 | КонецЕсли;
146 |
147 | КонецЕсли;
148 | Если Настройки.ПаузаПередЗапуском <> 0 Тогда
149 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек,
150 | "Установлена пауза перед запуском: " + Строка(Настройки.ПаузаПередЗапуском));
151 | КонецЕсли;
152 | Если Настройки.ИспользоватьДинамическоеОбновление Тогда
153 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Обновляемся динамически");
154 | КонецЕсли;
155 | Если Настройки.ОставитьБлокировкуИБ Тогда
156 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Оставляем блокировку ИБ");
157 | КонецЕсли;
158 | Если Настройки.Фоново Тогда
159 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Включен фоновый запуск");
160 | КонецЕсли;
161 | Если Настройки.РежимDebug Тогда
162 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Режим Debug");
163 | КонецЕсли;
164 | Если Настройки.ИспользоватьPowerShell Тогда
165 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "Использую PowerShell");
166 | КонецЕсли;
167 | ДобавитьСтрокуЧерезПС(ТекстОписанияНастроек, "-----------------------------");
168 | Логирователь.ВЛог(ТекстОписанияНастроек);
169 |
170 | КонецЕсли;
171 |
172 | Настройки.ГрупповыеКоманды = Новый Массив;
173 | Если ЗначениеЗаполнено(ПутьКФайлуGroupCommands) Тогда
174 | ЗаполнитьГрупповыеКоманды(ИдентификаторГрупповыхКоманд, ПутьКФайлуGroupCommands);
175 | Иначе
176 | ЗаполнитьКоманды(ИдентификаторКоманд, КорневыеПараметрыКоманд);
177 | ЗаполнитьОбщиеПараметры();
178 | ЗаполнитьРасписание();
179 | ЗаполнитьПараметрыПодключения();
180 | ЗаполнитьДанныеФайловНастроек();
181 | КонецЕсли;
182 |
183 | Настройки.ПараметрыОбщие.Вставить("ПутьКФайлуConfig", ПутьКФайлуConfig);
184 | Настройки.ПараметрыОбщие.Вставить("ПутьКФайлуCommands", ПутьКФайлуCommands);
185 | Настройки.ПараметрыОбщие.Вставить("ПутьКФайлуGroupCommands", ПутьКФайлуGroupCommands);
186 | Настройки.ПараметрыОбщие.Вставить("ИдентификаторКоманд", ИдентификаторКоманд);
187 |
188 | Если ТипЗнч(Настройки.ПараметрыБазы) <> Тип("Соответствие") Тогда
189 | Логирователь.ВЛог("Нет настроек для базы - " + Настройки.ИдентификаторБазы, Истина);
190 | Завершатель.ЗавершитьПоОшибке();
191 | КонецЕсли;
192 |
193 | КонецПроцедуры
194 |
195 | Процедура ЗаполнитьКоманды(ИдентификаторКоманд, КорневыеПараметры)
196 |
197 | ТипСоответствие = Тип("Соответствие");
198 | Если Не ТипЗнч(КорневыеПараметры) = ТипСоответствие Тогда
199 | Завершатель.ЗавершитьПоОшибке("Не найдены команды в файле команд");
200 | Возврат;
201 | КонецЕсли;
202 |
203 | ДанныеКоманд = КорневыеПараметры.Получить(ИдентификаторКоманд);
204 | Если ТипЗнч(ДанныеКоманд) <> ТипСоответствие Тогда
205 |
206 | // Проверим якорь
207 | Якорь = КорневыеПараметры.Получить("<<");
208 | Если Якорь <> Неопределено Тогда
209 | ДанныеКоманд = Якорь.Получить(ИдентификаторКоманд);
210 | КонецЕсли;
211 |
212 | Если ТипЗнч(ДанныеКоманд) <> ТипСоответствие Тогда
213 | Логирователь.ВЛог("Не найдены команды - " + ИдентификаторКоманд, Истина);
214 | Завершатель.ЗавершитьПоОшибке();
215 | КонецЕсли;
216 |
217 | КонецЕсли;
218 |
219 | Настройки.КомандыВыполнения = ДанныеКоманд.Получить("Команды");
220 | Если ТипЗнч(Настройки.КомандыВыполнения) <> Тип("Массив") Тогда
221 | Логирователь.ВЛог("Нет списка команд - " + ИдентификаторКоманд, Истина);
222 | Завершатель.ЗавершитьПоОшибке();
223 | КонецЕсли;
224 |
225 | ЗаполнитьПараметрыКоманд(ДанныеКоманд);
226 |
227 | КонецПроцедуры
228 |
229 | Процедура ЗаполнитьПараметрыКоманд(ДанныеКоманд)
230 |
231 | // Параметры команд
232 | Настройки.ПараметрыКоманд = Новый Структура();
233 |
234 | ДанныеПараметров = ДанныеКоманд.Получить("Параметры");
235 | Если ДанныеПараметров <> Неопределено Тогда
236 |
237 | Приветствие = ДанныеПараметров.Получить("Приветствие");
238 | Начало = ДанныеПараметров.Получить("Начало");
239 | Окончание = ДанныеПараметров.Получить("Окончание");
240 |
241 | Пауза = ДанныеПараметров.Получить("Пауза");
242 | КлючиЗапускаПредприятия = ДанныеПараметров.Получить("КлючиЗапускаПредприятия");
243 | КомментарийПриПомещенииВХранилище = ДанныеПараметров.Получить("КомментарийПриПомещенииВХранилище");
244 | СниматьБлокировкуРегламентныхЗаданий = ДанныеПараметров.Получить("СниматьБлокировкуРегламентныхЗаданий");
245 | ОтправлятьСообщенияВТелеграм = ДанныеПараметров.Получить("ОтправлятьСообщенияВТелеграм");
246 | ТекстВопроса = ДанныеПараметров.Получить("ТекстВопроса");
247 |
248 | Иначе
249 | Приветствие = "";
250 | Начало = "";
251 | Окончание = "";
252 | Пауза = "0";
253 | КлючиЗапускаПредприятия = "";
254 | КомментарийПриПомещенииВХранилище = "";
255 | СниматьБлокировкуРегламентныхЗаданий = Ложь;
256 | ОтправлятьСообщенияВТелеграм = Ложь;
257 | ТекстВопроса = "";
258 | КонецЕсли;
259 |
260 | Настройки.ПараметрыКоманд.Вставить("Приветствие", Приветствие);
261 | Настройки.ПараметрыКоманд.Вставить("Начало", Начало);
262 | Настройки.ПараметрыКоманд.Вставить("Окончание", Окончание);
263 | Настройки.ПараметрыКоманд.Вставить("Пауза", Пауза);
264 | Настройки.ПараметрыКоманд.Вставить("КлючиЗапускаПредприятия", КлючиЗапускаПредприятия);
265 | Настройки.ПараметрыКоманд.Вставить("КомментарийПриПомещенииВХранилище", КомментарийПриПомещенииВХранилище);
266 | Настройки.ПараметрыКоманд.Вставить("СниматьБлокировкуРегламентныхЗаданий", СниматьБлокировкуРегламентныхЗаданий);
267 | Настройки.ПараметрыКоманд.Вставить("ОтправлятьСообщенияВТелеграм", ОтправлятьСообщенияВТелеграм);
268 | Настройки.ПараметрыКоманд.Вставить("ТекстВопроса", ТекстВопроса);
269 |
270 | КонецПроцедуры
271 |
272 | Процедура ЗаполнитьГрупповыеКоманды(ИдентификаторГрупповыхКоманд, ПутьКФайлу)
273 |
274 | МенеджерПараметров = РаботаСФайлами.ПрочитатьYAMLФайл(ПутьКФайлу);
275 |
276 | ТипСоответствие = Тип("Соответствие");
277 | КорневыеПараметрыКоманд = МенеджерПараметров.Параметр(ИдентификаторГрупповыхКоманд);
278 | Если НЕ ТипЗнч(КорневыеПараметрыКоманд) = ТипСоответствие Тогда
279 | ВызватьИсключение "Не найдены групповые команды - " + ИдентификаторГрупповыхКоманд;
280 | КонецЕсли;
281 |
282 | ДанныеПараметров = КорневыеПараметрыКоманд.Получить("Параметры");
283 | ДанныеКоманд = КорневыеПараметрыКоманд.Получить("Команды");
284 |
285 | Если Не ТипЗнч(ДанныеКоманд) = Тип("Массив") Тогда
286 | ВызватьИсключение "Не найден список команд для - " + ИдентификаторГрупповыхКоманд;
287 | КонецЕсли;
288 |
289 | Если НЕ ТипЗнч(ДанныеПараметров) = ТипСоответствие Тогда
290 | ДанныеПараметров = Новый Соответствие;
291 | КонецЕсли;
292 |
293 | Для каждого ДанныеГрупповой Из ДанныеКоманд Цикл
294 |
295 | ТипДанныхГрупповой = ТипЗнч(ДанныеГрупповой);
296 | Если ТипДанныхГрупповой = Тип("Соответствие") Тогда
297 |
298 | ГруппаПоследовательной = Новый Массив;
299 | КомандыПоследовательные = ДанныеГрупповой.Получить("Последовательно");
300 | Если ТипЗнч(КомандыПоследовательные) = Тип("Массив") Тогда
301 | Для каждого ДанныеПоследовательной Из КомандыПоследовательные Цикл
302 | ДобавитьГрупповуюКоманду(ДанныеПоследовательной, ДанныеПараметров, ГруппаПоследовательной);
303 | КонецЦикла;
304 | КонецЕсли;
305 | Если ГруппаПоследовательной.Количество() > 0 Тогда
306 | Настройки.ГрупповыеКоманды.Добавить(ГруппаПоследовательной);
307 | КонецЕсли;
308 |
309 | Иначе
310 | ДобавитьГрупповуюКоманду(ДанныеГрупповой, ДанныеПараметров);
311 | КонецЕсли;
312 |
313 | КонецЦикла;
314 |
315 | КонецПроцедуры
316 |
317 | Процедура ДобавитьГрупповуюКоманду(СтрокаКоманды, ДанныеПараметров, Знач ГрупповыеКоманды = Неопределено)
318 |
319 | Если ТипЗнч(СтрокаКоманды) <> Тип("Строка") Тогда
320 | ВызватьИсключение "Не определена групповая команда - " + Строка(СтрокаКоманды);
321 | КонецЕсли;
322 |
323 | Если ГрупповыеКоманды = Неопределено Тогда
324 | ГрупповыеКоманды = Настройки.ГрупповыеКоманды;
325 | КонецЕсли;
326 |
327 | Разделитель = "%";
328 |
329 | Для каждого КлючЗначение Из ДанныеПараметров Цикл
330 | ИмяПараметра = КлючЗначение.Ключ;
331 | ЗначениеПараметра = КлючЗначение.Значение;
332 | СтрокаКоманды = Логирователь.ЗаменитьПараметрВТексте(СтрокаКоманды, ИмяПараметра, ЗначениеПараметра, Разделитель);
333 | КонецЦикла;
334 |
335 | СтрокаКоманды = Логирователь.ЗаменитьПараметрВТексте(СтрокаКоманды, "ПС", Символы.ПС, Разделитель);
336 | ГрупповыеКоманды.Добавить(СтрокаКоманды);
337 |
338 | КонецПроцедуры
339 |
340 | Процедура ЗаполнитьОбщиеПараметры()
341 |
342 | Настройки.ПараметрыТелеграм = Новый Структура();
343 |
344 | ЗаполнитьПараметрыТелеграм();
345 |
346 | КонецПроцедуры
347 |
348 | Процедура ЗаполнитьПараметрыТелеграм()
349 |
350 | // Телеграм
351 | ДанныеПараметров = Настройки.ПараметрыОбщие.Получить("Телеграм");
352 | Если ТипЗнч(ДанныеПараметров) <> Тип("Соответствие") Тогда
353 | ДанныеПараметров = Новый Соответствие();
354 | КонецЕсли;
355 |
356 | ОтправлятьСообщения = Общий.ПризнакВключенияПараметра("ОтправлятьСообщенияВТелеграм", Настройки.ПараметрыКоманд);
357 | Настройки.ПараметрыТелеграм.Вставить("ОтправлятьСообщения", ОтправлятьСообщения);
358 | Настройки.ПараметрыТелеграм.Вставить("BotID", Строка(ДанныеПараметров.Получить("BotID")));
359 | Настройки.ПараметрыТелеграм.Вставить("Токен", Строка(ДанныеПараметров.Получить("Токен")));
360 |
361 | Если Настройки.РежимDebug = Истина Тогда
362 |
363 | Настройки.ПараметрыТелеграм.ОтправлятьСообщения = Ложь;
364 |
365 | Иначе
366 |
367 | Телеграм.УстановитьТокен(Настройки.ПараметрыТелеграм.Токен);
368 |
369 | КонецЕсли;
370 |
371 | КонецПроцедуры
372 |
373 | Процедура ЗаполнитьРасписание()
374 |
375 | // Конфигурация
376 | ПараметрыРасписания = Настройки.ПараметрыРасписания;
377 | ПривестиМассивПараметр(ПараметрыРасписания);
378 |
379 | Для каждого Элемент Из ПараметрыРасписания Цикл
380 |
381 | ДеньНедели = Элемент.Получить("ДеньНедели");
382 | ПривестиЧисловойПараметр(ДеньНедели);
383 |
384 | ПараметрыВремени = Элемент.Получить("Параметры");
385 | ПривестиМассивПараметр(ПараметрыВремени);
386 |
387 | ВремяКэш = Новый Соответствие();
388 | ВремяКэш.Вставить("ВремяС", 0);
389 | ВремяКэш.Вставить("ВремяПо", 0);
390 |
391 | Для каждого ЭлементВремени Из ПараметрыВремени Цикл
392 |
393 | Для каждого ЭлементПараметра Из Общий.СкопироватьСоответствие(ВремяКэш) Цикл
394 | Ключ = ЭлементПараметра.Ключ;
395 | Значение = ЭлементВремени.Получить(ЭлементПараметра.Ключ);
396 | Если Значение <> Неопределено Тогда
397 | ПривестиЧисловойПараметр(Значение);
398 | ВремяКэш.Вставить(Ключ, Значение);
399 | КонецЕсли;
400 | КонецЦикла;
401 |
402 | КонецЦикла;
403 |
404 | ЭлементРасписания = Новый Структура("ДеньНедели", ДеньНедели);
405 | Время = Новый Массив;
406 | СтруктураВремени = Новый Структура("С, По",
407 | ВремяКэш.Получить("ВремяС"),
408 | ВремяКэш.Получить("ВремяПо"));
409 | Время.Добавить(СтруктураВремени);
410 | ЭлементРасписания.Вставить("Время", Время);
411 |
412 | Настройки.Расписание.Добавить(ЭлементРасписания);
413 |
414 | КонецЦикла;
415 |
416 | КонецПроцедуры
417 |
418 | Процедура ЗаполнитьПараметрыПодключения()
419 |
420 | Настройки.ПараметрыПодключения = Новый Структура();
421 |
422 | // BSLLS:DuplicateStringLiteral-off
423 |
424 | // Общие
425 | Настройки.ПараметрыПодключения.Вставить("Идентификатор", Строка(Настройки.Идентификатор));
426 |
427 | // Конфигурация
428 | ПараметрыКонфигурации = Настройки.ПараметрыКонфигурации;
429 | ПривестиПустыеПараметры(ПараметрыКонфигурации);
430 | Настройки.ПараметрыПодключения.Вставить("ИмяКонфигурации", ПараметрыКонфигурации.Получить("Имя"));
431 |
432 | Ответственный = Настройки.Ответственный;
433 | Если НЕ ЗначениеЗаполнено(Ответственный) Или Ответственный = "Фамилия Имя" Тогда
434 | Завершатель.ЗавершитьПоОшибке("Заполни ответственного в файле autumn-properties.yml");
435 | Возврат;
436 | КонецЕсли;
437 |
438 | Настройки.ПараметрыПодключения.Вставить("Ответственный", Ответственный);
439 |
440 | // Платформа
441 | Настройки.ПараметрыПодключения.Вставить("ПутьКПлатформе", Настройки.ПараметрыПлатформы.Получить("1cv8"));
442 | Настройки.ПараметрыПодключения.Вставить("ВерсияПлатформы", Настройки.ПараметрыПлатформы.Получить("Версия"));
443 |
444 | // RAS
445 | ПараметрыRAS = Настройки.ПараметрыПлатформы.Получить("RAS");
446 | ПривестиПустыеПараметры(ПараметрыRAS);
447 | Настройки.ПараметрыПодключения.Вставить("СерверRAS", ПараметрыRAS.Получить("Сервер"));
448 | Настройки.ПараметрыПодключения.Вставить("ПортRAS", ПараметрыRAS.Получить("Порт"));
449 |
450 | // Обновление
451 | ПараметрыОбновления = Настройки.ПараметрыПлатформы.Получить("Обновление");
452 | ПривестиПустыеПараметры(ПараметрыОбновления);
453 | Настройки.ПараметрыПодключения.Вставить("СообщениеПриБлокировкиИБ", ПараметрыОбновления.Получить("Сообщение"));
454 | Настройки.ПараметрыПодключения.Вставить("КодДоступаПриБлокировкиИБ", ПараметрыОбновления.Получить("КодДоступа"));
455 |
456 | // База
457 | ПараметрыБазы = Настройки.ПараметрыБазы;
458 | ПривестиПустыеПараметры(ПараметрыБазы);
459 | Настройки.ПараметрыПодключения.Вставить("ИмяБазы", ПараметрыБазы.Получить("ИмяБазы"));
460 | Настройки.ПараметрыПодключения.Вставить("СерверБазы", ПараметрыБазы.Получить("Сервер"));
461 | Настройки.ПараметрыПодключения.Вставить("ПортБазы", ПараметрыБазы.Получить("Порт"));
462 |
463 | // Конфигуратор
464 | ПараметрыКонфигуратора = ПараметрыБазы.Получить("Конфигуратор");
465 | ПривестиПустыеПараметры(ПараметрыКонфигуратора);
466 |
467 | Если Настройки.ЛичныеЛогинККонфигуратору <> Неопределено Тогда
468 | ЛогинККонфигуратору = Строка(Настройки.ЛичныеЛогинККонфигуратору);
469 | ПарольККонфигуратору = Строка(Настройки.ЛичныеПарольККонфигуратору);
470 | Иначе
471 | ЛогинККонфигуратору = ПараметрыКонфигуратора.Получить("Логин");
472 | ПарольККонфигуратору = ПараметрыКонфигуратора.Получить("Пароль");
473 | КонецЕсли;
474 |
475 | Настройки.ПараметрыПодключения.Вставить("ЛогинККонфигуратору", ЛогинККонфигуратору);
476 | Настройки.ПараметрыПодключения.Вставить("ПарольККонфигуратору", ПарольККонфигуратору);
477 |
478 | // Хранилище
479 | ПараметрыХранилища = ПараметрыБазы.Получить("Хранилище");
480 | ПривестиПустыеПараметры(ПараметрыХранилища);
481 | Настройки.ПараметрыПодключения.Вставить("ПутьКХранилищу", ПараметрыХранилища.Получить("Путь"));
482 | Настройки.ПараметрыПодключения.Вставить("ЛогинКХранилищу", ПараметрыХранилища.Получить("Логин"));
483 | Настройки.ПараметрыПодключения.Вставить("ПарольКХранилищу", ПараметрыХранилища.Получить("Пароль"));
484 |
485 | // SQL Хранилище
486 | ПараметрыSQL = ПараметрыБазы.Получить("SQL");
487 | ПривестиПустыеПараметры(ПараметрыSQL);
488 | Настройки.ПараметрыПодключения.Вставить("ТипСУБД", ПараметрыSQL.Получить("ТипСУБД"));
489 | Настройки.ПараметрыПодключения.Вставить("СерверSQL", ПараметрыSQL.Получить("Сервер"));
490 | Настройки.ПараметрыПодключения.Вставить("ИмяБазыSQL", ПараметрыSQL.Получить("ИмяБазы"));
491 | Настройки.ПараметрыПодключения.Вставить("ИмяПользователяSQL", ПараметрыSQL.Получить("ИмяПользователя"));
492 | Настройки.ПараметрыПодключения.Вставить("ПарольSQL", ПараметрыSQL.Получить("Пароль"));
493 |
494 | ЗаполнитьЗначенияСвойств(Настройки, Настройки.ПараметрыПодключения);
495 |
496 | ЗаполнитьПараметрыРасширенийКонфигурации(ПараметрыБазы);
497 | КонецПроцедуры
498 |
499 | Процедура ЗаполнитьПараметрыРасширенийКонфигурации(ПараметрыБазы)
500 |
501 | Расширения = ПараметрыБазы.Получить("Расширения");
502 | Если Не ТипЗнч(Расширения) = Тип("Массив") Тогда
503 | Возврат;
504 | КонецЕсли;
505 |
506 | Для каждого НастройкиРасширения Из Расширения Цикл
507 |
508 | Имя = НастройкиРасширения.Получить("Имя");
509 |
510 | ДанныеРасширения = Новый Структура;
511 | ДанныеРасширения.Вставить("Имя", Имя);
512 |
513 | ПараметрыХранилища = НастройкиРасширения.Получить("Хранилище");
514 | ПривестиПустыеПараметры(ПараметрыХранилища);
515 | ДанныеРасширения.Вставить("ПутьКХранилищу", ПараметрыХранилища.Получить("Путь"));
516 | ДанныеРасширения.Вставить("ЛогинКХранилищу", ПараметрыХранилища.Получить("Логин"));
517 | ДанныеРасширения.Вставить("ПарольКХранилищу", ПараметрыХранилища.Получить("Пароль"));
518 |
519 | Настройки.РасширенияКонфигурации.Вставить(Имя, ДанныеРасширения);
520 |
521 | КонецЦикла;
522 |
523 | КонецПроцедуры
524 |
525 | Процедура ЗаполнитьДанныеФайловНастроек()
526 |
527 | Настройки.ФайлыНастроек = Новый Структура();
528 | Настройки.ФайлыНастроек.Вставить("Каталог", Настройки.ПараметрыОбщие.Получить("КаталогНастроек"));
529 |
530 | ИменаФайлов = Настройки.ПараметрыОбщие.Получить("Файлы");
531 | Если ТипЗнч(ИменаФайлов) <> Тип("Соответствие") Тогда
532 | ВызватьИсключение "Не найдена секция ""Файлы"" в группе ""Общие"" в файле настроек";
533 | КонецЕсли;
534 |
535 | Настройки.ФайлыНастроек.Вставить("repo_test", ИменаФайлов.Получить("repo_test"));
536 | Настройки.ФайлыНастроек.Вставить("merge", ИменаФайлов.Получить("merge"));
537 |
538 | metadata_name = ИменаФайлов.Получить("metadata");
539 | Если Не ЗначениеЗаполнено(metadata_name) Тогда
540 | metadata_name = "metadata.txt";
541 | КонецЕсли;
542 | Настройки.ФайлыНастроек.Вставить("metadata", metadata_name);
543 |
544 | metadata_merge = ИменаФайлов.Получить("metadata_merge");
545 | Если Не ЗначениеЗаполнено(metadata_merge) Тогда
546 | metadata_merge = "metadata_merge.xml";
547 | КонецЕсли;
548 | Настройки.ФайлыНастроек.Вставить("metadata_merge", metadata_merge);
549 |
550 | ИмяКаталогаПоУмолчанию = "cf";
551 | ПутьВНастройках = "ПутьККаталогуCF";
552 | УстановитьКаталогФайловНастроек(ИмяКаталогаПоУмолчанию, ПутьВНастройках);
553 |
554 | ИмяКаталогаПоУмолчанию = "cfe";
555 | ПутьВНастройках = "ПутьККаталогуCFe";
556 | УстановитьКаталогФайловНастроек(ИмяКаталогаПоУмолчанию, ПутьВНастройках);
557 |
558 | ЗаполнитьЗначенияСвойств(Настройки, Настройки.ФайлыНастроек);
559 |
560 | КонецПроцедуры
561 |
562 | Процедура ПереопределитьПараметрыDebug(МенеджерПараметров, ИдентификаторКоманд, ПутьКФайлуCommands,
563 | ПутьКФайлуGroupCommands, ИдентификаторГрупповыхКоманд)
564 |
565 | ДанныеПараметров = Настройки.ПараметрыОбщие.Получить("Debug");
566 | Настройки.ИдентификаторБазы = ДанныеПараметров.Получить("ИдентификаторБазы");
567 | ИдентификаторКоманд = ДанныеПараметров.Получить("ИдентификаторКоманд");
568 | ПутьКФайлуCommands = ДанныеПараметров.Получить("ФайлКоманд");
569 | ПутьКФайлуGroupCommands = ДанныеПараметров.Получить("ФайлГрупповыхКоманд");
570 | ИдентификаторГрупповыхКоманд = ДанныеПараметров.Получить("ИдентификаторГрупповыхКоманд");
571 |
572 | УказательПлатформы = ДанныеПараметров.Получить("УказательГруппыПлатформы");
573 | Если ЗначениеЗаполнено(УказательПлатформы) Тогда
574 | Настройки.ПараметрыПлатформы = МенеджерПараметров.Параметр(УказательПлатформы);
575 | КонецЕсли;
576 |
577 | Настройки.ПараметрыDebug.Вставить("КаталогСкрипта", ДанныеПараметров.Получить("КаталогСкрипта"));
578 |
579 | КонецПроцедуры
580 |
581 | Процедура УстановитьКаталогФайловНастроек(ИмяКаталога, ПутьВНастройках, ПоУмолчанию = Ложь)
582 |
583 | Если ПоУмолчанию Тогда
584 | ПутьККаталогу = "\" + ИмяКаталога;
585 | Иначе
586 | ПутьККаталогу = Настройки.ПараметрыОбщие.Получить(ПутьВНастройках);
587 | Если Не ЗначениеЗаполнено(ПутьККаталогу) Тогда
588 | УстановитьКаталогФайловНастроек(ИмяКаталога, ПутьВНастройках, Истина);
589 | Возврат;
590 | КонецЕсли;
591 | КонецЕсли;
592 |
593 | Если СтрНайти(ПутьККаталогу, ":\") = 0 Тогда
594 | // Относительный путь
595 | ПутьККаталогу = ТекущийКаталог() + ПутьККаталогу;
596 | КонецЕсли;
597 |
598 | Если Не РаботаСФайлами.ФайлСуществует(ПутьККаталогу) Тогда
599 |
600 | Попытка
601 | СоздатьКаталог(ПутьККаталогу);
602 | Исключение
603 | ТекстСообщения = "Не удаётся создать каталог "
604 | + ИмяКаталога + " по пути в настройках" + Символы.ПС + ОписаниеОшибки();
605 | Логирователь.ВЛог(ТекстСообщения, Истина);
606 | Если Не ПоУмолчанию Тогда
607 | УстановитьКаталогФайловНастроек(ИмяКаталога, ПутьВНастройках, Истина);
608 | Иначе
609 | ВызватьИсключение;
610 | КонецЕсли;
611 |
612 | КонецПопытки;
613 |
614 | КонецЕсли;
615 | Настройки.ФайлыНастроек.Вставить(ПутьВНастройках, ПутьККаталогу);
616 |
617 | КонецПроцедуры
618 |
619 | Процедура ДобавитьСтрокуЧерезПС(СтрокаИсходная, Текст)
620 |
621 | Если Не ПустаяСтрока(СтрокаИсходная) Тогда
622 | СтрокаИсходная = СтрокаИсходная + Символы.ПС;
623 | КонецЕсли;
624 |
625 | СтрокаИсходная = СтрокаИсходная + Текст;
626 |
627 | КонецПроцедуры
628 |
629 | Функция ПроверитьОбязательныеОпции(Опции)
630 |
631 | ИдентификаторБазы = Опции.ИдентификаторБазы;
632 | GroupCommands = Опции.GroupCommands;
633 |
634 | Если Не ЗначениеЗаполнено(ИдентификаторБазы) И Не ЗначениеЗаполнено(GroupCommands) Тогда
635 |
636 | ТекстСообщения = "Необходимо передать один из обязательных параметров:
637 | |--ИдентификаторБазы
638 | |--GroupCommands";
639 |
640 | Завершатель.ЗавершитьПоОшибке(ТекстСообщения);
641 |
642 | Возврат Ложь;
643 |
644 | КонецЕсли;
645 |
646 | Возврат Истина;
647 |
648 | КонецФункции
649 |
650 | #Область Приведение_типов
651 |
652 | Процедура ПривестиПустыеПараметры(ПолученныеПараметры)
653 | Если ТипЗнч(ПолученныеПараметры) <> Тип("Соответствие") Тогда
654 | ПолученныеПараметры = Новый Соответствие;
655 | КонецЕсли;
656 | КонецПроцедуры
657 |
658 | Процедура ПривестиЧисловойПараметр(Значение)
659 | Если ТипЗнч(Значение) <> Тип("Число") Тогда
660 | ОписаниеТипа = Новый ОписаниеТипов("Число");
661 | Значение = ОписаниеТипа.ПривестиЗначение(Значение);
662 | КонецЕсли;
663 | КонецПроцедуры
664 |
665 | Процедура ПривестиМассивПараметр(Значение)
666 | Если ТипЗнч(Значение) <> Тип("Массив") Тогда
667 | Значение = Новый Массив;
668 | КонецЕсли;
669 | КонецПроцедуры
670 |
671 | #КонецОбласти
672 |
673 | &Желудь
674 | Процедура ПриСозданииОбъекта(&Пластилин ПервыйЗапуск)
675 | ПервыйЗапуск.Инициализация();
676 | КонецПроцедуры
--------------------------------------------------------------------------------