Добрый день!
Есть старые серверы 1С OLD1, OLD2 на windows server 2016 (английская) с native client SQL (версии 11.4.7001.0, 11.4.7462.6)
Есть новые серверы 1С NEW1, NEW2, NEW3 на windows server 2016 с native client SQL (версии 11.4.7001.0)
Версия 1С идентична везде 8.3.18.14**
Есть код (выдрал кусок из прода и упростил для понимания)
Ожидаем в результате выполнения символ "Б". На старых так и есть, на новых "?" (знак вопроса)
Смена charset=***, autotranslate=false - не помогла.
И тут полумагия
На новых серверах 1С была удалена и поставлена заново с выбором языка интерфейса Russian - но помогло только одному серверу. Остальным новым нет.
Что тут за тайна такая с кодировкой?
p.s. База с данными cyrillic_general_ci_as.
Есть старые серверы 1С OLD1, OLD2 на windows server 2016 (английская) с native client SQL (версии 11.4.7001.0, 11.4.7462.6)
Есть новые серверы 1С NEW1, NEW2, NEW3 на windows server 2016 с native client SQL (версии 11.4.7001.0)
Версия 1С идентична везде 8.3.18.14**
Есть код (выдрал кусок из прода и упростил для понимания)
Функция ЗапросЧерезАдо() Экспорт
ТаймаутСоединения = 30;
Сервер = "SERVER1";
База = "db1";
ConnectionString = "Provider=SQLOLEDB.1; Server="+Сервер+"; Database="+База+";Trusted_Connection=yes;";
ТекстЗапроса = "
|SELECT Top 100
| 'Б' AS ТипДеятельности";
Соединение = Новый COMОбъект("ADODB.Connection");
Команда = Новый COMОбъект("ADODB.Command");
RS = Новый COMОбъект("ADODB.RecordSet");
Соединение.ConnectionTimeOut = ТаймаутСоединения;
Соединение.CommandTimeOut = ТаймаутСоединения;
Команда.CommandTimeOut = ТаймаутСоединения;
Соединение.CursorLocation = 3;
Соединение.Open(ConnectionString);
Команда.ActiveConnection = Соединение;
Команда.CommandType = 1;
Команда.CommandText = ТекстЗапроса;
Попытка
RS = Команда.Execute();
Рез = Истина;
Исключение
ЗаписьЖурналаРегистрации("ADO", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Рез = Ложь;
ВызватьИсключение;
КонецПопытки;
Таблица = Новый ТаблицаЗначений;
КолонкиТаблицы = Таблица.Колонки;
Для каждого Field Из RS.Fields Цикл
ТипКолонки = ТипПоПолюАДО(Field);
Колонка = КолонкиТаблицы.Добавить(Field.Name, ТипКолонки, Field.Name);
КонецЦикла;
Если RS.State <> 0 Тогда
Пока Не RS.EOF() Цикл
НоваяСтрока = Таблица.Добавить();
Для каждого Поле Из RS.Fields Цикл
НоваяСтрока[Поле.Name] = Поле.Value;
КонецЦикла;
RS.MoveNext();
КонецЦикла;
КонецЕсли;
Возврат Таблица[0].ТипДеятельности;
КонецФункции
Функция ТипПоПолюАДО(Field)
Если Field.Type = 3 Или Field.Type = 2 Или Field.Type = 131 Тогда
Возврат Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Любой));
ИначеЕсли Field.Type = 200 Или Field.Type = 202 Тогда
Возврат Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(Field.DefinedSize, ДопустимаяДлина.Переменная));
ИначеЕсли Field.Type = 135 Тогда
Возврат Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));
ИначеЕсли Field.Type = 11 Или Field.Type = 2 Тогда
Возврат Новый ОписаниеТипов("Булево");
ИначеЕсли Field.Type = 205 Тогда
Возврат Новый ОписаниеТипов;
КонецЕсли;
Возврат Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная));
КонецФункции
ПоказатьОжидаем в результате выполнения символ "Б". На старых так и есть, на новых "?" (знак вопроса)
Смена charset=***, autotranslate=false - не помогла.
И тут полумагия
На новых серверах 1С была удалена и поставлена заново с выбором языка интерфейса Russian - но помогло только одному серверу. Остальным новым нет.
Что тут за тайна такая с кодировкой?
p.s. База с данными cyrillic_general_ci_as.
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот