marcioe Posted July 16, 2016 Report Share Posted July 16, 2016 Amigos, fiz esta funcao que poderá ser melhorada, mas me atende bem. Caso alguem queira incrementar postem para os amigos. Trata-se de uma função simples de envio de informaçoes aos uaurios. Exemplo de uso Imaginem ao enviar uma Nota Fiscal Temos que ver se o Endereço está Preenchido, se o bairro nao é branco, se tem CPF, se o produto esta com NCM, etc... etc.. Imagina ficar dando MSGSTOP() Em cada um delas. Pensando nisso Fiz esta funcao que voce valida e depois mostra tudo em um Browse ao usuario. Vejam Exemplo de uma Pre Validação de NF. *------------------------------------------------------------------------------- * Data da Criação.: 30-07-2016 * Caida Por.......: Marcio Eduardo (32)99104-0562 * Função que serve para mostrar informaçoes ao usuario (tipo inconsistencia, erro) * Parametros * * v_aRRAY_Inconsistencia = É o array com 08 colunas para as msg * v_TITULO_DIALOG = Titulos da da Dialogo que será Exibida * v_Cabecalho = Passa-se os Cabecalhos Separados do PIPE *------------------------------------------------------------------------------- FUNCTION MOSTRAR_INCONSISTENCIA(v_aRRAY_Inconsistencia,v_TITULO_DIALOG,v_Cabecalho) LOCAL N_ERROS, N_AVISOS, N_INFORMACAO, N_OUTROS, T_TXT_ERROS, T_TXT_AVISOS, T_TXT_INFORMACAO, T_TXT_OUTROS N_ERROS := 0 N_AVISOS := 0 N_INFORMACAO := 0 N_OUTROS := 0 IF EMPTY(v_aRRAY_Inconsistencia) MsgStop('Não Foi Passado as Informações das Inconsistências !'+CHR(13)+ ProcName(),SISTEMA) return .F. ENDIF IF EMPTY(v_TITULO_DIALOG) v_TITULO_DIALOG := SISTEMA ENDIF IF EMPTY(v_Cabecalho) MsgStop('Não Foi Passado o Cabeçalho das Inconsistências !'+CHR(13)+ ProcName(),SISTEMA) return .F. ENDIF a_Cabecalho := hb_atokens(v_Cabecalho,"|") FOR I := 1 TO LEN(a_Cabecalho) v_Cabecalho_01 := alltrim(a_Cabecalho[1]) v_Cabecalho_02 := alltrim(a_Cabecalho[2]) v_Cabecalho_03 := alltrim(a_Cabecalho[3]) v_Cabecalho_04 := alltrim(a_Cabecalho[4]) v_Cabecalho_05 := alltrim(a_Cabecalho[5]) v_Cabecalho_06 := alltrim(a_Cabecalho[6]) v_Cabecalho_07 := alltrim(a_Cabecalho[7]) v_Cabecalho_08 := alltrim(a_Cabecalho[8]) NEXT FOR nTipos := 1 TO LEN(v_aRRAY_Inconsistencia) IF v_aRRAY_Inconsistencia[nTipos,1] $ 'EAI' IF v_aRRAY_Inconsistencia[nTipos,1] = 'E' N_ERROS := N_ERROS + 1 ENDIF IF v_aRRAY_Inconsistencia[nTipos,1] = 'A' N_AVISOS := N_AVISOS + 1 ENDIF IF v_aRRAY_Inconsistencia[nTipos,1] = 'I' N_INFORMACAO := N_INFORMACAO + 1 ENDIF ELSE N_OUTROS := N_OUTROS + 1 ENDIF NEXT T_TXT_ERROS := ALLTRIM(STR(N_ERROS,06,0)) + ' Erro(s)' T_TXT_AVISOS := ALLTRIM(STR(N_AVISOS,06,0)) + ' Alerta(s)' T_TXT_INFORMACAO := ALLTRIM(STR(N_INFORMACAO,06,0)) + ' Informaçoe(s)' T_TXT_OUTROS := ALLTRIM(STR(N_OUTROS,06,0)) + ' Outro(s)' *------------------------------------------------------------------------- Asort( (v_aRRAY_Inconsistencia),,, {|x,y| (x[ 02 ] ) > (y[ 02 ]) } ) *------------------------------------------------------------------------- DEFINE DIALOG oDlg_INCONSISTENCIA RESOURCE "BROWSE_INCONSISTENCIA" TITLE '...:: '+ ALLTRIM(v_TITULO_DIALOG) + ' ::...' Font O_F_DLG oDlg_INCONSISTENCIA:lHelpIcon:=.F. T_TXT_DIALOGO := ' ' + ALLTRIM(v_TITULO_DIALOG) REDEFINE SAY oT_TXT_DIALOGO var T_TXT_DIALOGO ID 4043 OF oDlg_INCONSISTENCIA FONT O_F_GET COLOR CLR_LWHITE,CLR_BFOOT Update *---------------------------------------------------------------------------- oDB_INCONSISTENCIA := TXBrowse():New( oDlg_INCONSISTENCIA ) oDB_INCONSISTENCIA : CreateFromResource( 4049 ) oDB_INCONSISTENCIA:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } } oDB_INCONSISTENCIA: SetArray( (v_aRRAY_Inconsistencia), .t., 1, { 1,2,3,4,5,6,7,8 } ) oDB_INCONSISTENCIA:bClrStd := {|| { COR_LETRAS_GRID, IIF((oDB_INCONSISTENCIA:KeyNo())%2==0, COR_1_bClrStd , COR_2_bClrStd ) } } oDB_INCONSISTENCIA:bClrSelFocus := {|| { M->COR_1_bClrSelFocus, M->COR_2_bClrSelFocus } } oDB_INCONSISTENCIA:bClrRowFocus := {|| { M->COR_1_bClrRowFocus, M->COR_2_bClrRowFocus } } oDB_INCONSISTENCIA:lColDividerComplete := .F. oDB_INCONSISTENCIA:lFooter := .T. oDB_INCONSISTENCIA:lRecordSelector := .T. oDB_INCONSISTENCIA:nHeaderLines := 2.0 oDB_INCONSISTENCIA:nDataLines := 1.5 oDB_INCONSISTENCIA:nColDividerStyle := 4 oDB_INCONSISTENCIA:nRowDividerStyle := 4 oDB_INCONSISTENCIA:nMarqueeStyle := 4 oDB_INCONSISTENCIA:nFooterLines := 1 oDB_INCONSISTENCIA:lAllowColSwapping := .T. // Click no header (.f.)Trava oDB_INCONSISTENCIA:lAllowRowSizing := .T. // Nao move as Linhas (nao sei) oDB_INCONSISTENCIA:l2007 := M->ESTILO_l2007 oDB_INCONSISTENCIA:lAllowRowSizing := .T. oDB_INCONSISTENCIA:nFreeze := 1 // congelar a coluna oDB_INCONSISTENCIA:nStretchCol := 2 oDB_INCONSISTENCIA:nColSel := 2 oDB_INCONSISTENCIA:nDataType := 2 oDB_INCONSISTENCIA:nRowHeight := 35 oDB_INCONSISTENCIA:aCols[02]:SetOrder() *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[01]:nWidth := 035 oDB_INCONSISTENCIA:aCols[01]:cHeader := (v_Cabecalho_01) oDB_INCONSISTENCIA:aCols[01]:nHeadStrAlign := AL_CENTER oDB_INCONSISTENCIA:aCols[01]:nDataStrAlign := AL_RIGHT oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8204" ) ////Erro oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8205" ) ////Alerta oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8206" ) ////Informação oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8207" ) ////Questionemento oDB_INCONSISTENCIA:aCols[01]:bBmpData := 2 oDB_INCONSISTENCIA:aCols[01]:bBmpData := { || iif(len( (v_aRRAY_Inconsistencia))>0, IF((v_aRRAY_Inconsistencia[oDB_INCONSISTENCIA:nArrayAt][01])="E",1,IF((v_aRRAY_Inconsistencia[oDB_INCONSISTENCIA:nArrayAt][01])="A",2,IF((v_aRRAY_Inconsistencia[oDB_INCONSISTENCIA:nArrayAt][01])="I",3, 4 ))),nil) } oDB_INCONSISTENCIA:aCols[01]:bStrData := { || NIL } oDB_INCONSISTENCIA:aCols[01]:cToolTip := {ALLTRIM((v_Cabecalho_01))+ CRTLF +T_TXT_DIALOGO,"Ajuda","", } *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[02]:bstrData := {|| iif(len( (v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,02],nil) } oDB_INCONSISTENCIA:aCols[02]:cHeader := (v_Cabecalho_02) oDB_INCONSISTENCIA:aCols[02]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[02]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[02]:cToolTip := {ALLTRIM((v_Cabecalho_02)),"Ajuda","", } oDB_INCONSISTENCIA:aCols[02]:nFootStrAlign := AL_RIGHT *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[03]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,03],nil) } oDB_INCONSISTENCIA:aCols[03]:cHeader := (v_Cabecalho_03) oDB_INCONSISTENCIA:aCols[03]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[03]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[03]:cToolTip := {ALLTRIM((v_Cabecalho_03)),"Ajuda","", } oDB_INCONSISTENCIA:aCols[03]:nFootStrAlign := AL_RIGHT *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[04]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,04],nil) } oDB_INCONSISTENCIA:aCols[04]:cHeader := (v_Cabecalho_04) oDB_INCONSISTENCIA:aCols[04]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[04]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[04]:cToolTip := {ALLTRIM((v_Cabecalho_04)),"Ajuda","", } *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[05]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,05],nil) } oDB_INCONSISTENCIA:aCols[05]:cHeader := (v_Cabecalho_05) oDB_INCONSISTENCIA:aCols[05]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[05]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[05]:cToolTip := {ALLTRIM((v_Cabecalho_05)),"Ajuda","", } *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[06]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,06],nil) } oDB_INCONSISTENCIA:aCols[06]:cHeader := (v_Cabecalho_06) oDB_INCONSISTENCIA:aCols[06]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[06]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[06]:cToolTip := {ALLTRIM((v_Cabecalho_06)),"Ajuda","", } oDB_INCONSISTENCIA:aCols[06]:nFootStrAlign := AL_RIGHT *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[07]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,07],nil) } oDB_INCONSISTENCIA:aCols[07]:cHeader := (v_Cabecalho_07) oDB_INCONSISTENCIA:aCols[07]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[07]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[07]:cToolTip := {ALLTRIM((v_Cabecalho_07)),"Ajuda","", } *------------------------------------------------------------------------- oDB_INCONSISTENCIA:aCols[08]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,08],nil) } oDB_INCONSISTENCIA:aCols[08]:cHeader := (v_Cabecalho_08) oDB_INCONSISTENCIA:aCols[08]:nDataStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[08]:nHeadStrAlign := AL_LEFT oDB_INCONSISTENCIA:aCols[08]:cToolTip := {ALLTRIM((v_Cabecalho_08)),"Ajuda","", } *------------------------------------------------------------------------- REDEFINE BUTTONBMP oExp_Excel_Inconsistencia ID 4002 OF oDlg_INCONSISTENCIA ACTION ( oDB_INCONSISTENCIA:ToExcel() ) BITMAP (M->BTN_EXPORTA_EXCEL) PROMPT "E&xportar Para Excel" TEXTRIGHT REDEFINE BUTTONBMP oSair_Inconsistencia ID 4003 OF oDlg_INCONSISTENCIA ACTION ( oDlg_INCONSISTENCIA:end() ) BITMAP (M->BTN_SAIR_REGISTRO) PROMPT "&Fechar" TEXTRIGHT *------------------------------------------------------------------------- REDEFINE SAY oT_TXT_ERROS VAR T_TXT_ERROS ID 4006 OF oDlg_INCONSISTENCIA REDEFINE SAY oT_TXT_AVISOS VAR T_TXT_AVISOS ID 4007 OF oDlg_INCONSISTENCIA REDEFINE SAY oT_TXT_INFORMACAO VAR T_TXT_INFORMACAO ID 4010 OF oDlg_INCONSISTENCIA REDEFINE SAY oT_TXT_OUTROS VAR T_TXT_OUTROS ID 4011 OF oDlg_INCONSISTENCIA *------------------------------------------------------------------------- oExp_Excel_Inconsistencia : cToolTip := {"Exportar Para o Excel","Ajuda","", } oSair_Inconsistencia : cToolTip := {"Fechar/Sair","Ajuda","", } *------------------------------------------------------------------------- ACTIVATE DIALOG oDlg_INCONSISTENCIA CENTERED ON INIT (oDB_INCONSISTENCIA:GoTop(),BuildControls( oDlg_INCONSISTENCIA )) RETURN .T. *------------------------------------------------------------------------------- *------------------------------------------------------------------------------- static func BuildControls( oDlg ) local oMenu, oBar MENU oMenu 2007 MENUITEM "&Opções" MENU MENUITEM "&Exportar Para Excel" RESOURCE (M->BTN_EXPORTA_EXCEL) ACTION ( oDB_INCONSISTENCIA:ToExcel() ) MESSAGE "Exportar Dados Para o Excel" SEPARATOR MENUITEM "&Fechar" RESOURCE (M->BTN_SAIR_REGISTRO) ACTION(oDlg:End()) MESSAGE "Fechar Esta Tela" ENDMENU ENDMENU oDlg:SetMenu( oMenu ) *------------------------------------------------------------------------------- * caso queira colocar botoes *------------------------------------------------------------------------------- *DEFINE BUTTONBAR oBar OF oDlg 3D *DEFINE BUTTON OF oBar PROMPT " Info " ACTION MsgAbout() FONT oDlg:oFont NOBORDER *DEFINE BUTTON OF oBar PROMPT " Sair " ACTION oDlg:End() FONT oDlg:oFont NOBORDER DEFINE MESSAGE OF oDlg PROMPT ('Em Caso de Dúvidas Ligar para o Suporte ' + SUPORTE) DEFINE MSGITEM OF oDlg:oMsgBar; BITMAP IF(T_IP_SERVER = "localhost","#8021","FUNCIONA_REDE"); TOOLTIP {"Nome da Estação "+CRLF+ upper(netname()) + CRLF+ + 'Ip Servidor.:'+ TRIM(T_IP_SERVER),"Ajuda","", } return( Nil ) Imagem do Tela no PELLES, basta fazer uma com os mesmos ID, do PRG acima Exemplo de como Usar a função. *--------------------------------------------------------------------------------- * Gravar Cadastro de Produtos *--------------------------------------------------------------------------------- FUNCTION GRAVA_CADASTRO_PRODUTOS() aInconsistencias :={} ERROS_INCONSISTENCIA := 0 T_QUANTIDADE_REG_SQL := 0 *---------------------------------------------------------------------------- IF T_FATOR_MULTIPLICACAO = 0 T_FATOR_MULTIPLICACAO := 1 ENDIF *---------------------------------------------------------------------------- IF EMPTY(T_NOME_PRODUTOS) ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Nome Ou Descrição está Em branco ou Sem Informações',; 'O Campo Nome no Cadastro de Produtos Deverá ser Preenchido',; 'O Sistema Irá Varificar a Existência do Nome, Não Permitindo Repetir',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF T_CODI_GRUPOS_PR == 0 ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Código do Grupo Inválido ou Zerado',; 'Informe o Código do Grupo Válido Maior que Zero',; 'Caso Nao Seja Informado Não Será Possivel Gravar',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF empty(SUBSTR(ALLTRIM(T_COD_ALIQUOTA_PRODUTOS),01,02) ) ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Escolha Uma Alíquota de Saída ICMS',; 'Informe no Campo Aliquota de ICMS de Saida Um Valor Válido',; 'Caso Nao Seja Informado Não Será Possivel Gravar',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF EMPTY(ALLTRIM(T_CODI_TRIBUTARIO)) ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Código Nacionalidade',; 'Informe o Código da Nacionalidade',; 'Caso Nao Seja Informado Não Será Possivel Gravar',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF EMPTY(ALLTRIM(T_CODI_ICMS)) ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Código Tributário Inválido (ICMS)',; 'Informe no Campo Código Tributário (Situação Tributária) Um Valor Válido',; 'Caso Nao Seja Informado Não Será Possivel Gravar',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF val(str(T_VALOR_VENDA,18,2)) < 0 ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Valor de Venda da Tabela 1 Inválido',; 'Informe Um Valor de Venda Válido para a Tabela 1',; 'Sempre Informar um Valor Maior ou Igual a Zero',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF val(str(T_VALOR_VENDA2,18,2)) < 0 ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Valor de Venda da Tabela 1 Inválido',; 'Informe Um Valor de Venda Válido para a Tabela 2',; 'Sempre Informar um Valor Maior ou Igual a Zero',; '.',; '.',; '.'} ) ENDIF IF val(str(T_VALOR_VENDA3,18,2)) < 0 ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Valor de Venda da Tabela 1 Inválido',; 'Informe Um Valor de Venda Válido para a Tabela 3',; 'Sempre Informar um Valor Maior ou Igual a Zero',; '.',; '.',; '.'} ) ENDIF IF val(str(T_VALOR_PROMOCAO,18,2)) < 0 ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Valor de Venda da Promoção Inválido',; 'Informe Um Valor de Venda Válido para a Tabela 3',; 'Sempre Informar um Valor Maior ou Igual a Zero',; '.',; '.',; '.'} ) ENDIF *---------------------------------------------------------------------------- IF T_CLASSIFICACAO_PRODUTO_MATERIA_PRIMA = '09' &&&& SE FOR SERVIÇO IF VAL(STR( (T_ESTOQUE_PRODUTOS + T_SALDO_NF),18,3)) > VAL(STR(0,18,3)) ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'O Item Cadastrado como Sendo Serviço Não deverá Ter Saldo !',; 'O Item Cadastrado Não Poderá Ter Saldo',; 'Sempre Informar Igual a Zero',; '.',; '.',; '.'} ) ENDIF ENDIF *---------------------------------------------------------------------------- FOR nI = 1 to Len( aArray_itens_ordem_producao ) IF T_CODI_PRODUTOS != 0 IF val(aArray_itens_ordem_producao[nI,2]) == T_CODI_PRODUTOS ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'O Produto Não é válido '+ alltrim(alltrim(aArray_itens_ordem_producao[nI,2])) +' => '+STR(T_CODI_PRODUTOS,07,0)+' '+ alltrim(aArray_itens_ordem_producao[nI,3]) +', Não Poderá Compor Ele Mesmo',; 'Voce Informou no Cadastro de Composição o Mesmo Produto',; 'Sempre Informar Produtos Diferentes deste Código '+STR(T_CODI_PRODUTOS,07,0),; '.',; '.',; '.'} ) ENDIF ENDIF NEXT *---------------------------------------------------------------------------- IF T_OPERACAO_PRODUTOS == "I" IF EMPTY(alltrim(T_COD_BARRAS_PRODUTOS)) IF SELECT("produtos") != 0 produtos->(DbCloseArea()) ENDIF cQuery:= 'SELECT * FROM produtos ORDER BY CODPRO DESC ' use sql cQuery alias "produtos" new via 'MYSQL' produtos->( DbGoTop()) T_CODI_PRODUTOS := produtos->CODPRO + 1 ENDIF *------------------------------------------------------------------------- IF SELECT("produtos") != 0 produtos->(DbCloseArea()) ENDIF cQuery:= 'SELECT CODPRO, NOMPRO, C_BARRAS FROM produtos WHERE C_BARRAS = ' + TRANSFORMA_SQL(IF(EMPTY(alltrim(T_COD_BARRAS_PRODUTOS)),STRZERO(T_CODI_PRODUTOS,13,0),T_COD_BARRAS_PRODUTOS),"T",14,0) use sql cQuery alias "produtos" new via 'MYSQL' produtos->( DbGoTop()) IF produtos->CODPRO != 0 ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1 aAdd( aInconsistencias, { 'E',; ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),; 'Código de Barras Já Cadastrado',; 'Cód.: ' + str(produtos->CODPRO,07,0) + ' '+ ALLTRIM(produtos->NOMPRO),; '',; '.',; '.',; '.'} ) ENDIF ENDIF IF T_PESO_PADRAO = 0 T_PESO_PADRAO := 1 ENDIF IF T_OPERACAO_PRODUTOS == "I" IF SELECT("produtos") != 0 produtos->(DbCloseArea()) ENDIF cQuery:= 'SELECT * FROM produtos ORDER BY CODPRO DESC ' use sql cQuery alias "produtos" new via 'MYSQL' produtos->( DbGoTop()) T_CODI_PRODUTOS := produtos->CODPRO + 1 ENDIF IF ERROS_INCONSISTENCIA == 0 * GRAVO O CADASTRO DE PRODUTOS ELSE MOSTRAR_INCONSISTENCIA(aInconsistencias,'Inconsistências No Cadastro de Produtos','Tipo|Num|Descricao|Informação|Complemento|*|*|*') ENDIF Edu and toya 2 Quote Link to comment Share on other sites More sharing options...
fladimir Posted July 18, 2016 Report Share Posted July 18, 2016 A ideia é ótima Marcio, mas não seria melhor já ir informando e o usuário vai corrigindo a medida q vai preenchendo a nota... exemplo escolheu o destinatário faltou o endereço já abre pra alterar e já fica corrigido etc.. faltou NCM já abre pra preencher e já fica corrigido na ficha do produto e vai continuando, ou seja, já vai apresentando os problemas e corrigindo de forma definitiva. Pq desta forma q apresentou ao meu ver o usuário terá q sair e arrumar tudo pra voltar a emissão ou entendi errado? []´s Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 18, 2016 Author Report Share Posted July 18, 2016 Olá a todos, o intuito não é apenas na Validação de Notas Fiscais, Servirá para Validação de Cadastros, etc. Servirá para mostrar ao usuário os erros que ele cometeu ao cadastrar por exemplo, tambem quando se vai Importar Registros, dai valida-se e mostra os erros e avisos. São varias aplicaçoes. Apenas coloquei um pequeno Exemplo Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted July 18, 2016 Report Share Posted July 18, 2016 Muito bom. Embora o fladimir tenha razão uma função dessas ainda é útil. Tiro por mim. Mesmo com todas a validações ainda tem operador que deixa de preencher campos necessários no cadastro do cliente ou do produto. Além disso, não dá para obrigar o preenchimento de tudo pois nem todos os clientes emitem NF-e ou NFC-e, e não necessitam preencher vários campos. Em sistemas flexíveis à várias situações, uma função dessas é uma ótima solução. Vou testar. Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 18, 2016 Author Report Share Posted July 18, 2016 o intuito é esse amigo. ajudar a comunidade. Quote Link to comment Share on other sites More sharing options...
aferra Posted July 18, 2016 Report Share Posted July 18, 2016 eu não concordo do fladimir, embora é problema do cliente, é o nosso sistema que tem que ser eficiente, acho muito valida a função do marcio, obrigado por compartilhar, no meu caso e de alguns que conheço a nota não é feita na hora, ela vem pronta do pedido para ser somente impressa e nesse caso essa função cai muito bem, imagine não preenche, volta, não preenche volta, ahhhh tá por fora, o meu qdo o cliente emite nf o programa faz todas as verificações em todos os cadastro relacionados a nf, senão passa os campos e assim fica para qualquer cliente, irei testar essa função, embora faça tudo em texto e coloco no meu msg padronizado mas desta maneira fica mais "professional" rsrsrsrs mais um vez obrigado marcio Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 18, 2016 Author Report Share Posted July 18, 2016 Sempre que puder e souber passo aos amigos, Usem a Vontade. Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 19, 2016 Author Report Share Posted July 19, 2016 Caso dê alguma Zebra, me chamem, que terei o maior prazer em ajudar a implementar Quote Link to comment Share on other sites More sharing options...
marcioe Posted November 8, 2017 Author Report Share Posted November 8, 2017 Se Alguém mudou essa função, por favor posta ai para todos poderem usar. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.