1
0
mirror of https://github.com/Stepa86/oScript-Examples.git synced 2026-04-23 19:31:06 +02:00

Учел вебклиент. Точнее, чтобы там не открывалось

This commit is contained in:
Anton Stepanov
2017-01-31 17:46:36 +03:00
parent 8b8bdfda8e
commit bf7e47051a
5 changed files with 1356 additions and 1327 deletions
@@ -1,30 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="f86c2db8-7dd5-483b-b7ad-4b1b04e44978">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>bbaa2ac9-df25-4069-92c7-acb62d30223c</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject._ПодготовкаНастроекДляБазы" category="Object">
<xr:TypeId>9b4f828a-21ea-44d4-af40-1b1b9d0f05c9</xr:TypeId>
<xr:ValueId>8b230d66-2ee4-4753-919c-4c17d05370a3</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>_ПодготовкаНастроекДляБазы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подготовка настроек для базы</v8:content>
</v8:item>
</Synonym>
<Comment/>
<DefaultForm>ExternalDataProcessor._ПодготовкаНастроекДляБазы.Form.Форма</DefaultForm>
<AuxiliaryForm/>
</Properties>
<ChildObjects>
<Form>Форма</Form>
</ChildObjects>
</ExternalDataProcessor>
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="f86c2db8-7dd5-483b-b7ad-4b1b04e44978">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>bbaa2ac9-df25-4069-92c7-acb62d30223c</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject._ПодготовкаНастроекДляБазы" category="Object">
<xr:TypeId>9b4f828a-21ea-44d4-af40-1b1b9d0f05c9</xr:TypeId>
<xr:ValueId>8b230d66-2ee4-4753-919c-4c17d05370a3</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>_ПодготовкаНастроекДляБазы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подготовка настроек для базы</v8:content>
</v8:item>
</Synonym>
<Comment/>
<DefaultForm>ExternalDataProcessor._ПодготовкаНастроекДляБазы.Form.Форма</DefaultForm>
<AuxiliaryForm/>
</Properties>
<ChildObjects>
<Form>Форма</Form>
</ChildObjects>
</ExternalDataProcessor>
</MetaDataObject>
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Form uuid="573192f4-b840-4d6b-a045-202127ad7c74">
<Properties>
<Name>Форма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobileDevice</v8:Value>
</UsePurposes>
<ExtendedPresentation/>
</Properties>
</Form>
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Form uuid="573192f4-b840-4d6b-a045-202127ad7c74">
<Properties>
<Name>Форма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobileDevice</v8:Value>
</UsePurposes>
<ExtendedPresentation/>
</Properties>
</Form>
</MetaDataObject>
@@ -1,457 +1,486 @@
&НаКлиентеНаСервереБезКонтекста
Функция РасширениеФайлаНастроек()
Возврат "base_config";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция КаталогПоиска()
Возврат "\..\..\Configs\";
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НастроитьВидимостьДоступность();
ИспользуемоеИмяФайла = РеквизитФормыВЗначение( "Объект" ).ИспользуемоеИмяФайла;
структ = ПеременныеОкружения();
Если структ.Свойство( "oscript" ) Тогда
Элементы.OSCRIPT.СписокВыбора.Добавить( структ.oscript );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
структ = ПеременныеОкружения();
Если структ.Свойство( "oscript" )
И Элементы.OSCRIPT.СписокВыбора.НайтиПоЗначению( структ.oscript ) = Неопределено Тогда
Элементы.OSCRIPT.СписокВыбора.Добавить( структ.oscript );
КонецЕсли;
EXE1CV8 = КаталогПрограммы() + "\Bin\1cv8.exe" ;
текФайл = Новый Файл( ИспользуемоеИмяФайла );
каталогПоиска = Новый Файл( текФайл.Путь + КаталогПоиска() );
каталогПоиска.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтаФорма, Новый Структура("каталогПоиска", каталогПоиска.Путь)));
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииЗавершение(Существует, ДополнительныеПараметры) Экспорт
Если Существует Тогда
НачатьПоискФайлов(Новый ОписаниеОповещения("ПриОткрытииКаталогПоискаПроверен", ЭтаФорма), ДополнительныеПараметры.каталогПоиска , "*." + РасширениеФайлаНастроек(), Истина );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииКаталогПоискаПроверен(НайденныеФайлы, ДополнительныеПараметры) Экспорт
Для каждого цНайденныйФайл Из НайденныеФайлы Цикл
Элементы.ИмяФайлаНастроек.СписокВыбора.Добавить( цНайденныйФайл.ПолноеИмя );
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если Не ЗагружатьИзБекапа Тогда
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_Server" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_User" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_Password" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_Base" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Script_Restore" ) );
КонецЕсли;
Если Не ВыгружатьБекап Тогда
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_Server" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_User" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_Password" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_Base" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "FileBackup" ) );
КонецЕсли;
Если Не ПодключатьКХранилищу Тогда
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "База_СтрокаПодключения" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "База_Пользователь" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "База_Пароль" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Хранилище_Адрес" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Хранилище_Пользователь" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Хранилище_Пароль" ) );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Прочитать(Команда)
Если Не ЗначениеЗаполнено( ИмяФайлаНастроек ) Тогда
Возврат;
КонецЕсли;
чтениеJSON = Новый ЧтениеJSON;
чтениеJSON.ОткрытьФайл(ИмяФайлаНастроек);
соотПараметры = ПрочитатьJSON( ЧтениеJSON, Истина );
чтениеJSON.Закрыть();
прочитанныеПараметры = Новый Соответствие;
ПрочитатьПараметрыРекурсивно( соотПараметры, прочитанныеПараметры );
OSCRIPT = прочитанныеПараметры.Получить( "OSCRIPT" );
EXE1CV8 = прочитанныеПараметры.Получить( "EXE1CV8" );
FileBackup = прочитанныеПараметры.Получить( "FileBackup" );
Script_Restore = прочитанныеПараметры.Получить( "Script_Restore" );
ВыгружатьБекап = прочитанныеПараметры.Получить( "Source_SQL.UseBackup" );
Source_SQL_Server = прочитанныеПараметры.Получить( "Source_SQL.Server" );
Source_SQL_User = прочитанныеПараметры.Получить( "Source_SQL.User" );
Source_SQL_Password = прочитанныеПараметры.Получить( "Source_SQL.Password" );
Source_SQL_Base = прочитанныеПараметры.Получить( "Source_SQL.Base" );
ЗагружатьИзБекапа = прочитанныеПараметры.Получить( "Current_SQL.UseRestore" );
Current_SQL_Server = прочитанныеПараметры.Получить( "Current_SQL.Server" );
Current_SQL_User = прочитанныеПараметры.Получить( "Current_SQL.User" );
Current_SQL_Password = прочитанныеПараметры.Получить( "Current_SQL.Password" );
Current_SQL_Base = прочитанныеПараметры.Получить( "Current_SQL.Base" );
База_СтрокаПодключения = прочитанныеПараметры.Получить( "Current_Base.Connect" );
База_Пользователь = прочитанныеПараметры.Получить( "Current_Base.User" );
База_Пароль = прочитанныеПараметры.Получить( "Current_Base.Password" );
ПодключатьКХранилищу = прочитанныеПараметры.Получить( "Current_Repo.Blind" );
Хранилище_Адрес = прочитанныеПараметры.Получить( "Current_Repo.Connect" );
Хранилище_Пользователь = прочитанныеПараметры.Получить( "Current_Repo.User" );
Хранилище_Пароль = прочитанныеПараметры.Получить( "Current_Repo.Password" );
НастроитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура Записать(Команда)
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл( ИмяФайлаНастроек,,, Новый ПараметрыЗаписиJSON(, Символы.Таб ));
соот = Новый Соответствие;
общиеПараметры = Новый Соответствие;
общиеПараметры.Вставить( "OSCRIPT" , OSCRIPT );
общиеПараметры.Вставить( "EXE1CV8" , EXE1CV8 );
общиеПараметры.Вставить( "FileBackup" , FileBackup );
общиеПараметры.Вставить( "Script_Restore", Script_Restore );
соот.Вставить( НСтр( "ru='Общие параметры'" ), общиеПараметры );
параметрыБазыИсточника = Новый Соответствие;
параметрыБазыИсточника.Вставить( "Source_SQL.UseBackup", ВыгружатьБекап );
параметрыБазыИсточника.Вставить( "Source_SQL.Server", Source_SQL_Server );
параметрыБазыИсточника.Вставить( "Source_SQL.User", Source_SQL_User );
параметрыБазыИсточника.Вставить( "Source_SQL.Password", Source_SQL_Password );
параметрыБазыИсточника.Вставить( "Source_SQL.Base", Source_SQL_Base );
соот.Вставить( НСтр( "ru='Параметры базы-источника'" ), параметрыБазыИсточника );
параметрыБазыПриемника = Новый Соответствие;
параметрыБазыПриемника.Вставить( "Current_SQL.UseRestore", ЗагружатьИзБекапа );
параметрыБазыПриемника.Вставить( "Current_SQL.Server", Current_SQL_Server );
параметрыБазыПриемника.Вставить( "Current_SQL.User", Current_SQL_User );
параметрыБазыПриемника.Вставить( "Current_SQL.Password", Current_SQL_Password );
параметрыБазыПриемника.Вставить( "Current_SQL.Base", Current_SQL_Base );
параметрыБазыПриемника.Вставить( "Current_Base.Connect", База_СтрокаПодключения );
параметрыБазыПриемника.Вставить( "Current_Base.User", База_Пользователь );
параметрыБазыПриемника.Вставить( "Current_Base.Password", База_Пароль );
параметрыБазыПриемника.Вставить( "Current_Repo.Blind", ПодключатьКХранилищу );
параметрыБазыПриемника.Вставить( "Current_Repo.Connect", Хранилище_Адрес );
параметрыБазыПриемника.Вставить( "Current_Repo.User", Хранилище_Пользователь );
параметрыБазыПриемника.Вставить( "Current_Repo.Password", Хранилище_Пароль );
соот.Вставить( НСтр( "ru='Параметры базы-приемника'" ), параметрыБазыПриемника );
ЗаписатьJSON( ЗаписьJSON, соот );
ЗаписьJSON.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНастроекНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла.Открытие );
Если ЗначениеЗаполнено( ИмяФайлаНастроек ) Тогда
ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайлаНастроек;
Иначе
имяБазы = Current_SQL_Base;
Если Не ЗначениеЗаполнено( имяБазы ) Тогда
имяБазы = "db111";
КонецЕсли;
ДиалогОткрытияФайла.ПолноеИмяФайла = имяБазы + "." + РасширениеФайлаНастроек();
КонецЕсли;
ДиалогОткрытияФайла.Фильтр = НСтр( "ru='Настройки базы'" ) + " (*." + РасширениеФайлаНастроек() + "|*." + РасширениеФайлаНастроек();
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр( "ru='Выберите файл настройки'" );
ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ИмяФайлаНастроекНачалоВыбораЗавершение", ЭтаФорма, Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла)));
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНастроекНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
Если (ВыбранныеФайлы <> Неопределено) Тогда
ИмяФайлаНастроек = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНастроекПриИзменении(Элемент)
Прочитать( Неопределено );
КонецПроцедуры
&НаКлиенте
Процедура Script_RestoreНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла.Открытие );
Если ЗначениеЗаполнено( ИмяФайлаНастроек ) Тогда
ДиалогОткрытияФайла.ПолноеИмяФайла = Script_Restore;
КонецЕсли;
ДиалогОткрытияФайла.Фильтр = НСтр( "ru='Исходный файл SQL'" ) + " (*.sql)|*.sql";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр( "ru='Выберите файл со скриптом восстановления'" );
ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ИмяФайлаНастроекНачалоВыбораЗавершение", ЭтаФорма, Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла)));
КонецПроцедуры
&НаКлиенте
Процедура Script_RestoreНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
Если (ВыбранныеФайлы <> Неопределено) Тогда
Script_Restore = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагружатьИзБекапаПриИзменении(Элемент)
Элементы.Группа_БазаПриемник_SQL.Доступность = ЗагружатьИзБекапа;
КонецПроцедуры
&НаКлиенте
Процедура ВыгружатьБекапПриИзменении(Элемент)
Элементы.Группа_БазаИсточник_SQL.Доступность = ВыгружатьБекап;
КонецПроцедуры
&НаКлиенте
Процедура ПодключатьКХранилищуПриИзменении(Элемент)
Элементы.Группа_БазаПриемник.Доступность = ПодключатьКХранилищу;
Элементы.Группа_Хранилище.Доступность = ПодключатьКХранилищу;
КонецПроцедуры
#Область Прочее
&НаКлиентеНаСервереБезКонтекста
Функция ПеременныеОкружения()
ПеременныеОкружения = Новый Структура;
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
WshSysEnv = WshShell.Environment("Process");
ПеременныеОкружения.Вставить("oscript" , WshSysEnv.Item("oscript"));
Исключение
КонецПопытки;
Возврат ПеременныеОкружения;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ПрочитатьПараметрыРекурсивно( Знач пПараметры, пПрочитенныеПараметры )
Для каждого цЭлемент Из пПараметры Цикл
Если ТипЗнч( цЭлемент.Значение ) = Тип("Структура")
ИЛИ ТипЗнч( цЭлемент.Значение ) = Тип("Соответствие") Тогда
ПрочитатьПараметрыРекурсивно( цЭлемент.Значение, пПрочитенныеПараметры );
Иначе
пПрочитенныеПараметры.Вставить( цЭлемент.Ключ, цЭлемент.Значение );
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьВидимостьДоступность()
Элементы.Группа_БазаПриемник_SQL.Доступность = ЗагружатьИзБекапа;
Элементы.Группа_БазаИсточник_SQL.Доступность = ВыгружатьБекап;
Элементы.Группа_БазаПриемник.Доступность = ПодключатьКХранилищу;
Элементы.Группа_Хранилище.Доступность = ПодключатьКХранилищу;
КонецПроцедуры
#КонецОбласти
Функция ТекущиеЗначения()
текЗначения = Новый Структура;
Для каждого цРеквизит Из ПолучитьРеквизиты() Цикл
текЗначения.Вставить( цРеквизит.Имя, ЭтаФорма[цРеквизит.Имя] );
КонецЦикла;
Возврат текЗначения;
КонецФункции
&НаКлиенте
Процедура ТестОбработки(Команда)
старЗначения = ТекущиеЗначения();
генератор = Новый ГенераторСлучайныхЧисел( ТекущаяУниверсальнаяДатаВМиллисекундах() );
тестовыеЗначения = Новый Структура("OSCRIPT,EXE1CV8,FileBackup,Script_Restore,
|Source_SQL_Server,Source_SQL_User,Source_SQL_Password,Source_SQL_Base,
|Current_SQL_Server,Current_SQL_User,Current_SQL_Password,Current_SQL_Base,
|База_СтрокаПодключения,База_Пользователь,База_Пароль,
|Хранилище_Адрес,Хранилище_Пользователь,Хранилище_Пароль");
Для каждого цЭлемент Из тестовыеЗначения Цикл
тестовыеЗначения.Вставить( цЭлемент.Ключ, Строка( генератор.СлучайноеЧисло() ) );
КонецЦикла;
тестовыеЗначения.Вставить( "ВыгружатьБекап", Истина );
тестовыеЗначения.Вставить( "ЗагружатьИзБекапа", Истина );
тестовыеЗначения.Вставить( "ПодключатьКХранилищу", Истина );
лИмяФайлаНастроек = ПолучитьИмяВременногоФайла( РасширениеФайлаНастроек() );
ИмяФайлаНастроек = лИмяФайлаНастроек;
ЗаполнитьЗначенияСвойств( ЭтаФорма, тестовыеЗначения );
Записать( Неопределено );
ЗаполнитьЗначенияСвойств( ЭтаФорма, старЗначения,, "Объект" );
ИмяФайлаНастроек = лИмяФайлаНастроек;
Прочитать( Неопределено );
тестПрошел = Истина;
Для каждого цЭлемент Из тестовыеЗначения Цикл
Если Не цЭлемент.Значение = ЭтаФорма[цЭлемент.Ключ] Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = цЭлемент.Ключ + НСтр( "ru=': Различаются значения. Должно быть '" ) + цЭлемент.Значение;
Сообщение.Поле = цЭлемент.Ключ;
Сообщение.Сообщить();
тестПрошел = Ложь;
КонецЕсли;
КонецЦикла;
Если тестПрошел Тогда
ЗаполнитьЗначенияСвойств( ЭтаФорма, старЗначения,, "Объект" );
НачатьУдалениеФайлов(Новый ОписаниеОповещения("ТестОбработкиЗавершение", ЭтаФорма), лИмяФайлаНастроек );
ПоказатьОповещениеПользователя( НСтр( "ru='Тест прошел успешно'" ) );
КонецЕсли;
НастроитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ТестОбработкиЗавершение(ДополнительныеПараметры) Экспорт
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция РасширениеФайлаНастроек()
Возврат "base_config";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция КаталогПоиска()
Возврат "\..\..\Configs\";
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НастроитьВидимостьДоступность();
ИспользуемоеИмяФайла = РеквизитФормыВЗначение( "Объект" ).ИспользуемоеИмяФайла;
структ = ПеременныеОкружения();
Если структ.Свойство( "oscript" ) Тогда
Элементы.OSCRIPT.СписокВыбора.Добавить( структ.oscript );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если Не ВебКлиент Тогда
структ = ПеременныеОкружения();
Если структ.Свойство( "oscript" )
И Элементы.OSCRIPT.СписокВыбора.НайтиПоЗначению( структ.oscript ) = Неопределено Тогда
Элементы.OSCRIPT.СписокВыбора.Добавить( структ.oscript );
КонецЕсли;
EXE1CV8 = КаталогПрограммы() + "1cv8.exe";
текФайл = Новый Файл( ИспользуемоеИмяФайла );
каталогПоиска = Новый Файл( текФайл.Путь + КаталогПоиска() );
каталогПоиска.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтаФорма, Новый Структура("каталогПоиска", каталогПоиска.Путь)));
#Иначе
Отказ = Истина;
ПоказатьПредупреждение(Новый ОписаниеОповещения("ПриОткрытииЗавершение_Отказ", ЭтаФорма), НСтр( "ru='Работа в веб-клиенте не поддерживается'" ) );
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииЗавершение_Отказ(ДополнительныеПараметры) Экспорт
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииЗавершение(Существует, ДополнительныеПараметры) Экспорт
Если Существует Тогда
НачатьПоискФайлов(Новый ОписаниеОповещения("ПриОткрытииКаталогПоискаПроверен", ЭтаФорма), ДополнительныеПараметры.каталогПоиска , "*." + РасширениеФайлаНастроек(), Истина );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииКаталогПоискаПроверен(НайденныеФайлы, ДополнительныеПараметры) Экспорт
Для каждого цНайденныйФайл Из НайденныеФайлы Цикл
Элементы.ИмяФайлаНастроек.СписокВыбора.Добавить( цНайденныйФайл.ПолноеИмя );
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если Не ЗагружатьИзБекапа Тогда
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_Server" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_User" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_Password" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Current_SQL_Base" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Script_Restore" ) );
КонецЕсли;
Если Не ВыгружатьБекап Тогда
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_Server" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_User" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_Password" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Source_SQL_Base" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "FileBackup" ) );
КонецЕсли;
Если Не ПодключатьКХранилищу Тогда
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "База_СтрокаПодключения" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "База_Пользователь" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "База_Пароль" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Хранилище_Адрес" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Хранилище_Пользователь" ) );
ПроверяемыеРеквизиты.Удалить( ПроверяемыеРеквизиты.Найти( "Хранилище_Пароль" ) );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Прочитать(Команда)
Если Не ЗначениеЗаполнено( ИмяФайлаНастроек ) Тогда
Возврат;
КонецЕсли;
#Если Не ВебКлиент Тогда
чтениеJSON = Новый ЧтениеJSON;
чтениеJSON.ОткрытьФайл(ИмяФайлаНастроек);
соотПараметры = ПрочитатьJSON( ЧтениеJSON, Истина );
чтениеJSON.Закрыть();
прочитанныеПараметры = Новый Соответствие;
ПрочитатьПараметрыРекурсивно( соотПараметры, прочитанныеПараметры );
OSCRIPT = прочитанныеПараметры.Получить( "OSCRIPT" );
EXE1CV8 = прочитанныеПараметры.Получить( "EXE1CV8" );
FileBackup = прочитанныеПараметры.Получить( "FileBackup" );
Script_Restore = прочитанныеПараметры.Получить( "Script_Restore" );
ВыгружатьБекап = прочитанныеПараметры.Получить( "Source_SQL.UseBackup" );
Source_SQL_Server = прочитанныеПараметры.Получить( "Source_SQL.Server" );
Source_SQL_User = прочитанныеПараметры.Получить( "Source_SQL.User" );
Source_SQL_Password = прочитанныеПараметры.Получить( "Source_SQL.Password" );
Source_SQL_Base = прочитанныеПараметры.Получить( "Source_SQL.Base" );
ЗагружатьИзБекапа = прочитанныеПараметры.Получить( "Current_SQL.UseRestore" );
Current_SQL_Server = прочитанныеПараметры.Получить( "Current_SQL.Server" );
Current_SQL_User = прочитанныеПараметры.Получить( "Current_SQL.User" );
Current_SQL_Password = прочитанныеПараметры.Получить( "Current_SQL.Password" );
Current_SQL_Base = прочитанныеПараметры.Получить( "Current_SQL.Base" );
База_СтрокаПодключения = прочитанныеПараметры.Получить( "Current_Base.Connect" );
База_Пользователь = прочитанныеПараметры.Получить( "Current_Base.User" );
База_Пароль = прочитанныеПараметры.Получить( "Current_Base.Password" );
ПодключатьКХранилищу = прочитанныеПараметры.Получить( "Current_Repo.Blind" );
Хранилище_Адрес = прочитанныеПараметры.Получить( "Current_Repo.Connect" );
Хранилище_Пользователь = прочитанныеПараметры.Получить( "Current_Repo.User" );
Хранилище_Пароль = прочитанныеПараметры.Получить( "Current_Repo.Password" );
НастроитьВидимостьДоступность();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура Записать(Команда)
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
#Если Не ВебКлиент Тогда
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл( ИмяФайлаНастроек,,, Новый ПараметрыЗаписиJSON(, Символы.Таб ));
соот = Новый Соответствие;
общиеПараметры = Новый Соответствие;
общиеПараметры.Вставить( "OSCRIPT" , OSCRIPT );
общиеПараметры.Вставить( "EXE1CV8" , EXE1CV8 );
общиеПараметры.Вставить( "FileBackup" , FileBackup );
общиеПараметры.Вставить( "Script_Restore", Script_Restore );
соот.Вставить( НСтр( "ru='Общие параметры'" ), общиеПараметры );
параметрыБазыИсточника = Новый Соответствие;
параметрыБазыИсточника.Вставить( "Source_SQL.UseBackup", ВыгружатьБекап );
параметрыБазыИсточника.Вставить( "Source_SQL.Server", Source_SQL_Server );
параметрыБазыИсточника.Вставить( "Source_SQL.User", Source_SQL_User );
параметрыБазыИсточника.Вставить( "Source_SQL.Password", Source_SQL_Password );
параметрыБазыИсточника.Вставить( "Source_SQL.Base", Source_SQL_Base );
соот.Вставить( НСтр( "ru='Параметры базы-источника'" ), параметрыБазыИсточника );
параметрыБазыПриемника = Новый Соответствие;
параметрыБазыПриемника.Вставить( "Current_SQL.UseRestore", ЗагружатьИзБекапа );
параметрыБазыПриемника.Вставить( "Current_SQL.Server", Current_SQL_Server );
параметрыБазыПриемника.Вставить( "Current_SQL.User", Current_SQL_User );
параметрыБазыПриемника.Вставить( "Current_SQL.Password", Current_SQL_Password );
параметрыБазыПриемника.Вставить( "Current_SQL.Base", Current_SQL_Base );
параметрыБазыПриемника.Вставить( "Current_Base.Connect", База_СтрокаПодключения );
параметрыБазыПриемника.Вставить( "Current_Base.User", База_Пользователь );
параметрыБазыПриемника.Вставить( "Current_Base.Password", База_Пароль );
параметрыБазыПриемника.Вставить( "Current_Repo.Blind", ПодключатьКХранилищу );
параметрыБазыПриемника.Вставить( "Current_Repo.Connect", Хранилище_Адрес );
параметрыБазыПриемника.Вставить( "Current_Repo.User", Хранилище_Пользователь );
параметрыБазыПриемника.Вставить( "Current_Repo.Password", Хранилище_Пароль );
соот.Вставить( НСтр( "ru='Параметры базы-приемника'" ), параметрыБазыПриемника );
ЗаписатьJSON( ЗаписьJSON, соот );
ЗаписьJSON.Закрыть();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНастроекНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла.Открытие );
Если ЗначениеЗаполнено( ИмяФайлаНастроек ) Тогда
ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайлаНастроек;
Иначе
имяБазы = Current_SQL_Base;
Если Не ЗначениеЗаполнено( имяБазы ) Тогда
имяБазы = "db111";
КонецЕсли;
ДиалогОткрытияФайла.ПолноеИмяФайла = имяБазы + "." + РасширениеФайлаНастроек();
КонецЕсли;
ДиалогОткрытияФайла.Фильтр = НСтр( "ru='Настройки базы'" ) + " (*." + РасширениеФайлаНастроек() + "|*." + РасширениеФайлаНастроек();
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр( "ru='Выберите файл настройки'" );
ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ИмяФайлаНастроекНачалоВыбораЗавершение", ЭтаФорма, Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла)));
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНастроекНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
Если (ВыбранныеФайлы <> Неопределено) Тогда
ИмяФайлаНастроек = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНастроекПриИзменении(Элемент)
Прочитать( Неопределено );
КонецПроцедуры
&НаКлиенте
Процедура Script_RestoreНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла.Открытие );
Если ЗначениеЗаполнено( ИмяФайлаНастроек ) Тогда
ДиалогОткрытияФайла.ПолноеИмяФайла = Script_Restore;
КонецЕсли;
ДиалогОткрытияФайла.Фильтр = НСтр( "ru='Исходный файл SQL'" ) + " (*.sql)|*.sql";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр( "ru='Выберите файл со скриптом восстановления'" );
ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ИмяФайлаНастроекНачалоВыбораЗавершение", ЭтаФорма, Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла)));
КонецПроцедуры
&НаКлиенте
Процедура Script_RestoreНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
Если (ВыбранныеФайлы <> Неопределено) Тогда
Script_Restore = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагружатьИзБекапаПриИзменении(Элемент)
Элементы.Группа_БазаПриемник_SQL.Доступность = ЗагружатьИзБекапа;
КонецПроцедуры
&НаКлиенте
Процедура ВыгружатьБекапПриИзменении(Элемент)
Элементы.Группа_БазаИсточник_SQL.Доступность = ВыгружатьБекап;
КонецПроцедуры
&НаКлиенте
Процедура ПодключатьКХранилищуПриИзменении(Элемент)
Элементы.Группа_БазаПриемник.Доступность = ПодключатьКХранилищу;
Элементы.Группа_Хранилище.Доступность = ПодключатьКХранилищу;
КонецПроцедуры
#Область Прочее
&НаКлиентеНаСервереБезКонтекста
Функция ПеременныеОкружения()
ПеременныеОкружения = Новый Структура;
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
WshSysEnv = WshShell.Environment("Process");
ПеременныеОкружения.Вставить("oscript" , WshSysEnv.Item("oscript"));
Исключение
КонецПопытки;
Возврат ПеременныеОкружения;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ПрочитатьПараметрыРекурсивно( Знач пПараметры, пПрочитенныеПараметры )
Для каждого цЭлемент Из пПараметры Цикл
Если ТипЗнч( цЭлемент.Значение ) = Тип("Структура")
ИЛИ ТипЗнч( цЭлемент.Значение ) = Тип("Соответствие") Тогда
ПрочитатьПараметрыРекурсивно( цЭлемент.Значение, пПрочитенныеПараметры );
Иначе
пПрочитенныеПараметры.Вставить( цЭлемент.Ключ, цЭлемент.Значение );
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьВидимостьДоступность()
Элементы.Группа_БазаПриемник_SQL.Доступность = ЗагружатьИзБекапа;
Элементы.Группа_БазаИсточник_SQL.Доступность = ВыгружатьБекап;
Элементы.Группа_БазаПриемник.Доступность = ПодключатьКХранилищу;
Элементы.Группа_Хранилище.Доступность = ПодключатьКХранилищу;
КонецПроцедуры
#КонецОбласти
Функция ТекущиеЗначения()
текЗначения = Новый Структура;
Для каждого цРеквизит Из ПолучитьРеквизиты() Цикл
текЗначения.Вставить( цРеквизит.Имя, ЭтаФорма[цРеквизит.Имя] );
КонецЦикла;
Возврат текЗначения;
КонецФункции
&НаКлиенте
Процедура ТестОбработки(Команда)
#Если Не ВебКлиент Тогда
старЗначения = ТекущиеЗначения();
генератор = Новый ГенераторСлучайныхЧисел( ТекущаяУниверсальнаяДатаВМиллисекундах() );
тестовыеЗначения = Новый Структура("OSCRIPT,EXE1CV8,FileBackup,Script_Restore,
|Source_SQL_Server,Source_SQL_User,Source_SQL_Password,Source_SQL_Base,
|Current_SQL_Server,Current_SQL_User,Current_SQL_Password,Current_SQL_Base,
|База_СтрокаПодключения,База_Пользователь,База_Пароль,
|Хранилище_Адрес,Хранилище_Пользователь,Хранилище_Пароль");
Для каждого цЭлемент Из тестовыеЗначения Цикл
тестовыеЗначения.Вставить( цЭлемент.Ключ, Строка( генератор.СлучайноеЧисло() ) );
КонецЦикла;
тестовыеЗначения.Вставить( "ВыгружатьБекап", Истина );
тестовыеЗначения.Вставить( "ЗагружатьИзБекапа", Истина );
тестовыеЗначения.Вставить( "ПодключатьКХранилищу", Истина );
лИмяФайлаНастроек = ПолучитьИмяВременногоФайла( РасширениеФайлаНастроек() );
ИмяФайлаНастроек = лИмяФайлаНастроек;
ЗаполнитьЗначенияСвойств( ЭтаФорма, тестовыеЗначения );
Записать( Неопределено );
ЗаполнитьЗначенияСвойств( ЭтаФорма, старЗначения,, "Объект" );
ИмяФайлаНастроек = лИмяФайлаНастроек;
Прочитать( Неопределено );
тестПрошел = Истина;
Для каждого цЭлемент Из тестовыеЗначения Цикл
Если Не цЭлемент.Значение = ЭтаФорма[цЭлемент.Ключ] Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = цЭлемент.Ключ + НСтр( "ru=': Различаются значения. Должно быть '" ) + цЭлемент.Значение;
Сообщение.Поле = цЭлемент.Ключ;
Сообщение.Сообщить();
тестПрошел = Ложь;
КонецЕсли;
КонецЦикла;
Если тестПрошел Тогда
ЗаполнитьЗначенияСвойств( ЭтаФорма, старЗначения,, "Объект" );
НачатьУдалениеФайлов(Новый ОписаниеОповещения("ТестОбработкиЗавершение", ЭтаФорма), лИмяФайлаНастроек );
ПоказатьОповещениеПользователя( НСтр( "ru='Тест прошел успешно'" ) );
КонецЕсли;
НастроитьВидимостьДоступность();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ТестОбработкиЗавершение(ДополнительныеПараметры) Экспорт
КонецПроцедуры