Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

формат даты [D7, WinXP]


SveT ©   (2006-03-09 22:50:00) 

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


QwertyKz   (2006-03-12 12:46:00) [1]


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

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


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

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

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


Svet   (2006-03-11 20:17:00) [3]

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

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


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

to Жуков Олег!

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

С уважением,


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

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


Svet   (2006-03-11 14:53:00) [6]

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


SveT   (2006-03-11 14:51:00) [7]

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

   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:31:00) [8]

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

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


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

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


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


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


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


Svet   (2006-03-10 09:01:00) [11]

to begin...end

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


begin...end   (2006-03-10 08:56:00) [12]

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


Svet   (2006-03-10 08:48:00) [13]

to Жуков Олег

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

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


antonn   (2006-03-10 06:05:00) [14]

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


antonn   (2006-03-10 06:05:00) [15]

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


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


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


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


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

> 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-09 23:20:00) [18]

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо