Используя/создавая/отлаживая запросы типа "ADO" часто приходиться получать данные из систем настройка которых обычно не доступна. Возникают проблемы с кодировкой строк. Для себя эту проблему я решил так:
"фиксируем" 2 виртуальных параметра запроса и в форме "Форма" консоли запросов после строк № 840-849
Код
Если ЭлементыФормы.ПанельРезультата.Страницы.РезультатКоллекция.Значение = Null Тогда
СоздатьКоллекциюРезультата();
ЭтаФорма.РезультатКоллекция = ЭлементыФормы.РезультатКоллекция.Значение;
ЭтаФорма.ДлительностьЗагрузки = 0;
ЭтаФорма.СтрокаРазмерКоллекции = 0;
НачалоЗагрузки = мПлатформа.ПолучитьТекущееВремяВМиллисекундах();
Если СпособВыгрузки = 1 Тогда
Если ТипЗнч(мРезультатЗапроса) = Тип("РезультатЗапроса") Тогда
ирОбщий.ЗагрузитьДинамическуюВыборкуВТабличноеПолеПервуюПорциюЛкс(ЭтаФорма, мРезультатЗапроса, мВыборкаРезультата,
ЭлементыФормы.КоманднаяПанельКоллекция, , пЗагружатьЭлементов);
добавил:
Код
//+//<СТ=====№ ======== 22.10.2013 16:50:14
// Здесь реализована возможность перекодировать строковые поля в результате запроса.
// Если в параметрах запроса задать параметр
// "КонвертироватьИЗ" - тип строка - со значением кодировки, например, "utf-8" или "windows-1251" ...
// то для всех строковых колонок будет произведена перекодировка по умолчанию в "windows-1251" из заданой значением параметра.
// Значение результирующей кодировки можно задать в параметре запроса "КонвертироватьВ".
//
ПараметрыЗапроса = мТекущаяСтрока.ПараметрыЗапроса;
ПараметрВ = ПараметрыЗапроса.Найти(НРег("КонвертироватьВ"), "НИмяПараметра");
ПараметрИз = ПараметрыЗапроса.Найти(НРег("КонвертироватьИз"), "НИмяПараметра");
Если НЕ ПараметрИз = Неопределено Тогда
изКодировки = ПараметрИз.Значение;
Если НЕ ПараметрВ = Неопределено Тогда вКодировку = ПараметрВ.Значение;
Иначе вКодировку = Неопределено;
КонецЕсли;
ТР = ЭлементыФормы.КоманднаяПанельКоллекция.ИсточникДействий.Значение;
стВезде.ПерекодироватьСтроковыеПоляТЗ(ТР, изКодировки, вКодировку);
КонецЕсли;
/////>СТ=====№ ======== 22.10.2013 16:50:14
и еще в общем модуле процедуру
Код
Процедура ПерекодироватьСтроковыеПоляТЗ(изТаблицыЗначений, изКодировки="windows-1251", вКодировку="windows-1251") Экспорт
Если НЕ изКодировки = вКодировку Тогда
СтроковыеКолонки = Новый Массив;
Для каждого Колонка Из изТаблицыЗначений.Колонки Цикл
Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
СтроковыеКолонки.Добавить(Колонка.Имя);
КонецЕсли;
КонецЦикла;
Перекодировщик = Неопределено;
Для каждого Строка Из изТаблицыЗначений Цикл
Для каждого Колонка Из СтроковыеКолонки Цикл
ъ=Строка[Колонка];
Если НЕ ПустаяСтрока(ъ) Тогда
Попытка
Если вКодировку =Неопределено Тогда
Строка[Колонка] = Перекодировать(Перекодировщик, ъ, изКодировки);
Иначе
Строка[Колонка] = Перекодировать(Перекодировщик, ъ, изКодировки, вКодировку);
КонецЕсли;
Исключение
//Сообщить(""+ТР.Индекс(Строка)+":"+Колонка+"="+Строка[Колонка]);
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
и функцию
Код
Функция Перекодировать(Стрим = Неопределено, Стр="", изКодировки="windows-1251", вКодировку="windows-1251") Экспорт
Результат=Стр;
Если ((НЕ изКодировки = вКодировку)
И (НЕ ПустаяСтрока(Стр))) Тогда
Если Стрим = Неопределено Тогда
Стрим = Новый COMОбъект("Adodb.Stream");
КонецЕсли;
Стрим.Type = 2;
Стрим.Mode = 3;
Стрим.charset = вКодировку;
Стрим.Open();
Стрим.WriteText(Стр);
Стрим.Position = 0;
Стрим.charset = изКодировки;
Результат = Стрим.ReadText(-1);
Стрим.Close();
КонецЕсли;
Возврат Результат;
КонецФункции
Предлагаю добавить подобный функционал в "первоисточник". Для работы со сторонними расточниками данных это многим бы пригодилось.