BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Формат даты при записи в dbf файл

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Формат даты при записи в dbf файл
 
Из Бэста 4+ экспортирую данные в DBF файл,который имеет строго заданный формат.
Причем поле даты по техусловиям в нем имеет длину 8 .
У меня в файле упорно получается 10 , т.е. dd/mm/gggg
Вот фрагмент кода :
Private puth_,aDbf,aSet,aSetKey
altd()
aSet:=SaveSet()
aSetKey:=SaveSetKey()

aDbf:={}
AADD(aDbf, { "Vid", "C", 1, 0 })
AADD(aDbf, { "Type", "C", 1, 0 })
AADD(aDbf, { "NUMDOC", "C", 6, 0 })
AADD(aDbf, { "DATE", "D", 8, 0 })
// и т.д.
dbpush()
puth_:=GlobalTmpPath+'alko1.dbf'

DBCREATE(puth_, aDbf)
NETUSE('ALKO1',puth_)
alko1->(addrec())
alko1->Vid :=" "
alko1->Type :=" "
alko1->NUMDOC :=" "
alko1->DATE :=ctod("01/01/08")
alko1->(F_DBUNLOCK())
ALKO1->(dbCloseArea())
RestSetKey(aSetKey)
RestSet(aSet)

dbpop()

Заранее спасибо.
Габов Алексей.
 
Насколько я понимаю "в куриных потрошках", БЭСТ использует формат dBase по умолчанию - "YYYYMMDD", а представление даты в виде "DD/MM/YY" является результатом последующего преобразования. Т.е. должно быть "alko1->DATE :=Stod("20080101")" иначе придется явно указать формат даты в самом начале функции: "SET DATE TO FRENCH" или "SET DATE TO BRITISH"("FRENCH" и "BRITISH" соответствуют выбранному формату "DD/MM/YY").
"dd/mm/gggg" же получается в результате использования в системе формата представления года в виде "YYYY", в результате чего год, представленный двумя цифрами дополняется до четырех.
Корректное дополнение для борьбы с "проблемой 2000" обеспечивается чем-то вроде "SET EPOCH TO 1950", поэтому удобнее использовать функцию "StoD('YYYYMMDD')"
 
Цитата
gabov пишет:
Причем поле даты по техусловиям в нем имеет длину 8 .
У меня в файле упорно получается 10 , т.е. dd/mm/gggg


Поле имеет длину 8 поскольку для хранение даты этой длины хватает.
На самом деле в поле лежит не дата в том виде как Вы ее видите
в интерфейсе а обычное целое число, что собственно позволяет
нам делять всякие математические операции с датами.
Когда Вы передает в dbf файл гораздо лучше передавать полное значение года а именно 10 знаков. В поле дата все запишется корректно - не сомневайтесь.
Т.е. между CTOD("01/01/2008") и CTOD("01/01/08") нет абсолютно никакой разницы.
Страницы: 1
Читают тему (гостей: 1)