Имя: Пароль:
1C
1С v8
v8: Перекодировка комментария из UTF8 в cp1251
,
0 mardrake
 
12.11.12
14:42
Собственно есть запрос
_http.Получить("bgbilling/executer?id=new&module=contract&summa="+ Summa +"&pt=2&action=UpdateContractPayment&comment="+ comment +"&date="+Формат(Выборка.ДатаВыписки,"ДФ=dd.MM.yyyy")+"&user=admin&pswd=pass&cid="+id+"&");

там где comment="+ comment +"
comment=Выборка.НазначениеПлатежа;

При отправке запроса в коментарии выходят кракозябры, так как в 1С utf8 , а в самом биллинге cp1251.
Как перекодировать comment в cp1251 и отправить в биллинг.

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   _массивВыписки = Новый Массив;
   
   _http = Новый HTTPСоединение("billing.bill.ru");
   
   для каждого _строка Из ОсновнаяТЧ ЦИКЛ
       Если _строка.Флаг тогда
           _массивВыписки.Добавить(_строка.Выписка);
       КонецЕсли;
   КонецЦикла;
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("выбВыписки", _массивВыписки);
   Запрос.Текст = "ВЫБРАТЬ
                  |    ПоступлениеНаРасчетныйСчет.ДоговорКонтрагента.Номер КАК НомерДоговора,
                  |    ПоступлениеНаРасчетныйСчет.Дата КАК ДатаВыписки,
                  |    ПоступлениеНаРасчетныйСчет.СуммаДокумента КАК Сумма,
                  |    ПоступлениеНаРасчетныйСчет.НазначениеПлатежа КАК НазначениеПлатежа
                  |ИЗ
                  |    Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет
                  |ГДЕ
                  |    ПоступлениеНаРасчетныйСчет.Ссылка В(&выбВыписки)";
   
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   Соединение = Новый COMОбъект("ADODB.Connection");
   
   л_Параметры_соединения = "DRIVER={MySQL ODBC 5.1 Driver};OPTION=3;DATABASE=bgbilling;PWD=pass;PORT=3306;SERVER=bill.ru;UID=admin";
   
   Попытка
       Соединение.Open(л_Параметры_соединения);
   Исключение
       Сообщить("Отсутствует связь с базой!");
   КонецПопытки;
   
   л_Команда = Новый COMОбъект("ADODB.Command");
   л_Команда.ActiveConnection = Соединение;
   Пока Выборка.Следующий() Цикл
       comment = Выборка.НазначениеПлатежа;
       
       ND = Выборка.НомерДоговора;
       Summa = Выборка.Сумма;
       Сообщить(ND);
       Сообщить(Summa);
       
       _ТЕКСТЗапроса = "SELECT id FROM contract WHERE title='"+ND+"'";
       
       Сообщить(_ТЕКСТЗапроса);
       
       л_Команда.CommandText = _ТЕКСТЗапроса;
       
       Результат = л_Команда.Execute("id");    
       Пока НЕ Результат.EOF Цикл
           ID = Результат.Fields("id").Value;
           Сообщить ("ID "+ID);
           _http.Получить("bgbilling/executer?id=new&module=contract&summa="+ Summa +"&pt=2&action=UpdateContractPayment&comment="+ comment +"&date="+Формат(Выборка.ДатаВыписки,"ДФ=dd.MM.yyyy")+"&user=admin&pswd=pass&cid="+id+"&", "C:\Temp\resp_"+id);
           Результат.MoveNext();
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
1 Ork
 
12.11.12
14:44
(0) Сам нашел только такой способ : записать в файл - перекодировать уже файл - запулять куда нужно.

Строки в 1С хранятся в юникод и никак иначе.
2 mardrake
 
12.11.12
16:31
Пробую так
       
Текст = Новый ЗаписьТекста("d:\win.txt", КодировкаТекста.UTF8);
       Текст.ЗаписатьСтроку(comment);
       Текст.Закрыть();
       Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.UTF8);
       Стр = Текст.ПрочитатьСтроку();
       Сообщить(Стр);

КодировкаТекста.cp1251 нету
3 mardrake
 
12.11.12
16:31
:(
4 drcrasher
 
12.11.12
16:33
(2) ANSI? Системная?
Вторая вероятнее, т.к. под виндами она таки win1251
5 mardrake
 
12.11.12
17:51
Пробую так
comment = Выборка.НазначениеПлатежа;
       Текст = Новый ЗаписьТекста("h:\win.txt", "cp1251");
       Текст.ЗаписатьСтроку(comment);
       Текст.Закрыть();
       Текст = Новый ЧтениеТекста("h:\win.txt", "cp1251");
       Стр = Текст.ПрочитатьСтроку();
       Сообщить(Стр);
6 mardrake
 
12.11.12
17:51
и так
       comment = Выборка.НазначениеПлатежа;
       Текст = Новый ЗаписьТекста("h:\win.txt", "windows-1251");
       Текст.ЗаписатьСтроку(comment);
       Текст.Закрыть();
       Текст = Новый ЧтениеТекста("h:\win.txt", "windows-1251");
       Стр = Текст.ПрочитатьСтроку();
       Сообщить(Стр);
7 mardrake
 
12.11.12
17:52
результата не дает
8 drcrasher
 
12.11.12
18:03
могу посоветовать посмотреть на WSH
9 Vladal
 
12.11.12
18:12
*коММентарии. Искренне Ваш, Grammar Nazi

(0) Посмотри тему на SQL.ru
http://www.sql.ru/forum/actualthread.aspx?tid=786292
10 mardrake
 
19.11.12
14:18
Вообщем было принято решение, создать справочник и заменять символы из строки на наименование в справочнике.