Вот раньше, давным-давно во времена 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С используются подобный механизм для РБД и для автообновления конфы.
ЗЫ могу и ошибиться.
Вполне возможно. Никогда не изучал типовые достаточно глубоко. В любом случае, даже если там и есть такое, то под огромным количеством всяких наслоений.
«Вывел юзерам на рабочий стол иконку и сказал : 2 раза по ней щелкни» — с восьмеркой тоже такое возможно. Могу дать очень простенький скрипт 🙂
2 alxd
Давай!
А не проще ли в типовую обработку обмена встроить? Ну, чтобы без всяких констант и дополнительных чтений ХМЛ?
Короче, воткнул вот этот кусок:
Ошибка = СтруктураОбменаДанными.ДанныеПротокола;
Если Найти(Нрег(Ошибка),»конфигуратор») Тогда
ЗапуститьСистему(«DESIGNER /DisableStartupMessages /UpdateDBCfg /Visible /RunEnterprise /»);
ЗавершитьРаботуСистемы(Ложь);
Иначе
Сигнал();
Сообщить(«ОБМЕН: Ошибка при получении данных обмена: «+Ошибка,СтатусСообщения.ОченьВажное);
КонецЕсли;
В процедуру «СообщитьИнформациюОбОшибкеОбмена» в общем модуле «ПроцедурыОбменаДанными», работает. Думаю, как улучшить можно. Надо бы повторно обмен запускать после принятия изменений.
Спасибо за идею. Пригодилась при написании не типовой конфигурации для мониторинга производства. +.