Имя: Пароль:
1C
1С v8
чтение DBF в 1С
0 AlexToo
 
07.10.14
14:46
Привет, надо загрузить накладную в 1с 8,2 из DBF файла, в самом файле кодировка OEM просматриваю файл экселем или DBFShow нормально всё отображается, а при чтении в 1С в Отладчике названия колонок отображаются иероглифами. Как можно исправить? Код открытия файла:
хВ = Новый XBASE;
    Если Кодировка = "OEM" Тогда
        хВ.Кодировка = КодировкаXBase.OEM;
    КонецЕсли;
    Если Кодировка = "ANSI" Тогда
        хВ.Кодировка = КодировкаXBase.ANSI;
    КонецЕсли;
    хВ.ОткрытьФайл(ПутьКФайлу);
    
    хВ.Первая();
    ВсегоЗаписей = хВ.КоличествоЗаписей();
    Сообщить("Фаил успешно открыт");
    СоздатьПустойРазмер();
    СоздатьПустойЦвет();
    ТипНоменклатуры = Справочники.ТипыНоменклатуры.Изделие;
    Весовой = Истина;
    Итератор = 0;

    Пока Истина Цикл
        Итератор = Итератор + 1;
        Инд = Окр(Итератор / ВсегоЗаписей * 100, 2);
        ЕстьНом = 0;
        ГотоваяСтрока = ПрочитатьЗначениеПоФормату(хВ, ФорматФайла);
1 AlexToo
 
07.10.14
14:51
ап ап ап
2 Banned
 
07.10.14
14:52
Попробуй поменять местами открытие файла и установку кодировки
3 AlexToo
 
07.10.14
14:55
пробывал не реагирует
4 aka AMIGO
 
07.10.14
14:58
ПопробЫвай убрать из кода упоминание кодировки вообще :)

ЗЫ. жаль, у меня 8-ки нет, а в последний раз я читал дбф-ки в 2009 году.. забыл уже..
5 SSSSS_AAAAA
 
07.10.14
15:06
(0) Поставь принудительно нужную кодировку. Без проверок. Ибо признак кодировки в файле может отсутствовать.
6 aka AMIGO
 
07.10.14
15:13
читал с такой установкой:
xB.Кодировка     = КодировкаXbase.OEM;
7 SSSSS_AAAAA
 
07.10.14
15:34
(6) И с ней кракозябры? Тогда меняй кодировку.
8 aka AMIGO
 
07.10.14
15:48
(7) не я автор топика

я сообщаю, что спокойно читал массу дбф-файлов именно с таким оператором.
9 Chikko
 
07.10.14
15:49
(6) +1, но была как-то засада с выгрузками из фокспро(кажется), им было плевать на устанавливаемую кодировку, приходилось использовать внешние источники.
10 SSSSS_AAAAA
 
07.10.14
15:52
(8) Пардон :), промахнулся :)
11 vde69
 
07.10.14
16:22
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase]
"DataCodePage"="ANSI"
"BDE"=dword:00000002

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"



и потом перегрузить машину
12 aka AMIGO
 
07.10.14
16:23
(11) хм.. и так - на каждой машине, где будет использоваться обработка..
13 AlexToo
 
07.10.14
16:24
ух ты народ! спасибо что отозвались!!! пардоньте за молчание.
14 AlexToo
 
07.10.14
16:24
(6) ну я тоже так устанавливаю
15 AlexToo
 
07.10.14
16:25
(5) как принудительно?
16 SSSSS_AAAAA
 
07.10.14
16:32
(11) Это называется из пушки по воробьям.
17 SSSSS_AAAAA
 
07.10.14
16:33
(15) Вместо
    Если Кодировка = "ANSI" Тогда
        хВ.Кодировка = КодировкаXBase.ANSI;
    КонецЕсли;

просто
       хВ.Кодировка = КодировкаXBase.ANSI;


Так понятно? Кодировку подобрать по месту.
18 AlexToo
 
07.10.14
16:36
(17) кодировка пользователем выбирается
19 SSSSS_AAAAA
 
07.10.14
16:41
(18) Ну вот пусть он ее правильно и выбирает.
20 AlexToo
 
07.10.14
16:52
(19) и ANSI и OEM пробывал всё равно
21 SSSSS_AAAAA
 
07.10.14
17:17
(20) за "пробЫвал" повбывав бы
Ну так займитесь определением правильной кодировки.
В крайнем случае дайте файл, посмотрю.