Имя: Пароль:
1C
1С v8
выгрузить конфигурацию из под тонкого клиента
,
0 1cnooob
 
06.04.12
23:23
реально?
1 IamAlexy
 
06.04.12
23:26
да.
1. закрываем тонкий клиент
2. открываем конфигуратор
3. выгружаем
2 andrewks
 
06.04.12
23:27
пятница
3 1cnooob
 
06.04.12
23:28
а не закрывая, обновлять же ведь можно, значит можно как то обратится к самой конф
4 Seducer
 
06.04.12
23:30
Эх...... где ж ты был в начале пятницы?   :)
5 1cnooob
 
06.04.12
23:30
ясно
6 Immortal
 
06.04.12
23:31
куда выгружать то собрался?
7 IamAlexy
 
06.04.12
23:31
(6) решил выгрузить нахаляву себе все с http://demo-ma.1c.ru
8 1cnooob
 
06.04.12
23:31
ага
9 andrewks
 
06.04.12
23:32
(7) а там есть что-то ценное?
10 1cnooob
 
06.04.12
23:34
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ    

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
   ЗаписьЖурналаРегистрации(ОбновлениеКонфигурации.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,,
       НСтр("ru = 'Открытие помощника обновления конфигурации...'"));
   ОбновлениеКонфигурации.ПрерватьВыполнениеЕслиАвторизованВнешнийПользователь();
   
   // Установка признака выполнения обновления по завершении помощника.
   ВыполнитьОбновление = Ложь;
   
   // Если это первый запуск после обновления конфигурации, то запоминаем и сбрасываем статус.
   Объект.РезультатОбновления = ОбновлениеКонфигурации.ОбновлениеКонфигурацииУспешно();
   Если Объект.РезультатОбновления <> Неопределено Тогда
       ОбновлениеКонфигурации.СброситьСтатусОбновленияКонфигурации();
   КонецЕсли;
   
   // Проверяем каждый раз при открытии помощника.
   КонфигурацияИзменена = КонфигурацияИзменена();
   
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если ВебКлиент Тогда
   Отказ = Истина;
   ТекстСообщения = НСтр("ru = 'Обновление конфигурации информационной базы недоступно в веб-клиенте.'");
   ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(),,
       ТекстСообщения,,Истина);
   Предупреждение(ТекстСообщения);
   Возврат;
