Página 1 de 1

NCM - produtos monofásicos

Enviado: 17 Abr 2021 07:04
por JUDIVAN CONTABIL

Código: Selecionar todos

#Include "SYSCON.CH"    

#define CRTLF CHR(13)+ CHR(10)       
#define CRTLF CHR(13)+ CHR(10)
#define CLR_BLUEXP nRgb( 225, 245, 255)
#Define CLR_BFOOT  nRGB( 26, 120, 160 )   //--> Azul meio Verde
*-------------------------------------------------------------------------------
Function MONOF_PISCODFINS()
Local oDlpis,oBtn[2] ,oFont[3]
LOCAL cFilter := ' periodo = ' +  SR_cDBValue( TRANSFORM(M->cReferencia,"@R 99/9999") )

LOCAL lMONOF_PIS  := .T.
	  LOCAL cQuery     := "Select COD_NCM FROM NCM WHERE MONOF_PIS = " + SR_cDBValue( lMONOF_PIS  )  	
	  LOCAL aQuery     := {}

	  //-- verifica se as contas estao configurada no plano de contas 
	  IF LEN(ARRAY_SQL(cQuery,aQuery)) == 0 
		  MSGALERT("Tabela NCM não Configurado as Contas que Apuram PIS/COFINS","Alerta")		
		  Return(.F.)
	  ENDIF	

*-------------------------------------------------------------------------------   
oBd_Infc  := ABRIR("INFC",.t.)
(oBd_Infc)->( SR_SETFILTER(cFilter) )	

(oBd_Infc)->(DbGoTop())

oBd_Ncm   := ABRIR("NCM",.t.)
 
 //-- tabela NCM
 	  (oBd_Ncm)->(DBSETORDER(1))
 	  (oBd_Ncm)->( DBGOTOP() )
*---------------------------------------------------------*
WVLPIS_04:=0
WVLPIS_06:=0
WVLPIS_07:=0
WVLCOFINS_04:=0
WVLCOFINS_06:=0
WVLCOFINS_07:=0
WPIS:=0
WCOFINS:=0
WPIS_ZERO:=0
WCOFINS_ZERO:=0
WPIS_ISENTO:=0
WCOFINS_ISENTO:=0

WTOTAL_PIS:=0
WTOTAL_COFINS:=0

 (oBd_Ncm)->( DBGOTOP() )

	  WHILE ! (oBd_Ncm)->( EOF() )

       wCOD_NCM   := (oBd_Ncm)->COD_NCM

 
(oBd_Infc)->( DBGOTOP() )
	 nPos := AScan( aQuery ,{ |x| x[1] = wCOD_NCM } )
	  IF nPos > 0  //-- encontrou a conta no vetor     
		 WPIS=(oBd_Infc)->VLR_ITEM
		 WCOFINS=(oBd_Infc)->VLR_ITEM			
		 
		 WVLPIS_04=WVLPIS_04+WPIS 
		 WVLCOFINS_04=WVLCOFINS_04+WCOFINS
		 
  ENDIF
             * (oBd_Infc)->( DBSKIP() )

          WTOTAL_PIS=WVLPIS_04+WVLPIS_06+	WVLPIS_07
			 WTOTAL_COFINS=WVLCOFINS_04+WVLCOFINS_06+WVLCOFINS_07	
(oBd_Ncm)->( DBSKIP() )

Enddo
 
      M_Calcpiscofins()

