Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


 Olá Gilberto!

  Reforço as recomendações do Noelson sobre uma verificação detalhada da
ajuda, em especial das funções de run-time e dos fundamentos da linguagem
Basic.

 Há algum tempo tive uma necessidade parecida e utilizei a mesma solução que
você encontrou. Veja o exemplo do meu código ao final do e-mail. Espero que
seja útil para você.

 Você verá que a função utilizada, em vez de 'Int()', é a 'Val()'. No seu
caso, se você precisar de um SE(), use uma construção If/then/else/endif. Os
conceitos básicos para isso estão na ótima documentação sugerida pelo
Noelson.

Para usar a função do exemplo como uma função do Calc, simplesmente copie o
código para dentro da biblioteca Standard, volte ao Calc e use, em uma
célula qualquer, o exemplo:

=CalculaDV("02113008919705040001")

O resultado deverá ser 89.

 Abraço,
 Gustavo Pacheco.


'--------------- Início cópia --------------------

Function CalculaDV(strNumProc as String) as integer
'
'*****************************************************************************
' Função que calcula o dígito verificador do novo número de processo tipo
CNJ.
' Recebe como parâmetro uma string contendo o número de processo apenas com
' dígitos numéricos (sem pontos, traços ou barras).
'
' Exemplo de chamada:
' CalculaDV("02113008919705040001")
'
' Resulta em: 89
'
' Criada por Gustavo B. Pacheco - gbpacheco@gmail.com .
'
' Modificações:
' sem modificações até o momento.
'
'*****************************************************************************
'
 Dim intR1, intR2, intR3, intDD as integer
 strNNNNN = Left(strNumProc, 7)
 strAAAA = Mid(strNumProc, 10, 4)
 strJ = Mid(strNumProc, 14,1)
 strTR = Mid(strNumProc, 15,2)
 strOOOO = Right(strNumProc, 4)
 numVal = Val(strNNNNN & strAAAA & strJ & strTR & strOOOO & "00")
 intR1 = (Val(strNNNNN) mod 97)
 intR2 = (Val(intR1 & strAAAA & strJ & strTR) mod 97)
 intR3 = (Val(intR2 & strOOOO & "00") mod 97)
 intDD = 98 - intR3
 CalculaDV = intDD
End function

'--------------- fim cópia --------------------




Em 25 de abril de 2011 14:19, Noelson Duarte <noelsond@gmail.com> escreveu:

Olá Gilberto,

A ajuda on-line do LibreOffice contempla a grande maioria das funções do
BASIC, inclusive com exemplos de uso.

Nos links abaixo você encontrará mais informações (em português) sobre
macros, funções do usuário, BASIC e API do LibreOffice.

http://www.broffice.org/proj_macros

http://www.broffice.org/?q=docs_prog

http://www.broffice.org/files/programando_broo.odt

http://www.broffice.org/files/iooobasic_v2.zip

Att.

--
Noelson

Em 25 de abril de 2011 11:01, gilberto@schiavinatto.com <
gilberto@schiavinatto.com> escreveu:

Necessito de mais informações

Não consegui descobrir quais funções (do BrOffice - ex. INT(x) pode)
podem
ser usadas no Basic. Aonde posso descobrir quais são possiveis de uso, e
como usa-las (parametros / modo de uso).

Depois que descobrir como usa-las pode deixar que vou futicar até travar
o
micro.

Só um exemplo do que estou tentando fazer
Esta função ira conferir a digitação do código de produto
Utilizando Digito Virificador Modulo 11
Depois de tentar montar em uma só instrução, descobri que
o máximo de digitos por linha é 512.

Depois de uns cafés, descobri que podia "fatiar" a função principal.

Function DIGI6(a)
DIGI61 = (INT(a/10^5))
DIGI62 = (INT(a/10^4))-(INT(INT(a/10^4)/10))*10
DIGI63 = (INT(a/10^3))-(INT(INT(a/10^3)/10))*10
DIGI64 = (INT(a/100))-(INT(INT(a/100)/10))*10
DIGI65 = (INT(a/10))-(INT(INT(a/10)/10))*10
DIGI66 = (DIGI61*6)+(DIGI62*5)+(DIGI63*4)+(DIGI64*3)+(DIGI65*2)
'DIGI6 = SE(INT(DIGI66/11)+1)*11-DIGI66>9 ValorEntão 0 ValorSenão
(INT(DIGI66/11)+1)*11-DIGI66) End SE
End Function

Não esta completa não sei com usar a condicional "se"
A intenção é, quando for digitado codigo errado,
mostre a mensagem que produto não existe, ou algo parecido.
O uso dela esta condicionado com codigo de 5 digitos e 1 dv  - ex.
29845-0.

Aguardo alguma Luz no tunel
Obrigado
Gilberto Schiavinatto

Ps. Se a maneira de postar não for essa, queiram por gentileza me
instruir....

--
Unsubscribe instructions: E-mail to usuarios+help@pt-br.libreoffice.org
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/pt-br/usuarios/
All messages sent to this list will be publicly archived and cannot be
deleted



--
Unsubscribe instructions: E-mail to usuarios+help@pt-br.libreoffice.org
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/pt-br/usuarios/
All messages sent to this list will be publicly archived and cannot be
deleted



-- 
Unsubscribe instructions: E-mail to usuarios+help@pt-br.libreoffice.org
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/pt-br/usuarios/
All messages sent to this list will be publicly archived and cannot be deleted

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.