Воскресенье, 19.05.2024, 21:21
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Основной » Проблемные ситуации » Консоль запросов. Установка в параметр таблицы, не от 1С
Консоль запросов. Установка в параметр таблицы, не от 1С
HawkДата: Среда, 05.05.2021, 19:26 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Оффлайн
В конфигурации есть процедура ВыполнитьЗапросКSQL, в которую первым параметром передаётся текст запроса к БД MySQL и четвертым, описанная таблица значений, которая заполняется в результате выполнения переданного в первом параметре текста запроса. Процедура получает данные от MySQL через ADODB драйвер. Заполненная таблица значений устанавливается как параметр к запросу, который выполняется в консоли. В обычном приложении всё работает. При подключении расширения в управляемом приложении при выполнении процедуры  возникает исключение
Код
Код перед выполнением запроса: Строка кода 50: Ошибка при вызове метода контекста (ВыполнитьЗапросКSQL): Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'COMОбъект'

подскажите, есть ли способ исправить данный конфликт? пробовал на последней версии расширения


Сообщение отредактировал Hawk - Среда, 05.05.2021, 19:34
 
tormozitДата: Среда, 05.05.2021, 19:38 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6204
Репутация: 159
Статус: Оффлайн
Нужны
- информация для тех. поддержки http://devtool1c.ucoz.ru/forum/2-2-1
- текст обработчика, в котором возникает ошибка
- определение метода ВыполнитьЗапросКSQL()
 
HawkДата: Среда, 05.05.2021, 20:42 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Оффлайн
информация для тех. поддержки
Цитата
Платформа: 8.3.18.1128
Режим БД: клиент-серверный
Конфигурация. Название: Collection, 1.0 (1.0.1.1)
Конфигурация. Основной режим запуска: Управляемое приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим управления блокировкой данных: Управляемый
Конфигурация. Режим совместимости: Версия8_3_14
Конфигурация. Версия БСП: 301
Инструменты разработчика. Версия: Расширение 5.90.1e
Инструменты разработчика. Инструмент: Консоль запросов
Инструменты разработчика. Объекты на сервере: Да
Инструменты разработчика. Разрешены имитаторы: Да
Расширения. ИнструментыРазработчикаTormozit (5.90.1e)
Клиент. ОС: Майкрософт Windows 10 Корпоративная 64-разрядная Русский
Клиент. Приложение: Управляемое приложение 64б
Клиент. Проверка модальных вызовов: Нет
Клиент. Язык интерфейса конфигурации: ru
Клиент. Язык интерфейса системы: ru
Клиент. От имени администратора Windows: Да
Сервер. ОС: Microsoft Windows Server 2012 R2 Standard 64-разрядная Русский
Сервер. Отладка: tcp

Добавлено (05.05.2021, 20:44)
---------------------------------------------
текст обработчика:

Код
очиститьСообщения();
началоПросрочки = 0;
конецПросрочки = 15;
сообщить("начало" + Строка(ТекущаяДАта()));
text = "select a.id, a.back_date, adddate(a.credit_date, a.credit_time) as ДатаВвода
|    ,a.debt as debt
|from applications as a
|where a.status = 'issued'
|and DATEDIFF(curdate(), a.back_date) between "+Строка(началоПросрочки)+" and "+Строка(конецПросрочки)+"
|and now() > adddate(date(a.credit_date), a.credit_time)
|";
Сайт = Новый ТаблицаЗначений;
Сайт.Колонки.Добавить("id",Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(11,0)));
Сайт.Колонки.Добавить("back_date",Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата)));
Сайт.Колонки.Добавить("ДатаВвода",Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата)));
Сайт.Колонки.Добавить("debt",Новый ОписаниеТипов("Число",,,,Новый КвалификаторыЧисла(15,2)));
ЗМ_Разработка.ВыполнитьЗапросКSQL(text,,,Сайт);
мОбъектЗапроса.УстановитьПараметр("Сайт",Сайт);                    
мОбъектЗапроса.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
мОбъектЗапроса.УстановитьПараметр("НачалоПросрочки", началоПросрочки);
мОбъектЗапроса.УстановитьПараметр("КонецПросрочки", конецПросрочки);
сообщить("конец(" + Формат(Сайт.количество(),"ЧГ=0") +") "+ Строка(ТекущаяДАта()));

Добавлено (05.05.2021, 20:44)
---------------------------------------------
определение метода ВыполнитьЗапросКSQL()

Код
Функция ВыполнитьЗапросКSQL(ТекстЗапроса, ВозвращатьТаблицуСТекстовымиЗначениямиПолей = Истина, СтрокаПодключения = Неопределено
,ТаблицаДляЗаполнения = Неопределено
,Connection = Неопределено
) Экспорт
нач = ТекущаяУниверсальнаяДатаВМиллисекундах();
тек = неопределено;
КоличествоВозможныхНеудачныхПопытокЗапросаКСайту = РегистрыСведений.ХранилищеНастроек.Загрузить("Внутренние настройки","Кол-во неудачных запросов");
Если Не ЗначениеЗаполнено(КоличествоВозможныхНеудачныхПопытокЗапросаКСайту) Тогда
КоличествоВозможныхНеудачныхПопытокЗапросаКСайту = 1;
КонецЕсли;
СчетчикНеудачныхПопытокЗапросаКСайту = 0;
Пока СчетчикНеудачныхПопытокЗапросаКСайту <= КоличествоВозможныхНеудачныхПопытокЗапросаКСайту Цикл

