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