Имя: Пароль:
1C
1С v8
Автоматическое обновление конфигурации РИБ
0 УПП
 
30.07.13
11:34
Добрый день, реализовал РИБ с обменом в одностороннем направлении (так нужно было), но никак не могу разобраться с обновлением конф. у дочерних узлов. В дочернем узле никто не работает (база для других нужд) как можно организовать автоматическое обновление конфигурации при обмене, в случае изменении конфигурации в центре? Никто ничего подобного не реализовывал?
1 Naumov
 
30.07.13
11:34
разумеется никто
2 Aleksey
 
30.07.13
11:35
а в чём проблема?
3 cw014
 
30.07.13
11:35
Да легко. Грузишь, если обновилась конфа, открываешь батником конфигуратор с параметрами обновления, закрываешь основную прогу. Как конфигуратор закрылся, после него открываешь снова 1С и грузишь поновой
4 УПП
 
30.07.13
11:39
(3) хорошая идея :) есть пример батника? :)
5 Aleksey
 
30.07.13
11:40
Процедура ОбновлениеКонфигурацииБД(User,Pasword) Экспорт
    
    Если Не КонфигурацияИзменена() Тогда
        Возврат;
    КонецЕсли;
    
    // строка с вызовом программы

    ИмяКаталога = КаталогПрограммы();
    ИмяПрограммы = """" + ИмяКаталога + ?(Прав(ИмяКаталога, 1) = "\", "", "\") + "1cv8.exe" + """";
    // строка для определения базы

    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    Если Найти(Врег(СтрокаСоединения), "FILE=") Тогда
        //Файловая версия

        КлючБазы = СтрЗаменить("/F" + Сред(СтрокаСоединения,6),";","");
    Иначе
        СтрокаСоединения = СтрЗаменить(СтрокаСоединения,";",Символы.ПС);
        ИмяСервера = Сред(СтрПолучитьСтроку(СтрокаСоединения,1),6);
        ИмяБазы = Сред(СтрПолучитьСтроку(СтрокаСоединения,2),5);
        КлючБазы = "/S" + СтрЗаменить(ИмяСервера,"""","") + "/" + СтрЗаменить(ИмяБазы,"""","");
    КонецЕсли;
    // строка с именем административного пользователя и его пароля

    SlaveUser = "/N" + User + " /P" + Pasword + " /WA- /AU-";
    // Файл для ошибок
    ИБ=СтрЗаменить(ИмяБазы,"""","");
    ФайлДляОшибок = "/Out" + """" + КаталогВременныхФайлов() + "\"+ИБ+"_1cv8.err" + """" + " -NoTruncate";
    // ключ доступа

    КлючДоступа = "/UCКодРазрешения";
    // собираем текст бат-файла

    ТекстФайла = "
    |
    |start " + """Заблокировать соединения""" + " /wait " + ИмяПрограммы + " ENTERPRISE " + КлючБазы + " " + SlaveUser + " /CЗавершитьРаботуПользователей " + КлючДоступа + " " + ФайлДляОшибок + " /DisableStartupMessages
    |
    |start " + """Разблокировать соединения""" + " /wait " + ИмяПрограммы + " ENTERPRISE " + КлючБазы + " " + SlaveUser + " /CРазрешитьРаботуПользователей " + КлючДоступа + " " + ФайлДляОшибок + " /DisableStartupMessages
    |
    |start " + """Обновление конфигурации""" + " /wait " + ИмяПрограммы + " CONFIG " + КлючБазы + " " + SlaveUser + " /UpdateDBCfg " + КлючДоступа + " " + ФайлДляОшибок + "
    |
    |";
    
    // Записываем текст в бат-файл

    ТекстДокумент = Новый ТекстовыйДокумент();
    ТекстДокумент.УстановитьТекст(ТекстФайла);
    // Сохраняем бат-файл

    ИмяФайла = КаталогВременныхФайлов() + "\"+ИБ+"_1cv8.bat";
    ТекстДокумент.Записать(ИмяФайла, КодировкаТекста.OEM);
    // запускаем бат-файл

    #Если Клиент Тогда

        ЗапуститьПриложение(ИмяФайла);
    #Иначе

        КомОбъект = Новый COMObject("wScript.Shell");
        КомОбъект.Run("""" + ИмяФайла + """");
    #КонецЕсли

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

ОбновлениеКонфигурацииБД("User","Password");
ЗавершитьРаботуСистемы(Ложь);


Вот такой код у меня во внешней обработке прописан. запускается через ключ /C
В принципе в БП и УПП он должен быть встроенный
6 Капитан О
 
30.07.13
11:45
(5) ЗапуститьПриложение только для клиента?
7 Aleksey
 
30.07.13
11:51
(6) Если ты запускаешь обработку вручную, т.е. на клиенте, то отрабатывает кусок  #Если Клиент Тогда
Соответственено если обработка выполняется в контексте сервера (например регламентное задание ), то через сом объект
8 Капитан О
 
30.07.13
11:53
(7) я просто понять не могу необходимость ком-объекта
9 Aleksey
 
30.07.13
11:53
(8) Мопед не мой, выдрал из типовой и причесал к обработке
10 cw014
 
30.07.13
11:55
(5) Эххх, вот ты только что лишился возможности за свои труды получить вознаграждение. Врочем лишил и остальных )))
11 Aleksey
 
30.07.13
12:05
(10) Потом на восстановлении базы больше заработаешь