дата в lazReport

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

дата в lazReport

Сообщение Awkward » 28.04.2019 18:01:21

На транковой версии Лазаря не получилось установить пакет fpReport (IDE не запускается после пересборки). поставил lazReport. Пытаюсь вывести дату в виде "24 апреля 2019 г.", просто передавая значение переменной в формате TDateTime, но выдаёт всё время "24 Апрель 2019 г." Как-то можно сделать, чтоб нормально выводилось? (да и условие IF (VALIDDATE()) тоже не работает нормально, если честно. Это чтоб текст "от ddmmyy" выводился только если правильная дата передаётся.)
Вообще, у кого-то есть мысли, как этот отчёт сделать адекватно работающим? Чтоб не выдавал ошибки при непонятных для него данных, например?
Awkward
новенький
 
Сообщения: 17
Зарегистрирован: 19.01.2017 00:06:47

Re: дата в lazReport

Сообщение Лекс Айрин » 28.04.2019 18:31:05

Awkward, возможно, что пакет временно сломан. Стоит удалить настройки и поврежденную версию файла lazarus.exe, если сидишь под виндой, скачать новую версию транка среды и компилятора. Ты не указал сидишь ли ты на транке fpc... если нет, то все же перейди. Практика показала, что изменения синхронны.
Можно было бы не удалять настройки, но там список пакетов, которые установлены, а значит могут быть конфликты.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: дата в lazReport

Сообщение Awkward » 28.04.2019 18:35:35

транковая версия FPC, транковая - Лазаря. удалял настройки лазаря целиком, пересобирал, перенастраивал. Эффект невозможности подключения fpReport и глюков lazReport остался.
Пытаюсь настроить бланк для печати простого Счёта, даже при наличии "стандарной" документации и нескольких примеров, какие-то сложности на ровном месте. Встроенные функции работают странно (например, значение из блока в число перевести не выходит), дата показывается криво. Но видимо, некоторые вещи просто из-за неопытности.. Уже возникает желание тупо в эксел загнать и в ячейки выводить через ОЛЕ.

Добавлено спустя 50 минут 28 секунд:
Ну, дату кривую выдаёт и FormatDateTime функция. Так что тут самое простое - ручками делать презентацию текстовую.... Как и сумму прописью :(
Awkward
новенький
 
Сообщения: 17
Зарегистрирован: 19.01.2017 00:06:47

Re: дата в lazReport

Сообщение Vadim » 28.04.2019 19:41:44

Awkward
Вы передаёте дату переменной LazReport'а? А каким образом, можете код привести?
Vadim
долгожитель
 
Сообщения: 3653
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: дата в lazReport

Сообщение Awkward » 28.04.2019 19:44:13

Код: Выделить всё
procedure TMainDealForm.frReportGetValue(const ParName: String; var ParValue: Variant);
var
  DealNumber: integer;
begin
  DealNumber := 0;
  if      ParName = 'DealDate'      then ParValue := DealList[DealNumber].Date

и т.д.

Но проблема с датой, видимо, в винде. FormatDateTime и в FPC, и в дельфи выдаёт месяц в именительном падеже, а не родительном :(
Awkward
новенький
 
Сообщения: 17
Зарегистрирован: 19.01.2017 00:06:47

Re: дата в lazReport

Сообщение Vadim » 28.04.2019 20:24:29

А если попробовать системное форматирование даты?
Код: Выделить всё
then ParValue := FormatDateTime('dddddd', DealList[DealNumber].Date))
Vadim
долгожитель
 
Сообщения: 3653
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: дата в lazReport

Сообщение Awkward » 28.04.2019 20:31:47

Пробовал. Как 'dddddd', так и 'd mmmm yyyy', выдаёт "28 апрель 2019". "Апрель", а не "апреля" :(
Awkward
новенький
 
Сообщения: 17
Зарегистрирован: 19.01.2017 00:06:47

Re: дата в lazReport

Сообщение Лекс Айрин » 28.04.2019 21:15:03

Awkward, можно попытаться поискать где определяются текстовые значения даты и просто тупо переопределить в самом модуле. Можно брать время в цифровом формате и специальной функцией просто перебивать в текстовый формат. Есть ещё подозрение, что в файле русификации компонента или самой среды просто неправильно перевели. Возможно воспользовались автоматическим переводчиком.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: дата в lazReport

Сообщение Снег Север » 28.04.2019 22:44:56

Лекс Айрин, стандартные русские варианты перевода названий дней недели и месяцев никогда не знали падежОВ. :D Если нужна грамматическая правильность - только переопределять в своей программе.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 1925
Зарегистрирован: 27.11.2007 16:14:47

Re: дата в lazReport

Сообщение Лекс Айрин » 28.04.2019 23:58:55

Снег Север, не удивительно. Для англоязычных падежи это убийство мозга. Как и приставки.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: дата в lazReport

Сообщение Vadim » 29.04.2019 04:41:28

LongMonthNames - массив названий месяцев. Он глобальный (в модуле SysUtils), можно его попробовать переопределить. Правда он объявлен как deprecated, так что нужно проверить, повлияет переименование на текстовую дату или нет.
Если не сработает, то вот ещё кандидат: FormatSettings.LongMonthNames[Номер_Месяца]
Vadim
долгожитель
 
Сообщения: 3653
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: дата в lazReport

Сообщение Awkward » 29.04.2019 11:32:07

Vadim писал(а):LongMonthNames - массив названий месяцев.

Угу, я посмотрел это. Но тут не сильно сложно, судя по исходному коду. Проще для варианта полных названий сделать целиком свою процедуру. Ну, или найти что готовое, как для денежных сумм прописью (таких много)
Awkward
новенький
 
Сообщения: 17
Зарегистрирован: 19.01.2017 00:06:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot], Yandex [Bot] и гости: 4

Рейтинг@Mail.ru