![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
формат даты [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;