Jump to content
Fivewin Brasil

Funcao para mostar erros, avisos, informaçoes, ao usuario


marcioe

Recommended Posts

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.

30w5r9z.jpg

*-------------------------------------------------------------------------------
* 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

dzge9x.jpg

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...