Проблема с загрузкой дат

BBDragon

Well-known member
04.05.2008
148
0
#1
Пишу специальную конфигурацию, в которой идет обработка данных - загрузка из файлов dbf, обработка, далее последующая выгрузка также в dbf. Обрабатываются данные по различным документам, в итоге временной разброс может быть очень большим - как начало XX века (например дата рождения), так и 2010-2020 гг (срок окончания действия удостоверения). В настройках установил "Год начала рабочего столетия" равным 1911 (меньше не дает), в итоге все даты старше 2011 он искажает, превращая например 2012 в 1912 и т.д. Пытался обойти это ограничение путем смены типа данных (строка вместо даты), но при этом при последующей выгрузке в файл DBF год даты все равно летит и данные выгружаются неправильно.. Нельзя ли как-нибудь обойти это ограничение?
 

puh14

Well-known member
11.07.2008
1 412
0
#4
Поставь в сервис/параметрах число цифр в предствлении года равное четырем и не парь мозги.
 

vbs

Well-known member
18.02.2007
1 708
1
#6
попробуй в файл дату передавать двумя полями - дата и число из 4 символов.
В дальнейшем из даты вытаскивать месяц и день, а из числового поля формировать год.
Вроде, несложно
 

BBDragon

Well-known member
04.05.2008
148
0
#7
попробуй в файл дату передавать двумя полями - дата и число из 4 символов.
В дальнейшем из даты вытаскивать месяц и день, а из числового поля формировать год.
Вроде, несложно
Так нельзя, ибо по приказу поле должно быть из 8 символов, причем именно типа "дата". Судя по всему в 1С 7.7 это ограничение обойти невозможно..
 

vbs

Well-known member
18.02.2007
1 708
1
#8
Тогда год прилепи к какому-нибудь полю через разделитель, длина которого явно избыточна, и тащи оттуда

А что происходит, когда даты в файле представлены как 11/08/1909 и 20/12/2008 ?
Как они преобразуются в 1с ?
 

vbs

Well-known member
18.02.2007
1 708
1
#9
Посмотрел - в файле год представлен 4мя символами, а при внедрении в 1С - двумя.
Тогда так : при приеме в 1С разбери входную дату как
Date1 = Формат(Date0,"DDDMMYYYY"); - это жить будет как надо
Потом, может, и придумаешь что-нибудь (скажем, из этой строки сформировать свою правильную дату несложно)
 

puh14

Well-known member
11.07.2008
1 412
0
#10
Хреново что из восьми, тогда действительно фиг поймешь какое столетие.. попробуй договорится чтобы было десять - самый легкий путь. И голова ни у кого болеть не будет.
 

BBDragon

Well-known member
04.05.2008
148
0
#11
Тогда год прилепи к какому-нибудь полю через разделитель, длина которого явно избыточна, и тащи оттуда

А что происходит, когда даты в файле представлены как 11/08/1909 и 20/12/2008 ?
Как они преобразуются в 1с ?
Дата за 1909 год не загружается вообще (в документе поле остается пустым), за 2008 - загружается нормально (мой рабочий период - с 1911 по 2011 включительно). Не совсем пойму насчет разделителя, можно чуть подробней объяснить?

Посмотрел - в файле год представлен 4мя символами, а при внедрении в 1С - двумя.
Тогда так : при приеме в 1С разбери входную дату как
Date1 = Формат(Date0,"DDDMMYYYY"); - это жить будет как надо
Потом, может, и придумаешь что-нибудь (скажем, из этой строки сформировать свою правильную дату несложно)
Так я делал, в программу загружаю и обрабатываю даты как строки, все проходит нормально. Вся проблема лишь в том чтобы выгрузить в итоге дату именно как тип "дата" в поле файла DBF

Хреново что из восьми, тогда действительно фиг поймешь какое столетие.. попробуй договорится чтобы было десять - самый легкий путь. И голова ни у кого болеть не будет.
Договориться не получится, ради нас одних приказ никто менять не будет
 

vbs

Well-known member
18.02.2007
1 708
1
#12
Пусть в 1С живет дата Date0 = '09.09.09' (1909 год)
тогда
Date1 = Формат(Date0,"DDDMMYYYY"); "09.09.1909"
а если Date0 = '09.09.09' (2009 год)
тогда
Date1 = Формат(Date0,"DDDMMYYYY"); "09.09.2009"

Перед выгрузкой из строки Date1 формируем Date2 типа "Дата" и вкатываем в поле ДБФ (оно будет выглядеть 09/09/1909 или 09/09/2009)
При загрузке из ДБФ - обратная операция - и волки сыты, и овцы целы
 

BBDragon

Well-known member
04.05.2008
148
0
#13
Пусть в 1С живет дата Date0 = '09.09.09' (1909 год)
тогда
Date1 = Формат(Date0,"DDDMMYYYY"); "09.09.1909"
а если Date0 = '09.09.09' (2009 год)
тогда
Date1 = Формат(Date0,"DDDMMYYYY"); "09.09.2009"

Перед выгрузкой из строки Date1 формируем Date2 типа "Дата" и вкатываем в поле ДБФ (оно будет выглядеть 09/09/1909 или 09/09/2009)
При загрузке из ДБФ - обратная операция - и волки сыты, и овцы целы
vbs, как всегда спасибо огромное! Я вчера еще все правильно сделал, лишь при выгрузке забыл сделать преобразование типа (из строки в дату - Дата(date)). Теперь поправил и все отлично заработало!!! Таким образом удалось обойти ограничение платформы 7.7 :p

Всем огромное спасибо за помощь!! :ithx:
 

BBDragon

Well-known member
04.05.2008
148
0
#14
После ряда командировок и другой срочной работы вернулся вновь к разработке программы и вновь встала подобная проблема! Считываю данные с файла DBF и заношу их в справочник, при этом даты свыше 2011 года заносятся как 19хх (1911 вместо 2011 и т.д.), если же делаю как раньше (меняю тип на строку и т.д.) - то заносятся только последние 2 цифры года и все(
Что только ни пробовал - безрезультатно(

Код:
ДР=СокрЛП(ДБФ.DATE_OUT); 
ДатаСтрока = Формат(ДР, "ДДММГГГГ");
Если (ДатаГод(ДР)>1900) и (ДатаГод(ДР)<1950) Тогда // Загружена дата с 2001 по 2050 год
НоваяДата=Лев(ДатаСтрока,6) + "20" + Прав(ДатаСтрока,2); 
Иначе НоваяДата = ДатаСтрока; //обычная дата XX века
КонецЕсли;
СпрПац.ДатаОкончанияПолиса = НоваяДата;
 

vbs

Well-known member
18.02.2007
1 708
1
#15
А попробуй-ка так :
НоваяДата = ДР;
ДобавитьМесяц(НоваяДата,1200)
 

BBDragon

Well-known member
04.05.2008
148
0
#16
vbs, виноват - проблемы никакой нет, все прекрасно работает как в старом варианте. Просто строку с изменением данного поля написал в коде дважды и изменение первой из них, естественно, не давало желаемого результата. Да уж, трудно работать с постоянным недосыпом, надо срочно решать эту проблему :)