#КонецЕсли
   
   ВосстановитьНастройкиОбновленияКонфигурации();
   
   Страницы    = Элементы.СтраницыПомощника.ПодчиненныеЭлементы;
   ИмяСтраницы    = Страницы.ДоброПожаловать.Имя;
   
   ДоступноеОбновление = ОбновлениеКонфигурацииКлиент.ПолучитьДоступноеОбновлениеКонфигурации();
   // Если есть обновление в сети Интернет...
   Если ДоступноеОбновление.ИсточникОбновления = 0 И ДоступноеОбновление.ФлагАвтоПереходаНаСтраницуСОбновлением Тогда
       ВремяПолученияОбновления = ДоступноеОбновление.ВремяПолученияОбновления;
       Если ВремяПолученияОбновления <> Неопределено И ТекущаяДата() - ВремяПолученияОбновления < 30 Тогда
           ИмяСтраницы = ПолучитьФайлыОбновленияЧерезИнтернет(Истина);
       КонецЕсли;
   // Если конфигурация изменена, предложим применить ее к базе данных
   ИначеЕсли ДоступноеОбновление.ИсточникОбновления = 2 И ДоступноеОбновление.НуженФайлОбновления = 0
       И ДоступноеОбновление.ФлагАвтоПереходаНаСтраницуСОбновлением Тогда
       ИмяСтраницы = Страницы.ФайлОбновления.Имя;
   КонецЕсли;
   
   Если Объект.КодЗадачиПланировщика <> 0 Тогда
       Если ПолучитьЗадачуПланировщика(Объект.КодЗадачиПланировщика) = Неопределено Тогда
           Объект.КодЗадачиПланировщика = 0;    
       КонецЕсли;    
   КонецЕсли;    
   
   // Если форма открывается при запуске программы после обновления
   Если Объект.РезультатОбновления <> Неопределено Тогда    
       
       ИмяФайлаПорядокОбновления = ПолучитьИмяЛокальногоФайлаПорядкаОбновления();
       Если НЕ ФайлСуществуетНаКлиенте(ИмяФайлаПорядокОбновления) Тогда
           ИмяФайлаПорядокОбновления = "";
       КонецЕсли;
       
       ИмяФайлаИнформацияОбОбновлении    = ПолучитьИмяЛокальногоФайлаОписанияОбновления();
       Если НЕ ФайлСуществуетНаКлиенте(ИмяФайлаИнформацияОбОбновлении) Тогда
           ИмяФайлаПорядокОбновления = "";
       КонецЕсли;
       
       ИмяСтраницы = ? (Объект.РезультатОбновления, Страницы.УспешноеОбновление.Имя, Страницы.НеуспешноеОбновление.Имя);
       Объект.РезультатОбновления = Неопределено;
       
   Иначе
       Если НЕ ОбновлениеКонфигурацииКлиентПереопределяемый.ГотовностьКОбновлениюКонфигурации(Истина) Тогда
           ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации();
           ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала,
               "Информация", НСтр("ru = 'Конфигурация не может быть обновлена. Завершение проверки обновления.'"));
           Отказ = Истина;
           Возврат;
       КонецЕсли;
       
       Если Объект.КодЗадачиПланировщика <> 0 Тогда
           ПараметрОтказа    = Ложь; // не используется в этом случае
           ИмяСтраницы        = ВосстановитьРезультатыПредыдущегоЗапуска(ПараметрОтказа);
       ИначеЕсли КонфигурацияИзменена И
               Объект.ИсточникОбновления = 2 Тогда
           Объект.НуженФайлОбновления    = 0;
           ИмяСтраницы        = Страницы.ФайлОбновления.Имя;
       ИначеЕсли Объект.ПропускатьПриветствие = Истина И Объект.ИсточникОбновления = 0 Тогда
           ИмяСтраницы        = ОбработатьСтраницуДоброПожаловать(Истина);
       КонецЕсли
   КонецЕсли;
   
   ПередОткрытиемСтраницы(Страницы[ИмяСтраницы]);
   Элементы.СтраницыПомощника.ТекущаяСтраница = Страницы[ИмяСтраницы];
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
   
   ДоступноеОбновление = ОбновлениеКонфигурацииКлиент.ПолучитьДоступноеОбновлениеКонфигурации();
   Если ДоступноеОбновление.ИсточникОбновления <> -1 Тогда
       ДоступноеОбновление.ФлагАвтоПереходаНаСтраницуСОбновлением = Ложь;
   КонецЕсли;
   
   // Сохранение настроек обновления.
   СохранитьНастройкиОбновленияКонфигурации();
   
   // Выполнение обновления конфигурации.
   Если ВыполнитьОбновление Тогда
       ВыполнитьОбновлениеКонфигурации();
   КонецЕсли;
   
   // запись событий ЖР
   ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации);

КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ

&НаКлиенте
Процедура КнопкаНазадНажатие(Команда)
   Страницы             = Элементы.СтраницыПомощника.ПодчиненныеЭлементы;
   ТекущаяСтраница      = Элементы.СтраницыПомощника.ТекущаяСтраница;
   НоваяТекущаяСтраница = ТекущаяСтраница;
   
   Если ТекущаяСтраница = Страницы.ДоброПожаловать Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
   ИначеЕсли ТекущаяСтраница = Страницы.ПодключениеКИнтернет Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
   ИначеЕсли ТекущаяСтраница = Страницы.ПодключениеКСайту Тогда
       НоваяТекущаяСтраница = Страницы.ДоступноеОбновление;
   ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
       Если Объект.ИсточникОбновления = 1 Тогда                // диск ИТС
           НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС;
       КонецЕсли;    
   ИначеЕсли ТекущаяСтраница = Страницы.ОбновленияНеОбнаружено Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
       Если Объект.ИсточникОбновления = 1 Тогда                // диск ИТС
           НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС;
       КонецЕсли;    
   ИначеЕсли ТекущаяСтраница = Страницы.ДлительнаяОперация Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
   ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл ИЛИ
       ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер ИЛИ
       ТекущаяСтраница = Страницы.ПараметрыАвторизации ИЛИ
       ТекущаяСтраница = Страницы.ДополнительныеНастройки Тогда
       Если Объект.ИсточникОбновления = 0 Тогда                // интернет
           НоваяТекущаяСтраница = Страницы.ДоступноеОбновление;
       ИначеЕсли Объект.ИсточникОбновления = 1 Тогда            // диск ИТС
           НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
       Иначе                                                    // файл
           НоваяТекущаяСтраница = Страницы.ФайлОбновления;
       КонецЕсли;    
   ИначеЕсли ТекущаяСтраница = Страницы.УспешноеОбновление Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
       Если Объект.ИсточникОбновления = 1 Тогда                // диск ИТС
           НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС;
       КонецЕсли;    
   ИначеЕсли ТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
       Если Объект.ИсточникОбновления = 1 Тогда                // диск ИТС
           НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС;
       КонецЕсли;    
   ИначеЕсли ТекущаяСтраница = Страницы.ФайлОбновления Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
   ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
   ИначеЕсли ТекущаяСтраница = Страницы.МестоположениеДискаИТС Тогда
       НоваяТекущаяСтраница = Страницы.ДоброПожаловать;
   КонецЕсли;
   
   ПередОткрытиемСтраницы(НоваяТекущаяСтраница);
   
   Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяТекущаяСтраница;
   
КонецПроцедуры

&НаКлиенте
Процедура КнопкаДалееНажатие(Команда)
   ФлагЗавершенияРаботы = Ложь;
   ОбработатьНажатиеКнопкиДалее(ФлагЗавершенияРаботы);
   Если ФлагЗавершенияРаботы Тогда
       ОбновлениеКонфигурацииКлиентПереопределяемый.ПередЗавершениемРаботыСистемы();
       ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина;
       ЗавершитьРаботуСистемы(Ложь);
   Конецесли;
КонецПроцедуры

&НаКлиенте
Процедура НадписьКакОформитьПодпискуИТСНажатие(Элемент)
   ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php?section=how");
КонецПроцедуры

&НаКлиенте
Процедура НадписьПодробнееОбИТСНажатие(Элемент)
   ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php");
КонецПроцедуры

&НаКлиенте
Процедура НадписьИнформацияОбОбновленииНажатие(Элемент)
   Если НЕ ПустаяСтрока(ИмяФайлаИнформацияОбОбновлении) Тогда
       ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаИнформацияОбОбновлении);
   Иначе
       Предупреждение(НСтр("ru = 'Информация об обновлении отсутствует.'"));
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура НадписьПорядокОбновленияНажатие(Элемент)
   Если НЕ ПустаяСтрока(ИмяФайлаПорядокОбновления) Тогда
       ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаПорядокОбновления);
   Иначе
       Предупреждение(НСтр("ru = 'Описание порядка обновления отсутствует.'"));
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура НадписьСписокДействийНажатие(Элемент)
   ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей");
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура НадписьСписокДействий1Нажатие(Элемент)
   ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей");
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура НадписьСписокДействий3Нажатие(Элемент)
   ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей");
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ПереключательНуженФайлОбновленияПриИзменении(Элемент)
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ПолеФайлОбновленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   
   Диалог                = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Каталог        = ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Объект.ИмяФайлаОбновления);
   Диалог.ПроверятьСуществованиеФайла = Истина;
   Диалог.Фильтр        = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'");
   Диалог.Заголовок    = НСтр("ru = 'Выбор поставки обновления конфигурации'");
   
   Если Диалог.Выбрать() Тогда
       Объект.ИмяФайлаОбновления = Диалог.ПолноеИмяФайла;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура НадписьИнформацияОПолученииДоступаНажатие(Элемент)
   
   ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(
       ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления().АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту);
       
