Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

4 Декабрь 2021, 07:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: сумма прописью с выделением ндс  (Прочитано 13850 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Стартовое сообщение: 9 Октябрь 2012, 23:09 »

Всех приветствую!
Существует потребность дублировать числовое значение прописью, причем автоматически необходимо выделять НДС (18%) и его также записывать цифрой и дублировать текстом.
т.е. что-то типа: 1256,45 (Одна тысяча двести пятьдесят шесть) рублей 45 копеек, в том числе НДС 18% 191,66 (Сто девяносто один) рубль 66 копеек.
Важно, чтобы при сохранении в форматы MS Office эти данные не слетали (т.е. нужна независимость от ПО стороннего компа)
В MS Word для этого существует плагин untaco-nds (http://orlovs.pp.ru/soft.php#sftund) и нек-рые подобные...
В ООО я новичек, и ничего подобного найти не смог(
Буду признателен, если подскажете решения)

Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 10 Октябрь 2012, 14:09 »

Боюсь, Pet900, что в такой постановке задача решения не имеет.
Для книг Calc еще можно было бы попытаться обойтись одними формулами на скрытом листе и это сработало бы при переходе к майкрософтовским форматам хранения. А для Writer/Word прямого решения просто нет. Преобразование в сумму прописью еще можно сделать средствами, скажем, cyrtools1.3, но дополнительный функционал, который мои однофамильцы вставили в Untaco-NDS (обновление текстовок при изменении сумм) реализовать крайне сложно. Можно, но сложно. И даже то, что "код программы открыт для изучения", мало поможет в адаптации кода к ООо-LiO - слишком разные бэйсики используются в этих офисах.
То есть, или снимай ограничение "чтобы при сохранении в форматы MS Office эти данные не слетали", или продолжай пользоваться одним только Word'ом с Untaco-NDS
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #2: 10 Октябрь 2012, 14:12 »

Обновление при изменении не нужно)
Достаточно, чтобы просто сохранялись буквенно-цифровые данные, полученные в ООО
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 10 Октябрь 2012, 14:40 »

А, тогда, действительно, одного cyrtools1.3 будет достаточно
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #4: 10 Октябрь 2012, 14:54 »

Так ведь он не выделяет ндс, да к тому же, нужно число дублировать, чтобы он мог заменить второе на текст. Или я чего-то недопонимаю?)
Спсб
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 10 Октябрь 2012, 15:04 »

 Смеющийся
Не "недопонимаешь", а "не дописываешь"... Я когда рекомендовал cyrtools, имел в виду, что макросы из SumLiterally могут стать основой для маленького дополнительного макроса, который сам будет копировать из текста документа текущее число, вычислять НДС, формировать с помощью, скажем,  n2s_ru_RUR нужную строку и вставлять ее обратно в текст.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #6: 10 Октябрь 2012, 15:09 »

Я в макросах не силен (честно - только слышал о них)). Буду признателен за ссылки - где почитать о конкретных вещах)
Спсб
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #7: 10 Октябрь 2012, 15:29 »

Уверяю тебя, для этой задачи особых знаний не потребуется.
Просто открой в редакторе макросов (Alt+F11) библиотеку CyrillicTools, модуль SumLitManage. Найди процедуру insertSumWriter.
Видишь? Это всего-то 20 строк кода. Что они делают? Из текущего документа берутся все выделенные фрагменты (их же может быть больше одного, если с зажатым Ctrl выделять), в цикле перебираются. Из каждого выделения выдергивается строка текста, запятая заменяется на точку (чтобы не сбивать с толку функцию Val(), она с точкой работает), пытается получить число из этой строки и затолкать его в переменную dInValue. Вот в этом месте тебе нужно будет дописать вычисление НДС.
Дальше в переменную sOutText запихивается результат функции getSumLiterally от значения dInValue. А тебе нужно будет сцепить результат двух таких функций - одной точно такой же как и была, а второй - от вычисленного НДС. Ну, еще и дописать первоначальный числовой вариант суммы (она в LTrim (oSelections (i).getString())) и числовой вариант НДС (его получишь функцией FORMAT - в Справке подробно расписана)

