Имя: Пароль:
1C
 
Запись файлов нестандартными средствами.
0 forforumandspam
 
03.02.10
09:14
В связи с проблемой с кодировкой при записи текстовый файлов v8: Кодировка текстового файла решил писать файл по примеру Книга знаний: Пример чтения и записи текстовых файлов (Scripting.FileSystemObject). Всё заработало, но радость длилась недолго. Оказывается на рабочем серваке Вынь2003 32 bit не зарегистрирован класс "Scripting.FileSystemObject". Я думаю, будет быстрее переписать код, например, на VBS или JS. Прошу знающих людей перевести код на любой вариант

fso = Новый COMОбъект("Scripting.FileSystemObject");
file = fso.CreateTextFile(Имя, -1, 0);
file.Write(Текст);
file.Close();
1 forforumandspam
 
03.02.10
12:08
ЛЮДИ!!! Помогите пожалуйста!
2 forforumandspam
 
04.02.10
08:13
Ну отзовитесь хоть кто-нибудь.
3 forforumandspam
 
04.02.10
09:05
Помогите переписать строчки

fso = Новый COMОбъект("Scripting.FileSystemObject");
file = fso.CreateTextFile(Имя, -1, 0);
file.Write(Текст);
file.Close();

на аналогичные по действию JS, VBS или WHS.
4 dk
 
04.02.10
09:12
забавный )))
если класс не зарегистрирован, то он и в vbs не будет работать
5 Jolly Roger
 
04.02.10
09:19
(0) казалось бы, причем здесь 1С, если "такой формат не понимает программа банк-клиент"...
6 БТР
 
04.02.10
09:27
Типа анек:
- Доктор когда, я делаю вот так, у меня болит вот здесь.
- А вы "во так" не делайте.
Либо нагни админа, что бы он на севаке установил то, что тебе надо, либо не записывай не на сервере.
Ну и разбирись все же в какой кодировке надо записывать этот файл. Это не явно не win-1251.
7 dk
 
04.02.10
09:31
для затравки

   Попытка
       Стрим = СоздатьОбъект("Adodb.Stream");
   Исключение
       Сообщить("Ошибка при создании объекта: Adodb.Stream");
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   Стрим.Type        = 2;
   Стрим.Mode        = 3;
   Стрим.charset    = КодоваяСтраница;
   Стрим.Open();
   
   Пустая = 0;
   Сч = 1;
   Пока Пустая < 20 Цикл
       Яч1 = Исходные.Область(Сч, 1, Сч, 1);
       Яч2 = Исходные.Область(Сч, 4, Сч, 4);
       
       НашаСтрока = 0;
       
       Товар = Яч1.Расшифровка();
       Если Врег(ТипЗначенияСтр(Товар)) = Врег("Справочник") Тогда
           Если Врег(Товар.Вид()) = Врег("Номенклатура") Тогда
               НашаСтрока = 1;
           КонецЕсли;
       КонецЕсли;            
       Если НашаСтрока = 1 Тогда
           Если Товар.ЭтоГруппа() = 0 Тогда
               ПечТовар    = СтрЗаменить(СокрЛП(Товар), ";", ":");
               ПечЦена        = СтрЗаменить(Яч2.Текст, " ", "");
               ПечЦена        = СтрЗаменить(ПечЦена, "'", "");
               ПечЦена        = СтрЗаменить(ПечЦена, ".", ",");
               ПечКод        = СокрЛП(Товар.Код);
               Стрим.WriteText(СокрЛП(ПечТовар)+";"+СокрЛП(ПечЦена)+";;;;;;;resized/"+ПечКод+".jpg;"+ПечКод+".jpg;"+ПечКод+РазделительСтрок);
           КонецЕсли;
       Иначе
           Пустая = Пустая + 1;
       КонецЕсли;
       Сч = Сч + 1;
   КонецЦикла;        
   Попытка
       Стрим.SaveToFile(ИмяФайла, 2);
       Стрим.Close();    
       Сообщить("Готово!");
   Исключение
       Сообщить("Ошибка при записи файла: " + ИмяФайла);
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
8 forforumandspam
 
04.02.10
09:35
(4) Я недеюсь, что VBS или JS имеют свои методы записи файлов. Вот и спрашиваю
(5) Программа Банк-клиент понимает форматы КодировкаТекста.OEM и КодировкаТекста.ANSI, но вот 1С не выгружает национальные символы.
Попробуйте такой пример у себя:

Файл = Новый ТекстовыйДокумент;
Файл.ДобавитьСтроку("???");
Файл.Записать("C:\1.txt", КодировкаТекста.ANSI);
9 forforumandspam
 
04.02.10
09:37
+(8)
Файл = Новый ТекстовыйДокумент;
Файл.ДобавитьСтроку("???");
Файл.Записать("C:\1.txt", КодировкаТекста.ANSI);
10 forforumandspam
 
04.02.10
09:40
Пелядь!

Файл = Новый ТекстовыйДокумент;
Файл.ДобавитьСтроку(Символ(1240)+Символ(1186)+Символ(1170));
Файл.Записать("C:\1.txt", КодировкаТекста.ANSI);
11 xzorkiix
 
04.02.10
09:40
(8) utf8 тебе в помощь... не верю чтоб банк-клиент не читал utf8
12 forforumandspam
 
04.02.10
09:40
(11) Зря не веришь.
13 ДенисЧ
 
04.02.10
09:40
(8) "Я недеюсь, что VBS или JS имеют свои методы записи файлов"
Смешной ты какой...
14 xzorkiix
 
04.02.10
09:42
(11) прочел ссылки из темы.... "звезда в шоке"... убивать надо тех, чьи решения не используют utf
15 БТР
 
04.02.10
09:45
Определи коды проблемных символов и попробуй записывать ив в текст через Символ(<Код символа>)
16 forforumandspam
 
04.02.10
09:48
(7) Какое значение должно быть у переменной "КодоваяСтраница"?
(15) см (10)
17 ДенисЧ
 
04.02.10
09:48
Предлагаю позвонить в ТП банка и спросить у них, в какой кодировке они желают видеть выгрузку с символами, не входящими в ANSI и OEM...
18 БТР
 
04.02.10
10:00
Чел, то что ты написал это код национальных символов в Unicode.
В ANSI всего 256 символов, символа с кодом 1240 там просто не может быть.
19 forforumandspam
 
04.02.10
10:12
+(0) У меня в региональных настройках "Язык программ, не поддерживающих Юникод" стоит "Казахский", поэтому файл с символами 163, 189, 170(ANSI) отображаются нормально.
(18) http://www.cyrillic.com/3dkbd/ansitable.html Однако, в ANSI и русских буковок нет.

В общем, благодаря (7) вот что получилось

   Попытка
       Стрим = Новый COMОбъект("Adodb.Stream");
   Исключение
       Сообщить("Ошибка при создании объекта: Adodb.Stream");
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   
   Стрим.Type    = 2;
   Стрим.Mode    = 3;
   //Стрим.charset = "windows-1251";
   Стрим.charset = "ascii";
   Стрим.Open();
   Стрим.WriteText(Символ(1240)+Символ(1186)+Символ(1170));
   
   ИмяФайла = "C:\1.txt";
   Попытка
       Стрим.SaveToFile(ИмяФайла, 2);
       Стрим.Close();
       Сообщить("Готово!");
   Исключение
       Сообщить("Ошибка при записи файла: " + ИмяФайла);
       Сообщить(ОписаниеОшибки());
   КонецПопытки;

При Стрим.charset = "windows-1251" работает, при Стрим.charset = "ascii" опять вопросики. Буду надеятся, что этого достаточно. Всем Спасибо!