Вывод в отчете числового значения в виде текста

Автор Master, 20 октября 2022, 19:14

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

Master

Цитата: sokol92 от 21 октября 2022, 20:58
Цитата: Master от 21 октября 2022, 20:36это была шутка такая?
Шутка - использовать OpenOffice в наше время.  :)
Срочно устанавливайте LibreOffice.

А я уж подумал, что вы разбираетесь. Разочарован  :roll:

Master

Цитата: economist от 21 октября 2022, 14:50Для старых LO или если хочется кастомизации - есть расширение Cyrillic Tools с готовыми функциями на Basic. Чтобы вызывать функцию из библиотеки нужно ее загрузить, а затем правильно вызвать: либа.модуль.функция или либа.функция Примеры загрузки есть на форуме (искать по строке Tools)

а можно немного подробностей как правильно загрузить и вызвать функцию. у меня вроде получилось загрузить модуль с необходимой функцией и она даже в "calc" работает, а вот вызвать её в отчёт не получается

economist

Цитата: Master от 22 октября 2022, 15:40а вот вызвать её в отчёт не получается

Люди которые пытаются вам помочь не просто разбираются, они хорошо знают сколько граблей в старой ветке офиса. Вам стоит точнее определиться с терминами и приготовиться к "борьбе":

В Basic есть возможность создавать UDF-функции. Ф-ии из Cyrillic Tools - именно такие.

В Calc эти UDF, при соблюдении некоторых условий (имя, местонахождение), - могут стать Функциями ячеек листа, т.е. автоматически перевычисляться при изменении аргументов/ячеек (парадигма реактивного программирования).

Обычно в Base создают Отчеты с помощью одного из 3-х построителей (1 встроен, 2 - расширения), а все расчеты делают в SQL-запросах. Макросы при этом задействуют редко. Отчеты в Base - это текстовые документы Writer, генерируемые налету. Поэтому их возможности сильно ограничены.

В них можно (макросом) вставить авто-вычисляемые "текстовые функции", но они не могут быть выражены в UDF напрямую.

Вместо текстовых формул можно в документах Writer использовать числовые Поля с форматированием [NatNum12]0. Или используйте результат UDF из Cyrillic Tools. Выводить их в текст отчета можно по-разному:
- как обычный текст - макросом в курсор (ч/з UDF Cyrillic Tools)
- как числовое поле с форматом [NatNum12]0
- как текстовое поле (ч/з UDF Cyrillic Tools)
- как текстовое поле БД, сформированное в SQL с нужным форматом (к числовым полям БД формат [NatNum12]0 скорее всего не сработает)

Не исключено что вам нужен "отчет" не типа "Текст с таблицами" (Writer), а просто таблицы (под это лучше подойдет Calc). Выбор типа файла (ТекстODT/ТаблицаODS) - ответственное решение.

Выбирать оптимальный путь стоит после изучения всех. А в случае с сильно отставшим OpenOffice - проверить самому придется работоспособность всех способов. Я бы в подобной ситуации делал на чистом SQL (подзапросом) или UDF на Python. Примеры возврата строк из UDF Python есть на Форуме, искать по слову invoke. Установка библиотек - есть на Форуме в ветке про библиотеку Pandas.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Master

#18
а не подскажите как в отчёт вызвать результат UDF из Cyrillic Tools? похоже именно в этом моя трудность

economist

В отчете Base (объект Writer) - вызвать UDF нельзя.
Но можно вызывать UDF в Basic, а в объект Writer - вставить полученную строку макросом (в текстовый курсор, в поле, или присвоить значению поля-переменной Writer).     
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Master

#20
Цитата: economist от 23 октября 2022, 17:46В отчете Base (объект Writer) - вызвать UDF нельзя.
Но можно вызывать UDF в Basic, а в объект Writer - вставить полученную строку макросом (в текстовый курсор, в поле, или присвоить значению поля-переменной Writer).     

Большое спасибо, теперь я понял в какую сторону копать.

economist

Самые легкие пути, кмк, такие:

В LibreOffice 7.3-7.4 сумма прописью в Отчете Base делается действительно просто:
- создаем Отчет любым способом (мастером или в режиме дизайна)
- открываем его на правку. В секции Данные выделяем интересующее поле (начинается с =) и задаем формат вида [NatNum12 RUB]0,00
- т.к. числительные на русском м.б. очень длинными (а сами числа м.б. большими) - стоит высоту поля увеличить по вертикали, а шрифт - уменьшить до разумной величины. Иначе в отчете можно увидеть часть текста и символ переполнения ячейки (красный треугольник) - пользователь может не понять что делать дальше с обрезанным текстом.

Для OpenOffice - придется использовать UDF из Cyrillic Tools. Обойтись без макросов можно, если не использовать построители Отчетов, а сделать свой отчет в Calc. Для этого сначала создаем в Base SQL-запрос, формирующий все что нам надо в одну таблицу любой структуры (можно просто SELECT ... UNION SELECT ...). Затем рисуем/открываем форму отчета в Calc, жмем Ctrl+Shift+F4 (в OO - Ctrl+F4) и перетаскиваем всю таблицу прямо в книгу Calc. Получившиеся ячейки в книге - самообновляемые при открытии ODS-файла. Но т.к. OpenOffice - "стар" в прямом и переносном смысле, стоит проверить авто-обновление диапазона БД. Нужно сначала изменить данные в таблицах БД, а затем открыть Calc, согласиться с обновлением внешних данных  и убедиться что данные "отчета" тоже обновились. Саму сумму прописью - получаем готовой UDF, просто сославшись на ячейку с числом.

Если же хочется отчет в виде документа Writer, то поля БД, которые в нем появятся после перетаскивания по Ctrl+F4 - несамообновляемые, и связаны они с конкретной одной записью таблицы. Обновить, "сдвинуть" запись можно, задействовав механизм Слияния, или макросом. Или нажать Ctrl+F4, выделить нужную строку и нажать кнопку Данные - в Поля. Тоже вполне работает без к-либо макросов.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...