А последний оператор заменяет текст выделения на получившуюся строку.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #8: 10 Октябрь 2012, 15:50 »

Спсб за подробные инструкции - ушел осваивать)
Записан
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #9: 25 Февраль 2013, 21:34 »

И снова здравствуйте!)
без малого пол-года не принесли желаемого рез-та(( Я так и не разобрался в вопросе - мои знания в этой области даже не позволяют понять, с какой стороны зайти))
В итоге вынужден просить уважаемое сообщество написать/адаптировать макрос из cyr tools, к-рый бы решал выше описанные задачи. По воз-ти, он должен не заменять имеющийся в cyr tools макрос, а быть доп. командой в меню или кнопкой на панели.
Заранее спсб
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #10: 26 Февраль 2013, 09:58 »

Да нздорв!
Напомни, плиз, как ты формулируешь окончательную задачу? А то ведь за полгода и новое видение проблемы могло появиться...
Речь идет только о текстовых документах? Сумму, которую нужно расписать будешь выделять перед запуском макроса? В каком формате расписывать и какую ставку налога использовать?

Код:
Sub insertSumNDSWriter (Optional oDocument As Object)
Const NDS = 0.18
Dim dInValue As Double
Dim dInNDSValue As Double
Dim sOutText As String
Dim oSelections As Object
Dim i As Integer
Dim sTestString As String
If IsMissing(oDocument) Then oDocument = ThisComponent
GlobalScope.BasicLibraries.LoadLibrary("CyrillicTools")
oSelections = oDocument.getCurrentSelection()
For i = 0 To oSelections.getCount() - 1
sTestString = LTrim (oSelections (i).getString())
If sTestString <> "" Then sTestString = join (split (sTestString, ","), ".")
dInValue = Val (sTestString)
If dInValue <> 0 Then
dInNDSValue = dInValue - dInValue/(1+NDS)
sOutText = Trim (oSelections (i).getString()) + " (" _
+ getSumLiterally (dInValue,"ru", "рубль", 2, _
"Masculine", "рубля", "рублей", "коп.", True) _
+ "), в том числе НДС " + Format(NDS,"%") + " " + Format(dInNDSValue,"Fixed") _
+ " (" + getSumLiterally (dInNDSValue,"ru", "рубль", 2, _
"Masculine", "рубля", "рублей", "коп.", True) _
+ ")"
oSelections (i).SetString (sOutText)
End If
Next i
End Sub
« Последнее редактирование: 26 Февраль 2013, 11:22 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #11: 27 Февраль 2013, 21:31 »

О, гран мерси!)
Отлично работает - прям как и задумывалось!)
Пока столкнулся только с одной проблемой - никак не могу понять, как вытащить кнопку в панель, к-рая бы вызывала данный макрос.
Я пока скопировал код в Мои макросы/Standart/Module1 и сохранил, потом нажимаю "назначить", создаю новое меню, добавляю кнопку, но когда нажимаю на нее, получаю вот такое окно
Че я не так делаю?)
« Последнее редактирование: 27 Февраль 2013, 22:37 от Pet900 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #12: 28 Февраль 2013, 10:40 »

А, ты в этом смысле... Дело в том, что при вызове макроса из пункта меню или с панели инструментов нельзя передавать параметры. А вот если макрос вешаешь на кнопку формы, то имеешь право указать параметр oEvent, который расскажет макросу кто его вызвал...
Поэтому просто допиши туда же, в Мои макросы/Standart/Module1 такую процедуру:
Код:
Sub getNDS()
  insertSumNDSWriter(ThisComponent)
End Sub
и назначай на пункт меню уже её вызов...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Pet900
Участник
**
Offline Offline

Сообщений: 27


« Ответ #13: 28 Февраль 2013, 21:07 »

и назначай на пункт меню уже её вызов...
Как часы!))
Спсб!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!