/* FUNCTION RELENT * Relatorio de entradas por nota fiscal eletronica - SPED * Data 22/03/2014 * Rubens */ FUNCTION RELSPED() LOCAL GetList := {} LOCAL nTam := 80 LOCAL cTela := SaveScreen() LOCAL cTIPO_PRN := "I" LOCAL cCor := SetColor() LOCAL nCursor := SetCursor() nPAG := 0 IF !ABREARQ(, { 'PRO', 'FORN', 'UN', 'CFOP', 'ICOM', 'COM', 'CONT', 'NF', 'INF', 'CLI', 'NFC', 'INFC', 'VEN', 'ADMC','CTE','TRA' } ) BEEP() MENSAGEMR( "Nao consegui abrir os arquivos, abortando !" ) RETURN NIL ENDIF WHILE( .T. ) SetCursor( 1 ) RestScreen( ,,,, CTELA ) JANELA( 06, 10, 12, 70, "PARAMETROS PARA EMISSAO DO SPED" ) dDTINI := DATASIS - 30 dDTFIM := DATASIS COR( "GET'S" ) @ 08, 12 SAY "DATA INICIAL:" GET dDTINI @ 10, 12 SAY "DATA FINAL..:" GET dDTFIM VALID dDTFIM >= dDTINI READ IF ESC() EXIT ENDIF IF PERGUNTA( "CONFIRMA A EMISSAO DO SPED ?" ) == "N" .OR. ESC() LOOP ENDIF // VARIAVEIS DE CONTAGEM DE LINHAS DOS REGISTROS R999 := 0 R000 := 0 R001 := 0 R005 := 0 R100 := 0 R150 := 0 R190 := 0 R200 := 0 R400 := 0 R990 := 0 C001 := 0 C100 := 0 C170 := 0 C190 := 0 // OK C990 := 0 D001 := 0 D100 := 0 D190 := 0 D990 := 0 E001 := 0 E990 := 0 G001 := 0 G990 := 0 H001 := 0 H990 := 0 H005 := 0 H010 := 0 H001 := 0 R1001 := 0 R1990 := 0 R9900 := 0 R9001 := 0 R9990 := 0 R9999 := 0 aR0400 := {} // vetor do r400 vai conter COD_NAT E DESCR_NAT aPROD := {} // vetor com o código dos produtos participantes aUND := {} // vetor com a unidade do produto nTOTNF := 0.00 nTOTNFC := 0.00 nTOTESTO := 0.00 // TOTAL DO ESTOQUE PARA O INVENTARIO nCCREDITO := 0.00 nCDEBITO := 0.00 cCODADMCARTAO := '' lVENDACARTAO:= VENDACARTAO() cFILE := 'SPED\SPED' + SUBST( DToC( dDTINI ), 4, 2 ) + SUBST( DToC( dDTINI ), 9, 2 ) + '.TXT' IF File( cFILE ) DELETEFILE( cFILE ) ENDIF SET PRINTER TO &cFILE SET DEVI TO PRINTER // BLOCO 0 - ABERTURA, IDENTIFICACAO E REFERENCIAS R0000() R0001() R0005() R0100() R0150() FILTRA_R() // FILTRA O R0190 O R0200 E O R0400 R0190() R0200() R0400() // TOTALIZANDO AS LINHAS DO BLOCO 000 R990++ @ PRow() + 1, 00 SAY "|0990|" + AllTrim( StrZero( R990, 5 ) ) + "|" R999++ // BLOCO C - MOVIMENTACAO DE COMPRA E VENDA RC001() RC100() // ESTA INCLUIADA A RC170 E RC190 // FECHAMENTO DO SPED FECHASPED() SET PRINTER TO SET DEVI TO SCREEN Alert( 'NOTAF: ' + TRAN( nTOTNF, P12 ) + ' NOTAFC:' + TRAN( nTOTNFC, P12 ) ) cSPED := hb_MemoRead( cFILE ) hb_MemoWrit( cFILE, cSPED ) hb_run( 'START /MAX ' + cFILE ) // 'SPED\ENTRADAS.TXT' EXIT ENDDO dbSelectArea( 'ICOM' ) ordScope( 0, ) ordScope( 1, ) dbSetFilter() dbSelectArea( 'COM' ) ordScope( 0, ) ordScope( 1, ) dbSetFilter() SetCursor( 0 ) RestScreen(,,,, cTela ) ABREARQ(, .F. ) RETURN NIL // ******************************************************************************* // //////////////////////////////////////////// // REGISTRO 0000 - IDENTIFICACAO DA EMPRESA // // //////////////////////////////////////////// FUNCTION R0000() @ 00, 00 SAY "|0000" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY "012" + "|" // 02 VERSAO DO LAYOUT @ PRow(), PCol() SAY "0" + "|" // 03 0=REMESSA ORIGINAL, 1=ARQUIVO SUBSTITUTO @ PRow(), PCol() SAY SONUM( DToC( dDTINI ) ) + "|" // 04 Data Inicial DDMMAAAA @ PRow(), PCol() SAY SONUM( DToC( dDTFIM ) ) + "|" // 05 Data Final DDMMAAAA @ PRow(), PCol() SAY AllTrim( PERS->RAZAO ) + "|" // 06 Nome da Empresa @ PRow(), PCol() SAY SONUM( PERS->CGC ) + "|" // 07 CNPJ @ PRow(), PCol() SAY "" + "|" // 08 CPF @ PRow(), PCol() SAY PERS->ESTADO + "|" // 09 Estado @ PRow(), PCol() SAY SONUM( AllTrim( PERS->INSCRICAO ) ) + "|" // 10 IE @ PRow(), PCol() SAY PERS->CODCIDADE + "|" // 11 Código Municipal conf. tabela do IBGE @ PRow(), PCol() SAY "" + "|" // 12 Inscrição Municipal @ PRow(), PCol() SAY "" + "|" // 13 Inscrição Suframa @ PRow(), PCol() SAY "A" + "|" // 14 Perfil do Arquivo @ PRow(), PCol() SAY "1" + "|" // 15 Atividade 0=Industrial, 1=Outros R000++ R990++ R999++ RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO 0001 - IDENTIFICAO DO REGISTRO // // /////////////////////////////////////// FUNCTION R0001() @ PRow() + 1, 00 SAY "|0001|0|" // 01 IDENTIFICACAO DO REGISTRO R001++ R990++ R999++ RETURN NIL // ******************************************************************************* // //////////////////////////////////////////////////// // REGISTRO 0005 - DADOS COMPLEMENTARES DA ENTIDADE // // //////////////////////////////////////////////////// FUNCTION R0005() @ PRow() + 1, 00 SAY "|0005" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY AllTrim( PERS->EMPRESA ) + "|" // 02 Nome fantasia da Empresa @ PRow(), PCol() SAY SONUM( PERS->CEP ) + "|" // 03 CEP @ PRow(), PCol() SAY AllTrim( PERS->ENDERECO ) + "|" // 04 Endereco @ PRow(), PCol() SAY SONUM( AllTrim( PERS->NUMERO ) ) + "|" // 05 Numero @ PRow(), PCol() SAY "" + "|" // 06 Complemento do Endereco @ PRow(), PCol() SAY AllTrim( PERS->BAIRRO ) + "|" // 07 Bairro @ PRow(), PCol() SAY SONUM( PERS->TELEFONE ) + "|" // 08 Telefone @ PRow(), PCol() SAY "" + "|" // 09 Fax @ PRow(), PCol() SAY "" + "|" // 10 Email R005++ R990++ R999++ RETURN NIL // ******************************************************************************* // //////////////////////////////////////////////////// // REGISTRO 0100 - DADOS DO CONTABILISTA // // //////////////////////////////////////////////////// FUNCTION R0100() dbSelectArea( 'CONT' ) @ PRow() + 1, 00 SAY "|0100" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY AllTrim( CONT->NOME ) + "|" // 02 Nome do Contabilista @ PRow(), PCol() SAY AllTrim( CONT->CPF ) + "|" // 03 CPF do Contabilista @ PRow(), PCol() SAY AllTrim( CONT->CRC ) + "|" // 04 Número de inscrição do contabilista no CRC @ PRow(), PCol() SAY AllTrim( CONT->CGC ) + "|" // 05 Nr.de inscrição do escritório de contabilidade no CNPJ @ PRow(), PCol() SAY AllTrim( CONT->CEP ) + "|" // 06 CEP @ PRow(), PCol() SAY AllTrim( CONT->ENDERECO ) + "|" // 07 Endereco @ PRow(), PCol() SAY AllTrim( CONT->NUMERO ) + "|" // 08 Numero @ PRow(), PCol() SAY "" + "|" // 09 Complemento do Endereco @ PRow(), PCol() SAY AllTrim( CONT->BAIRRO ) + "|" // 10 Bairro @ PRow(), PCol() SAY CONT->TELEFONE + "|" // 11 Telefone @ PRow(), PCol() SAY "" + "|" // 12 Fax @ PRow(), PCol() SAY AllTrim( CONT->EMAIL ) + "|" // 13 Email @ PRow(), PCol() SAY CONT->CODCIDADE + "|" // 14 Codigo Cidade R100++ R990++ R999++ RETURN NIL // ******************************************************************************* // ///////////////////////////////////////////// // REGISTRO 0150 - CADASTRO DE PARTICIPANTES CLIENTES/FORNECEDORES/TRANSPORTADORAS/ADM CARTAO // // ///////////////////////////////////////////// FUNCTION R0150() // SELECIONA TABELA DE COMPRAS E FILTRA A DATA E INFORMA OS FORNECEDORES dbSelectArea( 'COM' ) dbSetOrder( 1 ) SET FILTER TO COM->DT_E_S >= dDTINI .AND. COM->DT_E_S <= dDTFIM .AND. !Empty( COM->COD_MOD ) dbGoTop() MOSTRA( 'Filtrando Participantes ...' ) WHILE !Eof() cCODFOR := COM->CODFOR_ dbSelectArea( 'FORN' ) dbSetOrder( 2 ) dbGoTop() IF !dbSeek( cCODFOR ) dbSelectArea( 'COM' ) dbSkip() LOOP ENDIF @ PRow() + 1, 00 SAY "|0150" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY "F" + cCODFOR + "|" // 02 Codigo de identificação do participante @ PRow(), PCol() SAY AllTrim( FORN->NOME ) + "|" // 03 Nome @ PRow(), PCol() SAY '01058' + "|" // 04 Codigo do pais @ PRow(), PCol() SAY AllTrim( SONUM( FORN->CGC ) ) + "|" // 05 CNPJ do participante cCPF := IF( AllTrim( FORN->CIC ) != "", SONUM( FORN->CIC ), "" ) @ PRow(), PCol() SAY AllTrim( cCPF ) + "|" // 06 CPF do participante cINSCRICAO := AllTrim( IF( AllTrim( FORN->INSC_EST ) = "ISENTO", "", SONUM( FORN->INSC_EST ) ) ) @ PRow(), PCol() SAY AllTrim( cINSCRICAO ) + "|" // 07 Inscricao Estadual do participante @ PRow(), PCol() SAY FORN->CIDADECOD + "|" // 08 Codigo do municipio @ PRow(), PCol() SAY "|" // 09 Numero de inscricao do participante na Suframa @ PRow(), PCol() SAY AllTrim( FORN->ENDERECO ) + "|" // 10 Logradouro e endereço do imovel @ PRow(), PCol() SAY AllTrim( FORN->NUMERO ) + "|" // 11 Numero do imovel @ PRow(), PCol() SAY + "|" // 12 Dados complementares do endereco @ PRow(), PCol() SAY AllTrim( FORN->BAIRRO ) + "|" // 13 Bairro dbSelectArea( 'COM' ) WHILE COM->CODFOR_ = cCODFOR // PROD_COMPRA() dbSkip() ENDDO R150++ R990++ R999++ ENDDO // LANCA ADMNISTRADORA DE CARTAO COMO FORNECEDOR IF lVENDACARTAO = 'S' dbSelectArea( 'ADMC' ) dbGoBottom() cCODADMCARTAO := ADMC->CODIGO @ PRow() + 1, 00 SAY "|0150" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY "A" + ADMC->CODIGO + "|" // 02 Codigo de identificação do participante @ PRow(), PCol() SAY AllTrim( ADMC->NOME ) + "|" // 03 Nome @ PRow(), PCol() SAY '01058' + "|" // 04 Codigo do pais @ PRow(), PCol() SAY AllTrim( SONUM( ADMC->CGC ) ) + "|" // 05 CNPJ do participante @ PRow(), PCol() SAY "|" // 06 CPF do participante @ PRow(), PCol() SAY AllTrim( ADMC->INSC_EST ) + "|" // 07 Inscricao Estadual do participante @ PRow(), PCol() SAY ADMC->CIDADECOD + "|" // 08 Codigo do municipio @ PRow(), PCol() SAY "|" // 09 Numero de inscricao do participante na Suframa @ PRow(), PCol() SAY AllTrim( ADMC->ENDERECO ) + "|" // 10 Logradouro e endereço do imovel @ PRow(), PCol() SAY AllTrim( ADMC->NUMERO ) + "|" // 11 Numero do imovel @ PRow(), PCol() SAY + "|" // 12 Dados complementares do endereco @ PRow(), PCol() SAY AllTrim( ADMC->BAIRRO ) + "|" // 13 Bairro R150++ R990++ R999++ ENDIF dbSelectArea( 'COM' ) dbSetFilter() //--------------------------------------------------------------------------- // Filtras as transportadoras do CTE DbSelectArea('CTE') DbSetOrder(1) DbGoTop() Set Filter to CTE->DT_A_P >= dDTINI .and. CTE->DT_A_P <= dDTFIM DbGotop() WHILE !Eof() cCOD_PART := CTE->COD_PART dbSelectArea( 'TRA' ) dbSetOrder( 2 ) dbGoTop() IF dbSeek( cCOD_PART ) @ PRow() + 1, 00 SAY "|0150" +"|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY "T" + cCOD_PART +"|" // 02 Codigo de identificação do participante @ PRow(), PCol() SAY AllTrim( TRA->NOME ) +"|" // 03 Nome @ PRow(), PCol() SAY '01058' +"|" // 04 Codigo do pais @ PRow(), PCol() SAY AllTrim( SONUM( TRA->CGC ) ) + "|" // 05 CNPJ do participante cCPF := IF( AllTrim( TRA->CIC ) != "", SONUM( TRA->CIC ), "" ) @ PRow(), PCol() SAY AllTrim( cCPF ) +"|" // 06 CPF do participante cINSCRICAO := AllTrim( IF( AllTrim( TRA->INSC_EST ) = "ISENTO", "", SONUM( TRA->INSC_EST ) ) ) @ PRow(), PCol() SAY AllTrim( cINSCRICAO ) +"|" // 07 Inscricao Estadual do participante @ PRow(), PCol() SAY TRA->CIDADECOD +"|" // 08 Codigo do municipio @ PRow(), PCol() SAY "|" // 09 Numero de inscricao do participante na Suframa @ PRow(), PCol() SAY AllTrim( TRA->ENDERECO ) + "|" // 10 Logradouro e endereço do imovel @ PRow(), PCol() SAY AllTrim( TRA->NUMERO ) + "|" // 11 Numero do imovel @ PRow(), PCol() SAY +"|" // 12 Dados complementares do endereco @ PRow(), PCol() SAY AllTrim( TRA->BAIRRO ) +"|" // 13 Bairro dbSelectArea( 'CTE' ) WHILE CTE->COD_PART = cCOD_PART dbSkip() ENDDO R150++ R990++ R999++ ELSE DbSelectArea('CTE') DbSkip() ENDIF ENDDO DbSelectArea('CTE') DbSetFilter() // ------------------------------------------------------------------------------* // SELECIONA TABELA DE NOTA FISCAL/VENDAS E FILTRA A DATA E INFORMA OS CLIENTES dbSelectArea( 'NF' ) dbSetOrder( 1 ) // OrdScope(0,dDTINI) // OrdScope(1,dDTFIM) SET FILTER TO NF->DATAENVIO >= dDTINI .AND. NF->DATAENVIO <= dDTFIM .AND. NF->CSTAT = '100' dbGoTop() MOSTRA( 'Filtrando Clientes de Nota Fiscal NFe ...' ) WHILE !Eof() cCODCLI := NF->CODIGO WHILE NF->CODIGO = cCODCLI // PROD_NF() dbSkip() ENDDO SELE CLI dbSetOrder( 2 ) dbGoTop() dbSeek( cCODCLI ) @ PRow() + 1, 00 SAY "|0150" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(), PCol() SAY "C" + cCODCLI + "|" // 02 Codigo de identificação do participante @ PRow(), PCol() SAY AllTrim( CLI->NOME ) + "|" // 03 Nome @ PRow(), PCol() SAY '1058' + "|" // 04 Codigo do pais IF CLI->JURIDICA = "J" // QUANDO FOR PESSOA JURIDICA NAO IMPRIME CPF POR ISSO || @ PRow(), PCol() SAY SONUM( CLI->CGC ) + "||" // 05 CNPJ do participante ELSE // P | ANTES DO CPF E PORQUE NAO IMPRIMIU O CNPJ @ PRow(), PCol() SAY "|" + SONUM( CLI->CPF ) + "|" // 06 CPF do participante ENDIF cINSCRICAO := AllTrim( IF( AllTrim( CLI->INSCRICAO ) = "ISENTO", "", SONUM( CLI->INSCRICAO ) ) ) @ PRow(), PCol() SAY cINSCRICAO + "|" // 07 Inscricao Estadual do participante @ PRow(), PCol() SAY CLI->CODCIDADE + "|" // 08 Codigo do municipio @ PRow(), PCol() SAY + "|" // 09 Numero de inscricao do participante na Suframa @ PRow(), PCol() SAY AllTrim( CLI->ENDCOB ) + "|" // 10 Logradouro e endereço do imovel @ PRow(), PCol() SAY AllTrim( CLI->NUMERO ) + "|" // 11 Numero do imovel @ PRow(), PCol() SAY + "|" // 12 Dados complementares do endereco @ PRow(), PCol() SAY AllTrim( CLI->BAICOB ) + "|" // 13 Bairro R150++ R990++ R999++ SELE NF ENDDO SELE NF SET FILTER TO // PROD_NFC() RETURN NIL /* *------------------------------------------------------------------------------* // SELECIONA TABELA DE NFC/VENDAS E FILTRA A DATA E INFORMA OS CLIENTES DBSelectArea('NFC') DBSetOrder(7) OrdScope(0,dDTINI) OrdScope(1,dDTFIM) DBGOTOP() aCLIENTE := {} MOSTRA('Filtrando Clientes de Cupom Fiscal NFCe...') WHILE !EOF() cCODCLI := NFC->CODIGO IF AScan( aCLIENTE, cCODCLI )=0 AADD( aCLIENTE, cCODCLI ) ENDIF DBSKIP() ENDDO MOSTRA('Filtrando Clientes de NFCe...') FOR X = 1 TO LEN( aCLIENTE ) DBSelectArea('CLI') DBSETORDER(2) DBGOTOP() cCODCLI := aCLIENTE[X] DBSEEK( cCODCLI ) cCGC := ALLTRIM(SONUM(CLI->CGC)) cCGC := IF( LEN( cCGC ) != 14 , '', cCGC ) cCPF := ALLTRIM(SONUM(CLI->CPF)) cCPF := IF( LEN( cCGC ) != 11, '', cCPF ) IF EMPTY( cCGC ) .AND. EMPTY( cCPF ) cCODCLI := '000001' ENDIF // VERIFICA SE JA FOI LANCADO O CLIENTE 000001 IF cCODCLI = '000001' LOOP ENDIF IF !EMPTY( cCPF ) cCGC := '' ENDIF @ PROW()+1,00 SAY "|0150" +"|" // 01 IDENTIFICACAO DO REGISTRO cINSCRICAO := ALLTRIM( IF( ALLTRIM( CLI->INSCRICAO ) = "ISENTO", "", SONUM(CLI->INSCRICAO) )) @ PROW(),PCOL() SAY "C"+cCODCLI +"|" // 02 Codigo de identificação do participante @ PROW(),PCOL() SAY ALLTRIM( CLI->NOME ) +"|" // 03 Nome @ PROW(),PCOL() SAY '1058' +"|" // 04 Codigo do pais @ PROW(),PCOL() SAY cCGC +"|" // 05 CNPJ do participante @ PROW(),PCOL() SAY cCPF +"|" // 06 CPF do participante @ PROW(),PCOL() SAY cINSCRICAO +"|" // 07 Inscricao Estadual do participante @ PROW(),PCOL() SAY CLI->CODCIDADE +"|" // 08 Codigo do municipio @ PROW(),PCOL() SAY +"|" // 09 Numero de inscricao do participante na Suframa @ PROW(),PCOL() SAY ALLTRIM(CLI->ENDCOB) +"|" // 10 Logradouro e endereço do imovel @ PROW(),PCOL() SAY ALLTRIM(CLI->NUMERO) +"|" // 11 Numero do imovel @ PROW(),PCOL() SAY +"|" // 12 Dados complementares do endereco @ PROW(),PCOL() SAY ALLTRIM(CLI->BAICOB) +"|" // 13 Bairro R150++ R990++ R999++ NEXT SELE NFC ORDSCOPE(0,) ORDSCOPE(1,) RETURN NIL */ // ******************************************************************************* // ////////////////////////////////////////////// // FUNCAO FILTRAR_R - FILTRAR UND,NATUREZA E PRODUTOS // // ////////////////////////////////////////////// FUNCTION FILTRA_R() // VERIFICA E SELECIONA NAS TABELAS DE VENDA E DE // COMPRAS OS PRODUTOS QUE FORAM MOVIMENTADOS // VERIFICA NAS COMPRAS dbSelectArea( 'COM' ) dbSetOrder( 6 ) COM->( ordScope( 0, dDTINI ) ) COM->( ordScope( 1, dDTFIM ) ) SET FILTER TO !Empty( COM->CHV_NFE ) dbGoTop() WHILE !Eof() SET DEVICE TO SCREEN MOSTRA2( 2, 'Filtrando Produtos... Nota de Compra: ' + COM->DOCUME_ ) SET DEVICE TO PRINT dbSelectArea( 'ICOM' ) dbSetOrder( 2 ) ICOM->( ordScope( 0, COM->NUMERO_ ) ) ICOM->( ordScope( 1, COM->NUMERO_ ) ) dbGoTop() WHILE !Eof() // CORRIGIR NA COMPRA cCFOP := ICOM->CFOP IF cCFOP $ '\1910\2910' cCOD_NAT := '0002' ELSEIF cCFOP $ '\1949\2949' cCOD_NAT := '0003' ELSEIF cCFOP $ '\1916\2916' cCOD_NAT := '0004' ELSE cCOD_NAT := '0001' ENDIF // ADICIONA A NATUREZA NO VETOR IF Empty( aR0400 ) AAdd( aR0400, cCOD_NAT ) ELSE IF AScan( aR0400, cCOD_NAT ) = 0 AAdd( aR0400, cCOD_NAT ) ENDIF ENDIF // ADICIONA PRODUTO NO VETOR cCODPRO_ := ICOM->CODPRO_ IF AScan( aPROD, cCODPRO_ ) = 0 // NAO ENCONTROU AAdd( aPROD, cCODPRO_ ) ENDIF dbSelectArea( 'ICOM' ) dbSkip() ENDDO ICOM->( ordScope( 0, ) ) ICOM->( ordScope( 1, ) ) dbSelectArea( 'COM' ) dbSkip() ENDDO dbSelectArea( 'ICOM' ) dbCommit() dbUnlock() dbSelectArea( 'COM' ) COM->( ordScope( 0, ) ) COM->( ordScope( 1, ) ) dbSetFilter() RETURN NIL // ******************************************************************************* // ///////////////////////////////////////////// // REGISTRO 0190 TABELA DE UNIDADES // ///////////////////////////////////////////// FUNCTION R0190() MOSTRA( 'Filtrando unidades nas compras' ) // CONTADOR DE LINHAS R190 := 0 dbSelectArea( 'UN' ) dbGoTop() aUnd := {} // Filtra unidades FOR X = 1 TO Len( aProd ) DbSelectArea( 'PRO') DbSetOrder(1) DbGoTop() If DbSeek( aProd[x] ) If Empty(PRO->Und_) cUnd := 'UN' Else cUnd := PRO->Und_ EndIf Else cUnd := 'UN' EndIf // SE O VETOR TA VAZIO ADICIONA A UNIDADE IF Empty( aUND ) AAdd( aUND, cUnd ) ELSE // SE NAO ENCONTRAR A UND NO VETOR ADICIONA IF AScan( aUND, cUnd ) = 0 AAdd( aUND, cUnd ) ENDIF ENDIF Next For X = 1 to Len( aUnd ) cCODUN := aUND[X] DbSelectArea('UN') DbSetOrder(1) dbGoTop() DbSeek( cCODUN ) @ PRow() + 1, 00 SAY "|0190" + "|" // 01 IDENTIFICACAO DO REGISTRO IF dbSeek( cCODUN ) @ PRow(),PCol() SAY UN->CODUN + "|" // 02 Codigo da Unidade @ PRow(),PCol() SAY AllTrim( UN->DESC ) + "|" // 03 Descricao ELSE @ PRow(),PCol() SAY aUND[ X ] + "|" // 02 Codigo da Unidade @ PRow(),PCol() SAY If( Found(), UN->NOMUN,aUND[X]+'*') + "|" // 03 Descricao ENDIF R190++ R990++ R999++ NEXT RETURN NIL // ******************************************************************************* // ////////////////////////////////////////////// // REGISTRO 0200 - ADICIONA TABELA DE PRODUTOS // // ////////////////////////////////////////////// FUNCTION R0200() // CONTADOR DE LINHAS R200 := 0 dbSelectArea( 'PRO' ) dbSetOrder( 1 ) nTOTESTO := 0.00 FOR X = 1 TO Len( aPROD ) cCODPRO := aPROD[ X ] dbGoTop() IF dbSeek( cCODPRO ) @ PRow() + 1, 00 SAY "|0200" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(),PCol() SAY PRO->CODPRO_ + "|" // 02 CODIGO DO PRODUTO @ PRow(),PCol() SAY AllTrim( PRO->NOMPRO_ ) + "|" // 03 DESCRICAO DO PRODUTO cCODBARRA := AllTrim( IF( !Empty( PRO->CODBARRA ), PRO->CODBARRA, "" ) ) @ PRow(),PCol() SAY cCODBARRA + "|" // 04 CODIGO DE BARRAS @ PRow(),PCol() SAY "" + "|" // 05 CODIGO ANTIGO DO PRODUTO @ PRow(),PCol() SAY PRO->UND_ + "|" // 06 UNIDADE @ PRow(),PCol() SAY "00" + "|" // 07 TIPO DO ITEM VER NA TABELA cNCM := AllTrim( IF( !Empty( PRO->NCM ), PRO->NCM, "" ) ) @ PRow(),PCol() SAY cNCM + "|" // 08 CODIGO NCM @ PRow(),PCol() SAY "" + "|" // 09 CODIGO EX_TIPI @ PRow(),PCol() SAY "" + "|" // 10 CODIGO DO GENERO @ PRow(),PCol() SAY "" + "|" // 11 CODIGO DO SERVICO @ PRow(),PCol() SAY "" + "|" // 12 Aliquota de ICMS @ PRow(),PCol() SAY AllTrim( TiraPonto( Pro->Cest) ) + "|" // 13 Cest nESTOQUE := IF( PRO->ESTOQUE_ > 0, PRO->ESTOQUE_, 1 ) TOTITEM := nESTOQUE * PRO->CUSTONT_ nTOTESTO += TOTITEM R200++ R990++ R999++ ENDIF NEXT RETURN NIL // ******************************************************************************* // ////////////////////////////////////////////// // REGISTRO 0400 - TABELA DE NATUREZA DA OPERACAO // // ////////////////////////////////////////////// FUNCTION R0400() R400 := 0 // ADICIONA TABELA DE NATUREZA DA OPERACAO // /* 01 - COMPRA PARA REVENDA |0400|2101|COMPRA PARA INDUSTRIALIZACAO| |0400|2102|COMPRA PARA COMERCIALIZA‡ÆO| |0400|2401|COMPRA PARA INDUSTRIALIZA‡ÆO EM OPERA‡ÆO COM MERCADORIA SUJEITA AO REGIME DE SUBS| |0400|2403|COMPRA PARA COMERCIALIZA‡ÆO EM OPERA‡ÆO COM MERCADORIA SUJEITA AO REGIME DE SUBST| |0400|2652|COMPRA DE MERCADORIA PARA REVENDA| |0400|1101|COMPRA PARA INDUSTRIALIZA‡ÆO| |0400|1102|COMPRA PARA COMERCIALIZA‡ÆO| |0400|1403|COMPRA PARA COMERCIALIZA‡ÆO EM OPERA‡ÆO COM MERCADORIA SUJEITA AO REGIME DE SUBST| |0400|1652|COMPRA DE MERCADORIA PARA REVENDA| 02 - ENTRADA BONUS DOACAO OU BRIDNE |0400|1910|ENTRADA DE BONIFICA‡ÆO, DOA‡ÆO OU BRINDE| 03 - OUTRAS ENTRADAS NAO ESPECIFICADAS |0400|2949|OUTRA ENTRADA DE MERCADORIA OU PRESTA‡ÆO DE SERVI‡O NÆO ESPECIFICADA| FOR X = 1 TO LEN( aR0400) cCFOP := AR0400[X] cDESCR_NAT := 'COMPRA DE MERCADORIA PARA REVENDA' IF cCFOP = '1910' .OR. cCFOP = '2910' cCODNAT := '0002' cDESCR_NAT := 'ENTRADA BONUS DOACAO OU BRINDE' ELSEIF cCFOP = '1949' .OR. cCFOP = '2949' cCODNAT := '0003' cDESCR_NAT := 'OUTRAS ENTRADAS NAO ESPECIFICADAS' ELSE cCODNAT := '0001' cDESCR_NAT := 'COMPRA PARA REVENDA' ENDIF // PESQUISA SE O CODIGO NAT JA FOI ADICIONADO IF Ascan( aR400 , cCODNAT ) = 0 AAdd( aR400, cCODNAT ) ENDIF NEXT */ FOR X = 1 TO Len( aR0400 ) @ PRow() + 1, 00 SAY "|0400" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(),PCol() SAY aR0400[ X ] + '|' // 02 CODIGO DA NATUREZA O MESMO CFOP IF aR0400[ X ] = '0002' cDESCR_NAT := 'ENTRADA BONUS DOACAO OU BRINDE' ELSEIF aR0400[ X ] = '0003' cDESCR_NAT := 'OUTRAS ENTRADAS NAO ESPECIFICADAS' ELSEIF aR0400[ X ] = '0004' cDESCR_NAT := 'RETORNO\DEVOLUCAO' ELSE cDESCR_NAT := 'COMPRA PARA REVENDA' ENDIF @ PRow(),PCol() SAY cDESCR_NAT + '|' // 03 DESCRICAO DA NATUREZA R400++ R990++ R999++ NEXT RETURN NIL // ******************************************************************************* // //////////////////////////////////////////////////// // REGISTRO C001 - ABERTURA DO BLOCO C // // //////////////////////////////////////////////////// FUNCTION RC001() @ PRow() + 1, 00 SAY "|C001|0|" C001++ R999++ C990++ RETURN NIL // ******************************************************************************* // //////////////////////////////////////////////////// // REGISTRO C100 - NOTA FISCAL ELETRONICA // // //////////////////////////////////////////////////// FUNCTION RC100() // REGISTRO C100 // ------------------------------------------------------------------------------* // Entradas S dbSelectArea( 'COM' ) dbSetOrder( 6 ) ordScope( 0, dDTINI ) ordScope( 1, dDTFIM ) SET FILTER TO !Empty( COM->Cod_Mod) // Cod_Mod_ = 01 - Produtor - 55 - Nfe dbGoTop() MOSTRA( 'Filtrando Compras ...' ) // CAPA WHILE !Eof() cDOCUME_ := COM->DOCUME_ cNUMERO_ := COM->NUMERO_ @ PRow() + 1, 00 SAY "|C100" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(),PCol() SAY COM->IND_OPER + "|" // 02 (1)Saida ou (0)Entrada @ PRow(),PCol() SAY COM->IND_EMIT + "|" // 03 Emissao (0)Propria ou (1)Terceiros @ PRow(),PCol() SAY 'F' + COM->CODFOR_ + "|" // 04 Codigo do Pardicipante (Campo 2 do Reg. 150) CGC OU CPF @ PRow(),PCol() SAY AllTrim( COM->COD_MOD ) + "|" // 05 Modelo 01=Nota Fiscal, 2D=Cupom Fiscal @ PRow(),PCol() SAY COM->COD_SIT + "|" // 06 Documento 00=Regular, 02=Cancelado, 06=Complementar @ PRow(),PCol() SAY AllTrim( COM->SER ) + "|" // 07 SERIE @ PRow(),PCol() SAY AllTrim( COM->DOCUME_ ) + "|" // 08 Numero da NF @ PRow(),PCol() SAY AllTrim( COM->CHV_NFE ) + "|" // 09 Chave da nota fiscal eletronica (44 pos) @ PRow(),PCol() SAY SONUM(DToC(COM->DATA_)) + "|" // 10 DATA DE EMISSAO @ PRow(),PCol() SAY SONUM(DToC(COM->DT_E_S)) + "|" // 11 DATA DE ENTRADA @ PRow(),PCol() SAY PONVIRG( COM->VALOR_+COM->VL_IPI+COM->VL_ICMS_ST+COM->VL_FRT-COM->DESCONTO) + "|" // 12 VALOR DO DOCUMENTO VL_DOC @ PRow(),PCol() SAY COM->IND_PGTO + "|" // 13 TIPO DO PAGAMENTO 0-AVISTA 1-A PRAZO 9-SEM PAGAMENTO @ PRow(),PCol() SAY PONVIRG( COM->DESCONTO ) + "|" // 14 VALOR DO DESCONTO - VL_DESC @ PRow(),PCol() SAY PONVIRG( 0.00 ) + "|" // 15 VALOR DO ABATIMENTO NAO TRIBUTADO // Esta somando aqui porque na hora de salvar nao salvou os itens da nota @ PRow(),PCol() SAY PONVIRG(COM->VALOR_+COM->VL_IPI+COM->VL_ICMS_ST+COM->VL_OUT_DA+VL_FRT) + "|" // 16 VALOR DOS PRODUTOS @ PRow(),PCol() SAY COM->IND_FRT + "|" // 17 TIPO DO FRETE 0-TERCEIROS 1-EMITENTE 2-DESTINATARIO 9-SEM FRETE // SE SIMPLES NAO LANCA ESTES ITENS // SE LUCRO REAL / PRESUMIDO LANCA // IF PERS->CRT='1' @ PRow(),PCol() SAY PONVIRG(COM->VL_FRT) + "|" // 18 VALOR DO FRETE @ PRow(),PCol() SAY PONVIRG(COM->VL_SEG) + "|" // 19 VALOR DO SEGURO // QUANDO TIVER ST SOMAR COM OUTRAS DESPESAS @ PRow(),PCol() SAY PONVIRG(COM->VL_OUT_DA) + "|" // 20 VALOR DE OUTRAS DESP ACESSORIAS @ PRow(),PCol() SAY "|" // 21 PONVIRG( COM->VL_BC_ICMS) +"|" // VALOR DA BASE DE CALCULO DO ICMS @ PRow(),PCol() SAY "|" // 22 PONVIRG( COM->VL_ICMS ) +"|" // VALOR DO ICMS @ PRow(),PCol() SAY "|" // 23 IF( EMPTY(cBCST),'0,00',cBCST ) +"|" // VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY "|" // 24 IF( EMPTY(cVLST),'0,00',cVLST ) +"|" // VALOR DO ICMS BASE CALC ICMS ST @ PRow(),PCol() SAY '|' // 25 VALOR DO IPI @ PRow(),PCol() SAY "|" // 26 VALOR DO PIS @ PRow(),PCol() SAY "|" // 27 VALOR DO COFINS @ PRow(),PCol() SAY "|" // 28 VALOR DO PIS ST @ PRow(),PCol() SAY "|" // 29 VALOR DO COFINS ST // ITENS DA NF RC170() // TOTAIS DA NF RC190E() C100++ C990++ R999++ dbSelectArea( 'COM' ) dbSkip() ENDDO ordScope( 0, ) ordScope( 1, ) dbSetFilter() // ------------------------------------------------------------------------------* // Saidas // Venda NFe - Nota Fiscal Eletronica dbSelectArea( 'NF' ) dbSetOrder( 7 ) // DATA DE EMISSAO NF->( ordScope( 0, dDTINI ) ) NF->( ordScope( 1, dDTFIM ) ) SET FILTER TO NF->CSTAT = '100' dbGoTop() MOSTRA( 'Filtrando NFe - Nota Fiscal Eletronica ...' ) // CAPA WHILE !Eof() cNUMERO := NF->NUMERO @ PRow() + 1, 00 SAY "|C100" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(),PCol() SAY '1' + "|" // 02 (1)Saida ou (0)Entrada @ PRow(),PCol() SAY '0' + "|" // 03 Emissao (0)Propria ou (1)Terceiros @ PRow(),PCol() SAY 'C' + NF->CODIGO + "|" // 04 Codigo do Pardicipante (Campo 2 do Reg. 150) CGC OU CPF @ PRow(),PCol() SAY '55' + "|" // 05 Modelo 01=Nota Fiscal, 2D=Cupom Fiscal @ PRow(),PCol() SAY '00' + "|" // 06 Documento 00=Regular, 02=Cancelado, 06=Complementar @ PRow(),PCol() SAY '1' + "|" // 07 SERIE @ PRow(),PCol() SAY AllTrim( NF->NUMERO ) + "|" // 08 Numero da NF @ PRow(),PCol() SAY Left( NF->XML, 44 ) + "|" // 09 Chave da nota fiscal eletronica (44 pos) @ PRow(),PCol() SAY SONUM( DToC( NF->DATAEMIS ) ) + "|" // 10 DATA DE EMISSAO @ PRow(),PCol() SAY SONUM( DToC( NF->DATAENVIO ) ) + "|" // 11 DATA DE ENTRADA @ PRow(),PCol() SAY PONVIRG( NF->TOTGERAL ) + "|" // 12 VALOR DO DOCUMENTO VL_DOC @ PRow(),PCol() SAY '0' + "|" // 13 TIPO DO PAGAMENTO 0-AVISTA 1-A PRAZO 9-SEM PAGAMENTO @ PRow(),PCol() SAY PONVIRG( NF->VAL_DESCON ) + "|" // 14 VALOR DO DESCONTO - VL_DESC @ PRow(),PCol() SAY '0,00' + "|" // 15 VALOR DO ABATIMENTO NAO TRIBUTADO @ PRow(),PCol() SAY PONVIRG( NF->TOTAL ) + "|" // 16 VALOR DOS PRODUTOS @ PRow(),PCol() SAY NF->FRETEPC + "|" // 17 TIPO DO FRETE 0-TERCEIROS 1-EMITENTE 2-DESTINATARIO 9-SEM FRETE @ PRow(),PCol() SAY '0,00' + "|" // 18 VALOR DO FRETE @ PRow(),PCol() SAY '0,00' + "|" // 19 VALOR DO SEGURO // QUANDO TIVER ST SOMAR COM OUTRAS DESPESAS @ PRow(),PCol() SAY PONVIRG( NF->OUTRASDE ) + "|" // 20 VALOR DO OUTRAS DESP ACESSORIAS @ PRow(),PCol() SAY '0,00' + "|" // 21 PONVIRG( COM->VL_BC_ICMS) +"|" // VALOR DA BASE DE CALCULO DO ICMS @ PRow(),PCol() SAY '0,00' + "|" // 22 PONVIRG( COM->VL_ICMS ) +"|" // VALOR DO ICMS @ PRow(),PCol() SAY "|" // 23 IF( EMPTY(cBCST),'0,00',cBCST ) +"|" // VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY '0,00' + "|" // 24 IF( EMPTY(cVLST),'0,00',cVLST ) +"|" // VALOR DO ICMS BASE CALC ICMS ST IF PERS->CRT = '1' @ PRow(),PCol() SAY "|" // 25 VALOR DO IPI @ PRow(),PCol() SAY "|" // 26 VALOR DO PIS @ PRow(),PCol() SAY "|" // 27 VALOR DO COFINS ELSE @ PRow(),PCol() SAY PONVIRG( NF->VLTOTIPI ) + "|" // 25 VALOR DO IPI @ PRow(),PCol() SAY PONVIRG( NF->TOTGERAL * PERS->PIS / 100 ) + "|" // 26 VALOR DO PIS @ PRow(),PCol() SAY PONVIRG( NF->TOTGERAL * PERS->COFINS / 100 ) + "|" // 27 VALOR DO COFINS ENDIF @ PRow(),PCol() SAY '0,00' + "|" // 28 VALOR DO PIS ST @ PRow(),PCol() SAY '0,00' + "|" // 29 VALOR DO COFINS ST nTOTNF += NF->TOTGERAL // TOTAIS DA NF RC190SNF() C100++ C990++ R999++ dbSelectArea( 'NF' ) dbSkip() ENDDO dbSelectArea( 'NF' ) NF->( ordScope( 0, ) ) NF->( ordScope( 1, ) ) dbSetFilter() // ------------------------------------------------------------------------------* // Saidas // Venda NFe - Nota Fiscal Eletronica dbSelectArea( 'NFC' ) dbSetOrder( 7 ) NFC->( ordScope( 0, dDTINI ) ) NFC->( ordScope( 1, dDTFIM ) ) SET FILTER TO NFC->CSTAT = '100' dbGoTop() MOSTRA( 'Filtrando NFCe - Cupom Fiscal Eletronico ...' ) // CAPA WHILE !Eof() cNUMERO := NFC->NUMERO @ PRow() + 1, 00 SAY "|C100" + "|" // 01 IDENTIFICACAO DO REGISTRO @ PRow(),PCol() SAY '1' + "|" // 02 (1)Saida ou (0)Entrada @ PRow(),PCol() SAY '0' + "|" // 03 Emissao (0)Propria ou (1)Terceiros cCODCLI := IF( NFC->CODIGO = '000001', '', NFC->CODIGO ) @ PRow(),PCol() SAY '' + "|" // 04 Codigo do Pardicipante (Campo 2 do Reg. 150) CGC OU CPF @ PRow(),PCol() SAY '65' + "|" // 05 Modelo 01=Nota Fiscal, 2D=Cupom Fiscal @ PRow(),PCol() SAY '00' + "|" // 06 Documento 00=Regular, 02=Cancelado, 06=Complementar @ PRow(),PCol() SAY '1' + "|" // 07 SERIE @ PRow(),PCol() SAY AllTrim( NFC->NUMERO ) + "|" // 08 Numero da NF @ PRow(),PCol() SAY Left( NFC->XML, 44 ) + "|" // 09 Chave da nota fiscal eletronica (44 pos) @ PRow(),PCol() SAY SONUM( DToC( NFC->DATAENVIO ) ) + "|" // 10 DATA DE EMISSAO @ PRow(),PCol() SAY SONUM( DToC( NFC->DATAENVIO ) ) + "|" // 11 DATA DE ENTRADA @ PRow(),PCol() SAY PONVIRG( NFC->TOTGERAL ) + "|" // 12 VALOR DO DOCUMENTO VL_DOC @ PRow(),PCol() SAY '0' + "|" // 13 TIPO DO PAGAMENTO 0-AVISTA 1-A PRAZO 9-SEM PAGAMENTO @ PRow(),PCol() SAY PONVIRG( NFC->DESCONTO ) + "|" // 14 VALOR DO DESCONTO - VL_DESC @ PRow(),PCol() SAY '0,00' + "|" // 15 VALOR DO ABATIMENTO NAO TRIBUTADO @ PRow(),PCol() SAY PONVIRG( NFC->TOTAL ) + "|" // 16 VALOR DOS PRODUTOS @ PRow(),PCol() SAY NFC->FRETEPC + "|" // 17 TIPO DO FRETE 0-TERCEIROS 1-EMITENTE 2-DESTINATARIO 9-SEM FRETE @ PRow(),PCol() SAY "|" // 18 VALOR DO FRETE @ PRow(),PCol() SAY "|" // 19 VALOR DO SEGURO @ PRow(),PCol() SAY "|" // 20 VALOR DO OUTRAS DESP ACESSORIAS @ PRow(),PCol() SAY "|" // 21 PONVIRG( COM->VL_BC_ICMS) +"|" // VALOR DA BASE DE CALCULO DO ICMS @ PRow(),PCol() SAY "|" // 22 PONVIRG( COM->VL_ICMS ) +"|" // VALOR DO ICMS @ PRow(),PCol() SAY "|" // 23 IF( EMPTY(cBCST),'0,00',cBCST ) +"|" // VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY "|" // 24 IF( EMPTY(cVLST),'0,00',cVLST ) +"|" // VALOR DO ICMS BASE CALC ICMS ST @ PRow(),PCol() SAY "|" // 25 VALOR DO IPI @ PRow(),PCol() SAY "|" // 26 VALOR DO PIS @ PRow(),PCol() SAY "|" // 27 VALOR DO COFINS @ PRow(),PCol() SAY "|" // 28 VALOR DO PIS ST @ PRow(),PCol() SAY "|" // 29 VALOR DO COFINS ST nTOTNFC += NFC->TOTGERAL // TOTAIS DA NF RC190SNFC() C100++ C990++ R999++ dbSelectArea( 'NFC' ) dbSkip() ENDDO dbSelectArea( 'NFC' ) NFC->( ordScope( 0, ) ) NFC->( ordScope( 1, ) ) dbSetFilter() // TOTALIZANDO AS LINHAS DO BLOCO C C990++ @ PRow() + 1, 00 SAY "|C990|" + AllTrim( StrZero( C990, 5 ) ) + "|" R999++ RETURN NIL // ******************************************************************************* // ///////////////////////////////////// // GRAVA REGISTRO C170 - ITENS DA NF // // ///////////////////////////////////// FUNCTION RC170() LOCAL nQTDE := 0 LOCAL nQTDET := 0 LOCAL nNUM_ITEM := 0 dbSelectArea( 'ICOM' ) MOSTRA( 'Filtrando Itens da Compra -------> ' + cDOCUME_ ) dbSetOrder( 2 ) ordScope( 0, cNUMERO_ ) ordScope( 1, cNUMERO_ ) dbGoTop() WHILE !Eof() nQTDE++ dbSkip() ENDDO dbGoTop() nNUM_ITEM := 0 nTOTALTEMP := 0.0 WHILE !Eof() nNUM_ITEM ++ nQTDET++ @ PRow() + 1, 00 SAY "|C170" + "|" // 01 Tipo do Registro @ PRow(),PCol() SAY AllTrim( StrZero( nNUM_ITEM, 3 ) ) + "|" // 02 Número sequencial do item @ PRow(),PCol() SAY ICOM->CODPRO_ + "|" // 03 CODIGO DO PRODUTO dbSelectArea( 'PRO' ) dbSetOrder( 1 ) dbGoTop() dbSeek( ICOM->CODPRO_ ) @ PRow(), PCol() SAY AllTrim( PRO->NOMPRO_ ) + "|" // 04 DESCRICAO DO PRODUTO dbSelectArea( 'ICOM' ) IF cCRT > '1' IF Right( ICOM->CFOP, 3 ) == '101' .OR. Right( ICOM->CFOP, 3 ) == '102' .OR. Right( ICOM->CFOP, 3 ) == '910' cCST_ICMS = '090' ELSE cCST_ICMS = '060' ENDIF ELSE IF Right( ICOM->CFOP, 3 ) == '101' .OR. Right( ICOM->CFOP, 3 ) == '102' .OR. Right( ICOM->CFOP, 3 ) == '910' cCST_ICMS := '900' ELSE cCST_ICMS := '500' ENDIF ENDIF cCFOP := ICOM->CFOP IF cCFOP $ '\1910\2910' cCOD_NAT := '0002' ELSEIF cCFOP $ '\1949\2949' cCOD_NAT := '0003' ELSEIF cCFOP $ '\1916\2916' cCOD_NAT := '0004' ELSE cCOD_NAT := '0001' ENDIF @ PRow(),PCol() SAY PONVIRG( ICOM->QTDE_ ) + "|" // 05 Quantidade @ PRow(),PCol() SAY AllTrim( PRO->UND_ ) + "|" // 06 UNIDADE @ PRow(),PCol() SAY PONVIRG( ICOM->TOTAL_ + ICOM->VL_IPI + ICOM->VL_ICMS_ST ) + "|" // 07 Valor Total @ PRow(),PCol() SAY PONVIRG( ICOM->VL_DESC ) + "|" // 08 Desconto Total @ PRow(),PCol() SAY AllTrim( ICOM->IND_MOV ) + "|" // 09 0=Movimenta Estoque, 1=Não movimenta @ PRow(),PCol() SAY cCST_ICMS + "|" // 10 Situação Tributária @ PRow(),PCol() SAY AllTrim( ICOM->CFOP ) + "|" // 11 CFOP @ PRow(),PCol() SAY AllTrim( cCOD_NAT ) + "|" // 12 CODIGO DA NATUREZA NA TABELA 0400 @ PRow(),PCol() SAY '0,00' + "|" // 13 Base de Cálculo do Icms @ PRow(),PCol() SAY PONVIRG2( ICOM->ALIQ_ICMS ) + "|" // 14 Alíquota do Icms IF PERS->CRT = '1' @ PRow(),PCol() SAY "|" // 15 Valor do Icms Creditado/Debitado @ PRow(),PCol() SAY "|" // 16 Base de Cálculo Sub.Trib @ PRow(),PCol() SAY "|" // 17 Alíquota do Icms Sub.Trib. @ PRow(),PCol() SAY "|" // 18 Valor Icms Sub.Trib. @ PRow(),PCol() SAY "|" // 19 Apuração 0=Mensal 1=Decendial @ PRow(),PCol() SAY "|" // 20 CST do IPI //*****M CST DO IPI NÃ0 É ESTE ESTA PASSANDO COM 50 @ PRow(),PCol() SAY "|" // 21 Código do Enquadramento do IPI @ PRow(),PCol() SAY "|" // 22 Valor Base do IPI @ PRow(),PCol() SAY "|" // 23 Alíquota do IPI @ PRow(),PCol() SAY "|" // 24 Valor do IPI @ PRow(),PCol() SAY "|" // 25 CST PIS @ PRow(),PCol() SAY "|" // 26 BAS PIS @ PRow(),PCol() SAY "|" // 27 ALQ PIS PERC @ PRow(),PCol() SAY "|" // 28 QTD PIS PERC @ PRow(),PCol() SAY "|" // 29 ALQ PIS REAIS @ PRow(),PCol() SAY "|" // 30 VAL PIS REAIS @ PRow(),PCol() SAY "|" // 31 CST COFINS @ PRow(),PCol() SAY "|" // 32 BAS COFINS @ PRow(),PCol() SAY "|" // 33 ALQ COFINS PERC @ PRow(),PCol() SAY "|" // 34 QTD COFINS PERC @ PRow(),PCol() SAY "|" // 35 ALQ COFINS REAIS @ PRow(),PCol() SAY "|" // 36 VAL COFINS REAIS @ PRow(),PCol() SAY "55|" // COD_CTA = 55 ELSE @ PRow(),PCol() SAY '0,00' + "|" // 15 Valor do Icms Creditado/Debitado @ PRow(),PCol() SAY '0,00' + "|" // 16 Base de Cálculo Sub.Trib @ PRow(),PCol() SAY '0,00' + "|" // 17 Alíquota do Icms Sub.Trib. @ PRow(),PCol() SAY '0,00' + "|" // 18 Valor Icms Sub.Trib. @ PRow(),PCol() SAY "|" // 19 Apuração 0=Mensal 1=Decendial @ PRow(),PCol() SAY "|" // 20 CST do IPI //*****M CST DO IPI NÃ0 É ESTE ESTA PASSANDO COM 50 @ PRow(),PCol() SAY "|" // 21 Código do Enquadramento do IPI @ PRow(),PCol() SAY PONVIRG2( ICOM->VL_BC_IPI ) + "|" // 22 Valor Base do IPI @ PRow(),PCol() SAY PONVIRG2( ICOM->ALIQ_IPI ) + "|" // 23 Alíquota do IPI @ PRow(),PCol() SAY PONVIRG2( ICOM->VL_IPI ) + "|" // 24 Valor do IPI @ PRow(),PCol() SAY AllTrim( ICOM->CST_PIS ) + "|" // 25 CST PIS @ PRow(),PCol() SAY PONVIRG2( ICOM->VL_BC_PIS ) + "|" // 26 BAS PIS @ PRow(),PCol() SAY PONVIRG2( ICOM->ALIQ_PIS ) + "|" // 27 ALQ PIS PERC @ PRow(),PCol() SAY PONVIRG2( ICOM->QUANTBCPIS )+ "|" // 28 QTD PIS PERC @ PRow(),PCol() SAY '' + "|" // 29 ALQ PIS REAIS @ PRow(),PCol() SAY PONVIRG2( ICOM->VL_PIS ) + "|" // 30 VAL PIS REAIS @ PRow(),PCol() SAY AllTrim( ICOM->CST_COFINS ) + "|" // 31 CST COFINS @ PRow(),PCol() SAY PONVIRG2( ICOM->VLBCCOFINS )+ "|" // 32 BAS COFINS @ PRow(),PCol() SAY PONVIRG2( ICOM->ALIQCOFINS )+ "|" // 33 ALQ COFINS PERC @ PRow(),PCol() SAY PONVIRG2( ICOM->QTBCCOFINS )+ "|" // 34 QTD COFINS PERC @ PRow(),PCol() SAY '' + "|" // 35 ALQ COFINS REAIS @ PRow(),PCol() SAY PONVIRG2( ICOM->VL_COFINS ) + "|" // 36 VAL COFINS REAIS @ PRow(),PCol() SAY "55" + "|" // COD_CTA = 55 ENDIF C170++ C990++ R999++ dbSelectArea( 'ICOM' ) dbSkip() ENDDO dbSelectArea( 'ICOM' ) ordScope( 0, ) ordScope( 1, ) RETURN NIL // ******************************************************************************* // ///////////////////////////////////// // GRAVA REGISTRO C190 - ITENS DA NF ENTRADA // // ///////////////////////////////////// FUNCTION RC190E() MOSTRA( 'Consolidando Itens das Compra -> ' + cDOCUME_ ) dbSelectArea( 'ICOM' ) ordScope( 0, ) ordScope( 1, ) dbSetOrder( 7 ) dbGoTop() SET FILTER TO ICOM->NUMERO_ = cNUMERO_ dbGoTop() WHILE !Eof() cCFOP := ICOM->CFOP cCST_ICMS := ICOM->CST_ICMS cALIQ := StrZero( ICOM->ALIQ_ICMS, 2 ) cLINHA := cCST_ICMS + cCFOP + cALIQ nVL_OPR := 0.00 // ( ICOM->QTDE_ * ICOM->VALOR_ ) nVL_BC_ICMS := 0.00 // IF( ICOM->ALIA_ICMS>0, nVL_OPR , 0 ) nVL_ICMS := 0.00 // ICOM->VL_ICMS nVLBCICMSST := 0.00 // ICOM->VLBVICMSST nVL_ICMS_ST := 0.00 // ICOM->VL_ICMS_ST nVL_IPI := 0.00 // ICOM->VL_IPI IF cCRT > '1' IF Right( ICOM->CFOP, 3 ) == '101' .OR. Right( ICOM->CFOP, 3 ) == '102' .OR. Right( ICOM->CFOP, 3 ) == '910' cCST_ICMS = '090' ELSE cCST_ICMS = '060' ENDIF ELSE IF Right( ICOM->CFOP, 3 ) == '101' .OR. Right( ICOM->CFOP, 3 ) == '102' .OR. Right( ICOM->CFOP, 3 ) == '910' cCST_ICMS := '900' ELSE cCST_ICMS := '500' ENDIF ENDIF IF cCFOP = '1655' cCFOP = '1652' ENDIF @ PRow() + 1, 00 SAY "|C190" + "|" // 01 Tipo do Registro @ PRow(),PCol() SAY cCST_ICMS + "|" // 02 Situacao Tributaria @ PRow(),PCol() SAY cCFOP + "|" // 03 Codigo da Natureza na Tabela 0400 @ PRow(),PCol() SAY cALIQ + "|" // 04 Aliquota do Icms WHILE ICOM->CST_ICMS + ICOM->CFOP + StrZero( ICOM->ALIQ_ICMS, 2 ) == ( cLINHA ) nVL_OPR += Icom->Total_ + Icom->Vl_Ipi + Icom->Vl_Icms_St - Icom->Vl_Desc dbSkip() ENDDO @ PRow(),PCol() SAY PONVIRG2( nVL_OPR ) + "|" // 05 Valor Operação @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_BC_ICMS)+"|" // 06 B.C ICMS // => dbfaux1->V_OPER @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_ICMS) +"|" // 07 Valor ICMS // nVLICMSR110 += nVL_ICMS @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVLBCICMSST) +"|" // 08 VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVL_ICMS_ST) +"|" // 09 Valor ST // nVLICMSR210 += nVL_ICMS_ST @ PRow(),PCol() SAY '0,00|' // 10 Valor VL_RED_BC @ PRow(),PCol() SAY '0,00|' // 11 Valor IPI @ PRow(),PCol() SAY "|" C190++ C990++ R999++ ENDDO dbSetFilter() RETURN NIL // ******************************************************************************* // ///////////////////////////////////// // GRAVA REGISTRO C190SNF - SOMA ITENS DA NF SAIDA // // ///////////////////////////////////// FUNCTION RC190SNF() MOSTRA( 'Somando itens da NFE - Nota Fiscal Eletronica -> ' + cNUMERO ) dbSelectArea( 'INF' ) INF->( dbSetOrder( 5 ) ) INF->( dbGoTop() ) IF dbSeek( NF->NUMERO ) WHILE ( .T. ) cNUMERO := INF->NUMERO cCFOP := INF->CFOP cCST_ICMS := INF->CSOSN cALIQ := StrZero( INF->AI, 2 ) cLINHA := cNUMERO + cCST_ICMS + cCFOP + cALIQ nVL_OPR := 0.00 // ( ICOM->QTDE_ * ICOM->VALOR_ ) nVL_IPI := 0.00 // ICOM->VL_IPI cCST_ICMS := IF( Len( AllTrim( INF->CSOSN ) ) < 3, '0' + AllTrim( INF->CSOSN ), INF->CSOSN ) @ PRow() + 1, 00 SAY "|C190" + "|" // 01 Tipo do Registro @ PRow(),PCol() SAY cCST_ICMS + "|" // 02 Situacao Tributaria @ PRow(),PCol() SAY cCFOP + "|" // 03 Codigo da Natureza na Tabela 0400 @ PRow(),PCol() SAY cALIQ + "|" // 04 Aliquota do Icms WHILE INF->NUMERO + INF->CSOSN + INF->CFOP + StrZero( INF->AI, 2 ) == ( cLINHA ) nVL_OPR += ( INF->VT - INF->DESC ) nVL_IPI += INF->VLIPI dbSkip() ENDDO @ PRow(),PCol() SAY PONVIRG2( nVL_OPR ) + "|" // 05 Valor Operação @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_BC_ICMS)+"|" // 06 B.C ICMS // => dbfaux1->V_OPER @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_ICMS) +"|" // 07 Valor ICMS @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVLBCICMSST) +"|" // 08 VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVL_ICMS_ST) +"|" // 09 Valor ST @ PRow(),PCol() SAY '0,00|' // 10 Valor VL_RED_BC @ PRow(),PCol() SAY PONVIRG2( nVL_IPI ) + "|" // 11 Valor IPI @ PRow(),PCol() SAY "|" // nTOT190NF += nVLOPR C190++ C990++ R999++ IF INF->NUMERO == cNUMERO LOOP ELSE EXIT ENDIF ENDDO ENDIF RETURN NIL // ******************************************************************************* // ///////////////////////////////////// // GRAVA REGISTRO C190SNFC - SOMA ITENS DA NFC DE SAIDA // // ///////////////////////////////////// FUNCTION RC190SNFC() SET DEVICE TO SCREEN MOSTRA2( 2, 'Somandos itens da NFCe - Cupom Fiscal Eletronico -> ' + cNUMERO ) SET DEVICE TO PRINT dbSelectArea( 'INFC' ) INFC->( dbSetOrder( 3 ) ) // indice por numero INFC->( ordScope( 0, cNUMERO ) ) INFC->( ordScope( 1, cNUMERO ) ) INFC->( dbGoTop() ) nVLCST60 := 0.00 nVLCST90 := 0.00 lDados60 := .f. lDados90 := .f. nDESC := 0.00 WHILE !Eof() // WHILE INFC->CSOSN+INFC->CFOP+STRZERO(INFC->AI,2) == (cLINHA) cCST_ICMS := IF( Len( AllTrim( INFC->CSOSN ) ) < 3, '0' + AllTrim( INFC->CSOSN ), INFC->CSOSN ) IF cCST_ICMS == '060' .OR. cCST_ICMS == '500' nVLCST60 += ( INFC->VT - INFC->DESC ) nDESC += INFC->DESC lDados60 := .t. ELSE nVLCST90 += ( INFC->VT - INFC->DESC ) nDESC += INFC->DESC lDados90 := .t. ENDIF dbSkip() ENDDO IF nVLCST60 = 0.00 .AND. nVLCST90 = 0.00 .AND. nDESC > 0.00 nVLCST60 = NFC->TOTGERAL ENDIF IF lDados60 cCST_ICMS := IF( PERS->CRT = '1', '500', '060' ) @ PRow() + 1, 00 SAY "|C190" + "|" // 01 Tipo do Registro @ PRow(),PCol() SAY cCST_ICMS + "|" // 02 Situacao Tributaria @ PRow(),PCol() SAY '5405' + "|" // 03 Codigo da Natureza na Tabela 0400 @ PRow(),PCol() SAY '00' + "|" // 04 Aliquota do Icms @ PRow(),PCol() SAY PONVIRG2( nVLCST60 ) + "|" // 05 Valor Operação @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_BC_ICMS) +"|" // 06 B.C ICMS @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_ICMS) +"|" // 07 Valor ICMS @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVLBCICMSST) +"|" // 08 VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVL_ICMS_ST) +"|" // 09 Valor ST @ PRow(),PCol() SAY '0,00|' // 10 Valor VL_RED_BC @ PRow(),PCol() SAY '0,00|' + "|" // 11 Valor IPI C190++ C990++ R999++ ENDIF IF lDados90 cCST_ICMS := IF( PERS->CRT = '1', '900', '090' ) @ PRow() + 1, 00 SAY "|C190" + "|" // 01 Tipo do Registro @ PRow(),PCol() SAY cCST_ICMS + "|" // 02 Situacao Tributaria @ PRow(),PCol() SAY '5102' + "|" // 03 Codigo da Natureza na Tabela 0400 @ PRow(),PCol() SAY '00' + "|" // 04 Aliquota do Icms @ PRow(),PCol() SAY PONVIRG2( nVLCST90 ) + "|" // 05 Valor Operação @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_BC_ICMS) +"|" // 06 B.C ICMS @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2(nVL_ICMS) +"|" // 07 Valor ICMS @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVLBCICMSST) +"|" // 08 VALOR DA BASE CALC ICMS ST @ PRow(),PCol() SAY '0,00|' // SAY PONVIRG2( nVL_ICMS_ST) +"|" // 09 Valor ST @ PRow(),PCol() SAY '0,00|' // 10 Valor VL_RED_BC @ PRow(),PCol() SAY '0,00|' + "|" // 11 Valor IPI C190++ C990++ R999++ ENDIF INFC->( ordScope( 0, ) ) INFC->( ordScope( 1, ) ) RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO E100 - PERIODO DE APURACAO DO ICMS // /////////////////////////////////////// FUNCTION RE100() @ PRow() + 1, 00 SAY '|E100|' // 01 - IDENTIFICACAO @ PRow(),00 SAY SONUM( DToC( dDTINI ) ) + '|' // 02 - DATA INICIAL @ PRow(),00 SAY SONUM( DToC( dDTFIM ) ) + '|' // 03 - DATA FINAL R999++ ; RE990++ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO E110 - PERIODO DE APURACAO DO ICMS // /////////////////////////////////////// FUNCTION RE110() // @PROW()+1,00 SAY '|E110|0,00|0,00|0,00|0,00|'+PONVIRG(nVLICMSR110)+'|0,00|0,00|0,00|0,00|0,00|0,00|0,00|'+PONVIRG(nVLICMSR110)+'|0,00|' @PRow() + 1, 00 SAY '|E110|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|' R999++ ; RE990++ RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO E200 - CABECALHO PERIODO DE APURACAO DO ICMS ST // /////////////////////////////////////// FUNCTION RE200() @ PRow() + 1, 00 SAY '|E200|' // 01 - IDENTIFICACAO @ PRow(),PCol() SAY 'SP|' @ PRow(),PCol() SAY SONUM( DToC( dDTINI ) ) + '|' // 02 - DATA INICIAL @ PRow(),PCol() SAY SONUM( DToC( dDTFIM ) ) + '|' // 03 - DATA FINAL R999++ ; RE990++ RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO E210 - PERIODO DE APURACAO DO ICMS ST // /////////////////////////////////////// FUNCTION RE210() @ PRow() + 1, 00 SAY '|E210|' + ; // 01 - TEXTO FIXO E210 '0|' + ; // 02 - INDICADOR DE MOVIMENTO 0-SEM 1-COM '0,00|' + ; // 03 - SALDO CREDOR DO MOV ANTERIOR '0,00|' + ; // 04 - TOTAL DO ICMS ST DE DEVOLUCAO '0,00|' + ; // 05 - TOTAL DO ICMS ST DE RESSARCIMENTO '0,00|' + ; // +PONVIRG(nVLICMSR210)+'|'+; // 06 - TOTAL DE AJUSTES - OUTROS CREDITOS E ESTORNOS '0,00|' + ; // 07 - AJUSTES DE CREDITOS DE ST '0,00|' + ; // 08 - VALOR DO ICMS RETIDO POR ST '0,00|' + ; // 09 - TOTAL DE AJUSTES - OUTROS DEBITOS '0,00|' + ; // 10 - TOTAL DE AJUSTES PROV DE AJUS DE DOC FISCAL '0,00|' + ; // 11 - TOTAL DE SALDO DEVEDOR ANTES DAS DEDUCOES '0,00|' + ; // 12 - TOTAL DE AJUSTES DEDUCOES '0,00|' + ; // 13 - IMPOSTO A RECOLHER '0,00|' + ; // +PONVIRG(nVLICMSR210)+'|'+; // 14 - SALDO CREDOT A TRANSPORTAR '0,00|' // 15 - VALOR RECOLHIDO E A RECOLHER - EXTRA APURACAO R999++ ; RE990++ RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO H005 - INVENTARIO // /////////////////////////////////////// FUNCTION RH005() @ PRow() + 1, 00 SAY '|H005|' // 01 - Texto fixo contendo "H005". @ PRow(),PCol() SAY SONUM( DToC( dDTFIM ) ) + '|' // 02 - DATA DO INVENTARIO @ PRow(),PCol() SAY PONVIRG2( nTOTESTO ) + '|' // 03 - Valor total do estoque. @ PRow(),PCol() SAY IF( nTOTESTO = 0, '00|', '01|' ) // 04 - Informe o motivo do Inventário:01: No final no período; H990++ R999++ RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // REGISTRO H010 - ITENS DO INVENTÁRIO // /////////////////////////////////////// FUNCTION RH010() dbSelectArea( 'PRO' ) dbSetOrder( 1 ) FOR X = 1 TO Len( aPROD ) cCODPRO := aPROD[ X ] dbGoTop() IF dbSeek( cCODPRO ) nESTOQUE := IF( PRO->ESTOQUE_ > 0, PRO->ESTOQUE_, 1 ) TOTITEM := nESTOQUE * PRO->CUSTONT_ @ PRow() + 1,00 SAY "|H010" // 01-Texto fixo contendo "H010". @ PRow(),PCol() SAY "|" + cCODPRO // 02-Código do item (Campo 02 do Registro 0200). @ PRow(),PCol() SAY "|" + PRO->UND_ // 03-Unidade do item. @ PRow(),PCol() SAY "|" + AllTrim( PONVIRG2( nESTOQUE ) ) // 04-Quantidade do item. @ PRow(),PCol() SAY "|" + AllTrim( PONVIRG2( PRO->CUSTONT_ ) )// 05-Valor unitário do item. @ PRow(),PCol() SAY "|" + AllTrim( PONVIRG2( TOTITEM ) ) // 06-Valor do item. @ PRow(),PCol() SAY '|0' // 07-Indicador de propriedade/posse do item: 0 @ PRow(),PCol() SAY '|' // 08-Código do participante (campo 02 do Registro 0150):- proprietário/possuidor que não seja o informante do arquivo. @ PRow(),PCol() SAY '|' // 09-Descrição complementar. @ PRow(),PCol() SAY '|55' // 10-Código da conta analítica contábil debitada/creditada. @ PRow(),PCol() SAY '||' // 11-Valor do item para efeitos do Imposto de Renda. dbSkip() H010++ H990++ R999++ ENDIF NEXT RETURN NIL ******************************************************************************** /* * Lancamentos do Bloco D * 14/07/2016 - 17:58:09 */ FUNCTION BLOCOD() LOCAL lRetorno := .f. LOCAL cTela := SaveScreen() LOCAL GetList := {} LOCAL cAlias := Select() DbSelectArea('CTE') DbSetOrder(1) DbGoTop() OrdScope(0,dDTINI) OrdScope(1,dDTFIM) DbGotop() While ! Eof() If D100 = 0 @ PRow() + 1, 00 SAY '|D001|0|' ; D990++; R999++ ENDIF * |D001|0|1|000004|57|00|1||63863|53160618852619000190570010000638631111011066|11062016|30062016|||275,41|0|1|275,41|275,41|33,05|0||| * |D100|0|1|001447|57|00|2||75661|51160117528339000168570020000756611001352504|07012016|07012016|||210,30|0|1|210,30|210,30|0 |0||| @ PRow()+1,00 Say '|'+'D100' +; // 01-REG '|'+'0' +; // 02-IND_OPER 0:AQUISICAO 1:PRESTAÇÃO '|'+'1' +; // 03-IND_EMIT 0:PROPRIA 1:TERCEITOS '|T'+AllTrim(CTE->COD_PART)+; // 04 '|'+AllTrim(CTE->COD_MOD) +; // 05 '|'+'00' +; // 06-COD_SIT - TABELA 4.1.2 - NAO SEI O QUE E COPIEI DO EXEMPLO '|'+AllTrim(CTE->SER) +; // 07-SERIE DO DOCUMENTO '|' +; // 08-SUB SERIE '|'+AllTrim(CTE->NUM_DOC) +; // 09- '|'+AllTrim(CTE->CHV_CTE) +; // 10- '|'+SONUM(DtoC(CTE->DT_DOC)) +; // 11- '|'+SONUM(DtoC(CTE->DT_A_P)) +; // 12- '|' +; // 13-TIPO DE CTE - DEFINIDO NO MANUAL DE INTEGRACAO '|' +; // 14-CHAVE REFERENCIADA '|'+AllTrim(Trans(CTE->VL_DOC,P12)) +; // 15-VALOR TOTAL DO DOCUMENTOS FISCAL '|0' +; // 16-VALOR DO DESCONTO '|1' +; // 17-IND_FRT 1:POR CONTA DO DEST/REMET '|'+AllTrim(Trans(CTE->VL_DOC,P12)) +; // 18-VALOR TOTAL DA PRESTACAO DE SERVICOS '|'+AllTrim(Trans(CTE->VLBCICMS,P12))+; // 18-BASE DE CALCULO DO ICMS '|0' +; // 18-VALOR DO ICMS '|0' +; // 19-VALOR NAO TRIBUTADO '|' +; // 20-CODIGO DA INF COMPL DO DOC FISCAL - REGISTRO 0450 '|' +; // 23-CODIGO DA CONTA ANALITICA '|' RD190() // Todo D100 tem que ter um D190 dbSkip() D100++ D990++ R999++ EndDo If D100 = 0 @ PRow() + 1, 00 SAY '|D001|1|' ; D990++; R999++ ENDIF D990++ @ PRow() + 1, 00 SAY '|D990|'+ AllTrim(Str(D990))+'|' ; R999++ OrdScope(0,) OrdScope(1,) DbSelectArea(cAlias) RETURN Nil ******************************************************************************** /* * Totalizar o registro D100 * 14/07/2016 - 18:22:31 */ FUNCTION RD190() LOCAL lRetorno := .f. LOCAL cTela := SaveScreen() LOCAL GetList := {} * |D190|000|1353|0|275,41|275,41|33,05|0|| * |D190|000|1353|0|210,3 |210,3 |0 |0|| @ PRow()+1,00 Say '|'+'D190' +; // 01-REG '|000' +; // 02-CST_ICMS '|1353' +; // 03-CFOP '|0' +; // 04-ALIQ_ICMS '|'+AllTrim(Trans(CTE->VL_DOC,P12)) +; // VL_OPER '|'+AllTrim(Trans(CTE->VLBCICMS,P12))+; // VL_BC_ICMS '|0' +; // VL_ICMS '|0' +; // VL_RED_BC '|' +; // COD_OBS '|' D190++ D990++ R999++ RETURN lRetorno // ******************************************************************************* // ///////////////////////////////////////////// // REGISTRO 9001 - ABERTURA DO REGISTRO 9001 - ENCERRAMENTO DO ARQUIVO // ///////////////////////////////////////////// FUNCTION FECHASPED() // Tive que jogar dentro deu uma função para diminuir a complexidade BLOCOD() // ******************************************************************************* RE990 := 0 @ PRow() + 1, 00 SAY '|E001|0|' ; R999++ ; RE990++ RE100() // PERIODO DE APURACAO DO ICMS RE110() // RE200() // QUANDO TEM SUBSTITUICAO TRIBUTARIA TEM QUE INFORMAR ESSE REGISTRO // RE210() @ PRow() + 1, 00 SAY '|E990|' + StrZero( ++RE990, 4 ) + '|' ; R999++ // ******************************************************************************* @ PRow() + 1, 00 SAY '|G001|1|' ; R999++ @ PRow() + 1, 00 SAY '|G990|2|' ; R999++ // ******************************************************************************* // SE MES=02 // INFORMAR INVENTÁRIO // |H001|1| - Com movimento // |H001|0| - Sem movimento H990 := 0 IF PERS->CRT = '3' nMES := Month( dDTINI ) IF nMES = 2 .OR. nMES = 3 .OR. nMES = 6 .OR. nMES = 9 .OR. nMES = 12 @ PRow() + 1, 00 SAY '|H001|0|' ; R999++ ; H990++ RH005() RH010() ELSE // SEM INVENTARIO @ PRow() + 1, 00 SAY '|H001|1|' ; R999++ ; H990++ ENDIF ELSE nMES := Month( dDTINI ) IF nMES = 2 @ PRow() + 1, 00 SAY '|H001|0|' ; R999++ ; H990++ RH005() RH010() ELSE // SEM INVENTARIO @ PRow() + 1, 00 SAY '|H001|1|' ; R999++ ; H990++ ENDIF ENDIF @ PRow() + 1, 00 SAY '|H990|' + StrZero( ++H990, 4 ) + '|' ; R999++ // ******************************************************************************* // Bloco G @ PRow() + 1, 00 SAY '|K001|1|' ; R999++ @ PRow() + 1, 00 SAY '|K990|2|' ; R999++ // ******************************************************************************* @ PRow() + 1, 00 SAY '|1001|0|'; R999++ @ PRow() + 1, 00 SAY '|1010|N|N|N|N|N|N|' + lVENDACARTAO + '|N|N|' ; R999++ // IF lVENDACARTAO = 'S' // REGISTRO 1600 @ PRow() + 1, 00 SAY '|1600' @ PRow(),PCol() SAY "|A" + cCODADMCARTAO // 02-Codigo da adm do cartao de credito @ PRow(),PCol() SAY "|" + AllTrim( PONVIRG2( nCCREDITO ) ) // 03-Total Cartao de Credito @ PRow(),PCol() SAY "|" + AllTrim( PONVIRG2( nCDEBITO ) ) // 04-Total Cartao de Debito @ PRow(),PCol() SAY '|' R999++ @ PRow() + 1, 00 SAY '|1990|4|' ; R999++ ELSE @ PRow() + 1, 00 SAY '|1990|3|' ; R999++ ENDIF // ******************************************************************************* R9001 := 0 @ PRow() + 1, 00 SAY "|9001|0|" // 1-SEM MOVIMENTO 0-COM MOVIMENTO R9001++ R999++ // ///////////////////////////////////////////// // REGISTRO 9900 - RESUMO DAS LINHAS // ///////////////////////////////////////////// @ PRow() + 1, 00 SAY "|9900|0000|" + AllTrim( StrZero( R000, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0001|" + AllTrim( StrZero( R001, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0005|" + AllTrim( StrZero( R005, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0100|" + AllTrim( StrZero( R100, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0150|" + AllTrim( StrZero( R150, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0190|" + AllTrim( StrZero( R190, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0200|" + AllTrim( StrZero( R200, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0400|" + AllTrim( StrZero( R400, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|0990|" + AllTrim( StrZero( 1,5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|C001|" + AllTrim( StrZero( C001, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|C100|" + AllTrim( StrZero( C100, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|C170|" + AllTrim( StrZero( C170, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|C190|" + AllTrim( StrZero( C190, 5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|C990|" + AllTrim( StrZero( 1,5 ) ) + "|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|D001|1|' ; R999++ ; R9001++ If D100 > 0 @ PRow() + 1, 00 SAY '|9900|D100|1|' ; R999++ ; R9001++ EndIf If D190 > 0 @ PRow() + 1, 00 SAY '|9900|D190|1|' ; R999++ ; R9001++ EndIf @ PRow() + 1, 00 SAY '|9900|D990|1|' ; R999++ ; R9001++ // FIXOS @ PRow() + 1, 00 SAY '|9900|E001|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|E100|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|E110|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|E990|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|G001|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|G990|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|H001|1|' ; R999++ ; R9001++ IF PERS->CRT = '3' IF Month( dDTFIM ) = 2 .OR. Month( dDTFIM ) = 3 .OR. Month( dDTFIM ) = 6 .OR. Month( dDTFIM ) = 9 .OR. Month( dDTFIM ) = 12 @ PRow() + 1, 00 SAY '|9900|H005|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|H010|' + StrZero( H010, 5 ) + '|' ; R999++ ; R9001++ ENDIF ELSE IF Month( dDTFIM ) = 2 @ PRow() + 1, 00 SAY '|9900|H005|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|H010|' + StrZero( H010, 5 ) + '|' ; R999++ ; R9001++ ENDIF ENDIF @ PRow() + 1, 00 SAY '|9900|H990|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|K001|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|K990|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|1001|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|1010|1|' ; R999++ ; R9001++ IF lVENDACARTAO = 'S' @ PRow() + 1, 00 SAY '|9900|1600|1|' ; R999++ ; R9001++ ENDIF @ PRow() + 1, 00 SAY '|9900|1990|1|' ; R999++ ; R9001++ // ///////////////////////////////////////////// // FINAL DO REGISTRO 9990 + QTDE DE LINHAS DO REGISTRO @ PRow() + 1, 00 SAY "|9900|9001|1|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY '|9900|9990|1|' ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|9999|1|" ; R999++ ; R9001++ @ PRow() + 1, 00 SAY "|9900|9900|" + AllTrim( Str( R9001, 5 ) ) + '|' ; R999++ ; R9001++ ; R9001++ ; R9001++ @ PRow() + 1, 00 SAY "|9990|" + AllTrim( Str( R9001, 5 ) ) + '|' ; R999++ ; R999++ @ PRow() + 1, 00 SAY "|9999|" + AllTrim( Str( R999, 5 ) ) + "|" + Chr( 13 ) + Chr( 10 ) // ///////////////////////////////////////////// RETURN NIL // ******************************************************************************* // Pesquisa se houve venda no cartao de crédito/debito FUNCTION VENDACARTAO() dbSelectArea( 'VEN' ) dbSetOrder( 5 ) SET FILTER TO VEN->DATA_ >= dDTINI .AND. VEN->DATA_ <= dDTFIM .AND. VEN->CODCOND > '019' .AND. VEN->CODCOND < '022' dbGoTop() lVENDACARTAO := 'N' IF dbSeek( '020' ) // VENDA CARTAO CREDITO lVENDACARTAO := 'S' ELSE IF dbSeek( '021' ) // VENDA CARTAO DEBITO lVENDACARTAO := 'S' ENDIF ENDIF IF lVENDACARTAO = 'S' dbGoTop() nCCREDITO := 0.00 nCDEBITO := 0.00 WHILE !Eof() IF VEN->CODCOND = '020' nCCREDITO += VEN->VALOR_ ELSE nCDEBITO += VEN->VALOR_ ENDIF VEN->( dbSkip() ) ENDDO ENDIF dbSetFilter() RETURN lVENDACARTAO // ******************************************************************************* // /////////////////////////////////////// // FUNCTION QUE FILTRA OS PRODUTOS DAS COMPRAS FUNCTION PROD_COMPRA() LOCAL cALIAS := Alias() dbSelectArea( 'ICOM' ) dbSetOrder( 2 ) ordScope( 0, COM->NUMERO_ ) ordScope( 1, COM->NUMERO_ ) dbGoTop() WHILE !Eof() cCODPRO_ := ICOM->CODPRO_ IF AScan( aPROD, cCODPRO_ ) = 0 // NAO ENCONTROU AAdd( aPROD, cCODPRO_ ) ENDIF dbSkip() ENDDO dbSelectArea( cALIAS ) RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // FUNCTION QUE FILTRA OS PRODUTOS DAS NF FUNCTION PROD_NF() LOCAL cALIAS := Alias() dbSelectArea( 'INF' ) dbSetOrder( 3 ) ordScope( 0, NF->NUMERO ) ordScope( 1, NF->NUMERO ) dbGoTop() WHILE !Eof() cCODPRO := INF->CODPRO IF AScan( aPROD, cCODPRO ) = 0 // NAO ENCONTROU AAdd( aPROD, cCODPRO ) ENDIF dbSkip() ENDDO dbSelectArea( cALIAS ) RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // FUNCTION QUE FILTRA OS PRODUTOS DAS NFC FUNCTION PROD_NFC() dbSelectArea( 'NFC' ) dbSetOrder( 7 ) NFC->( ordScope( 0, dDTINI ) ) NFC->( ordScope( 1, dDTFIM ) ) SET FILTER TO NFC->CSTAT = '100' dbGoTop() WHILE !Eof() dbSelectArea( 'INFC' ) dbSetOrder( 3 ) INFC->( ordScope( 0, NFC->NUMERO ) ) INFC->( ordScope( 1, NFC->NUMERO ) ) dbGoTop() WHILE !Eof() cCODPRO_ := INFC->CODPRO IF AScan( aPROD, cCODPRO_ ) = 0 // NAO ENCONTROU AAdd( aPROD, cCODPRO_ ) ENDIF dbSkip() ENDDO dbSelectArea( 'NFC' ) dbSkip() ENDDO NFC->( ordScope( 0, ) ) NFC->( ordScope( 1, ) ) dbSetFilter() RETURN NIL // ******************************************************************************* // /////////////////////////////////////// // FUNCTION QUE REMOVE .,/- DOS CAMPOS FUNCTION SONUM( cVAR ) cVAR := StrTran( cVAR, ",", "" ) cVAR := StrTran( cVAR, ".", "" ) cVAR := StrTran( cVAR, "/", "" ) cVAR := StrTran( cVAR, "-", "" ) RETURN cVAR // ******************************************************************************* // /////////////////////////////////////// // FUNCAO PARA TROCA O . PELA , EM NUMEROS // RETORNA VAZIO SE NAO TEM VALOR FUNCTION PONVIRG( nVALOR ) nRETORNO := IF( nVALOR > 0.00, StrTran( AllTrim( Str( nVALOR, 12, 2 ) ), ".", "," ), "" ) RETURN nRETORNO // ******************************************************************************* // /////////////////////////////////////// // FUNCAO PARA TROCA O . PELA , EM NUMEROS // RETORNA 0,00 SE NAO TEM VALOR FUNCTION PONVIRG2( nVALOR ) nRETORNO := IF( nVALOR > 0.00, StrTran( AllTrim( Str( nVALOR, 12, 2 ) ), ".", "," ), "0,00" ) RETURN nRETORNO // ******************************************************************************* STATIC FUNCTION MOSTRA( MEN, cTITULO ) SET DEVICE TO SCREEN cTITULO := IF( cTITULO = NIL, '', cTITULO ) COR := SetColor() SIZE := Len( MEN ) SetColor( "W+/RB+" ) @ 09, 05 CLEAR TO 13, 75 @ 09, 05 TO 13, 75 DOUB // @ 09,06 SAY PADC( ALLTRIM(cTITULO) , 69 ) SOMBRA( 09, 05, 13, 75 ) SetColor( "W+/RB+" ) MEN := Left( MEN, 69 ) @ 10, 06 SAY Space( 69 ) @ 11, 06 SAY Space( 69 ) @ 11, 06 SAY PadC( MEN, 69 ) @ 12, 06 SAY Space( 69 ) SetColor( COR ) SET DEVICE TO PRINT RETURN ******************************************************************************** /* * Encontrar a Uf do codigo recebido * 08/11/2017 - 19:05:26 */ FUNCTION Acha_Uf(cCod) Local aUfCod:={'11',; '12',; '13',; '14',; '15',; '16',; '17',; '21',; '22',; '23',; '24',; '25',; '26',; '27',; '28',; '29',; '31',; '32',; '33',; '35',; '41',; '42',; '43',; '50',; '51',; '52',; '53'} Local aUfSigla:={ 'RO',; 'AC',; 'AM',; 'RR',; 'PA',; 'AP',; 'TO',; 'MA',; 'PI',; 'CE',; 'RN',; 'PB',; 'PE',; 'AL',; 'SE',; 'BA',; 'MG',; 'ES',; 'RJ',; 'SP',; 'PR',; 'SC',; 'RS',; 'MS',; 'MT',; 'GO',; 'DF'} Return( aUfSigla[ Ascan( aUfCod,cCod ) ] )