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

Тема в разделе "1C и всё что с ней связано", создана пользователем BBDragon, 5 май 2010.

  1. BBDragon

    BBDragon Well-Known Member

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

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    на 7-ку это похоже ))) а что мешает пользоваться не датами, а строками?
     
  3. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Поле в файле DBF должно быть именно типа "дата", это строгое ограничение. Если бы не это - проблем бы не было никаких
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Поставь в сервис/параметрах число цифр в предствлении года равное четырем и не парь мозги.
     
  5. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Давно поставил, уважаемый puh14, все-таки не первый день с 1С работаю. Если б все было так просто..
     
  6. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    попробуй в файл дату передавать двумя полями - дата и число из 4 символов.
    В дальнейшем из даты вытаскивать месяц и день, а из числового поля формировать год.
    Вроде, несложно
     
  7. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Так нельзя, ибо по приказу поле должно быть из 8 символов, причем именно типа "дата". Судя по всему в 1С 7.7 это ограничение обойти невозможно..
     
  8. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Тогда год прилепи к какому-нибудь полю через разделитель, длина которого явно избыточна, и тащи оттуда

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Посмотрел - в файле год представлен 4мя символами, а при внедрении в 1С - двумя.
    Тогда так : при приеме в 1С разбери входную дату как
    Date1 = Формат(Date0,"DDDMMYYYY"); - это жить будет как надо
    Потом, может, и придумаешь что-нибудь (скажем, из этой строки сформировать свою правильную дату несложно)
     
  10. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Хреново что из восьми, тогда действительно фиг поймешь какое столетие.. попробуй договорится чтобы было десять - самый легкий путь. И голова ни у кого болеть не будет.
     
  11. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Дата за 1909 год не загружается вообще (в документе поле остается пустым), за 2008 - загружается нормально (мой рабочий период - с 1911 по 2011 включительно). Не совсем пойму насчет разделителя, можно чуть подробней объяснить?

    Так я делал, в программу загружаю и обрабатываю даты как строки, все проходит нормально. Вся проблема лишь в том чтобы выгрузить в итоге дату именно как тип "дата" в поле файла DBF

    Договориться не получится, ради нас одних приказ никто менять не будет
     
  12. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Пусть в 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)
    При загрузке из ДБФ - обратная операция - и волки сыты, и овцы целы
     
  13. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    vbs, как всегда спасибо огромное! Я вчера еще все правильно сделал, лишь при выгрузке забыл сделать преобразование типа (из строки в дату - Дата(date)). Теперь поправил и все отлично заработало!!! Таким образом удалось обойти ограничение платформы 7.7 :p

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

    BBDragon Well-Known Member

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А попробуй-ка так :
    НоваяДата = ДР;
    ДобавитьМесяц(НоваяДата,1200)
     
  16. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    vbs, виноват - проблемы никакой нет, все прекрасно работает как в старом варианте. Просто строку с изменением данного поля написал в коде дважды и изменение первой из них, естественно, не давало желаемого результата. Да уж, трудно работать с постоянным недосыпом, надо срочно решать эту проблему :)
     
Загрузка...
Похожие Темы - Проблема загрузкой дат
  1. Renat11111
    Ответов:
    5
    Просмотров:
    3.388
  2. c0de3r
    Ответов:
    5
    Просмотров:
    119
  3. DobermannTT
    Ответов:
    10
    Просмотров:
    134
  4. SoulPaladin
    Ответов:
    4
    Просмотров:
    128
  5. Artael
    Ответов:
    1
    Просмотров:
    109

Поделиться этой страницей