No vídeo de hoje, vamos demonstrar em como buscar a alíquota de um estado do parâmetro MV_ESTICM.
A dúvida de hoje, nos perguntaram, como buscar o valor da alíquota de um estado do parâmetro MV_ESTICM, já que ele não possui separadores (como ponto e vírgula, pipe, entre outros).
Pensando nisso, montamos esse exemplo, onde vamos demonstrar em como encontrar a posição que esta o estado e pegar o valor em seguida, até a próxima letra.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} zVid0118 Demonstração de como buscar alíquotas de estados no parâmetro MV_ESTICM @type user function @author Atilio @since 29/01/2024 /*/ User Function zVid0118() Local aArea := FWGetArea() Local cEstado := Upper(Alltrim(FWInputBox("Digite a sigla do estado"))) Local nValor := 0 Local cTexto := "" //Se tiver estado preenchido e for dois caracteres If ! Empty(cEstado) .And. Len(cEstado) == 2 //Busca a alíquota nValor := u_zGetICMS(cEstado) //Mostra o resultado em uma mensagem cTexto := FormatStr("Para o estado %c a alíquota é de %n", {cEstado, nValor}) FWAlertInfo(cTexto, "Teste Alíquota") EndIf FWRestArea(aArea) Return /*/{Protheus.doc} zGetICMS Função que retorna a alíquota do estado @type user function @author Atilio @since 29/01/2024 @param cEstado, Caractere, Sigla do Estado a ser procurada no parâmetro MV_ESTICM @return nValor, Numérico, Valor da alíquota @example nValor := u_zGetICMS("SP") /*/ User Function zGetICMS(cEstado) Local aArea := FWGetArea() Local cParam := Alltrim(GetMV("MV_ESTICM")) Local nPosIni := 0 Local nPosFim := 0 Local nValor := 0 //Se o estado procurado esta no parâmetro If cEstado $ cParam //Pega a posição e inicial e + 2 caracteres devido ao tamanho da sigla nPosIni := At(cEstado, cParam) + 2 //Percorre o restante do parâmetro For nPosFim := nPosIni To Len(cParam) //Se for caractere, sai do laço para pegar só os numéricos If IsAlpha(SubStr(cParam, nPosFim, 1)) nPosFim-- Exit EndIf Next //Pega o Valor nQuantidade := (nPosFim-nPosIni) + 1 nValor := Val(SubStr(cParam, nPosIni, nQuantidade)) EndIf FWRestArea(aArea) Return nValor
Bom pessoal, por hoje é só.
Abraços e até a próxima.