дата в lazReport

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

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

Ответить
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

дата в lazReport

Сообщение Awkward »

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

Сообщение Лекс Айрин »

Awkward, возможно, что пакет временно сломан. Стоит удалить настройки и поврежденную версию файла lazarus.exe, если сидишь под виндой, скачать новую версию транка среды и компилятора. Ты не указал сидишь ли ты на транке fpc... если нет, то все же перейди. Практика показала, что изменения синхронны.
Можно было бы не удалять настройки, но там список пакетов, которые установлены, а значит могут быть конфликты.
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

Сообщение Awkward »

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

Добавлено спустя 50 минут 28 секунд:
Ну, дату кривую выдаёт и FormatDateTime функция. Так что тут самое простое - ручками делать презентацию текстовую.... Как и сумму прописью :(
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Awkward
Вы передаёте дату переменной LazReport'а? А каким образом, можете код привести?
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

Сообщение Awkward »

Код: Выделить всё

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, и в дельфи выдаёт месяц в именительном падеже, а не родительном :(
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А если попробовать системное форматирование даты?

Код: Выделить всё

then ParValue := FormatDateTime('dddddd', DealList[DealNumber].Date))
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

Сообщение Awkward »

Пробовал. Как 'dddddd', так и 'd mmmm yyyy', выдаёт "28 апрель 2019". "Апрель", а не "апреля" :(
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Awkward, можно попытаться поискать где определяются текстовые значения даты и просто тупо переопределить в самом модуле. Можно брать время в цифровом формате и специальной функцией просто перебивать в текстовый формат. Есть ещё подозрение, что в файле русификации компонента или самой среды просто неправильно перевели. Возможно воспользовались автоматическим переводчиком.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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

Сообщение Лекс Айрин »

Снег Север, не удивительно. Для англоязычных падежи это убийство мозга. Как и приставки.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

LongMonthNames - массив названий месяцев. Он глобальный (в модуле SysUtils), можно его попробовать переопределить. Правда он объявлен как deprecated, так что нужно проверить, повлияет переименование на текстовую дату или нет.
Если не сработает, то вот ещё кандидат: FormatSettings.LongMonthNames[Номер_Месяца]
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

Сообщение Awkward »

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

Угу, я посмотрел это. Но тут не сильно сложно, судя по исходному коду. Проще для варианта полных названий сделать целиком свою процедуру. Ну, или найти что готовое, как для денежных сумм прописью (таких много)
Ответить