|
Автообмен в UAT - РИБ | ☑ | ||
---|---|---|---|---|
0
Adgjj
13.11.11
✎
13:02
|
здравствуйте! В Периферийную бд нужно автоматом загрузить xml-файл выгруженный из центральной базы, Используя внешнюю обработку.
Выдается ошибка: ОБМЕН: Ошибка при получении данных обмена: {ВнешняяОбработка.Obmen(125)}: Ошибка при вызове метода контекста (ПрочитатьИзменения): Из главного узла распределенной информационной базы получены изменения конфигурации. Необходимо выполнить обновление конфигурации базы данных. Обновление может быть выполнено в режиме Конфигуратор. связанная с методом ПрочитатьИзменения. Обойти этот метод в конфигурации можно было с помощью ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; а во внешней обработке не катит. В результате загружается только код, данные не загружаются. Попытка ЧтениеXML = Новый ЧтениеXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOR_KOT.xml"; //НАДО НА СЕРВЕРЕ ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,); //**ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; //Кэш = ПараметрыСеанса.ОбщиеЗначения.Получить(); //Если Не ПараметрыСеанса.ИспользованиеРИБ И Ссылка <> ПланыОбмена.уатПолный.ЭтотУзел() Тогда // Сообщить("Для задействования механизма установки префиксов объектов необходимо перезапустить текущий сеанс работы 1С:Предприятия."); //КонецЕсли; //ПараметрыСеанса.ИспользованиеРИБ = Истина; //тоже не прокатило ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); ЗаписьСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); Если Константы.ВыводитьСообщенияОбмена.Получить() Тогда Сообщить("ОБМЕН: Данные обмена приняты",СтатусСообщения.Информация); КонецЕсли; Сообщить("2) ОБМЕН: Файл в базу Котласа принят"); Исключение Сообщить("ОБМЕН: Ошибка при получении данных обмена: " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); КонецПопытки; |
|||
1
Живой Ископаемый
13.11.11
✎
13:06
|
отличное наблюдение.. но с чег вы взяли что оно новое и кому-то интересное?
|
|||
2
Adgjj
13.11.11
✎
14:19
|
С учетом http://infostart.ru/public/16993/ внесла изменения:
Попытка ЧтениеXML = Новый ЧтениеXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOR_KOT.xml"; //НАДО НА СЕРВЕРЕ ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,); //ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); ЗаписьСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); Если Константы.ВыводитьСообщенияОбмена.Получить() Тогда Сообщить("ОБМЕН: Данные обмена приняты",СтатусСообщения.Информация); КонецЕсли; Сообщить("2) ОБМЕН: Файл в базу принят"); Исключение СтрОписания="Обновление может быть выполнено в режиме Конфигуратор."; Если Прав(ОписаниеОшибки(),СтрДлина(СтрОписания))=СтрОписания Тогда ОбновитьКонфигурацию(); // процедура обновления конфигурации Иначе Сообщить("ОБМЕН: Ошибка при получении данных обмена: " + ОписаниеОшибки(),СтатусСообщения.ОченьВажное); КонецЕсли; КонецПопытки; Теперь ошибок не выдает, сначала заходит в предприятие, потом в конфигуратор и из него в предприятие, но новые данные так и не загружаются. Почему? |
|||
3
Adgjj
13.11.11
✎
14:19
|
Процедура ОбновитьКонфигурацию() Экспорт
МассивСоединений=ПолучитьСоединенияИнформационнойБазы(); Если МассивСоединений.Количество()>1 Тогда Возврат; // ждем дальше... КонецЕсли; СтрокаСоединения=СтрокаСоединенияИнформационнойБазы(); ПутьКСкрипту=КаталогВременныхФайлов()+"obmen.vbs"; //exchange Скрипт=Новый ЗаписьТекста(ПутьКСкрипту,КодировкаТекста.ANSI); Скрипт.ЗаписатьСтроку("WScript.Sleep 5000"); // на всякий случай Скрипт.ЗаписатьСтроку("Set WshShell=CreateObject(""WScript.Shell"")"); //" /N Exchange /P Exchange / Команда=""""""+КаталогПрограммы()+"1CV8.EXE"""" CONFIG"+?(НСтр(СтрокаСоединения,"File")<>""," /F "+НСтр(СтрокаСоединения,"File")," /S "+НСтр(СтрокаСоединения,"Srvr")+"\"+НСтр(СтрокаСоединения,"Ref"))+" /N Obmen /P Obmen /UpdateDBCfg"; Скрипт.ЗаписатьСтроку("ReturnCode=WshShell.Run("""+Команда+""",1,1)"); Скрипт.ЗаписатьСтроку("If ReturnCode=0 Then"); // если обновились удачно, то пытаемся дочитать сообщение //" /N Exchange /P Exchange" Команда=""""""+КаталогПрограммы()+"1CV8.EXE"""" ENTERPRISE"+?(НСтр(СтрокаСоединения,"File")<>""," /F "+НСтр(СтрокаСоединения,"File")," /S "+НСтр(СтрокаСоединения,"Srvr")+"\"+НСтр(СтрокаСоединения,"Ref"))+" /N Obmen /P Obmen"; Скрипт.ЗаписатьСтроку("WshShell.Run """+Команда+""",1,0"); Скрипт.ЗаписатьСтроку("End If"); Скрипт.ЗаписатьСтроку("Set FSO=CreateObject(""Scripting.FileSystemObject"")"); Скрипт.ЗаписатьСтроку("Set File=FSO.GetFile(WScript.ScriptFullName)"); Скрипт.ЗаписатьСтроку("File.Delete"); Скрипт.Закрыть(); ЗапуститьПриложение(ПутьКСкрипту); ЗавершитьРаботуСистемы(Ложь); КонецПроцедуры |
|||
4
Adgjj
13.11.11
✎
14:51
|
Может, кто подскажет, как остановиться в отладчике во внешней обработке, в к-рой написан обмен?
|
|||
5
Adgjj
13.11.11
✎
15:17
|
СО ВТОРОГО РАЗА РАБОТАЕТ НАВЕРНО ИЗ-ЗИ СБИТОГО НОМЕРА СООБЩЕНИЯ
|
|||
6
Живой Ископаемый
13.11.11
✎
18:46
|
2(5) нет. не из-за него...
а из-за того что при первом обмене база приемник видит что изменилась конфа.. и подгружает изменения.. сразу за этим данные она отвергает - потому как - кто знает - вдруг пришли данные для которых изменены метаданные.. Поэтому специально просит зайти в конфигуратор и принять изменения. После принятия - все что нужно - еще раз запустить обмен, прочитав ТО ЖЕ самое сообщение.. И уже тогда загрузятся даннные. Это написано во всех букварях по обменам.. во всех типовых есть код который позволяет автоматически принимать изменения. |
|||
7
Adgjj
14.11.11
✎
09:22
|
Спасибо, при повторном чтении выдает ошибку
http://s017.radikal.ru/i416/1111/64/c7bcd1da8067.jpg а в скриптах я не понимаю |
|||
8
Adgjj
14.11.11
✎
09:23
|
(5) это я вручную пробовала читать
|
|||
9
Живой Ископаемый
14.11.11
✎
09:23
|
если не понимаете, то зачем их используете?
|
|||
10
Живой Ископаемый
14.11.11
✎
09:24
|
хотя... вы и в кавычках ничего не понимаете, но куда ж без них...
|
|||
11
Adgjj
14.11.11
✎
09:30
|
в скрипте раскомментировала
МассивСоединений=ПолучитьСоединенияИнформационнойБазы(); Если МассивСоединений.Количество()>1 Тогда Возврат; // ждем дальше... КонецЕсли; ошибки не выдает но все равно не загружаются данные даже с 3 раза |
|||
12
Adgjj
14.11.11
✎
09:37
|
при повторном обмене все равно попадаю в исключение (я так думаю, как в отладчике остановиться не знаю)
Попытка ЧтениеXML = Новый ЧтениеXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOR_KOT.xml"; //НАДО НА СЕРВЕРЕ ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,); //ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); ЗаписьСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); Сообщить("2) ОБМЕН: ДАННЫЕ ОБМЕНА в базу Котласа приняты"); //ЗавершитьРаботуСистемы(Ложь); //КОГДА 2 РАЗА Исключение СтрОписания="Обновление может быть выполнено в режиме Конфигуратор."; Если Прав(ОписаниеОшибки(),СтрДлина(СтрОписания))=СтрОписания Тогда ОбновитьКонфигурацию(); // процедура обновления конфигурации Иначе Сообщить("ОБМЕН: Ошибка при получении данных обмена: " + ОписаниеОшибки(),СтатусСообщения.ОченьВажное); КонецЕсли; КонецПопытки; |
|||
13
Adgjj
14.11.11
✎
13:42
|
скрипт отсюда http://infostart.ru/public/16993/
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |