Имя: Пароль:
1C
1C 7.7
v7: загрузка из ДБФ, округляет число до целого
,
0 Z_Z
 
04.12.13
10:00
Добры день. столкнулся с такой проблемой. Делаю обычное чтение dbf файла 1с77
ДБФ.ОткрытьФайл(ИмяФайла);

ДБФ.Первая();
Пока ДБФ.ВКонце() = 0 Цикл
.................
КонецЦикла;
И числя с 2 знаками после запятой читаются как целое число, 2 знака просто отбрасывается.
пробовал на Win 7 и Win server 2008. может такой быть из-за операционки? Раньше работал на win xp никогда такого не было.
1 v4442
 
04.12.13
10:01
может разделитель не правильный, посмотри в отладчике
может в настройках винды что-то не так
2 Z_Z
 
04.12.13
10:05
отладчик уже видит как целое число. А в просмоторщике dbа все ок.
3 Dolly_EV
 
04.12.13
10:06
покажи, как (куда) читаешь?
4 Z_Z
 
04.12.13
10:11
сумма = Число(ДБФ.AMT); сумма = ДБФ.AMT; и в отладчики смотрел все поля текущей строки ДБФ и там нет 2 знаков.
и пробовал
ДБФ.ОписаниеПоля(12, имяПоля, тип, длина, точность);
выдает тип -1, точность - 0 (((
5 Wobland
 
04.12.13
10:13
ставлю на имя файла
6 Z_Z
 
04.12.13
10:13
Могу файл выложить в студию))
7 Wobland
 
04.12.13
10:13
(6) да!
8 Z_Z
 
04.12.13
10:13
(6) имя файла 1.dbf ))
9 Z_Z
 
04.12.13
10:15
http://rghost.ru/50665602
12 колонка , AMT - сумма с 2 знаками после запятой
10 МишКа
 
04.12.13
10:18
(9) Файл в порядке. Смотри, что у тебя в коде.
11 Chum
 
04.12.13
10:19
(0) код покажи
12 МишКа
 
04.12.13
10:21
(10) А нет. У меня показывает AMT N 16 0
13 Z_Z
 
04.12.13
10:23
(12) какая винда у тебя? У меня нет xp под рукой. может кто-то на XP проверить.
14 МишКа
 
04.12.13
10:25
(9) Посмотрел блокнотом. У тебя дробная часть отделяется запятой. Думаю, в этом все дело.
15 Wobland
 
04.12.13
10:25
(13) как-то заголовок дбфки от винды не зависит
16 Z_Z
 
04.12.13
10:28
(14) а должна чем отделяться?
17 МишКа
 
04.12.13
10:29
(16) Точкой.
18 МишКа
 
04.12.13
10:30
+(17) Во всяком случае, драйвер, который использует 1С, ожидает точку.
19 Mikeware
 
04.12.13
10:33
параметры поля N16.0
20 Z_Z
 
04.12.13
10:36
а в этом файле в 3 колонке какой разделитель у вас?
http://rghost.ru/50665989
21 Z_Z
 
04.12.13
10:37
(20) этот файл читается нормально, хотя разделитель у меня "запятая" и в первом и во втором файле((
22 alexexe
 
04.12.13
10:37
десятичной нет, видимо конвертировали данные неверно, если попробовать вручную изменить десятичную часть, то она обнулится в соответствие с типом.

поменять тип колонки
23 Chum
 
04.12.13
10:40
хм... посмотрел я файлик. Excel открывает, но колонка АМТ пустая кроме нулей.
Открываю в акцессе, там колонка заполнена, но нет дробной части нигде.

Кстати, тип dBase какой? На 4-й как-то не похож, а клюшки работают с ним.
24 Chum
 
04.12.13
10:41
А дробная часть присутствует, простой листер показывает "100494,63"
25 Z_Z
 
04.12.13
10:42
(23) тип не известен, это делает экспорт клиент-банк
26 Dolly_EV
 
04.12.13
10:45
Хде 2 знака после запятой??
27 Chum
 
04.12.13
10:45
(25) Как определить тип DBF?

Имхо нужно делать что-то вроде:
л_АМТ = Число(СтрЗаменить(Объект.АМТ, ",", "."));
28 Z_Z
 
04.12.13
10:48
(27) А Объект.АМТ у вас строка? и с запятой?
29 Dolly_EV
 
04.12.13
10:48
30 aka AMIGO
 
04.12.13
10:51
(28) функцией СтрЗаменить() он автоматом переводится в строку
31 Z_Z
 
04.12.13
10:54
(29)http://rghost.ru/50666288
(30)На входе в эту функцию уже нет дробной части((
32 Dolly_EV
 
04.12.13
10:56
(31) см. (23) "...На 4-й как-то не похож, а клюшки работают с ним."
33 aka AMIGO
 
04.12.13
11:05
(31) угу.. в сам деле нет др.части
вот картинка в DBFnavigator

http://gyazo.com/f5f11e06cf08518d8ebeacf4d510adf5
34 Chum
 
04.12.13
11:06
Ну почему на Украине все не как у людей?
35 Z_Z
 
04.12.13
11:07
переводим тему в политическую плоскость?:)))))
36 Z_Z
 
04.12.13
11:08
(33) как же нету если тут явно видно (выделено красным), что есть 2 знака после запятой ))
http://rghost.ru/50666288
37 Mikeware
 
04.12.13
11:11
(36) Структура описания полей в заголовке DBF-файла
№ байта     Размер     Значение     Описание     Используется
00     11     ASCII     Имя поля с 0x00 завершением     Все
11     1     ASCII     Тип поля см. Таблицу 4     Все
12     4     n,n,n,n     Адрес поля в памяти     D3
        0,0,n,n     Смещение относительно начала записи     Fp
        0,0,0,0     Игнорируется     FS, D4, D5, Fb, CL
16     1     Byte     Размер поля см. Таблицу 4     Все
17     1     Byte     Количество знаков после запятой     Все
18     2     0,0     Зарезервировано     Все
20     1     Byte     Идентификатор рабочей области     D4,D5
        0x00     Не используется     FS, D3, Fb, Fp, CL
21     2     n,n     Многопользовательский dBase     D3, D4, D5
        0,0     Игнорируется     FS Fb, Fp, CL
23     1     0x01     Установленные поля     D3, D4, D5
        0x00     Игнорируется     FS Fb, Fp, CL
24     7     0..0     Зарезервировано     Все
31     1     0x01     Поле включено в .mdx индекс     D4, D5
        0x00     Игнорируется     D3, FS, Fb, Fp, CL
38 Z_Z
 
04.12.13
11:13
(37) А можно объяснить для простых смертных, о чем это говорит?
39 Mikeware
 
04.12.13
11:13
(33) железяка смотрит не глазами. она читает дескриптор поля, и видит в дескрипторе 0x10 - длина поля, и 0x00 - количество знаков после запятой. И поступает так, как положено.
40 КонецЦикла
 
04.12.13
11:15
А там что дробная часть есть у значений этого поля? Интересно...
41 Mikeware
 
04.12.13
11:16
42 Тьма
 
04.12.13
11:20
(0)Было такое чудо когда-то в Проминвесте-банкклиенте. Решалось настройкой банк-клиента по подсказкам банковских программеров - были там скрипты, по которым строился файл экспорта и смысл был в замене неправильного скрипта. Но Проминвест вроде на бифите уже работает?
43 Torquader
 
04.12.13
13:43
Если dbf-файл записывается утилитой на Си и т.п., то никто не обещает, что структура файла будет правильной, так как обычно записывают сначала заголовок (копируя просто заранее созданный), а потом при помощи fprintf-а пишут данные, не заглядывая в заголовок и соблюдая только длину полей (хотя и этого можно не делать).
Причём, если на другой стороне программа точно также "читает" файл, проверяя заголовок на полное совпадение, а записи читая из строки фиксированной длины (размером со всю запись), то никто и не узнает, что заголовок такой.
Кстати, если использовать Scripting.FileSystemObject и MsScriptControl, то можно прямо в 1С написать альтернативную программу чтения файла, которая прекрасно прочитает всё, не обращая внимание на кривизну типов в заголовке.
44 ЧеловекДуши
 
04.12.13
13:44
(0) Посмотри в файле ДБФ, может там уже все округлено :)
45 ЧеловекДуши
 
04.12.13
13:50
(9) АМТ, целое число :)
46 ЧеловекДуши
 
04.12.13
13:53
Дарю...  http://yadi.sk/d/G1GpnLhVDmheU
DBF Viewer...
47 Mikeware
 
04.12.13
13:59
(43) это только если структура фисированная.
зы. но таких идиотов вроде не так уж и много....
хотя.. старые умнеют - новые плодятся...
Основная теорема систематики: Новые системы плодят новые проблемы.