Попытка
Connection = Новый COMОбъект("ADODB.Connection");
Исключение
ЗаписьЖурналаРегистрации("Ошибка при выполнении запроса к SQL", УровеньЖурналаРегистрации.Ошибка,,,"Возникла ошибка при создании COM объекта соединения
|описание ошибки =" + Строка(ОписаниеОшибки()) + "
|номер попытки =" + Формат(СчетчикНеудачныхПопытокЗапросаКСайту, "ЧГ=0")
);
СчетчикНеудачныхПопытокЗапросаКСайту = СчетчикНеудачныхПопытокЗапросаКСайту + 1;
Продолжить;
КонецПопытки;
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Создан com-объект Connection", нач, тек);
Connection.ConnectionString  = ?(ЗначениеЗаполнено(СтрокаПодключения), СтрокаПодключения, ПолучитьConStr());
Connection.ConnectionTimeOut = 500;
Connection.CommandTimeout    = 500;

Попытка      
Connection.Open();
Connection.DefaultDatabase = "zaymer";
Исключение      
ЗаписьЖурналаРегистрации("Ошибка при выполнении запроса к SQL", УровеньЖурналаРегистрации.Ошибка,,,"Возникла ошибка при открытии COM объекта
|описание ошибки = " + Строка(ОписаниеОшибки()) + "
|номер попытки =" + Формат(СчетчикНеудачныхПопытокЗапросаКСайту, "ЧГ=0")
);
СчетчикНеудачныхПопытокЗапросаКСайту = СчетчикНеудачныхПопытокЗапросаКСайту + 1;
Продолжить;
КонецПопытки;   
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Соединение открыто", нач, тек);
Table = Новый COMОбъект("ADODB.RecordSet");
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Создан com-объект RecordSet", нач, тек);Table.Open(СокрЛП(ТекстЗапроса),Connection,3,1); 
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Набор записей получен", нач, тек);
Если ТипЗнч(ТаблицаДляЗаполнения) = Тип("ТаблицаЗначений") Тогда
Пока Table.EOF() = 0 Цикл
Стр = ТаблицаДляЗаполнения.Добавить();
Для Каждого Колонка Из ТаблицаДляЗаполнения.Колонки Цикл
Стр[Колонка.Имя] = ?(Колонка.ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(20)) 
или Колонка.ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(80))
,Формат(Table.Fields(Колонка.Имя).Value, "ЧГ=0")
,Table.Fields(Колонка.Имя).Value);
КонецЦикла;
Table.MoveNext();
КонецЦикла;
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Произведен обход набора записей и сформирована таблица значений", нач, тек);
Connection.Close();
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Соединение закрыто, производится выход из функции", нач, тек);
Возврат ТаблицаДляЗаполнения;
КонецЕсли;
Если ВозвращатьТаблицуСТекстовымиЗначениямиПолей Тогда
ТЗ = Новый ТаблицаЗначений;
Для Каждого Field Из Table.Fields Цикл
Попытка
ТЗ.Колонки.Добавить(Field.Name, Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(1000)));
Исключение
Сообщить("при добавлениии колонки "+Field.Name+" произошла ошибка: "+Строка(ОписаниеОшибки()));
КонецПопытки;
КонецЦикла;
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Сгенерирована таблица значений со строковыми полями с псевдонимами равными псевданимам колонок набора записей", нач, тек);
Пока Table.EOF() = 0 Цикл
Стр = ТЗ.Добавить();
Для Каждого Колонка Из ТЗ.Колонки Цикл
Стр[Колонка.Имя] = Формат(Table.Fields(Колонка.Имя).Value, "ЧГ=0");
КонецЦикла;
Table.MoveNext();
КонецЦикла;
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Произведены обход набора записей и заполнение таблицы значений", нач, тек);
Connection.Close();
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Соединение закрыто", нач, тек);
КонецЕсли;
РегламентныеЗаданияСервер.ЗаписатьМетрикуВЖурнал("Выполнение запроса к SQL", "Производится выход из функции", нач, тек);
Возврат ?(ВозвращатьТаблицуСТекстовымиЗначениямиПолей, ТЗ, Table);
КонецЦикла;
Если КоличествоВозможныхНеудачныхПопытокЗапросаКСайту > СчетчикНеудачныхПопытокЗапросаКСайту Тогда
ВыполнитьОповещениеОбОшибке("при выполнении запроса к сайту в течение "+Формат(СчетчикНеудачныхПопытокЗапросаКСайту,"ЧГ=0")+" раз(а) не был получен ответ от сайта, текст запроса: 
|
|"+ТекстЗапроса);
КонецЕсли;
Возврат Неопределено;
КонецФункции
 
tormozitДата: Среда, 05.05.2021, 20:47 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6204
Репутация: 159
Статус: Оффлайн
Проведи анализ вызовов функции ВыполнитьЗапросКSQL на предмет использования выходного значения параметра Connection. Если таких мест нет, то напиши "Знач" перед объявлением этого параметра. Если же они есть, то добавь еще один параметр-флаг, чтобы гасить выходное значение этого параметра.
 
HawkДата: Среда, 05.05.2021, 20:52 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Оффлайн
Цитата tormozit ()
Проведи анализ вызовов функции ВыполнитьЗапросКSQL на предмет использования выходного значения параметра Connection. Если таких мест нет, то напиши "Знач" перед объявлением этого параметра. Если же они есть, то добавь еще один параметр-флаг, чтобы гасить выходное значение этого параметра.
спасибо, завтра попробую

Добавлено (06.05.2021, 05:07)
---------------------------------------------
всё работает, спасибо

Сообщение отредактировал Hawk - Среда, 05.05.2021, 20:55
 
Форум » Основной » Проблемные ситуации » Консоль запросов. Установка в параметр таблицы, не от 1С
  • Страница 1 из 1
  • 1
Поиск: