|
v82.Application - Обновление РИБ | ☑ | ||
---|---|---|---|---|
0
Night_Wolf
23.09.13
✎
11:29
|
Подскажите пожалуйста. Есть код:
Попытка ЧтениеXML = Соединение.NewObject("ЧтениеXML"); ЧтениеXML.ОткрытьФайл(ФайлОбмена.ПолноеИмя); ЧтениеСообщения = Соединение.ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,Соединение.ДопустимыйНомерСообщения.Больший); Надпись="Чтение сообщения номер "+ЧтениеСообщения.НомерПринятого+" из файла "+ФайлОбмена.ИмяБезРасширения; Соединение.ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); ЧтениеСообщения.ЗакончитьЧтение(); Надпись="Чтение сообщения из файла "+ФайлОбмена.ИмяБезРасширения+" завершено"; ЧтениеXML.Закрыть(); Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до ЗакрытияФайла"); Запись.Закрыть(); Исключение Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Попали в исключение"); Запись.Закрыть(); ЧтениеXML.Закрыть(); Надпись=ОписаниеОшибки(); Если Найти(ОписаниеОшибки(),"Необходимо выполнить обновление конфигурации базы данных") Тогда Попытка Соединение.ЗавершитьРаботуСистемы(Ложь); Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до Завершить работу системы"); Запись.Закрыть(); Исключение Соединение = Неопределено; Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до Неопределено 2"); Запись.Закрыть(); КонецПопытки; ///Вызываем Конфигуратор и обновляем базу Текст=СтрЗаменить(ИмяБазы,";",Символы.ВК); СтрСервер=""; СтрБаза=""; Для Н=1 По СтрЧислоСтрок(Текст) Цикл Пункт=СтрЗаменить(СокрЛП(СтрПолучитьСтроку(Текст,Н)),"=",Символы.ВК); Имя=СокрЛП(СтрПолучитьСтроку(Пункт,1)); Значение=СтрЗаменить(СокрЛП(СтрПолучитьСтроку(Пункт,2)),"""",""); Если Имя ="Srvr" Тогда СтрСервер=Значение; ИначеЕсли Имя ="Ref" Тогда СтрБаза=Значение; КонецЕсли; КонецЦикла; СтрКоманда="DESIGNER /DisableStartupMessages /UpdateDBCfg -WarningsAsErrors /S """+СтрСервер+"\"+СтрБаза+""""; Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до запуска Конфигуратора"); Запись.Закрыть(); ЗапуститьСистему(СтрКоманда,Истина); Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до Продолжить"); Запись.Закрыть(); Продолжить; ИначеЕсли Найти(ОписаниеОшибки(),"Номер сообщения меньше или равен") Тогда Если Не ВыполнятьОбменПриОтсутствииНовыхДанных Тогда ВызватьИсключение(ОписаниеОшибки()); КонецЕсли; КонецЕсли; Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до ЗакрытияФайла в Исключении"); Запись.Закрыть(); КонецПопытки; Проблема такая. Когда идет обмен, прилетает ошибка "Изменения в конфигурации", я завершаю работу системы, всё отлично - окно закрывается, соединение остается висеть. Но при запуске конфигуратора для обновления ИБ - вылетает сама 1С главный узел - из которого идет запуск. Самое интересное, что если я смотрю этот код в конфигураторе главного узла - ничего не вылетает. Подскажите в чем может быть проблема? |
|||
1
Maxus43
23.09.13
✎
11:33
|
что за
Запись.Открыть("d:\test.txt",КодировкаТекста.ANSI,,Истина); Запись.ЗаписатьСтроку("Дошло до Неопределено 2"); ? Юзай ЖР. >>я смотрю этот код в конфигураторе главного узла - ничего не вылетает на клиенте смотришь небось, а вот сервер не факт что может сам сделать эту запись например |
|||
2
Галахад
гуру
23.09.13
✎
11:38
|
Наверное, когда отладка не включена "Application" просто напросто не успевает закрыться.
|
|||
3
Night_Wolf
23.09.13
✎
11:40
|
(1) - это я тестирую на какой строке вылетало - просто пишу текстовый файлик. В этом нет проблемы. А при чем тут сервер? Я открываю базу - главный узел - и конфигуратор для отладки и 1С:Предприятие. В предприятии запускаю обработку, в которой этот код написан. Суть кода простая: сделать обмен с локальной распределенной базой. Вылетает именно на строке "ЗапуститьСистему(СтрКоманда,Истина);". Т.е. вылетает - закрывается 1С:Предприятие-главный узел. При этом конфигуратор подчиненного узла на обновление запускается, конфа обновляется. Крайне неудобно потом переоткрывать базу-главный узел и "дочитывать" файл обмена. Вопрос - почему вылетает? Ведь я закрываю приложение через "ЗавершитьРаботуСистемы(Ложь)". P/S: Этот код прекрасно работал на платформе 8.1.
(2) - Application закрывается - я специально проверял. Но Соединение в обработке остается висеть - т.е. оно не "Неопределено", а COMObject. |
|||
4
Галахад
гуру
23.09.13
✎
11:44
|
(3) Все же попробуй паузу поставить на пару минут.
|
|||
5
Night_Wolf
23.09.13
✎
11:47
|
(3) - хорошо, воткну цикл до 1000. Только не совсем понятно чем это поможет - вылетает то главный узал. Причем вылетает только если конфигуратор главного узла не открыт. Иначе - не вылетает.
|
|||
6
Галахад
гуру
23.09.13
✎
11:50
|
(5) Цикл не надо, проще предупреждение.
|
|||
7
Night_Wolf
23.09.13
✎
12:08
|
Вопрос так и остается не закрытым. Предупреждение не помогло. Какие есть ещё варианты?
|
|||
8
Maxus43
23.09.13
✎
12:28
|
Что значит вылетает? как тут советовать? Переставь платформу, почисти кэш.
|
|||
9
Night_Wolf
23.09.13
✎
12:30
|
Вылетает - это значит закрывается 1С:Предприятие главного узла, с сообщением "Подождите, идет запись дампа" - ошибка такая не хорошая, но всем знакомая должна быть. Когда сбой в программе бывает. Её невозможно поймать принт-скрином - она очень быстрая. И 1С закрывается.
|
|||
10
Maxus43
23.09.13
✎
12:33
|
>>ошибка такая не хорошая, но всем знакомая должна быть
знакомая, но влиять на неё никто не может, "переставьте платформу" - это одно из решений простых, для очистки совести |
|||
11
Night_Wolf
23.09.13
✎
12:35
|
(10) - Ясно, сейчас попробую. Спасибо!
|
|||
12
Maxus43
23.09.13
✎
12:37
|
к таким же решениям относится "отключите аппаратное ускорение видеокарты". Спросишь зачем? Просто сделай...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |