Имя: Пароль:
1C
1С v8
v8: Кодировка OEM в DBF на Linux
,
0 adron
 
12.04.12
12:42
При попытке прочитать файл dbf в кодировке OEM, на Linux сервере 1С 8.2 выдает ошибку "формат файла отличен от .DBF".
При попытке прочитать тот же файл в Windows XP 1с отрабатывает правильно.

Вопросы:
1) Что посоветуете?
2) Таблица кодировки OEM она где храниться, в операционной системе или в приложении?
1 adron
 
12.04.12
12:48
Пытаемся загрузить классификаторы в 1С. Думаю в какую сторону копать. Может в линуксе надо енту самую таблицу ОЕМ как-то прекрутить (как прикручивать не советуйте, прикручивать буду не я)?
2 pumbaEO
 
12.04.12
12:49
таблица в теории в приложении, надо смотреть различия бинарные между созданным dbf файлом на linux разделе и XP, все таки ошибка "формат файла отличен от .DBF" намекает, что возможно проблема в самом файле.
3 adron
 
12.04.12
13:01
(2) Спасибо, может тогда подскажешь чем сравнивать?
4 pumbaEO
 
12.04.12
13:12
vbindiff http://www.cjmweb.net/vbindiff/
AptDiff это гуевое в винде, ну или far(универсален)
5 Jaffar
 
12.04.12
13:19
(0) я всю жизнь считал, что кодировки придумали, чтоб не зависеть от конкретного разработчика ПО или производителя оборудования. надеюсь, у вас не возникает вопроса, где хранится кодировка ASCII?
(3) fc /b <file1.dbf> <file1.dbf> >> file.log
6 adron
 
12.04.12
13:36
(5) именно возник вопрос: где хранится кодировка в ОС или в ПО, только ОЕМ?
7 Jaffar
 
12.04.12
13:38
(6) наводящий вопрос: а где хранится любая другая кодировка, например - азбука Морзе?
8 pumbaEO
 
12.04.12
13:42
(7) в энциклопедии :)
9 adron
 
12.04.12
13:43
На сколько я понимаю кодировка храниться в ПО. Поправьте меня если я ошибаюсь.
10 adron
 
12.04.12
13:44
(2) файлы сравнили, они идентичны.
11 zva
 
12.04.12
13:45
(0) Я правильно понял, что клиентская часть 1С 8.2 у вас на Linux сервере?
12 adron
 
12.04.12
13:47
(11) не у нас на сервере серверная честь
13 zva
 
12.04.12
13:48
т.е. КЛАДР с клиентской машины на ХР не загружается в серверную базу?
14 adron
 
12.04.12
13:55
(13) Да. 1С отваливается на строке "xB = Новый  Base(ФайлАдресногоКлассификатора);" с ошибкой "формат файла отличен от .DBF". Строка выполняется в серверном модуле "АдресныйКлассификатор", соответственно на сервере.
15 pumbaEO
 
12.04.12
14:11
ФайлАдресногоКлассификатора - куда указывает?
16 adron
 
12.04.12
14:12
(15) Временный каталог на Linux сервере. Файл существует. Путь нужен?
17 adron
 
12.04.12
14:12
(15) точнее там полное имя файла во временно каталоге...
18 adron
 
12.04.12
14:23
(13) пишу подробно что происходит.

Конфигурация: Сервер: Linux+postgre+сервер1С 8.2. Клиент: WinXP + тонкией клиент 8.2.

На клиенте запускается обработка по загрузке классификатора. Механизм загрузки типовой.
Сначала с сервера 1с качается Zip-архив на локальную машину. Затем архив передаётся с клиената на сервер.
На сервере из архива извлекаются dbf файлы, при попытки чтения которых 1С вылетает.
19 adron
 
12.04.12
15:23
Есть ещё мысли по этому поводу, товарисчи?!
20 Serginio1
 
12.04.12
15:41
Это все потому, что если для текстов в 1С додумались подсовывать указывать кодировку двумя способами
Кодировка может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки

То в ДБФ только КодировкаXBase. И как мучаются люди у которых кодировка файлов дбф отличаются от системных.
21 adron
 
12.04.12
15:57
(20) Если мне не изменяет память, то при чтении dbf файла с кодировкой, отличной от понимаемой 1С, ошибок не возникало. Просто текст внутри файла был нечитаем.
22 Serginio1
 
12.04.12
17:30
(21) А вообще кодировка внутри файла есть и глупо задавать только системные кодировки. Но суть не про это.
Попробуй открыть какойнидь ДБФ файл в доступной директории и заведомо правильный. И пиши в 1С
23 adron
 
13.04.12
09:12
(22) Да, попробовали. Взяли один и тот же файл. Написали свой код по открытию и чтению файла. На клиенте под XP файл открывается и читается. На серваке под Linux нет. Он какбэ его открывает, но метод "открыта()" возвращает ложь.
24 adron
 
13.04.12
09:13
Будем писать в саппорт
25 andrewks
 
13.04.12
09:19
(22) емнип, внутри дбф кодировка не указывается, её нужно задавать самим, при чтении
26 andrewks
 
13.04.12
09:20
а какой релиз платформы?
27 Serginio1
 
13.04.12
12:24
(25) wiki:DBF
Смотри 29 байт
28 andrewks
 
13.04.12
15:21
(27) угу, спасибо. интересно, какого фига тогда 1сина её не определяет
29 adron
 
13.04.12
15:59
(26) 8.2.15.301
30 adron
 
13.04.12
16:03
(28) Не факт что проблема в кодировке. Это было одно из моих  предположений. Оно пока не подтверждается. Проблема в том что 1С не может открыть этот dbf файл!
31 pumbaEO
 
13.04.12
16:04
ок, ты проверял, может ли 1С открыть на сервере текстовый файл? Смотрел, какой файл и первые 29 байт в файле который сохранен на сервер?
32 ukolabrother
 
13.04.12
16:06
попробуй переименовать сам файл в формат 8.3
33 adron
 
13.04.12
16:14
(32) Это условие выполнено. Файл представляет из себя классификатор загруженный с сайта 1С.
34 adron
 
13.04.12
16:44
(31) 29-й байт в HEX - системе счисления представлен в виде "00" что соответствует кодировке OEM.
35 pumbaEO
 
13.04.12
16:49
пойдем дальше, возьми консоль этот dbf и натрави на него dbview http://packages.ubuntu.com/oneiric/dbview
36 adron
 
13.04.12
17:20
(35) а смысл?
37 pumbaEO
 
13.04.12
17:20
узнать, 1С косячит или проблема все таки в правах, в файле и т.д...
38 adron
 
13.04.12
17:26
(37) на Linux серваке у нас админ рулит. Он говорит что файл читал, тока другой утилитой. Некой консольной dbf. Файл открылся. В правах скорее всего проблем быть не может, т.к. 1С-сервак сам создает этот файл, а потом его читает. По логике если есть права на создание, то на чтение быть должны тоже.
39 adron
 
13.04.12
17:29
(37) более того. ЭТОТ же dbf файл, который не читался сервером 1С на Linux-е прочитался на клиенте 1С (в файловой версии) в XP. Из этого можно заключить что в файле проблем нет.
40 adron
 
13.04.12
17:31
Похоже что проблема в 1С-сервере, в его Linux-овом варианте:(
41 andrewks
 
13.04.12
17:39
(29) конечно, можно ещё на 310-м попробовать, хотя в оф.описаниях исправлений на эту тему и не было
42 adron
 
13.04.12
17:42
(41) ну да, как вариант