Имя: Пароль:
1C
1С v8
РИБ. Как автоматизировать обновление конфы в подчиненной БД
0 kosts
 
22.08.11
09:04
В типовой вроде есть механизм автоматического обновления конфигурации в подчиненной БД.
Как его задействовать?
Или как удобнее сделать самому, что бы пользователей минимально напрягать при обмене.
1 kosts
 
22.08.11
09:27
^
2 romashov
 
22.08.11
09:33
Флаг запуска 1С есть соответствующий, останется решить вопрос с монопольным доступом и все.
3 Necessitudo
 
22.08.11
09:33
как вариант тупо пишешь батник с командами и его запуском обновляешь конфу.
4 romashov
 
22.08.11
09:33
да
5 kosts
 
22.08.11
09:40
(2) Это понятно.
Как сделать что бы при получении обновленной конфы сразу предлагалось перезапустить 1С для обновления - залез в модуль или есть типовой вариант?
6 Aleksey
 
22.08.11
10:08
(5) есть полу типовой.
7 Aleksey
 
22.08.11
10:34
делаешь внешнюю обработку, в модуль пишешь

Процедура ОбновлениеКонфигурацииБД(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","Pasword");
ЗавершитьРаботуСистемы(Ложь);


Далее делаешь батник

@echo off
Set Path1C="c:\Program Files\1cv82\8.2.13.180\bin\1cv8.exe"

start "Base1" %Path1C% ENTERPRISE тут обычный путь к базе1 /NUser /PPassword /Execute"А тут путь к обработке из предыдущего пункта"

start "Base2" %Path1C% ENTERPRISE тут обычный путь к базе 2 /NUser /PPassword /Execute"А тут путь к обработке из предыдущего пункта"


Start  нужно для ускорения, чтобы он паралельно все базы запустил для обмена. Если нужно последовательно, то убираем начало "start "Base1" "


Осталось в настройках обмена проверить чтобы запускался обмен автоматом при заходе пользователя

Т.е. запускается 1С под определенным пользователем, далее происходит автообмен. После этого запускается обработка, и проверяет, а не пришло ли изменение. Если изменение есть рисует батник который заблокирует работу с 1С и выполнит загрузку конфигурации, после этого разрешит работу. Единственно НО он только загрузит конфигу, данные в этом случае не будут загружены.

После этого он закроет 1С
8 kosts
 
22.08.11
11:25
(7) Спасибо поразбираюсь
9 Stim213
 
22.08.11
11:26
занесите в базу знаний
10 kosts
 
23.08.11
06:49
(7) По этой схеме работает.
Только видимо нужно в другом порядке, разблокировку поставить последней.

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

Пользователю положу на рабочий стол два ярлыка. Один на предприятие для работы, второй для обновления (на батник).
Пользователя нового создать и повесить на него обновление при запуске.

и не забыть в батнике перед путем к БД поставить /F.

А так можно в мемориз.