Как отработать ошибку запроса 1С 7.7 при подключении из 8.3
Уважаемые коллеги!
Ситуация следующая. Из базы 1С:Управление медицинским центром (1С:Предприятие 8.3 (8.3.16.1063)) подключаюсь к старой файловой базе 1С 7.7.
Компонент 1С7.7 создается, подключаюсь, все ок. Создаю объект запроса:
Формирую текст запроса и выполняю ЗапросВ77.Выполнить(ТекстЗапросаКонтрагентов)
В случаях - если в запросе ошибка системы вылетает из попытки и пытается компонент закрыть:
Но к сожалению, экземпляр 1С7.7 остается запущенным - это мешает повторному запуску подключения.
А если принудительно снять задачу в Диспетчере задач - то при следующем подключении компонента автоматически переиндексирует базу 7.7.
Подскажите, как корректно отработать возможные некорректные запросы из 1с 8.3 в компонент 1с 7.7?
При следующем фрагменте
ЗапросВ77.Выполнить(ТекстЗапросаКонтрагентов) = 0 - не отрабатывается с возникновением исключения.
Пытаюсь все завернуть в отдельную попытку:
Компонент не убивается, оставаясь запущенным. :-(
В других ситуациях РазорватьСоединение(В77); - срабатывает штатно.
Ну и уточнение кода этой процедуры:
Помогите. А то уже несколько дней пытаюсь отработать ситуацию.
Ситуация следующая. Из базы 1С:Управление медицинским центром (1С:Предприятие 8.3 (8.3.16.1063)) подключаюсь к старой файловой базе 1С 7.7.
Компонент 1С7.7 создается, подключаюсь, все ок. Создаю объект запроса:
ЗапросВ77 = В77.CreateObject("Запрос");
Формирую текст запроса и выполняю ЗапросВ77.Выполнить(ТекстЗапросаКонтрагентов)
В случаях - если в запросе ошибка системы вылетает из попытки и пытается компонент закрыть:
В77 = Неопределено;
Но к сожалению, экземпляр 1С7.7 остается запущенным - это мешает повторному запуску подключения.
А если принудительно снять задачу в Диспетчере задач - то при следующем подключении компонента автоматически переиндексирует базу 7.7.
Подскажите, как корректно отработать возможные некорректные запросы из 1с 8.3 в компонент 1с 7.7?
При следующем фрагменте
Если ЗапросВ77.Выполнить(ТекстЗапросаКонтрагентов) = 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не удалось выполнить запрос к справочнику контрагентов. Обработка прекращена.");
РезультатЗапроса = "<ht ml><head></head><body><p>Запрос не выполнен.</p></body></html>";
ОбщегоНазначения.СообщитьПользователю("Запрос не выполнен. " + ТекстЗапросаКонтрагентов);
ЗапросВ77 = Неопределено;
В77 = Неопределено;
Возврат;
КонецЕсли;
ЗапросВ77.Выполнить(ТекстЗапросаКонтрагентов) = 0 - не отрабатывается с возникновением исключения.
Пытаюсь все завернуть в отдельную попытку:
Попытка
Если ЗапросВ77.Выполнить(ТекстЗапросаКонтрагентов) = 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не удалось выполнить запрос к справочнику контрагентов. Обработка прекращена.");
РезультатЗапроса = "<ht ml><head></head><body><p>Запрос не выполнен.</p></body></html>";
ОбщегоНазначения.СообщитьПользователю("Запрос не выполнен. " + ТекстЗапросаКонтрагентов);
ЗапросВ77 = Неопределено;
В77 = Неопределено;
Возврат;
КонецЕсли;
Исключение
ОбщегоНазначения.СообщитьПользователю("Запрос не выполнен с исключением. " + ТекстЗапросаКонтрагентов);
РазорватьСоединение(В77);
Возврат;
КонецПопытки;
ПоказатьКомпонент не убивается, оставаясь запущенным. :-(
В других ситуациях РазорватьСоединение(В77); - срабатывает штатно.
Ну и уточнение кода этой процедуры:
&НаКлиенте
Процедура РазорватьСоединение(В77 = Неопределено)
В77 = Неопределено;
ОбщегоНазначенияКлиент.СообщитьПользователю("Соединение с 1С 7.7 разорвано.");
КонецПроцедуры
Помогите. А то уже несколько дней пытаюсь отработать ситуацию.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ну или напишите процедуру выполнения запроса на стороне 7,7 и оберните там в попытку. И уже из 8.3 обращаетесь в 7.7, передав текст запроса, а обратно будет возвращать результат. Тогда проблем с компонентой не будет, в случае ошибки вернет исключение.
(5) Согласен, что данный вариант наиболее правильный.
Но главное на вопрос «Возможно ли отработать исключение в 1с 8.3 при выполнении компонентой 1с 77 некорректного запроса (без изменения конфигурации 1с 7.7)? Со штатным закрытием процесса 1с 7.7 и без необходимости переиндексации базы.» ответ - НЕТ?
Но главное на вопрос «Возможно ли отработать исключение в 1с 8.3 при выполнении компонентой 1с 77 некорректного запроса (без изменения конфигурации 1с 7.7)? Со штатным закрытием процесса 1с 7.7 и без необходимости переиндексации базы.» ответ - НЕТ?
Внес в глобальный модуль 77 функцию:
(5) А как через COM объект обратиться к функции-обёртке с получением результата?
Функция глПолучитьРезультатЗапросаДля83(ТекстЗапроса) экспорт
Запрос = СоздатьОбъект("Запрос");
Попытка
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат 0;
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ, 0, 0);
Возврат ТЗ;
Исключение
Сообщить("Запрос для 1с 8.3 не может быть выполнен. " + ОписаниеОшибки());
Возврат 0;
КонецПопытки;
КонецФункции
Показать(5) А как через COM объект обратиться к функции-обёртке с получением результата?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот