Сумма прописью по нужному формату.

Автор liptonenochek, 20 марта 2021, 19:12

0 Пользователи и 1 гость просматривают эту тему.

liptonenochek

Добрый вечер, перешел на libreoffice.
Помогите реализовать макросом пропись по следующему образцу
Исходное число: 2222,22
Результат: 2222,22 2 222 (две тысячи двести двадцать два) рубля 22 копейки

 :roll:Про надстройку CyrillicTools знаю, но она прописывает не в удобоваримом для меня формате. Может дополнить пару строк этой надстройки, может кто то для себя делал?

rami

Цитата: liptonenochek от 20 марта 2021, 19:12Про надстройку CyrillicTools знаю, но она прописывает не в удобоваримом для меня формате.
Что не подходит?



Посмотрите это расширение Numbertext

liptonenochek

Цитата: rami от 20 марта 2021, 19:27
Что не подходит?
Киррилик делает пропись по следующему виду: 2222,22 ---- Две тысячи двести двадцать два рубля 22 коп___

Numbertext на сайте разработчика сказано: "For Writer usage, see Linux Libertine G with Numbertext support and Typography toolbar." Два расширения установил, не понял как их задействовать, хоть и на тулбар вынес Typography, как написано.
Поэтому просто манипуляции с переменной и доп форматами [NatNum12 RUB]0,00 ничего кроме результата как ---- две тысячи двести двадцать два рубля двадцать две копейки. При открытии файла заново на месте поля: Задать переменную  = 2222,22

Может подскажите как запустить? libbre 7.1.1.2.


liptonenochek

#3
Добавить 223 строкой getSumByCurrency
Addition = Left(sAddition, Len(sAddition) - 1) & ") "
Поменять 195 строкой insertSumWriter
sOutText = dInValue & " " & Format(dInValue, "# ##0") & " (" & getSumLiterally (dInValue, sLanguage, sNominativeSingular, iFractionLen, _
sGender, sGenitiveSingular, sGenitivePlural, sFractionName, bFirstUpperCase)


P.S. Ребят, если кто то делал пропись копеек, и может поделится кодом, прошу) :beer:

Назначить на хоткей: модуль SumLitManage, процедура InsertSumDefault

sokol92

Для начала попробуйте так (без надстроек):

' Сумма прописью (для локали по умолчанию ru_RU).
Sub TestNativeNumber2
  Dim oNatNum, v
  Dim aLocale As New com.sun.star.lang.Locale
  oNatNum=CreateUnoService("com.sun.star.i18n.NativeNumberSupplier2")
  Msgbox oNatNum.getNativeNumberStringParams("371,12", aLocale, 12, "capitalize RUB")
End Sub

Владимир.

eeigor

@sokol92, даже видя ответ, невозможно (очень трудно) найти, где это написано:
"capitalize RUB"

Документация оставляет желать лучшего.
Но вам ведь это кто-то подсказал? Или вы способ знаете "эффективного изучения LibreOffice"? :)
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#6
В LO (как и во многих других предметах) лучший (часто и единственный) инструмент познания - грабли. :)

Про параметры для Natnum12 написано (как ни странно  :) ) в документации. Сервис  NativeNumberSupplier2 исследовал самостоятельно. Кстати, специфические для русского языка параметры можно получить так (догадаться невозможно):

oNatNum.getNativeNumberStringParams("help", aLocale, 12, "")

Если есть вероятность, что код Basic будет выполняться в иных локалях, то нужно в примере выше дописать еще строку, определяющую локаль:

aLocale.Language="ru" : aLocale.Country="RU"

В Calc указанный сервис поддерживается непосредственно на уровне числовых форматов ячеек.
Владимир.

eeigor

#7
Да-с, весьма забавная ситуация, если не сказать больше... Я здесь не участвовал, но автор темы и все, кто ему помогал, будут чрезвычайно удивлены. А кто писал расширение по этой задаче, интересно, знал ли об этом?
"Колесо", как оказалось, было уже изобретено...
Ставим лайки

UPD
@sokol92, прошёлся ещё раз по ссылке на документацию 7.1, и всё равно: в чистом виде ответа на мой вопрос нет.

Причём в строке "capitalize RUB" следует в точности соблюсти регистр символов, даже первой буквы "c". А так выглядело бы логичнее: "Capitalize".
Это список параметров, разделенных пробелом. А почему не запятой? Что ещё туда можно передать?

Равно как и нет описания возможности передать параметр "help" (внимание: регистр символов) вместо первого аргумента функции getNativeNumberStringParams():
NumberString   The input string.

Модераторы, вот ещё один приём, требующий помещения в отдельное место (об этом уже писалось).

В отсутствие документации это больше похоже на трюк!
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#8
В описании NativeNumberSupplier2 указано, что сервис родился в LO 6.1 (до этого был только NativeNumberSupplier). Указанные выше расширения старше по возрасту.

Очень хорошо, когда базовые конструкции поглощают ранее созданные расширения, поскольку не хотелось бы обусловливать тиражирование своих разработок какими-то дополнительными требованиями по установке расширений, настройке параметров и пр.

Про возможность подсказки я где-то подсмотрел, и, к величайшему сожалению, потерял ссылку на первоисточник. Пришлось открывать заново.
Владимир.

eeigor

#9
NatNum12

Параметры следующие (кроме дат):
ordinal ordinal-number capitalize upper ordinal title RUB
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Плюс из help'a:
cardinal-feminine: одна, две, три
cardinal-masculine: один, два, три
cardinal-neuter: одно, два, три
ordinal-feminine: первая, вторая, третья
ordinal-masculine: первый, второй, третий
ordinal-neuter: первое, второе, третье
ordinal-number-feminine: 1-я, 2-я, 3-я
ordinal-number-masculine: 1-й, 2-й, 3-й
ordinal-number-neuter: 1-е, 2-е, 3-е
Владимир.

mikekaganski

Функционал NatNum12 реализован через библиотеку Numbertext. Соответственно синтаксис опций определяется её языковыми данными.
С уважением,
Михаил Каганский

eeigor

Спасибо. Очень интересная информация (вся новая для меня).
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Михаил, спасибо за разъяснения!
Владимир.