КонецПроцедуры

&НаКлиенте
Процедура НадписьРезервнаяКопияНажатие(Элемент)
   ПараметрыФормы = Новый Структура("СоздаватьРезервнуюКопию, ИмяКаталогаРезервнойКопииИБ, ВосстанавливатьИнформационнуюБазу",
                                       Объект.СоздаватьРезервнуюКопию,
                                       Объект.ИмяКаталогаРезервнойКопииИБ,
                                       Объект.ВосстанавливатьИнформационнуюБазу);
   Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтаФорма);
   
   Если ТипЗнч(Результат) = Тип("Структура") Тогда
       ЗаполнитьЗначенияСвойств(Объект, Результат);
   КонецЕсли;
   
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ПереключательОбновленияПриИзменении(Элемент)
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ВыслатьОтчетНаПочтуПриИзменении(Элемент)
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура КластерТребуетАутентификацииПриИзменении(Элемент)
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура НестандартныеПортыСервераПриИзменении(Элемент)
   Элементы.ПанельНестандартныеПортыСервера.Доступность = Объект.НестандартныеПортыСервера;
КонецПроцедуры

&НаКлиенте
Процедура КнопкаОбновитьВерсиюКомпонентыНажатие(Команда)
   ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель();
КонецПроцедуры

&НаКлиенте
Процедура НадписьНастройкаПараметровПроксиНажатие(Элемент)
   ОткрытьФормуМодально("ОбщаяФорма.ПараметрыПроксиСервера");
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияЧерезИнтернетНажатие(Элемент)
   Объект.ИсточникОбновления = 0;
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияЧерезИТСНажатие(Элемент)
   Объект.ИсточникОбновления = 1;
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияИзФайлаНажатие(Элемент)
   Объект.ИсточникОбновления = 2;
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ИсточникДискаИТСПриИзменении(Элемент)
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура ДискИТСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
   Диалог.Каталог = ДискИТС;
   Диалог.ПроверятьСуществованиеФайла = Истина;
   Диалог.Заголовок = "Выбор каталога для диска ИТС";
   
   Если Диалог.Выбрать() Тогда
       ДискИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Диалог.Каталог);
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ГиперссылкаПроверятьНаличиеОбновленияПриЗапускеНажатие(Элемент)
   ПараметрыФормы = Новый Структура("ПроверятьНаличиеОбновленияПриЗапуске, РасписаниеПроверкиНаличияОбновления",
       Объект.ПроверятьНаличиеОбновленияПриЗапуске, Объект.РасписаниеПроверкиНаличияОбновления);
   Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания", ПараметрыФормы, ЭтаФорма);
   
   Если ТипЗнч(Результат) = Тип("Структура") Тогда
       ЗаполнитьЗначенияСвойств(Объект, Результат);
   КонецЕсли;
   
   ПередОткрытиемСтраницы();
КонецПроцедуры

