Автоматическое обновление конфигурации в узлах РИБ

Вариант автоматического обновления конфигурации (без участия пользователей) периферийной базы РИБ. Очень простой способ без необходимости внесения кода в конфигурацию 1С.
В дополнение к публикации http://infostart.ru/public/143517/. Спасибо автору, навел на эту идею!

Данный метод удобен, когда требуется обмениваться с перефирийными базами один раз в сутки (например, ночью), и когда компьютер на ночь не выключается. Эта публикация представлена как пример, каждый может переделать данное решение под собственные нужды.

1) Потребуется батник, запускающий 1С под пользователем Obmen.

Пример батника для файловой базы: «C:Program Files1cv82common1cestart.exe» enterprise /F»D:1C» /NObmen /Pпароль /Execute «D:1CObmenRIB.epf»

Предварительно в 1С должен быть настроен автоматический обмен при запуске 1С данным пользователем (см.картинку).

В данном примере батника (в самом конце) указана обработка ObmenRIB.epf, которая запускается после выполнения обмена. 

2) Создаем в конфигураторе внешнюю обработку ObmenRIB.epf. 

Суть обработки заключается в следующем:

При открытии обработка проверяет, была ли изменена конфигурация. Если нет, то завершаем работу, если конфигурация была изменена, то необходимо её обновить. Для этого программно создаем ещё один батник и программно запускаем его. Данный батник будет убивать все процессы 1С (в том числе и этот), запускать конфу, обновлять её и снова запускать программу под пользователем Obmen для последнего обмена данными с вызовом второй обработки, завершающей работу сеанса 1С.

Итак, внешняя обработка ObmenRIB.epf будет содержать только одну процедуру:

Процедура ПриОткрытии()

флОбновлять = КонфигурацияИзменена();
Если флОбновлять Тогда
ПутьКБазе = """d:1C""";
ПутьКФайлуОбработки = """d:CloseObmen.epf""";
КаталогПрограммы = КаталогПрограммы();
КоманднаяСтрокаОбновления = "taskkill /F /IM 1cv8.exe" +
Символы.ПС +""""+ КаталогПрограммы + "1cv8.exe""" + " config /F" + ПутьКБазе + " /NObmen /Pпароль /UpdateDBCfg"+
Символы.ПС +""""+ КаталогПрограммы + "1cv8.exe""" + " ENTERPRISE /F" + ПутьКБазе + " /NObmen /Pпароль /Execute " + ПутьКФайлуОбработки;
ИмяФайлаСкрипта = КаталогВременныхФайлов() + "run.bat";
Ф = Новый ТекстовыйДокумент();
Ф.УстановитьТекст(КоманднаяСтрокаОбновления);
Ф.Записать(ИмяФайлаСкрипта, КодировкаТекста.OEM);

Попытка
ЗапуститьПриложение(ИмяФайлаСкрипта,,ложь);
Исключение
Предупреждение("Произошла ошибка запуска скрипта обновления: " + ИмяФайлаСкрипта + " Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Иначе
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;

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

3) И создаем вторую обработку CloseObmen.epf

Как уже было сказано, данная обработка нужна, чтобы закрыть 1С после выполнения итогового обмена, иначе останется открытый сеанс 1С под пользователем Obmen.

Процедура ПриОткрытии()

ЗавершитьРаботуСистемы(Ложь);

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

4) Осталось только создать задание в планировщике, назначив исполнение первого нами созданного батника.

 

P.S. Одно маленькое примечание: было замечно, что не всегда с первого раза происходит обновление (причину пока не установили). У нас в задании установлено несколько расписаний, за ночь происходит два обмена, поэтому обновления конфигурации всё равно работают.

3 Comments

  1. fresh_1986

    А как же завершение работы конфигуратора после обновления?

    Reply
  2. Kitri

    (7) fresh_1986, обновление конфигурации происходит «в фоне», после чего конфигурация закрывается сама. У меня этот метод работает давно, ставила эксперименты и такая проблема не наблюдалась. А у вас как-то по другому получается? Может какая причина есть… Пришлите мне свои файлы, я у себя попробую.

    Reply
  3. alsb

    Следует предупредить, что использование ключа /UpdateDBCfg приводит к динамическому обновлению конфигурации, в случае если не удалось отключить всех пользователей от базы принудительно, и, как следствие, все проблемы динамического обновления периферийного узла , например, http://infostart.ru/public/65456/

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *