Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

формат даты   Найти похожие ветки 

 
SveT ©   (2006-03-09 22:50) [0]

Подскажите пожалуйста, как добиться вывода даты в формате
01(02-09) января 2006 г. Главное чтобы перед цифрами от 1 до 9 стоял "0". Это необходимо для печатной формы в банк. Печатаем через FastReport 2.47.
Спасибо!


 
Жуков Олег   (2006-03-09 23:20) [1]

FormatDateTime("dd mmmm yyyy", Date); - но в этом варианте месяц всегда будет в именительном падеже. Если нужно и месяц склонять, тогда наверно делать свою специальную функцию для преобразования даты в строку (по крайней мере я встроенных таких функций не знаю)

function MyDateToStr(const ADate: TDateTime): string;
const
 MonthNames: array[1..12] of string = (
   "Января",
   "Февраля",
   "Марта",
   "Апреля",
   "Мая",
   "Июня",
   "Июля",
   "Августа",
   "Сентября",
   "Октября",
   "Ноября",
   "Декабря"
   );
var
 Day, Month, Year: WORD;
begin
 DecodeDate(Now, Year, Month, Day);
 Result := FormatFloat("00", Day) + " " + MonthNames[Month] + " " + IntToStr(Year);
end;


 
Fay ©   (2006-03-10 00:37) [2]

> function MyDateToStr(const ADate: TDateTime): string;
> DecodeDate(Now, Year, Month, Day);
Забавно 8)

> FormatFloat("00", Day) + " " + MonthNames[Month] + " " + IntToStr(Year);
Можно просто
Format("%.2d %s %.4d", [Day, MonthNames[Month], Year])


 
Германн ©   (2006-03-10 02:17) [3]


> Fay ©   (10.03.06 00:37) [2]
>
> > function MyDateToStr(const ADate: TDateTime): string;
> > DecodeDate(Now, Year, Month, Day);
> Забавно 8)


Забавно. Ну и что? Возможно просто, что ответивший взял кусок из своей программы, которая кроме перевода даты в строку, ещё и сообщает сколько дней, часов, минут и секунд осталось до наступления MyDate! :)))


 
antonn ©   (2006-03-10 06:05) [4]

formatdatetime("dd mmmm yyyy",now); //или mmmmmm


 
antonn ©   (2006-03-10 06:05) [5]

хи-хи, стормозил


 
Svet ©   (2006-03-10 08:48) [6]

to Жуков Олег

Спасибо за идею. Но я не знаю как подцепить эту функцию к списку функций FR.

Если не затруднит, то прошу Вас пояснить
Спасибо!


 
begin...end ©   (2006-03-10 08:56) [7]

Ничего не понял. Дату в строку преобразовать, чтобы месяц в родительном падеже был? Тогда API-функция GetDateFormat поможет. Или что?


 
Svet ©   (2006-03-10 09:01) [8]

to begin...end

Жуков Олег верно подсказал. Теперь вопрос как подцепить ее к функциям FR.


 
Жуков Олег   (2006-03-10 10:14) [9]


> как подцепить ее к функциям FR.


- Не знаю. Я про Fast Report вообще мало знаю. Может быть до того, как отправлять данные в Fast Report провести преобразование?


 
Morgoth_   (2006-03-10 13:14) [10]

Зачем тебе ее подцеплять к функциям FastReporta? У него есть внутренняя функция FormatDateTime(<formatstr>, <value>), формат задается также как и в Дельфи.
А можешь вообще передать строку в отчет через переменную, для этого в отчете в тексте пишешь в квадратных скобках [vDate], а потом на событие OnGetValue пишешь:
 if ParName = "vDate" then
   ParValue := "строка с датой";


 
Svet ©   (2006-03-11 14:31) [11]

- Не знаю. Я про Fast Report вообще мало знаю. Может быть до того, как отправлять данные в Fast Report провести преобразование?

Значений с датами при подготовке отчетов "бесконечно много", а форматы требуются разные в зависимости от требуемого доумента. Единственная проблема с данным форматом даты для конкретного документа. И оптимальным я считаю, преобразовать ее только при подготовке конкретного отчета. Теперь буду ломать голову как ее преобразовать до.


 
SveT ©   (2006-03-11 14:51) [12]

Кто-нибудь поможет передать в отчет.
Вот мой код на событие при подготовке печати:

   DMFrm.QueryOper.Close;
   DMFrm.QueryOper.SQL.Clear;
   DMFrm.QueryOper.SQL.Add("SELECT RS.*, P.*, B.* FROM "RS.DB" AS RS, "SHOP-SKLAD.DB" AS P, "BANK.DB" AS B");
   DMFrm.QueryOper.SQL.Add("WHERE RS.ORGDEP=P.KOD AND RS.BANK=B.KOD");
   DMFrm.QueryOper.SQL.Add("ORDER BY "+FNAME);
   DMFrm.QueryOper.Open;

 DMFrm.QueryOpen.Close;
   DMFrm.QueryOpen.SQL.Clear;
      DMFrm.QueryOpen.SQL.Add("SELECT DISTINCT FRFNAME FROM "FRF.DB"");
   DMFrm.QueryOpen.SQL.Add("WHERE GRUP=35 AND DEF=TRUE");
 DMFrm.QueryOpen.Open;
if FileExists(ExtractFilePath(Application.ExeName)+"Reports\"+DMFrm.QueryOpen.FieldByName("FRFNAME").AsString) then begin
TRF_PRINTFRPREW.frDBDataSet1.DataSet := DMFrm.QueryOper;
TRF_PRINTFRPREW.frReport1.LoadFromFile(ExtractFilePath(Application.ExeName)+"Reports\"+DMFrm.QueryOpen.FieldByName("FRFNAME").AsString);
 DMFrm.QueryOpen.Close;
 DMFrm.QueryOper.DisableControls;
 TRF_PRINTFORM.Tag := 35;
  if TRF_PRINTFRPREW.frReport1.PrepareReport then
   TRF_PRINTFRPREW.frReport1.ShowPreparedReport;
  TRF_PRINTFRPREW.frPreview1.Zoom := 100;
 DMFrm.QueryOper.EnableControls;
end
else ShowMessage(" ... !");
 TRF_PRINTFORM.Tag := 35;
 TRF_PRINTFRPREW.ShowModal;

Из таблицы ras.db берется значение даты

С уважением,


 
Svet ©   (2006-03-11 14:53) [13]

ошибка - не ras.db а rs.db


 
Жуков Олег   (2006-03-11 18:26) [14]

Svet, "до" - это же не значит что прямо в базе данных менять. Конечно же только в памяти, и только у набора данных, который выводится в отчёт, но до формирования отчёта. Може быть ClientDataset использовать либо Calculated Field. А почему [10] не подходит?


 
Svet ©   (2006-03-11 20:00) [15]

to Жуков Олег!

Если честно ;- не знаю как это реализовать. Субъективно - знаний не хватает. Но если есть у Вас возможность поделиться кодом - буду признательна.

С уважением,


 
Svet ©   (2006-03-11 20:17) [16]

Правильно ли я передаю переменную

procedure TTRF_PRINTFRPREW.frReport1GetValue(const ParName: String;
 var ParValue: Variant);
Var s, p: string;
   i : integer;
begin
   if ParName="vDate" then ParValue := .............;


 
Жуков Олег   (2006-03-11 23:54) [17]

Svet, наверное правильно, для уверенности надо справку по FastReport читать.

Не знаю как работает FastReport, но могу предположить, что во время построения отчёта он пробегается по подключенному датасету, меняя ему текущую запись. И, значит вместо точек в [16] можно подставить MyDateToString(ПодключенныйДатасет.FieldByName(ИмяПоляСДатой).AsDateTime). Это только предположение, надо проверять.


 
QwertyKz ©   (2006-03-12 12:46) [18]


> Правильно ли я передаю переменную

Можно так:
frxReport.Variables["MyVar"] := 10;
Если строковая переменная:
frxReport.Variables["MyVar"] := """" + "Текст" + """";



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
15-1142855044
carmen
2006-03-20 14:44
2006.04.16
пример плагинов bpl з базой данных


11-1124430638
Gothic 1
2005-08-19 09:50
2006.04.16
Использование компонентов из VCL


2-1144021821
Vera
2006-04-03 03:50
2006.04.16
Создание динамических объектов на форме


15-1143057806
Petr V. Abramov
2006-03-22 23:03
2006.04.16
Фильм "Горбатая Гора"


11-1124640908
hunn
2005-08-21 20:15
2006.04.16
Форму в центр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский