• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы BBDragon
  • Дата начала
B

BBDragon

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

Спартак

на 7-ку это похоже ))) а что мешает пользоваться не датами, а строками?
 
P

puh14

Поставь в сервис/параметрах число цифр в предствлении года равное четырем и не парь мозги.
 
B

BBDragon

Поставь в сервис/параметрах число цифр в предствлении года равное четырем и не парь мозги.
Давно поставил, уважаемый puh14, все-таки не первый день с 1С работаю. Если б все было так просто..
 
V

vbs

попробуй в файл дату передавать двумя полями - дата и число из 4 символов.
В дальнейшем из даты вытаскивать месяц и день, а из числового поля формировать год.
Вроде, несложно
 
B

BBDragon

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

vbs

Тогда год прилепи к какому-нибудь полю через разделитель, длина которого явно избыточна, и тащи оттуда

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

vbs

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

puh14

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

BBDragon

Тогда год прилепи к какому-нибудь полю через разделитель, длина которого явно избыточна, и тащи оттуда

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

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

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

vbs

Пусть в 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)
При загрузке из ДБФ - обратная операция - и волки сыты, и овцы целы
 
B

BBDragon

Пусть в 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:
 
B

BBDragon

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

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

vbs

А попробуй-ка так :
НоваяДата = ДР;
ДобавитьМесяц(НоваяДата,1200)
 
B

BBDragon

vbs, виноват - проблемы никакой нет, все прекрасно работает как в старом варианте. Просто строку с изменением данного поля написал в коде дважды и изменение первой из них, естественно, не давало желаемого результата. Да уж, трудно работать с постоянным недосыпом, надо срочно решать эту проблему :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!