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

Простое решение проблемы обновления конфигурации РБД в периферийном узле средствами 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 за идею!

7 Comments

  1. artbear

    Если не ошибаюсь, в последних типовых конфах от 1С используются подобный механизм для РБД и для автообновления конфы.

    ЗЫ могу и ошибиться.

    Reply ↓
  2. bulpi

    Вполне возможно. Никогда не изучал типовые достаточно глубоко. В любом случае, даже если там и есть такое, то под огромным количеством всяких наслоений.

    Reply ↓
  3. salexdv

    «Вывел юзерам на рабочий стол иконку и сказал : 2 раза по ней щелкни» — с восьмеркой тоже такое возможно. Могу дать очень простенький скрипт 🙂

    Reply ↓
  4. bulpi

    2 alxd

    Давай!

    Reply ↓
  5. Psylocibine

    А не проще ли в типовую обработку обмена встроить? Ну, чтобы без всяких констант и дополнительных чтений ХМЛ?

    Reply ↓
  6. Psylocibine

    Короче, воткнул вот этот кусок:

    Ошибка = СтруктураОбменаДанными.ДанныеПротокола;

    Если Найти(Нрег(Ошибка),»конфигуратор») Тогда

    ЗапуститьСистему(«DESIGNER /DisableStartupMessages /UpdateDBCfg /Visible /RunEnterprise /»);

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

    Иначе

    Сигнал();

    Сообщить(«ОБМЕН: Ошибка при получении данных обмена: «+Ошибка,СтатусСообщения.ОченьВажное);

    КонецЕсли;

    В процедуру «СообщитьИнформациюОбОшибкеОбмена» в общем модуле «ПроцедурыОбменаДанными», работает. Думаю, как улучшить можно. Надо бы повторно обмен запускать после принятия изменений.

    Reply ↓
  7. ivpctotru

    Спасибо за идею. Пригодилась при написании не типовой конфигурации для мониторинга производства. +.

    Reply ↓

Leave a Comment

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