gifts2017

Простое решение проблемы обновления конфигурации РБД в периферийном узле средствами 1с-Предприятия

Опубликовал bulpi bulpi (bulpi) в раздел Программирование - Практика программирования

Простое решение проблемы обновления конфигурации РБД в периферийном узле средствами 1с-Предприятия

Вот раньше, давным-давно Smile во времена 1с-Предприятия 7.7 было хорошо работать с РБД. Вывел юзерам на рабочий стол иконку и сказал : 2 раза по ней щелкни, выполнится обмен с центральной базой. В семействе 1с-Предприятие 8.х этот процесс внезапно стал сложнее ( в случае, если из ЦБ пришел файл с изменениями не только данных, но и конфигурации). В Инете уже есть несколько решений, по крайней мере одно я нашел здесь : http://www.infostart.ru/projects/4406/ 

НО! все они используют внешние по отношению к 1с средства.

А ведь можно и так :

1)Введем в удаленной базе пользователя с именем , к примеру , Автообмен

2)Вставим в процедуру модуля приложения ПриНачалеРаботыСистемы такой кусок :

Процедура ПриНачалеРаботыСистемы()
 Если ИмяПользователя()="Автообмен" Тогда
   Ошибка="";
 Попытка
  ИмяФайлаСообщения=Сокрлп(Константы.ПутьКФайлуОбмена.Получить());
  ЧтениеXML=Новый ЧтениеXML();
  ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения);
  ЧтениеСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
  ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
  
   ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);
  Исключение
   Ошибка=ОписаниеОшибки();                        
  КонецПопытки;
  Если  Ошибка<>"" Тогда
   Если Найти(Нрег(Ошибка),"конфигуратор") Тогда
    ЗапуститьСистему("DESIGNER /DisableStartupMessages /UpdateDBCfg /Visible /RunEnterprise /");
    ЗавершитьРаботуСистемы(Ложь);
   Иначе
    Сигнал();
   Предупреждение("ОБМЕН: Ошибка при получении данных обмена: "+Ошибка);
   Сообщить("ОБМЕН: Ошибка при получении данных обмена: "+Ошибка,СтатусСообщения.ОченьВажное);
   КонецЕсли;
    Возврат;
  КонецЕсли;
  ЧтениеСообщения.ЗакончитьЧтение();
  ЧтениеXML.Закрыть();
   Сигнал();
   Предупреждение("Загрузка файла из ЦБ успешно завершена");
  ЗавершитьРаботуСистемы(Ложь);
 КонецЕсли;
КонецПроцедуры

 

 

Предполагается, что существует константа ПутьКФайлуОбмена и там введено, что надо.

Все очень примитивно. Навороты можно наворачивать самим.

Благодарность : Alxd за идею!

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Артур Аюханов (artbear) 23.06.09 08:21
Если не ошибаюсь, в последних типовых конфах от 1С используются подобный механизм для РБД и для автообновления конфы.
ЗЫ могу и ошибиться.
2. bulpi bulpi (bulpi) 23.06.09 12:29
Вполне возможно. Никогда не изучал типовые достаточно глубоко. В любом случае, даже если там и есть такое, то под огромным количеством всяких наслоений.
3. Alxd (salexdv) 07.07.09 14:38
"Вывел юзерам на рабочий стол иконку и сказал : 2 раза по ней щелкни" - с восьмеркой тоже такое возможно. Могу дать очень простенький скрипт :-)
4. bulpi bulpi (bulpi) 07.07.09 18:22
5. Дмитрий Леонов (Psylocibine) 13.06.12 05:00
А не проще ли в типовую обработку обмена встроить? Ну, чтобы без всяких констант и дополнительных чтений ХМЛ?
6. Дмитрий Леонов (Psylocibine) 13.06.12 21:00
Короче, воткнул вот этот кусок:


Ошибка = СтруктураОбменаДанными.ДанныеПротокола;
Если Найти(Нрег(Ошибка),"конфигуратор") Тогда
ЗапуститьСистему("DESIGNER /DisableStartupMessages /UpdateDBCfg /Visible /RunEnterprise /");
ЗавершитьРаботуСистемы(Ложь);
Иначе
Сигнал();
Сообщить("ОБМЕН: Ошибка при получении данных обмена: "+Ошибка,СтатусСообщения.ОченьВажное);
КонецЕсли;

В процедуру "СообщитьИнформациюОбОшибкеОбмена" в общем модуле "ПроцедурыОбменаДанными", работает. Думаю, как улучшить можно. Надо бы повторно обмен запускать после принятия изменений.
7. Игорь Павлычев (ivpctotru) 14.06.12 12:50
Спасибо за идею. Пригодилась при написании не типовой конфигурации для мониторинга производства. +.