Имя: Пароль:
1C
 
Загрузить дату из DBF
0 KUBIK
 
16.12.10
20:46
Коллеги подскажите, как получить передать значение из поля DBF-файла с типом "Дата" и длиной поля 8?
WinDBFview показывает, что в поле есть значение: 03.02.2005
а при преобразовании в строку дает: 01.01.0001 0:00:00
1 DrShad
 
16.12.10
20:47
а тип поля в ДБФ какой?
2 KUBIK
 
16.12.10
20:47
(1) Дата
3 DrShad
 
16.12.10
20:47
и как в строку преобразовываешь? Формат() не предлагать?
4 KUBIK
 
16.12.10
20:48
(3) СтрДата=""+ДБФ.DATAVYD;
Форматом тоже пробовал :((
5 Mnemonic1C
 
16.12.10
20:49
Ну самый простой вариант добавить нули, а потом преобразовать к типу 'Дата', впринципе и в 7.7 она постоянно путает котлеты с мухами, особенно если дбф в разных форматах сохраняется
6 KUBIK
 
16.12.10
20:51
(5) "добавить нули" = не понял, пример кинь
7 aleks-id
 
16.12.10
20:51
СтрДата=Строка(ДБФ.DATAVYD);
8 DrShad
 
16.12.10
20:53
(7) ему из десяти нужно 8 так что без формат, только через извращения со строками
9 Mnemonic1C
 
16.12.10
20:54
Дат = СтрДата(Строка(ДБФ.DATAVYD)+" 0:00:00");
Как то так, по памяти, ща основном в 7.7 пишу, так что не смеятся если что:))
10 aleks-id
 
16.12.10
20:55
(8) тогда так:
СтрДата=СтрЗаменить(Строка(ДБФ.DATAVYD),".","");
11 Mnemonic1C
 
16.12.10
20:56
Дат = Дата(Строка(ДБФ.DATAVYD)+" 0:00:00");
12 aleks-id
 
16.12.10
20:56
или какие ему 8 то нужно не пойму???
13 KUBIK
 
16.12.10
20:57
(9) СтрДата() ??? = нет такой функции :(((
14 Mnemonic1C
 
16.12.10
20:58
А так (11)
15 DrShad
 
16.12.10
20:58
(12) сорр не так понял сабж, в ДБФ длина поля 8
16 DrShad
 
16.12.10
20:59
(13) Формат то чем не подошел?
17 KUBIK
 
16.12.10
21:02
Делал так:
Формат(ДБФ.DATAVYD,"ДЛФ=Д")
на выходе ""
18 DrShad
 
16.12.10
21:03
(17) поржал, пиши еще
пробовал один
19 KUBIK
 
16.12.10
21:05
(18) :)))) просто туплю уже... битый час уже
20 DrShad
 
16.12.10
21:06
(19) а воспользоваться кончтруктором форматной строки религия не позволяет?
21 KUBIK
 