Return Nil
*-------------------------------------------------------------------------------
Static Function M_Calcpiscofins()
Local oDlpis,oBtn[2] ,oFont[4]
*-------------------------------------------------------------------------------   

   DEFINE FONT	oFont[1] NAME "VERDANA"  SIZE 0,-09
	DEFINE FONT	oFont[2] NAME "VERDANA"  SIZE 0,-11 BOLD
   DEFINE FONT	oFont[3] NAME "VERDANA"  SIZE 0,-13 BOLD
	  
	DEFINE DIALOG oDlpis RESOURCE "RELMONOF_PIS" FONT oFont[1]
   oDlpis:lHelpIcon:=.F.
   REDEFINE SAY                                                             ID 051 OF oDlpis FONT oFont[3] COLOR CLR_WHITE,CLR_BFOOT    
   REDEFINE SAY                                                             ID 4006 OF oDlpis FONT oFont[3] COLOR CLR_WHITE,CLR_BFOOT    
           
  
  	REDEFINE SAY PROMPT TransForm(WVLPIS_04,'@E 999,999,999.99')            ID 101 OF oDlpis FONT oFont[2] Update 
	REDEFINE SAY PROMPT TransForm(WVLCOFINS_04,'@E 999,999,999.99')         ID 102 OF oDlpis FONT oFont[2] Update 		
  * REDEFINE SAY PROMPT TransForm(WVLPIS_06,'@E 999,999,999.99')            ID 103 OF oDlpis FONT oFont[2] Update 
	*REDEFINE SAY PROMPT TransForm(WVLCOFINS_06,'@E 999,999,999.99')         ID 104 OF oDlpis FONT oFont[2] Update 		
   *REDEFINE SAY PROMPT TransForm(WVLPIS_07,'@E 999,999,999.99')            ID 105 OF oDlpis FONT oFont[2] Update 
	*REDEFINE SAY PROMPT TransForm(WVLCOFINS_07,'@E 999,999,999.99')         ID 106 OF oDlpis FONT oFont[2] Update 		
   
   *REDEFINE SAY PROMPT TransForm(WTOTAL_PIS,'@E 999,999,999.99')            ID 107 OF oDlpis FONT oFont[2] Update 
	*REDEFINE SAY PROMPT TransForm(WTOTAL_COFINS,'@E 999,999,999.99')         ID 108 OF oDlpis FONT oFont[2] Update 		
   
	                                                                   
   REDEFINE BUTTONBMP oBtn[1] ID 1401 OF oDlpis BITMAP "BTN_SAIR" CANCEL;
     ACTION oDlpis:End() UPDATE TEXTRIGHT
     oBtn[1]:cTooltip:="Sair para menu Principal"


   ACTIVATE DIALOG oDlpis CENTERED 
   
  * aEval( oFont, {|o| o:End()})
   DbCloseAll()
   
Return Nil
gostaria de saber o que está errado neste código fonte, para vim só os valores monofásico de PIS e COFINS

NCM - produtos monofásicos

Enviado: 17 Abr 2021 11:11
por JoséQuintas
O que menos tem na rotina é comando SQL.

Coisa que não dá pra saber:

Código: Selecionar todos

LOCAL cFilter := ' periodo = ' +  SR_cDBValue( TRANSFORM(M->cReferencia,"@R 99/9999") )
Existe cReferencia?
Qual o conteúdo?
SR_cDBValue deve ser pra string, a julgar pelo cDBValue, mas não dá pra saber, e também não dá pra saber o conteúdo de PERIODO

NCM - produtos monofásicos

Enviado: 17 Abr 2021 13:51
por JUDIVAN CONTABIL
o conteúdo de cReferencia é o período, ´para selecionar o valor do PIS e COFINS dentro da tabela INFC, por período.

NCM - produtos monofásicos

Enviado: 17 Abr 2021 13:52
por JoséQuintas
Tem um erro meio básico:
Está zerando as variáveis antes de buscar no banco de dados, FORA DO DO WHILE.
Isso vai causar mistura de informações
Se não encontrar o NCM, vai usar os valores do anterior.

NCM - produtos monofásicos

Enviado: 17 Abr 2021 13:56
por JoséQuintas
Depois... poderia alterar.
Ao invés de SELECT ... MONOF_PIS = xxx

SELECT ... MONOF_PIS = xxx AND COD_NCM IN ( lista de NCM )

Isso vai trazer só o que interessa, economizando tempo na transferência de informação.

Nota: conforme se esse banco de dados aceita IN ( lista )

NCM - produtos monofásicos

Enviado: 17 Abr 2021 14:21
por JoséQuintas
ou isto, ao invés de mexer com as variáveis:

Código: Selecionar todos

   WHILE ! (oBd_Ncm)->( Eof() )

      wCOD_NCM   := (oBd_Ncm)->COD_NCM

      (oBd_Infc)->( dbGoTop() )
      nPos := AScan( aQuery ,{ |x| x[1] = wCOD_NCM } )
      IF nPos > 0  //-- encontrou a conta no vetor
         WPIS=(oBd_Infc)->VLR_ITEM
         WCOFINS=(oBd_Infc)->VLR_ITEM

         WVLPIS_04=WVLPIS_04+WPIS
         WVLCOFINS_04=WVLCOFINS_04+WCOFINS

      * (oBd_Infc)->( dbSkip() )

         WTOTAL_PIS=WVLPIS_04+WVLPIS_06+   WVLPIS_07    // <<========
         WTOTAL_COFINS=WVLCOFINS_04+WVLCOFINS_06+WVLCOFINS_07  // <<======
      ENDIF
      (oBd_Ncm)->( dbSkip() )

   ENDDO

   M_Calcpiscofins()