&НаКлиенте
Процедура НадписьПереченьРелизовНаДискахИТСНажатие(Элемент)
   Если ПустаяСтрока(ПереченьРелизовНаДискахИТС) Тогда
       Предупреждение(НСтр("ru = 'Информация о перечне релизов не обнаружена.'"));
   КонецЕсли;
       
   ЗапуститьПриложение(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) +
       "Autorun.exe -browse """ + ПереченьРелизовНаДискахИТС + """")
КонецПроцедуры

&НаКлиенте
Процедура НадписьОткрытьЖурналРегистрацииНажатие(Элемент)
   ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя()));
КонецПроцедуры

&НаКлиенте
Процедура НадписьПерейтиВЖурналРегистрацииНажатие(Элемент)
   ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя()));
КонецПроцедуры

&НаКлиенте
Процедура КомандаПроверитьДискИТС(Команда)
   Объект.ИсточникОбновления                    = 1; // диск ИТС
   Объект.ИсточникДискаИТС                        = 0; // искать диск ИТС в приводе
   Элементы.СтраницыПомощника.ТекущаяСтраница    = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.МестоположениеДискаИТС;
   ОбработатьНажатиеКнопкиДалее();
КонецПроцедуры

&НаКлиенте
Процедура НадписьИнформацияОбОбновленииПриЗавершенииНажатие(Элемент)
   ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы");
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (СЕРВЕР)

&НаСервереБезКонтекста
Функция ЭтоСеансКонфигуратором(СеансИнформационнойБазы)
   Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("Designer");
КонецФункции

&НаСервереБезКонтекста
Функция ЭтоCOMСоединение(СеансИнформационнойБазы)
   Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection");
КонецФункции

// Проверка наличия соединения конфигуратором.
//
// Возвращаемое значение:
//  Булево       - Истина, если соединение есть,
//                 Ложь, если соединения нет.
&НаСервереБезКонтекста
Функция НаличиеСоединенияКонфигуратором()
   МассивСеансов = ПолучитьСеансыИнформационнойБазы();
   Для Каждого Сеанс Из МассивСеансов Цикл
       Если ЭтоСеансКонфигуратором(Сеанс) Тогда
           Возврат Истина;
       КонецЕсли;
   КонецЦикла;
   Возврат Ложь;
КонецФункции

&НаСервереБезКонтекста
Функция НаличиеCOMСоединений()
   МассивСеансов = ПолучитьСеансыИнформационнойБазы();
   Для Каждого Сеанс Из МассивСеансов Цикл
       Если ЭтоCOMСоединение(Сеанс) Тогда
           Возврат Истина;
       КонецЕсли;
   КонецЦикла;
   Возврат Ложь;
КонецФункции

// Проверка наличия активных соединений с информационной базой.
//
// Возвращаемое значение:
//  Булево       - Истина, если соединения есть,
//                 Ложь, если соединений нет.
&НаСервереБезКонтекста
Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено)
   // запись накопленных событий ЖР
   ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации);
   Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1;
КонецФункции

&НаСервере
Функция ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, СообщенияДляЖурналаРегистрации)
   // запись накопленных событий ЖР
   ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации);
   Результат = Новый Массив();
   Результат.Добавить(ПолучитьТекстСкрипта(СтруктураПараметров));

   ИменаМакетовМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов);
   Для каждого ИмяМакета ИЗ ИменаМакетовМассив Цикл
       Результат.Добавить(Обработки.ОбновлениеКонфигурации.ПолучитьМакет(ИмяМакета).ПолучитьТекст());
   КонецЦикла;
   Возврат Результат;
КонецФункции

&НаСервере
Функция ПолучитьТекстСкрипта(СтруктураПараметров)
   
   // Файл обновления конфигурации: main.js
   ШаблонСкрипта = Обработки.ОбновлениеКонфигурации.ПолучитьМакет("МакетФайлаОбновленияКонфигурации");
   
   Скрипт = ШаблонСкрипта.ПолучитьОбласть("ОбластьПараметров");
   Скрипт.УдалитьСтроку(1);
   Скрипт.УдалитьСтроку(Скрипт.КоличествоСтрок());
   
   Текст = ШаблонСкрипта.ПолучитьОбласть("ОбластьОбновленияКонфигурации");
   Текст.УдалитьСтроку(1);
   Текст.УдалитьСтроку(Текст.КоличествоСтрок());
   
   Возврат ВставитьПараметрыСкрипта(Скрипт.ПолучитьТекст(), СтруктураПараметров) + Текст.ПолучитьТекст();
   
КонецФункции

&НаСервере
Функция ВставитьПараметрыСкрипта(Знач Текст, Знач СтруктураПараметров)
   
   Результат = Текст;
   
   Если Объект.СоздаватьРезервнуюКопию = 2 Тогда
       Объект.ВосстанавливатьИнформационнуюБазу = Истина;
   ИначеЕсли Объект.СоздаватьРезервнуюКопию = 0 Тогда
       Объект.ВосстанавливатьИнформационнуюБазу = Ложь;
   КонецЕсли;
   
   ИменаФайловОбновления = "";
   Для Каждого Обновление Из Объект.ДоступныеОбновления Цикл
       ИменаФайловОбновления = ИменаФайловОбновления + Подг(Обновление.ПутьКЛокальномуФайлуОбновления) + ",";
   КонецЦикла;
   Если СтрДлина(ИменаФайловОбновления) > 0 Тогда
       ИменаФайловОбновления = Лев(ИменаФайловОбновления, СтрДлина(ИменаФайловОбновления) - 1);
   КонецЕсли;
   ИменаФайловОбновления = "[" + ИменаФайловОбновления + "]";
   
   СтрокаСоединенияИнформационнойБазы = СтруктураПараметров.ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы +
                                           СтруктураПараметров.ПараметрыСкрипта.СтрокаПодключения;

   ИмяИсполняемогоФайлаПрограммы = СтруктураПараметров.КаталогПрограммы + СтруктураПараметров.ИмяФайлаПрограммы;                                                                
   
   
   
   // Определение пути к информационной базе.
   ПризнакФайловогоРежима = Неопределено;
   ПутьКИнформационнойБазе = СоединенияИБКлиентСервер.ПутьКИнформационнойБазе(ПризнакФайловогоРежима,
       ?(Объект.НестандартныеПортыСервера, Объект.ПортКластераСерверов, 0));
   
   ПараметрПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, "/F", "/S") + ПутьКИнформационнойБазе;
   СтрокаПутиКИнформационнойБазе    = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, "");
   
   Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]"                , ИменаФайловОбновления);
   Результат = СтрЗаменить(Результат, "[ИмяФайлаРекламы]"                        , СтруктураПараметров.ИмяФайлаРекламы);
   Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]"        , Подг(ИмяИсполняемогоФайлаПрограммы));
   Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]"        , Подг(ПараметрПутиКИнформационнойБазе));
   Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]"    , Подг(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) +
       "1Cv8.1CD"));
   Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]"    , Подг(СтрокаСоединенияИнформационнойБазы));
   Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]"    , Подг(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации));
   Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]"            , Подг(СтруктураПараметров.СобытиеЖурналаРегистрации));
   Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]",
       Подг(?(Объект.РежимОбновления = 2 И Объект.ВыслатьОтчетНаПочту, Объект.АдресЭлектроннойПочты, "")));
   Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]"            , Подг(ИмяПользователя()));
   Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]"                , ?(ПризнакФайловогоРежима И
       Объект.СоздаватьРезервнуюКопию <> 0, "true", "false"));
   Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]"                ,
       Подг(?(Объект.СоздаватьРезервнуюКопию = 1, ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.ИмяКаталогаРезервнойКопииИБ), "")));
   Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]"    , ?(Объект.ВосстанавливатьИнформационнуюБазу, "true", "false"));
   БлокироватьСоединенияИБ = НЕ СтруктураПараметров.ИнформационнаяБазаФайловая ИЛИ РежимИмитацииКлиентСервернойИБ();
   Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]"                , ?(БлокироватьСоединенияИБ, "true", "false"));
   Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]"                    , Подг(СтруктураПараметров.ИмяCOMСоединителя));
   Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]"            , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true"));
   
   Возврат Результат;
   
КонецФункции

&НаСервереБезКонтекста
Функция Подг(Знач Текст)
   Возврат "'" + СтрЗаменить(Текст, "\", "\\") + "'";
КонецФункции

&НаСервереБезКонтекста
Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено)
   // запись накопленных событий ЖР
   ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации);
   УстановитьПривилегированныйРежим(Истина);
   Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0;
Конецфункции

&НаСервереБезКонтекста
Процедура НоваяСтрокаТаблицыОбновленийКонфигурации(ТаблицаОбновленийКонфигурации, Обновление)
   
   НоваяСтрока = ТаблицаОбновленийКонфигурации.Добавить();
   
   ЗаполнитьЗначенияСвойств(НоваяСтрока, Обновление);
   НомерВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Обновление.Версия, ".");
   НоваяСтрока.Версия1Разряд = Число(НомерВерсии[0]);
   НоваяСтрока.Версия2Разряд = Число(НомерВерсии[1]);
   НоваяСтрока.Версия3Разряд = Число(НомерВерсии[2]);
   НоваяСтрока.Версия4Разряд = Число(НомерВерсии[3]);
   
   ПутьФайла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрЗаменить(Обновление.ПутьКФайлуОбновления, "\", "/"), "/");
   Если ПутьФайла.Количество() > 0 Тогда
       НоваяСтрока.ФайлОбновления = ПутьФайла[ПутьФайла.Количество() - 1];
   КонецЕсли;
   
КонецПроцедуры

&НаСервере
Функция ПроверитьИУстановитьПарольАдминистратора(СообщенияДляЖурналаРегистрации)
   
   // запись накопленных событий ЖР
   ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации);
   ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
   Если ТекущийПользователь.АутентификацияОС И НЕ ТекущийПользователь.АутентификацияСтандартная Тогда
   
       ТекущийПользователь.АутентификацияСтандартная    = Истина;
       ТекущийПользователь.Пароль                        = Объект.ПарольАдминистратораИБ;
       Попытка
           ТекущийПользователь.Записать();
       Исключение
           ИнфоОбОшибке = ИнформацияОбОшибке();
           ТекстСообщения = НСтр("ru = 'Не удалось установить пароль администратора: '");
           ЗаписьЖурналаРегистрации(ОбновлениеКонфигурации.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,,
               ТекстСообщения + ПодробноеПредставлениеОшибки(ИнфоОбОшибке));
           
           Возврат ТекстСообщения + КраткоеПредставлениеОшибки(ИнфоОбОшибке);
       КонецПопытки;
       
   КонецЕсли;
   
   Возврат "";
КонецФункции

// Служебная функция, предназначенная для получения описания типов строки, заданной длины.
//
// Параметры:
//  ДлинаСтроки - число, длина строки.
//
// Возвращаемое значение:
//  Объект "ОписаниеТипов" для строки указанной длины.
//
&НаСервереБезКонтекста
Функция ПолучитьОписаниеТиповСтроки(ДлинаСтроки)
   Массив = Новый Массив;
   Массив.Добавить(Тип("Строка"));
   КвалификаторСтроки = Новый КвалификаторыСтроки(ДлинаСтроки, ДопустимаяДлина.Переменная);
   Возврат Новый ОписаниеТипов(Массив, , КвалификаторСтроки);
КонецФункции

// Служебная функция, предназначенная для получения описания типов числа, заданной разрядности.
//
// Параметры:
//  Разрядность            - число, разряд числа.
//  РазрядностьДробнойЧасти - число, разряд дробной части.
//
// Возвращаемое значение:
//  Объект "ОписаниеТипов" для числа указанной разрядности.
//
&НаСервереБезКонтекста
Функция ПолучитьОписаниеТиповЧисла(Разрядность,РазрядностьДробнойЧасти=0)
   Массив = Новый Массив;
   Массив.Добавить(Тип("Число"));
   КвалификаторЧисла = Новый КвалификаторыЧисла(Разрядность,РазрядностьДробнойЧасти);
   Возврат Новый ОписаниеТипов(Массив, КвалификаторЧисла);
КонецФункции

// Получить список всех инкрементальных обновлений по списку шаблонов,
// последовательная установка которых обновит версию ВерсияОт до версии ВерсияДо.
//
// Параметры
//  ВерсияОт  – строка – исходная версия
//  ВерсияДо  – строка – конечная версия, до которой конфигурация
//                         обновляется с исходной
//
// Возвращаемое значение:
//   Массив   – массив строк ТаблицаЗначений
&НаСервере
Процедура ПолучитьДоступныеОбновленияВИнтервале(Знач ВерсияОт, Знач ВерсияДо, АдресФайлаВоВремХранилище,
   СообщенияДляЖурналаРегистрации)

   // запись накопленных событий ЖР
   ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации);
   ТаблицаОбновлений = Неопределено;
   ВыполнитьЗагрузкуСпискаОбновлений(АдресФайлаВоВремХранилище, ТаблицаОбновлений);
   
   Если ТаблицаОбновлений = Неопределено Тогда // ошибки при чтении файла
       Возврат;        
     КонецЕсли;
   
   ТаблицаОбновленийКонфигурации = Объект.ДоступныеОбновления.Выгрузить();
   ТаблицаОбновленийКонфигурации.Очистить();
   
   ТаблицаДоступныхОбновленийКонфигурации = ТаблицаОбновленийКонфигурации.Скопировать();
   
   Для Каждого Обновление Из ТаблицаОбновлений Цикл
       НоваяСтрокаТаблицыОбновленийКонфигурации(ТаблицаОбновленийКонфигурации, Обновление);
   КонецЦикла;
   
   ТаблицаОбновленийКонфигурации.Сортировать("Версия1Разряд Убыв,
       |Версия2Разряд Убыв,
       |Версия3Разряд Убыв,
       |Версия4Разряд Убыв");
   
   ТекущаяВерсияОт = ВерсияОт;
   Пока ТекущаяВерсияОт <> ВерсияДо Цикл
   
       Отбор = Новый Структура("ВерсияДляОбновления", ТекущаяВерсияОт);
       МассивДоступныхОбновлений = ТаблицаОбновленийКонфигурации.НайтиСтроки(Отбор);

       Для Каждого Обновление Из МассивДоступныхОбновлений Цикл
           НоваяСтрокаТаблицыОбновленийКонфигурации(ТаблицаДоступныхОбновленийКонфигурации, Обновление);
       КонецЦикла;

       ТаблицаДоступныхОбновленийКонфигурации.Сортировать("Версия1Разряд Убыв,
           |Версия2Разряд Убыв,
           |Версия3Разряд Убыв,
           |Версия4Разряд Убыв");
                                                         
       Если ТаблицаДоступныхОбновленийКонфигурации.Количество() = 0 Тогда
           Прервать;
       КонецЕсли;
       
       Отбор                            = Новый Структура("Версия", ТаблицаДоступныхОбновленийКонфигурации[0].Версия);
       МассивУжеНайденныхОбновлений    = Объект.ДоступныеОбновления.НайтиСтроки(Отбор);
       Если МассивУжеНайденныхОбновлений.Количество() = 0 Тогда
           // добавляем новое обновление
           НовоеДоступноеОбновление    = Объект.ДоступныеОбновления.Добавить();
           ЗаполнитьЗначенияСвойств(НовоеДоступноеОбновление, ТаблицаДоступныхОбновленийКонфигурации[0]);
       ИначеЕсли ПустаяСтрока(МассивУжеНайденныхОбновлений[0].ПутьКЛокальномуФайлуОбновления) Тогда
           // обновляем информацию в уже найденном обновлении
           ЗаполнитьЗначенияСвойств(МассивУжеНайденныхОбновлений[0], ТаблицаДоступны
11 1cnooob
 
06.04.12
23:34
обработка обновления
12 aleks-id
 
06.04.12
23:34
куда мир катится. хомячки нетленки через тонкий клиент выгружают (* ушел стреляться или в запой, пока не решил *)
13 1cnooob
 
06.04.12
23:36
на сервере получить конф и сохранить ее или отправить на почту)
14 andrewks
 
06.04.12
23:37
(10) э, хорош вандалить
15 Seducer
 
06.04.12
23:42
(10) Ой, мля...... Ты бы еще сюда выложил все модули
16 serg_sh75
 
06.04.12
23:44
(11) а лучше сразу всю конфу))
Закон Брукера: Даже маленькая практика стоит большой теории.