Especificação do Uso da Soma1 para Pedido de Venda e Documentos de Saída usados no Módulo Faturamento
Produto: | Microsiga Protheus® |
Ambiente: | Faturamento (SIGAFAT) |
Ocorrência: | Exemplificação do Uso da Função Soma1 e Exemplo de Funções Auxiliares |
Passo a passo: | A função Soma1() é comumente utilizada nas rotinas do modulo Faturamento, como por exemplo no controle de numeração dos item de um pedido de Venda ou de um Documento de Saída. Possuindo a documentação própria: E a documentação a respeito de sua limitação: Visando um melhor entendimento de seu funcionamento trouxemos o exemplo abaixo de como o incremento de valor nesta é feito, usando como base o tamanho de dois caracteres (mesmo tamanho usado nos itens do pedido de venda e no documento de saída). Exemplo: Soma1 User Function Exemplo() Local cValor := "00" Local nX := 0 Local nY := 0 Local cMessage := "" Local aValores := {} For nX := 1 To 150 cValor := Soma1(cValor) aadd(aValores, {nX, cValor}) Next nX For nY := 1 To 30 cMessage += "|" + AllTrim(Str(aValores[nY][1])) + " --> " + aValores[nY][2] + "| " cMessage += "|" + AllTrim(Str(aValores[nY+30][1])) + " --> " + aValores[nY+30][2] + "| " cMessage += "|" + AllTrim(Str(aValores[nY+60][1])) + " --> " + aValores[nY+60][2] + "| " cMessage += "|" + AllTrim(Str(aValores[nY+90][1])) + " --> " + aValores[nY+90][2] + "| " cMessage += "|" + AllTrim(Str(aValores[nY+120][1])) + " --> " + aValores[nY+120][2] + "| " cMessage += CRLF Next nY Return MsgInfo( cMessage, "Soma1 - Exemplo" ) Veja que o resultado apresenta um valor alfanumérico para as numerações que superam 99, isso ocorre pois a variável cValor é um caracter com tamanho 2. |
Pode lhe interessar: | Por vezes há a necessidade de consultar a numeração de um item do pedido ou da nota conforme mencionamos, para tal segue exemplo de uma função na qual ao receber o valor do item (em formato caracter) faz a devolução do numero correspondente a esta expressão alfanumérica. Retorna Valor do Soma1 User Function RetVlSoma1(cValor) Local aArea := GetArea() Local nValor := 0 Local nAtual := 0 Local nPosIni := 0 Local nValAux := 0 Local lSoNumero := .T. //Indica se o cValor é composto apenas de números Local cAscII := "" Local cCaract := "" Local cZeros := "" Local nTamValor := 0 Default cValor := "" cValor := Upper(cValor) // Obs: Se atentar se o uso da Soma1 esta utilizando o terceiro parâmetro (lSomaLow) nTamValor := Len(cValor) //Carrega o tamanho da expressão //Percorre os caracteres do cValor até localizar o primeiro caractere For nAtual := 1 To nTamValor cCaract := SubStr(cValor, nAtual, 1) //Se tiver alguma letra If cCaract $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" If nPosIni == 0 nPosIni := nAtual EndIf lSoNumero := .F. Exit Else If nAtual == nTamValor .And. lSoNumero //Se tiver somente numero, converte com Val nValor := Val(cValor) EndIf EndIf Next If !lSoNumero //Percorre os valores For nAtual := 1 To nTamValor cCaract := SubStr(cValor, nAtual, 1) cZeros := Replicate("0", nTamValor-nAtual) //Se tiver alguma letra no numero If cCaract $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" cAscII := cValToChar(Asc(cCaract) - 64 + 9) //Se for a partir da segunda posição e não for a última If nAtual > nPosIni .And. nAtual != nTamValor nValAux := Val(cAscII + cZeros) + Iif(nAtual != nTamValor, 26 * (Asc(cCaract) - 64), 0) nValAux *= Val(cAscII) nValAux += (26 + Val(cAscII)) nValor += nValAux Else nValor += Val(cAscII + cZeros) + Iif(nAtual != nTamValor, 26 * (Asc(cCaract) - 64), 0) EndIf //Se for somente números Else //Se for a partir da segunda posição e não for a última If nAtual > nPosIni .And. nAtual != nTamValor nValor += Val(cCaract + cZeros) + (36 * 26) + (26*Val(cCaract)) Else nValor += Val(cCaract + cZeros) EndIf EndIf Next EndIf RestArea(aArea) Return nValor Importante! Os exemplos contidos nesta documentação são construídos via User Function, logo se tratam de customizações. Sua utilização/aplicação é opcional, assim como a possibilidade de alteração do comportamento desenhado nestes exemplos. Portanto qualquer alteração e manutenção destes exemplos em seu ambiente são de responsabilidade própria de quem fez sua aplicação. |