дата в lazReport
Модератор: Модераторы
дата в lazReport
На транковой версии Лазаря не получилось установить пакет fpReport (IDE не запускается после пересборки). поставил lazReport. Пытаюсь вывести дату в виде "24 апреля 2019 г.", просто передавая значение переменной в формате TDateTime, но выдаёт всё время "24 Апрель 2019 г." Как-то можно сделать, чтоб нормально выводилось? (да и условие IF (VALIDDATE()) тоже не работает нормально, если честно. Это чтоб текст "от ddmmyy" выводился только если правильная дата передаётся.)
Вообще, у кого-то есть мысли, как этот отчёт сделать адекватно работающим? Чтоб не выдавал ошибки при непонятных для него данных, например?
Вообще, у кого-то есть мысли, как этот отчёт сделать адекватно работающим? Чтоб не выдавал ошибки при непонятных для него данных, например?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Awkward, возможно, что пакет временно сломан. Стоит удалить настройки и поврежденную версию файла lazarus.exe, если сидишь под виндой, скачать новую версию транка среды и компилятора. Ты не указал сидишь ли ты на транке fpc... если нет, то все же перейди. Практика показала, что изменения синхронны.
Можно было бы не удалять настройки, но там список пакетов, которые установлены, а значит могут быть конфликты.
Можно было бы не удалять настройки, но там список пакетов, которые установлены, а значит могут быть конфликты.
транковая версия FPC, транковая - Лазаря. удалял настройки лазаря целиком, пересобирал, перенастраивал. Эффект невозможности подключения fpReport и глюков lazReport остался.
Пытаюсь настроить бланк для печати простого Счёта, даже при наличии "стандарной" документации и нескольких примеров, какие-то сложности на ровном месте. Встроенные функции работают странно (например, значение из блока в число перевести не выходит), дата показывается криво. Но видимо, некоторые вещи просто из-за неопытности.. Уже возникает желание тупо в эксел загнать и в ячейки выводить через ОЛЕ.
Добавлено спустя 50 минут 28 секунд:
Ну, дату кривую выдаёт и FormatDateTime функция. Так что тут самое простое - ручками делать презентацию текстовую.... Как и сумму прописью
Пытаюсь настроить бланк для печати простого Счёта, даже при наличии "стандарной" документации и нескольких примеров, какие-то сложности на ровном месте. Встроенные функции работают странно (например, значение из блока в число перевести не выходит), дата показывается криво. Но видимо, некоторые вещи просто из-за неопытности.. Уже возникает желание тупо в эксел загнать и в ячейки выводить через ОЛЕ.
Добавлено спустя 50 минут 28 секунд:
Ну, дату кривую выдаёт и FormatDateTime функция. Так что тут самое простое - ручками делать презентацию текстовую.... Как и сумму прописью
Awkward
Вы передаёте дату переменной LazReport'а? А каким образом, можете код привести?
Вы передаёте дату переменной LazReport'а? А каким образом, можете код привести?
Код: Выделить всё
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, и в дельфи выдаёт месяц в именительном падеже, а не родительном
А если попробовать системное форматирование даты?
Код: Выделить всё
then ParValue := FormatDateTime('dddddd', DealList[DealNumber].Date))Пробовал. Как 'dddddd', так и 'd mmmm yyyy', выдаёт "28 апрель 2019". "Апрель", а не "апреля" 
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Awkward, можно попытаться поискать где определяются текстовые значения даты и просто тупо переопределить в самом модуле. Можно брать время в цифровом формате и специальной функцией просто перебивать в текстовый формат. Есть ещё подозрение, что в файле русификации компонента или самой среды просто неправильно перевели. Возможно воспользовались автоматическим переводчиком.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Лекс Айрин, стандартные русские варианты перевода названий дней недели и месяцев никогда не знали падежОВ.
Если нужна грамматическая правильность - только переопределять в своей программе.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Снег Север, не удивительно. Для англоязычных падежи это убийство мозга. Как и приставки.
LongMonthNames - массив названий месяцев. Он глобальный (в модуле SysUtils), можно его попробовать переопределить. Правда он объявлен как deprecated, так что нужно проверить, повлияет переименование на текстовую дату или нет.
Если не сработает, то вот ещё кандидат: FormatSettings.LongMonthNames[Номер_Месяца]
Если не сработает, то вот ещё кандидат: FormatSettings.LongMonthNames[Номер_Месяца]
Vadim писал(а):LongMonthNames - массив названий месяцев.
Угу, я посмотрел это. Но тут не сильно сложно, судя по исходному коду. Проще для варианта полных названий сделать целиком свою процедуру. Ну, или найти что готовое, как для денежных сумм прописью (таких много)