16.12.10
21:14
Конструктор фс не дал желаемого результата... :(((
22 DrShad
 
16.12.10
21:16
врешь!
23 KUBIK
 
16.12.10
21:22
(22) Формат(ДБФ.DATAVYD,"ДФ=dd.MM.yyyy") на выходе пустая строка
24 KUBIK
 
16.12.10
21:25
Сообщить(ТипЗнч(ДБФ.DATAVYD)); выдает: Дата (!!)
25 aleks-id
 
16.12.10
21:37
а чо выдает Сообщить(ДБФ.DATAVYD);
26 KUBIK
 
17.12.10
21:22
Выкрутился из положения: прочитал DBF через ADODB.
Только дата: 03.02.05 выдаётся как 03.02.1905 00:00:00
Как можно получить правильное столетие?
27 KUBIK
 
17.12.10
23:28
никто не подскажет? (типа ап)
28 EvgeniuXP
 
17.12.10
23:49
(26) так ты ж сам писал 8 знаков тебе надо, а теперь столетие просишь.
29 KUBIK
 
17.12.10
23:53
(28) Не надо мне 8 знаков.
Надо просто получить из  поля DBF типа "Дата" значение даты.
Все попытки с XBase приводили к 01.01.0001 00:00:00
30 EvgeniuXP
 
17.12.10
23:57
(29) у DBF файла должна быть типизирована колонка (D), видимо тип у тебя не тот, т.к. проблем нет с датами при чтении/записи из/в dbf-файл.
31 KUBIK
 
17.12.10
23:57
+(28) 8 знаков = это длина поля DBF, тип "Дата"
32 KUBIK
 
17.12.10
23:59
(30) колонка типизирована (читаю с помощью WinDBFview) = DATAVYD, тип "Дата", длина поля 8
33 KUBIK
 
18.12.10
00:00
Может в этом проблема: файл DBF формируется в 7.7
34 EvgeniuXP
 
18.12.10
00:01
ДБФ.ДобавитьПоле("RASPER","D",8,0);
35 EvgeniuXP
 
18.12.10
00:02
(33) без разницы, проблем нет между 7.7 и 8.х связанные с датой - постоянно делаем обмен на работе.
36 EvgeniuXP
 
18.12.10
00:05
скорее всего сама колонка в DBF-файле у тебя не тип Дата - отсюда и проблемы - правь конфу в 7.7, укажи тип колонки при экспорте файла (см. (34)).
37 KUBIK
 
18.12.10
00:10
(35) Не кинешь кусок кода по чтению даты?

Щас глянул выгрузку из 7.7:

   ДБФ1=СоздатьОбъект("XBase");
   ДБФ1.КодоваяСтраница(1);
............................
      ДБФ1.ДобавитьПоле("DataVyd","D",,);
...............................
       ДБФ1.СоздатьФайл(ИмяФайла);


Вроде все пучком
38 KUBIK
 
18.12.10
00:13
Может надо так:

ДБФ1.ДобавитьПоле("DataVyd","D",8,0);

а не

ДБФ1.ДобавитьПоле("DataVyd","D",,);

?
39 KUBIK
 
18.12.10
00:17
то бишь, явно прописать длину и точность?
Если так, то ляп кодера клиента
40 EvgeniuXP
 
18.12.10
00:23
БД=Новый XBase;
   БД.ОткрытьФайл(мФайлИмпорта);
   БД.Первая();
   Пока НЕ БД.ВКонце() Цикл
       Если КонецМесяца(БД.RASPER)<КонецМесяца(БД.PERDEY) Тогда
           БД.Следующая();
           Продолжить;
       КонецЕсли;
       // Создаем и проводим документ ПотериДляВыслуги:
       НовыйДокумент=Документы.ПотериДляВыслуги.СоздатьДокумент();
       НовыйДокумент.Дата                =КонецМесяца(БД.RASPER);
       НовыйДокумент.ДатаДействия        =КонецМесяца(БД.PERDEY);
       НовыйДокумент.Записать();
       БД.Следующая();
   КонецЦикла;
41 EvgeniuXP
 
18.12.10
00:23
(39) скорее всего в этом и причина, я всегда указывал.
42 KUBIK
 
18.12.10
00:26
(40) Спасибо.
Мой код:

       Данные.ОткрытьФайл(СокрЛП(ПромФайл.ПолноеИмя));
       Данные.Кодировка=КодировкаXBase.OEM;
       Если НЕ Данные.Открыта() Тогда
           Сообщить("Ошибка открытия файла ""TOVARS.DBF""! Возможно файл открыт другой программой");
           Возврат;
       КонецЕсли;    
       КолЗаписей=Данные.КоличествоЗаписей();
       Если КолЗаписей=0 Тогда
           Предупреждение(" Файл ""TOVARS.DBF"" не содержит ни одной записи!
           | Орбаботка прервана!",5);
           Возврат;
       Иначе    
           НачатьТранзакцию();
           Данные.Первая();
           Пока Истина Цикл
               Состояние("Обработка номенклатуры...");
               ОбработкаЗаписиDBF(Данные);            
               Если НЕ Данные.Следующая() Тогда
                   Прервать;
               КонецЕсли;
           КонецЦикла;    
           ЗафиксироватьТранзакцию();
           Данные.ЗакрытьФайл();
       КонецЕсли;
       Сообщить("Обработан файл данных номенклатуры ""TOVARS.DBF""");
   Иначе
       Предупреждение("Отсутствует файл данных номенклатуры ""TOVARS.DBF""!
       | Обработка загрузки прервана",5);
       Возврат;
   КонецЕсли;
43 KUBIK
 
18.12.10
00:30
(41) Спасибо, щас на демке сбацаю.

(40) У меня в процедуре ОбработкаЗаписиDBF(Данные) почти тож самое, только заполнение реквизитов справочника
44 KUBIK
 
18.12.10
00:34
:))) щас заметил свой ляп:   | Орбаботка прервана!",5);
45 KUBIK
 
18.12.10
01:48
Как интересно:
Щас качнул и установил "Редактор DBF 1.75.1"
снова открыл несчастный файл (сформированный в 7.7 с форматом даты поля: ("D",,) и...
вижу в поле DATAVYD : 03.02.0005 (а WinDBFview показывал 03.02.05)!!!
поменял 0005 на 2005.
Загрузилось без проблем!!!
Сформировал файл с явным указанием формата даты: все ОК

Спасибо еще раз EvgeniuXP.
Хотя сам наступал на энти грабли "дефолта": как-то клиент купил управляемый свитч DLink. "Хтото" ему типа "настроил и включил"... 1С и доступ к сети просто умирали.  
Пригласили, я посмотрел на состояние портов Link Speed:
а там везде Default (mnfrd settings).
Поставил 100FD и все пучком пошло.

Резюме всем: указывайте формат даты поля DBF явно!
Закон Брукера: Даже маленькая практика стоит большой теории.