You've already forked SmartConfigurator
mirror of
https://github.com/ret-Phoenix/SmartConfigurator.git
synced 2026-06-18 01:06:18 +02:00
256 lines
14 KiB
Plaintext
256 lines
14 KiB
Plaintext
//////////////////////////////////////////////////////////////////////
|
|
// Демонстрационный скрипт создания дистрибутива
|
|
// Copyright: EvilBeaver <ovsiankin.aa@gmail.com> 2014
|
|
//
|
|
// Выполняет следующие шаги:
|
|
// 1. Получает из Хранилища крайнюю версию конфигурации
|
|
// 2. Создает на ее основе файл "конфигурации поставщика"
|
|
// 3. Собирает дистрибутив, включающий в себя конфигурацию поставщика
|
|
//
|
|
// Во время работы сценарий использует специальный "каталог сборки" (BuildArea) в котором
|
|
// накапливает временные файлы и сохраняет финальный результат.
|
|
//
|
|
// В качестве входных параметров используются:
|
|
// 1. Путь к хранилищу конфигурации
|
|
// 2. Логин/Пароль доступа в хранилище в виде строки Пользователь[:Пароль]
|
|
// (если пароля нет, то текст в квадратных скобках можно опустить)
|
|
// 3. Путь к файлу настройки дистрибутива (*.edf). Файл создается в Конфигураторе
|
|
// в меню Конфигурация\Поставка конфигурации\Комплект поставки.
|
|
// О том, как его создать см. документацию 1С:Предприятия 8
|
|
//
|
|
// Путь к платформе и каталог сборки жестко прописаны в процедуре ЗадатьНачальныеНастройки
|
|
//
|
|
// DISCLAIMER:
|
|
// Этот скрипт является примером использования OneScript и не может быть использован в реальных бизнес-решениях.
|
|
// Скрипт поставляется "как есть" и вы используете его на свой страх и риск.
|
|
// Вы также несете ответственность за любые желательные и нежелательные последствия его применения.
|
|
|
|
Перем мПараметрыДоступаКБазе;
|
|
Перем мПараметрыДоступаКХранилищу;
|
|
Перем мПутьКПлатформе;
|
|
Перем мКаталогСборки;
|
|
|
|
Функция СкопироватьМассив(Источник)
|
|
|
|
НовыйМассив = Новый Массив;
|
|
Для Каждого Элемент Из Источник Цикл
|
|
НовыйМассив.Добавить(Элемент);
|
|
КонецЦикла;
|
|
|
|
Возврат НовыйМассив;
|
|
|
|
КонецФункции
|
|
|
|
Функция ЗапуститьИПодождать(Параметры)
|
|
|
|
СтрокаЗапуска = "";
|
|
Для Каждого Параметр Из Параметры Цикл
|
|
|
|
СтрокаЗапуска = СтрокаЗапуска + " " + Параметр;
|
|
|
|
КонецЦикла;
|
|
|
|
КодВозврата = 0;
|
|
ЗапуститьПриложение(мПутьКПлатформе + СтрокаЗапуска, , Истина, КодВозврата);
|
|
|
|
Возврат КодВозврата;
|
|
|
|
КонецФункции
|
|
|
|
Функция ФайлИнформации()
|
|
|
|
Возврат мКаталогСборки + "\log.txt";
|
|
|
|
КонецФункции
|
|
|
|
Функция ПутьКВременнойБазе()
|
|
Возврат мКаталогСборки + "\TempDB";
|
|
КонецФункции
|
|
|
|
Процедура ВывестиФайлИнформации()
|
|
|
|
Файл = Новый Файл(ФайлИнформации());
|
|
Если Файл.Существует() Тогда
|
|
Чтение = Новый ЧтениеТекста(Файл.ПолноеИмя);
|
|
Сообщение = Чтение.Прочитать();
|
|
Сообщить(Сообщение);
|
|
Чтение.Закрыть();
|
|
Иначе
|
|
Сообщить("Информации об ошибке нет");
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ПараметрыВременнойБазы()
|
|
|
|
ПараметрыВремБазы = СкопироватьМассив(мПараметрыДоступаКБазе);
|
|
ПараметрыВремБазы[1] = "/F""" + ПутьКВременнойБазе() + """";
|
|
ПараметрыВремБазы.Удалить(2);
|
|
|
|
Возврат ПараметрыВремБазы;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ПолучитьВерсиюИзХранилища()
|
|
|
|
КаталогСборки = мКаталогСборки;
|
|
|
|
Файл = Новый Файл(КаталогСборки);
|
|
Если НЕ Файл.Существует() Тогда
|
|
СоздатьКаталог(КаталогСборки);
|
|
ИначеЕсли Не Файл.ЭтоКаталог() Тогда
|
|
ВызватьИсключение "Каталог сборки не является каталогом";
|
|
КонецЕсли;
|
|
|
|
ПараметрыПолучитьВерсию = СкопироватьМассив(мПараметрыДоступаКХранилищу);
|
|
ПараметрыПолучитьВерсию.Добавить("/ConfigurationRepositoryDumpCfg """+КаталогСборки+"\source.cf""");
|
|
|
|
Сообщить("Получение версии из хранилища");
|
|
КодВозврата = ЗапуститьИПодождать(ПараметрыПолучитьВерсию);
|
|
Если КодВозврата = 0 Тогда
|
|
Сообщить("Версия получена");
|
|
Иначе
|
|
Сообщить("Не удалось получить версию из хранилища:");
|
|
ВывестиФайлИнформации();
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СоздатьВременнуюБазу()
|
|
|
|
КаталогВременнойБазы = ПутьКВременнойБазе();
|
|
Файл = Новый Файл(КаталогВременнойБазы);
|
|
Если Не Файл.Существует() Тогда
|
|
СоздатьКаталог(КаталогВременнойБазы);
|
|
ИначеЕсли Файл.ЭтоКаталог() Тогда
|
|
УдалитьФайлы(КаталогВременнойБазы, "*.*");
|
|
Иначе
|
|
ВызватьИсключение "Не удалось создать каталог временной базы TempDB";
|
|
КонецЕсли;
|
|
|
|
ПараметрыЗапуска = Новый Массив;
|
|
ПараметрыЗапуска.Добавить("CREATEINFOBASE");
|
|
ПараметрыЗапуска.Добавить("File="""+КаталогВременнойБазы+""";");
|
|
ПараметрыЗапуска.Добавить("/UseTemplate""" + мКаталогСборки + "\source.cf" + """");
|
|
ПараметрыЗапуска.Добавить("/Out""" + ФайлИнформации() + """");
|
|
|
|
Сообщить("Создание временной базы");
|
|
КодВозврата = ЗапуститьИПодождать(ПараметрыЗапуска);
|
|
Если КодВозврата = 0 Тогда
|
|
Сообщить("Временная база создана");
|
|
Иначе
|
|
Сообщить("Не удалось создать временную базу:");
|
|
ВывестиФайлИнформации();
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СоздатьФайлПоставки()
|
|
|
|
ПараметрыВремБазы = ПараметрыВременнойБазы();
|
|
|
|
ПараметрыВремБазы.Добавить("/CreateDistributionFiles -cffile """ + мКаталогСборки + "\1cv8.cf" + """");
|
|
|
|
Сообщить("Создание файла поставки");
|
|
Если ЗапуститьИПодождать(ПараметрыВремБазы) = 0 Тогда
|
|
Сообщить("Файл поставки создан");
|
|
Иначе
|
|
Сообщить("Не удалось создать файл поставки:");
|
|
ВывестиФайлИнформации();
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СоздатьДистрибутив()
|
|
|
|
КаталогСборки = мКаталогСборки + "\setup";
|
|
Файл = Новый Файл(КаталогСборки);
|
|
Если Не Файл.Существует() Тогда
|
|
СоздатьКаталог(КаталогСборки);
|
|
ИначеЕсли Файл.ЭтоКаталог() Тогда
|
|
УдалитьФайлы(КаталогСборки, "*.*");
|
|
Иначе
|
|
ВызватьИсключение "Не удалось создать каталог сборки";
|
|
КонецЕсли;
|
|
|
|
// Сюда должен быть передан путь к файлу настройки дистрибутива, например:
|
|
// "С:\Users\Андрей\Documents\install.edf";
|
|
|
|
ФайлПараметров = АргументыКоманднойСтроки[2];
|
|
|
|
ПараметрыВремБазы = ПараметрыВременнойБазы();
|
|
ПараметрыВремБазы.Добавить("/CreateDistributive """ + КаталогСборки + """");
|
|
ПараметрыВремБазы.Добавить("-File """ + ФайлПараметров + """");
|
|
ПараметрыВремБазы.Добавить("-MakeSetup");
|
|
|
|
Сообщить("Создание дистрибутива");
|
|
Если ЗапуститьИПодождать(ПараметрыВремБазы) = 0 Тогда
|
|
Сообщить("Дистрибутив создан");
|
|
Иначе
|
|
Сообщить("Не удалось создать дистрибутив:");
|
|
ВывестиФайлИнформации();
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ОпределитьПараметрыВходаВХранилище(Знач СтрокаПараметров)
|
|
|
|
ПараметрыВхода = Новый Структура;
|
|
|
|
ПозицияРазделителя = Найти(СтрокаПараметров,":");
|
|
|
|
Если ПозицияРазделителя > 0 Тогда
|
|
ПараметрыВхода.Вставить("Пользователь", Лев(СтрокаПараметров, ПозицияРазделителя-1));
|
|
ПараметрыВхода.Вставить("Пароль", Сред(СтрокаПараметров, ПозицияРазделителя+1));
|
|
Иначе
|
|
ПараметрыВхода.Вставить("Пользователь", СтрокаПараметров);
|
|
ПараметрыВхода.Вставить("Пароль", "");
|
|
КонецЕсли;
|
|
|
|
Возврат ПараметрыВхода;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ЗадатьНачальныеНастройки()
|
|
|
|
Если АргументыКоманднойСтроки.Количество() <> 3 Тогда
|
|
Сообщить("Не заданы аргументы командной строки");
|
|
Сообщить("Требуется задать:");
|
|
Сообщить("<КаталогХранилища> <ПользовательХранилища[:ПарольХранилища]> <ПараметрыДистрибутива>");
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
мПутьКПлатформе = """C:\Program Files (x86)\1cv82\8.2.19.102\bin\1cv8.exe""";
|
|
мКаталогСборки = "c:\Users\Андрей\Documents\1C\BuildArea";
|
|
|
|
КаталогИБ = ПутьКВременнойБазе();
|
|
Хранилище = АргументыКоманднойСтроки[0];
|
|
ВходВХранилище = ОпределитьПараметрыВходаВХранилище(АргументыКоманднойСтроки[1]);
|
|
|
|
мПараметрыДоступаКБазе = Новый Массив;
|
|
мПараметрыДоступаКБазе.Добавить("DESIGNER");
|
|
мПараметрыДоступаКБазе.Добавить("/F""" + КаталогИБ + """");
|
|
мПараметрыДоступаКБазе.Добавить("/Out""" + ФайлИнформации() + """");
|
|
|
|
мПараметрыДоступаКХранилищу = СкопироватьМассив(мПараметрыДоступаКБазе);
|
|
мПараметрыДоступаКХранилищу.Добавить("/ConfigurationRepositoryF """+Хранилище+"""");
|
|
мПараметрыДоступаКХранилищу.Добавить("/ConfigurationRepositoryN """ + ВходВХранилище.Пользователь + """");
|
|
Если Не ПустаяСтрока(ВходВХранилище.Пароль) Тогда
|
|
мПараметрыДоступаКХранилищу.Добавить("/ConfigurationRepositoryP """ + ВходВХранилище.Пароль + """");
|
|
КонецЕсли;
|
|
мПараметрыДоступаКХранилищу.Добавить("/DisableStartupDialogs /DisableStartupMessages");
|
|
|
|
КонецПроцедуры
|
|
|
|
ЗадатьНачальныеНастройки();
|
|
СоздатьВременнуюБазу();
|
|
ПолучитьВерсиюИзХранилища();
|
|
СоздатьФайлПоставки();
|
|
СоздатьДистрибутив();
|
|
Сообщить("Работа завершена");
|
|
|