E fica confuso de onde vém, ou pra que servem, WVLPIS_06 e WVLPIS_07 e WVLCOFINS_06 e WVLCOFINS_07

NCM - produtos monofásicos

Enviado: 17 Abr 2021 14:34
por JoséQuintas
Pra se interessar por -w3 -es2....

Código: Selecionar todos

FUNCTION MONOF_PISCODFINS()

   LOCAL cFilter := ' periodo = ' +  SR_cDBValue( Transform(M->cReferencia,"@R 99/9999") )
   LOCAL WTOTAL_PIS, WVLPIS_07, WVLCOFINS_04, WVLCOFINS_07, WCOFINS, WVLPIS_04
   LOCAL WPIS, WVLPIS_06, WVLCOFINS_06, wTOTAL_COFINS, nPos, WPIS_ZERO, WCOFINS_ZERO
   LOCAL WPIS_ISENTO, WCOFINS_ISENTO, OBD_INFC, OBD_NCM, WCOD_NCM

   LOCAL lMONOF_PIS  := .T.
   LOCAL cQuery     := "Select COD_NCM FROM NCM WHERE MONOF_PIS = " + SR_cDBValue( lMONOF_PIS  )
   LOCAL aQuery     := {}
d:\temp>hbmk2 test2 -w3 -es2
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (4edd687) (2021-03-07 23:56)
Copyright (c) 1999-2021, https://github.com/JoseQuintas/harbour_34/
Compiling 'test2.prg'...

test2.prg:76: warning W0032 Variable 'WPIS' is assigned but not used in function '39:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WCOFINS' is assigned but not used in function '40:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WPIS_ZERO' is assigned bt not used in function '41:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WCOFINS_ZERO' is assigned but not used in function '42:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WPIS_ISENTO' is assigned but not used in function '43:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WCOFINS_ISENTO' is assigned but not used in function '44:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WTOTAL_PIS' is assigned but not used in function '46:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WTOTAL_COFINS' is assigned but not used in function '47:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WTOTAL_PIS' is assigned but not used in function '66:MONOF_PISCODFINS'

test2.prg:76: warning W0032 Variable 'WTOTAL_COFINS' is assigned but not used in function '67:MONOF_PISCODFINS'
Compilando com -w3 -es2 está mostrando aonde atribui valor à toa.
Acabaria resolvendo vários problemas sem nem precisar perguntar.

E tem este também:

Código: Selecionar todos

#define CRTLF Chr(13)+ Chr(10)
#define CRTLF Chr(13)+ Chr(10)
test2.prg:3: warning W0002 Redefinition or duplicate definition of #define CRTLF

NCM - produtos monofásicos

Enviado: 17 Abr 2021 16:37
por JoséQuintas
JoséQuintas escreveu:Compilando com -w3 -es2 está mostrando aonde atribui valor à toa.
Acabaria resolvendo vários problemas sem nem precisar perguntar.
NÃO é reclamando sobre perguntas.

O comentário foi pra mostrar como vale a pena usar -w3 -es2.
E o exemplo é interessante pra isso, porque mostra uma situação onde faz diferença.

NCM - produtos monofásicos

Enviado: 17 Abr 2021 18:18
por JoséQuintas
JUDIVAN CONTABIL escreveu:gostaria de saber o que está errado neste código fonte, para vim só os valores monofásico de PIS e COFINS
Mas a rotina só calcula o valor monofásico, a quais valores está se referindo.

NCM - produtos monofásicos

Enviado: 17 Abr 2021 21:40
por JUDIVAN CONTABIL
A rotina é para pesquisar na tabela NCM e selecionar o código marcado e o com o código selecionado pegar o valor na tabela INFC o valor do PIS e COFINS referente aos códigos selecionados na tabela NCM.

NCM - produtos monofásicos

Enviado: 17 Abr 2021 22:17
por JoséQuintas
Ok, me confundi porque num ponto pesquisa apenas aonde é monofásico, mas não tem a ver com o restante.

No erro que mencionei, acabava usando os valores do último encontrado na soma, o que não explica os sem cálculo.

À primeira vista, não vai calcular se não existir o NCM na base.

Confirme se os campos tem o mesmo tamanho, ou se são numéricos, ou altere como falei pra buscar a lista dos NCMs necessários, e verifica o tamanho desse retorno.
Com certeza pode ser menor do que a lista de produtos, já que pode ter NCM repetido, o que causaria um retorno menor que a quantidade.

Também pode colocar aí pra calcular quantos encontrados e quantos não encontrados, deve ajudar.