/*
*/
Static cSepa := '|'
Static CRLF := Chr(13)+Chr(10)
//Static lTestando:= ""
//--------------------------------------------------------------------
Function Spedpis()
REQUEST DBFCDX
RDDSETDEFAULT("dbfcdx")
DBSETDRIVER("dbfcdx")
set confirm on
set deleted on
set bell off
set scoreboard off
set date british
set epoch to 1950
Set date format to "DD/MM/YYYY"
set exclusive off
SET WRAP ON
dDATAPROC := dDATAPROC := Date()
Configurar()
IF MsgConf("Confirma Geracao SPED Contribuicoes ?","1") == .t.
GeraSpedFiscal_Pis()
Endif
Return Nil
//--------------------------------------------------------
Function GeraSpedFiscal_Pis()
private dDATAINI := BOM( dDATAPROC )
private dDATAFIM := EOM( dDATAPROC )
private cNomeTxt := "c:\temp\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TXT"
private nTMP := fcreate( "c:\temp\PIS_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TXT" )
Close All
Cria_C100()
Cria_C113() // Devolucao Mercadoria
Cria_C170()
Cria_C180()
Cria_C181()
Cria_C185()
Cria_C190()
Cria_C191()
Cria_C195()
Cria_E110()
Cria_E210()
Cria_M100()
Cria_C491()
Cria_C495()
Close All
Sele 1
Use Forneced
Set index to Forneced
Sele 2
Use Produto Alias Prod
Set index to Produto
Sele 3
Use ArqNotas Alias Nota
Set index to Arqnotas
Sele 4
Use Agendas Alias Agenda
Set index to Agendas
Sele 5
Use Moviment Alias Mvto
Set index to Moviment
Sele 6
Use c:\temp\C100 alias c100 Exclusive
Index on CodPart+NumDoc+Ser to c:\temp\C100
Set index to c:\temp\C100
Sele 7
Use c:\temp\C170 alias c170 Exclusive
Sele 8
Use c:\temp\C190 alias c190 Exclusive
Index on CODITEM tag c190_1 to c:\temp\C190
Set index to c:\temp\c190
Sele 9
use c:\temp\E110 Alias E110 Exclusive
Sele 10
use c:\temp\E210 Alias E210 Exclusive
Index on JAFFiltro to c:\temp\E210
Sele 11
use c:\temp\M100 Alias M100 Exclusive
Sele 12
Use c:\temp\C113 alias C113 Exclusive
Sele 13
Use c:\temp\C491 alias C491 Exclusive
Index on CODITEM to c:\temp\C491
Sele 14
Use c:\temp\C495 alias C495 Exclusive
Index on CODITEM to c:\temp\C495
Sele 15
//Use (xPathGZ+'movcaixa') alias GZ
Use (xPathGZ+'movoutra') alias GZ
Alerta(' necessa rio fazer a exporta‡Æo do Movimento'+Chr(10)+;
'no GZ Sistema para Gera‡Æo do Arquivo com os Itens'+chr(10)+;
'vendido no Periodo'+ Chr(10)+;
xPathGZ+'MOVOUTRA.DBF' )
If !File(xPathGZ+'movoutra.cdx')
Centra(24,'Criando Arquivo para Uso Movcaixa.cdx')
index on DataMovto Tag MovCaiDt to c:\temp\MovOutra ;
For( Gz->DataMovto >=dDATAINI .and. Gz->DataMovto <= dDATAFIM ;
.And. ;
Status=='01' ; // Produtos Apenas
.And. ;
Cancelado==.f. ; // Sem Produtos Cancelados
)
Endif
Set index to c:\temp\MovOutra
SELE 16
USE PISCOFIN ALIAS TABPIS
SET INDEX TO PISCOFIN
Sele 17
Use c:\temp\c191 alias C191 Exclusive
Index on JAFFiltro to c:\temp\c191
Sele 18
Use c:\temp\c195 alias C195 Exclusive
Index on JAFFiltro to c:\temp\c195
//---- Resumo de Entradas(NFe Modelo 55)
Sele 19
Use c:\temp\C180 alias c180 Exclusive
Index on CODITEM tag c180_1 to c:\temp\C180
Set index to c:\temp\c180
Sele 20
Use c:\temp\c181 alias C181 Exclusive
Index on C181->CSTPIS+C181->CFOP+Str(C181->ALIQPIS,8,4)+C181->JAFFiltro to c:\temp\c181
Sele 21
Use c:\temp\c185 alias C185 Exclusive
Index on C185->CSTCOF+C185->CFOP+Str(C185->ALIQCOF,8,4)+C185->JAFFiltro to c:\temp\c185
Sele 22
Use CADNCM
Set index to CADNCM
nLinha_BLOCOC_C100 := 0
nLinha_BLOCOC_C113 := 0
nLinha_BLOCOC_C170 := 0
nLinha_BLOCOC_C180 := 0
nLinha_BLOCOC_C181 := 0
nLinha_BLOCOC_C185 := 0
nLinha_BLOCOC_C190 := 0
nLinha_BLOCOC_C191 := 0
nLinha_BLOCOC_C195 := 0
nLinha_BLOCOC_C490 := 0
nLinha_BLOCOC_C491 := 0
nLinha_BLOCOC_C495 := 0
nLinha_BLOCOH_010 := 0
nLinha_BLOCOE_E200 := 0
nLinha_BLOCOE_E210 := 0
nLinhasBloco0 := 0
wRegistros_140 := {}
wRegistros_150 := {}
wRegistros_200 := {}
wBloco_Soma_9990 := {}
wRegistros_C010 := 0
IF MsgConf("Inicia Geracao do SPED Pis/Cofins ?","1") == .f.
Close all
Quit
Endif
GeraBlocoC() // Gera os Dados Em DBF
//18-07-2013 APENAS UM TESTE CASO QUEIRA GERAR E SO LIBERAR
// Alterado para perar pelo movoutra
GeraDados_C491() // Gera Dados C491 (Dados Venda ECF)
Func_bloco0()
Func_BlocoA() // Prestadora de Servicos
Func_BlocoC_DetalhaNFe_C170() // Grava o TXT apos Gerado Func_BlocoC490()// Dados de ECF
*Func_BlocoC_ResumoC190() // Grava o TXT apos Gerado Func_BlocoC490()// Dados de ECF
Func_BlocoD() // Vazio
*Func_BlocoE() // ICMS E IPI
Func_BlocoF() // Vazio
*Func_BlocoG() // Vazio
*Func_BlocoH() // INVENTARIO
Func_BlocoM() // Vazio
Func_Bloco1001()// Vazio
Aadd(wBloco_Soma_9990,{'C100',nLinha_BLOCOC_C100} )
Aadd(wBloco_Soma_9990,{'C170',nLinha_BLOCOC_C170} )
Aadd(wBloco_Soma_9990,{'C180',nLinha_BLOCOC_C180} )
Aadd(wBloco_Soma_9990,{'C181',nLinha_BLOCOC_C181} )
Aadd(wBloco_Soma_9990,{'C185',nLinha_BLOCOC_C185} )
Aadd(wBloco_Soma_9990,{'C190',nLinha_BLOCOC_C190} )
Aadd(wBloco_Soma_9990,{'C191',nLinha_BLOCOC_C191} )
Aadd(wBloco_Soma_9990,{'C195',nLinha_BLOCOC_C195} )
Aadd(wBloco_Soma_9990,{'C490',nLinha_BLOCOC_C490} )
Aadd(wBloco_Soma_9990,{'C491',nLinha_BLOCOC_C491} )
Aadd(wBloco_Soma_9990,{'C495',nLinha_BLOCOC_C495} )
Func_bloco9() // Encerramento
fclose( nTMP )
Return Nil
//--------------------------------------------------------
Function Func_bloco0()
nLinhasBloco := 0
Sele Forneced
OrdSetFocus('Forneced')
Go top
Seek cEmpresa
If !Found()
Alerta('Erro no cadastro da Empresa.. impossivel Montar Arquivo!')
Return nil
Endif
Reg := '0000'
Cod_ver := '003' // 002 03.06.2013
Tipo_Escrit := '0'
ind_sit_Esp := '0'
Num_rec_anterior:= '' // Ver
Dt_ini := LimpaStr(DTOC(dDATAINI))
Dt_Fim := LimpaStr(DtoC(dDATAFIM))
cNome := Alltrim(Substr(Forneced->Razao,1,40))
cCNPJ := StrZero(val(LimpaStr(Forneced->CGC)),14)
cUF := Forneced->UF
cCod_Num := Forneced->IBGE_cida
cSuframa := ''
ind_Nat_Pj := '00'
Ind_Ativ := '2'
cTxt := Reg +cSepa+;
Cod_ver +cSepa+;
Tipo_Escrit +cSepa+;
ind_sit_Esp +cSepa+;
Num_rec_anterior+cSepa+;
Dt_ini +cSepa+;
Dt_Fim +cSepa+;
cNome +cSepa+;
cCNPJ +cSepa+;
cUF +cSepa+;
cCod_Num +cSepa+;
cSuframa +cSepa+;
ind_Nat_Pj +cSepa+;
Ind_Ativ +cSepa
Fwrite( nTMP,cSepa+cTxt+CRLF)
Aadd(wBloco_Soma_9990,{'0000',1} )
// Abertura de Bloco 0
cTxt := '0001'+cSepa+'0'+cSepa // 0-Com Movto 1-Sem Mvto
Fwrite( nTMP,cSepa+cTxt+CRLF )
Aadd(wBloco_Soma_9990,{'0001',1} )
// Bloco 0 Registro 0100 - DADOS DO CONTABILISTA
Reg := '0100'
cNome := Alltrim(xContador_nome)//'EDSON RUSSIGNOLIA'
cCpf := xContador_cpf //'24912262862'
cCRC := xContador_crc //StrZero(123456789,11)
cCNPJ := ''
cCEP := ''
cEND := ''
cNUM := ''
cCompl := ''
cBairro := ''
cFone := ''
cFax := ''
cEmail := ''
cCod_num := xContador_IBGE//'3534708'
cTxt := Reg +cSepa+;
cNome +cSepa+;
cCpf +cSepa+;
cCRC +cSepa+;
cCNPJ +cSepa+;
cCEP +cSepa+;
cEND +cSepa+;
cNUM +cSepa+;
cCompl +cSepa+;
cBairro +cSepa+;
cFone +cSepa+;
cFax +cSepa+;
cEmail +cSepa+;
cCod_num +cSepa
Fwrite( nTMP,cSepa+cTxt+CRLF)
Aadd(wBloco_Soma_9990,{'0100',1} )
//--- Registro 0110
Reg := '0110'
cTxt := Reg +cSepa+;
'1' +cSepa+;
'1' +cSepa+;
'1' +cSepa+;
"" +cSepa // 03.06.2013
Fwrite( nTMP,cSepa+cTxt+CRLF)
Aadd(wBloco_Soma_9990,{'0110',1 } )
//---- Bloco 0 - Registro 140 - Tabela de Cadastro do Estabelecimentos
nB0Reg140 := MontaBloco0_Reg140(wRegistros_140)
//---- Bloco 0 - Registro 150 - Tabela de Cadastro do Participante
nB0Reg150 := MontaBloco0_Reg150(wRegistros_150)
//---- Bloco 0 - Registro 190 - INDENTIFICACAO DAS UNIDADES DE MEDIDAS
nB0Reg190 := MontaBloco0_Reg190(wRegistros_200)
//---- Bloco 0 - Registro 200 - Tabela de Identificao do Item(Produto e Servico)
nB0Reg200 := MontaBloco0_Reg200(wRegistros_200)
//-- Fechando bloco 0
Aadd(wBloco_Soma_9990,{'0140',nB0Reg140} )
Aadd(wBloco_Soma_9990,{'0150',nB0Reg150} )
Aadd(wBloco_Soma_9990,{'0190',nB0Reg190} )
Aadd(wBloco_Soma_9990,{'0200',nB0Reg200} )
Aadd(wBloco_Soma_9990,{'0990',1} )
nLinhasBloco0 := 1+1+1+1+nB0Reg140+nB0Reg150+nB0Reg190+nB0Reg200+1
cTxt := '0990'+cSepa+Alltrim(Str(nLinhasBloco0))+cSepa
Fwrite( nTMP,cSepa+cTxt+CRLF )
Return Nil
//------------------------------------------------
Static Function LimpaStr(Limpar)
Local x := Len(Limpar)
Local Numeros:= "0123456789"
Local nRet := ''
Local cString:= Limpar
For x:= 1 to Len(cString)
If Substr(cString,x,1)$Numeros
nRet += Substr(cString,x,1)
Endif
Next
Return (nRet)
//--------------------------------------
Static Function MontaBloco0_Reg150(lLista)
/* Monta os registros com Base na lLista
e Retorna a quantidade de Registros
*/
Local x ,nOk := 0
Sele Forneced
OrdSetFocus('Forneced')
For x:= 1 to Len(lLista)
Go top
Seek lLista[x]
If !Found()
Loop
Endif
nOk++
Reg := '0150'
Cod_part := Forneced->Codigo
Nome := Alltrim(Forneced->Razao)
Cod_pais := '1058'
CNPJ := Iif(Forneced->PessJurid==.t.,StrZero(val(LimpaStr(Forneced->CGC)),14),'')
CPF := Iif(Forneced->PessJurid==.f.,StrZero(val(LimpaStr(Forneced->CGC)),11),'')
cIE := Iif(Forneced->PessJurid==.f.,'',Alltrim(Str(Val(LimpaStr(Forneced->IE)),14)))
cIE := Iif(cIE=='0','',cIE)
Cod_Num := Alltrim(Forneced->IBGE_cida)
Suframa := ''
End := Alltrim(Forneced->Endereco)
Num := ''
Compl := ''
cBairro := Alltrim(Forneced->Bairro)
cTxt := Reg +cSepa+;
Cod_part +cSepa+;
Nome +cSepa+;
Cod_pais +cSepa+;
CNPJ +cSepa+;
CPF +cSepa+;
cIE +cSepa+;
Cod_Num +cSepa+;
Suframa +cSepa+;
End +cSepa+;
Num +cSepa+;
Compl +cSepa+;
cBairro +cSepa
Fwrite( nTMP,cSepa+cTxt+CRLF)
Next
Return nOk
//--------------------------------------
Static Function MontaBloco0_Reg190(lLista)
/* Monta os registros com Base na lLista
e Retorna a quantidade de Registros
*/
Local x ,nOk := 0 , wEmbala := {}, i, cPesq
//--- Correcao para evitar faltar unidade.
Aadd(wEmbala ,{'UN',"Unidades"})
Sele Prod
OrdSetFocus('Prod01')
For x:= 1 to Len(lLista)
Go top
Seek lLista[x]
If !Found()
Loop
Endif
cPesq := Alltrim(Prod->EMBALTITUL)
If Empty(cPesq)
Loop
Endif
nPos := Ascan(wEmbala, {|x|x[1]==cPesq})
If nPos==0
cTitulo := 'Unidades'
If cPesq=="KG"
cTitulo := 'Kilo'
ElseIf cPesq=="CX"
cTitulo := 'Caixa'
Endif
Aadd(wEmbala,{cPesq,cTitulo})
Endif
Next
If Len(wEmbala)==0
Aadd(wEmbala ,{'UN',"Unidades"})
Endif
For i:= 1 to Len(wEmbala)
nOk++
cTxt := '0190'+cSepa+Alltrim(Substr(wEmbala[i,1],1,6))+;
cSepa+Alltrim(Substr(wEmbala[i,2],1,6))+cSepa
Fwrite( nTMP,cSepa+cTxt+CRLF)
Next
Return nOk
//--------------------------------------
Static Function MontaBloco0_Reg200(lLista)
/* Monta os registros com Base na lLista
e Retorna a quantidade de Registros
*/
Local x ,nOk := 0
For x:= 1 to Len(lLista)
Sele Prod
OrdSetFocus('Prod01')
Go top
Seek lLista[x]
If !Found()
Loop
Endif
nOk++
Reg := '0200'
Cod_item := Alltrim(Prod->Codigo)
Descr_item := Alltrim(Prod->Descricao)
Cod_Barra := Alltrim(Prod->Ean)
Cod_ant_item:= ''
Univ_Inv := Iif(Empty(Prod->EMBALTITUL),"UN",Alltrim(Prod->EMBALTITUL))
Tipo_item := '00' // Ver Melhor
Cod_NCM := Alltrim(Iif(Empty(Prod->MCN),'10203040',Prod->MCN))
Ex_IPi := ''
Cod_gen := '10' // Fazer Cadastro
Cod_lst := ''
Aliq_icms := Alltrim(Transf(Prod->icmsv,'@EZ 999.99'))
Cod_NCM := ValidaCodigoNCM(Cod_NCM)
cTxt := Reg +cSepa+;
Cod_item +cSepa+;
Descr_item +cSepa+;
Cod_Barra +cSepa+;
Cod_ant_item+cSepa+;
Univ_Inv +cSepa+;
Tipo_item +cSepa+;
Cod_NCM +cSepa+;
Ex_IPi +cSepa+;
Cod_gen +cSepa+;
Cod_lst +cSepa+;
Aliq_icms +cSepa
Fwrite( nTMP,cSepa+cTxt+CRLF)
Next
Return nOk
//------------------------------------------------
Function Cria_C100()
Local Estru := {}
estru := { {'Reg' , 'C' , 04,0 },;
{'IndOper' , 'C' , 01,0 },;
{'IndEmit' , 'C' , 01,0 },;
{'CodPart' , 'C' , 05,0 },; // Codigo JAF
{'CodMod' , 'C' , 02,0 },;
{'CodSit' , 'C' , 02,0 },;
{'Ser' , 'C' , 03,0 },;
{'NumDoc' , 'C' , 09,0 },; // Converte o Atual e 10
{'chvnfe' , 'C' , 44,0 },;
{'dtdoc' , 'D' , 01,0 },;
{'Dtes' , 'D' , 01,0 },;
{'vldoc' , 'N' , 13,2 },;
{'indpagto' , 'C' , 01,0 },; // Padrao Avista
{'vldesc' , 'N' , 13,2 },;
{'vlabatnt' , 'N' , 13,2 },;
{'vlmerc' , 'N' , 13,2 },;
{'indfrt' , 'C' , 01,0 },;
{'vlfrt' , 'N' , 13,2 },;
{'vlSeg' , 'N' , 13,2 },;
{'vloutda' , 'N' , 13,2 },;
{'vlbcicms' , 'N' , 13,2 },;
{'vlicms' , 'N' , 13,2 },;
{'vlbcicmsst','N' , 13,2 },;
{'vlicmsst' , 'N' , 13,2 },;
{'vlipi' , 'N' , 13,2 },;
{'vlpis' , 'N' , 13,2 },;
{'vlcofins' , 'N' , 13,2 },;
{'vlpisst' , 'N' , 13,2 },;
{'vlconfisst','N' , 13,2 } }
dbcreate('c:\temp\C100.dbf',Estru)
Return Nil
//------------------------------------------------
Function Cria_C113()
Local Estru := {}
estru := { {'Reg' , 'C' , 04,0 },;
{'IndOper' , 'C' , 01,0 },;
{'IndEmit' , 'C' , 01,0 },;
{'CodPart' , 'C' , 05,0 },; // Codigo JAF
{'CodMod' , 'C' , 02,0 },;
{'Ser' , 'C' , 04,0 },;
{'sub' , 'C' , 03,0 },;
{'NumDoc' , 'C' , 09,0 },; // Converte o Atual e 10
{'dtdoc' , 'D' , 01,0 },;
{'JAFFiltro' ,'C' , 20,0 } } // Antigo
dbcreate('c:\temp\C113.dbf',Estru)
Return Nil
//------------------------------------------------
Function Cria_C170()
Local Estru := {}
estru := { {'Reg' , 'C' , 04,0 },;
{'numitem' , 'C' , 03,0 },;
{'Coditem' , 'C' , 05,0 },;
{'descricao', 'C' , 60,0 },;
{'qtd' , 'N' , 14,5 },;
{'unid' , 'C' , 06,0 },;
{'vlitem' , 'N' , 13,2 },;
{'vldesc' , 'N' , 13,2 },;
{'indmov' , 'c' , 01,0 },;
{'csticms' , 'c' , 03,0 },;
{'cfop' , 'c' , 04,0 },;
{'codnat' , 'c' , 10,0 },;
{'vlbcicms' , 'N' , 13,2 },;
{'Aliqicms' , 'N' , 06,2 },;
{'vlicms' , 'N' , 13,2 },;
{'vlbcicmsst','N' , 13,2 },;
{'aliqst' , 'N' , 13,2 },;
{'vlicmsst' , 'N' , 13,2 },;
{'indapur' , 'c' , 01,0 },;
{'cstipi' , 'c' , 02,0 },;
{'codenq' , 'c' , 03,0 },;
{'vlbcipi' , 'N' , 13,2 },;
{'aliqipi' , 'N' , 06,2 },;
{'vlipi' , 'N' , 13,2 },;
{'cstpis' , 'c' , 02,0 },;
{'vlbcpis' , 'N' , 13,2 },; // {'aliqpis' , 'N' , 13,2 },;
{'quantbcpis','N' , 13,2 },;
{'aliqpis' , 'N' , 13,4 },;
{'vlpis' , 'N' , 13,2 },;
{'cstcofins', 'C' , 02,0 },;
{'vlbcconfis','N' , 13,2 },;
{'aliqconfis','N' , 06,2 },;
{'qtdbcconfi','N' , 13,3 },; //{'aliqconfis','N' , 13,4 },;
{'vlcofins' ,'N' , 13,2 },;
{'codcta' ,'C' , 50,0 },;
{'JAFFiltro' ,'C' , 20,0 } } // 16
dbcreate('c:\temp\C170.dbf',Estru)
Return Nil
//------------------------------------------------
Function Cria_C190()
Local Estru := {}
estru := { {'Reg' , 'C' , 04,0 },;
{'CODMOD' , 'C' , 02,0 },;
{'DTREFINI' , 'D' , 08,0 },;
{'DTREFFIM' , 'D' , 08,0 },;
{'CODITEM' , 'C' , 05,0 },;
{'CODNCM' , 'C' , 08,0 },;
{'EXPIPI' , 'C' , 03,0 },;
{'VLTOTITEM', 'N' , 13,2 },;
{'JAFFiltro', 'C' , 05,0 } } // Codigo Fornecedor
dbcreate('c:\temp\C190.dbf',Estru)
Return Nil
//------------------------------------------------
Function Cria_C191()
Local Estru := {}
estru := { {'Reg' , 'C' , 04,0 },;
{'CNPJPART' , 'C' , 14,0 },;
{'CSTPIS' , 'C' , 02,0 },;
{'CFOP' , 'C' , 04,0 },;
{'VLRITEM' , 'N' , 13,2 },;
{'VLRDESC' , 'N' , 13,2 },;
{'VLRBCPIS' , 'N' , 13,2 },;
{'ALIQPIS' , 'N' , 08,4 },;
{'QTDBCPIS' , 'N' , 13,3 },;
{'ALIQPISQT', 'N' , 13,4 },;
{'VLPIS' , 'N' , 13,2 },;
{'CODCTA' , 'C' , 60,0 },;
{'JAFFiltro', 'C' , 5+5+2+4,0 } } // Item+CNPJ
dbcreate('c:\temp\C191.dbf',Estru)
Return Nil
//------------------------------------------------
Function Cria_C195()
Local Estru := {}
estru := { {'Reg' , 'C' , 04,0 },;
{'CNPJPART' , 'C' , 14,0 },;
{'CSTCOF' , 'C' , 02,0 },;
{'CFOP' , 'C' , 04,0 },;
{'VLRITEM' , 'N' , 13,2 },;
{'VLRDESC' , 'N' , 13,2 },;
{'VLRBCCOF' , 'N' , 13,2 },;
{'ALIQCOF' , 'N' , 08,4 },;
{'QTDBCCOF' , 'N' , 13,3 },;
{'ALIQCOFQT', 'N' , 13,4 },;
{'VLCOF' , 'N' , 13,2 },;
{'CODCTA' , 'C' , 60,0 },;
{'JAFFiltro', 'C' , 5+5+2+4,0 } } // Item/Part/CST/CFOP
dbcreate('c:\temp\C195.dbf',Estru)
Return Nil
//------------------------------------------
Static Function Cria_E110()
Local Estru := {}
Estru := { {"Reg" , 'C',04,0 },;
{"VlTotDeb" , "N",13,2 },;
{"VlAjuDeb" , "N",13,2 },;
{"VlTotAJDb" , "N",13,2 },;
{"VlEstCred" , "N",13,2 },;
{"VlTotCred" , "N",13,2 },;
{"VlAjCred" , "N",13,2 },;
{"VlTotAjcd" , "N",13,2 },;
{"VlEstdedb" , "N",13,2 },;
{"Vlsldcrea" , "N",13,2 },;
{"Vlsldapur" , "N",13,2 },;
{"VlTotredu" , "N",13,2 },;
{"Vlicmsrec" , "N",13,2 },;
{"Vlsdcdtrs" , "N",13,2 },;
{"debesp" , "N",13,2 } }
Dbcreate('c:\temp\E110.dbf',Estru)
Return nil
//------------------------------------------
Static Function Cria_E210()
Local Estru := {}
Estru := { {"Reg" , 'C',04,0 },;
{"Indmovst" , "c",01,0 },;
{"VLSDCRDAST", "N",13,2 },;
{"VLDEVOLST" , "N",13,2 },;
{"VLRESS_ST" , "N",13,2 },;
{"VLOUTCRDST", "N",13,2 },;
{"VLAJCRDST" , "N",13,2 },;
{"VLRETE_ST" , "N",13,2 },;
{"VLOUTDBST" , "N",13,2 },;
{"VLAJTDBST" , "N",13,2 },;
{"VLSLDDAST" , "N",13,2 },;
{"VLDEDUCST" , "N",13,2 },;
{"VLICMRCST" , "N",13,2 },;
{"VSLDCRSTTR", "N",13,2 },;
{"DRBESPST" , "N",13,2 },;
{'JAFFiltro' , 'C',02,0 } } // UF
Dbcreate('c:\temp\E210.dbf',Estru)
Return nil
//------------------------------------------
Function GeraBlocoC()
Local cPesq, _cPesq
wListaNotas := {}
*Aadd(wListaNotas,546001) // Danone
*Aadd(wListaNotas,2712070) // Spaipa
*Aadd(wListaNotas,1253) // Elcio Produtor
wListaNotas := CarregaListaTeste()
lTestando2 := .f.
Centra(24,'Selecionando Notas......')
Sele Nota
Index on Nota->Numero_Nf + Nota->Serie_Nf + Nota->Cli_Codi to C:\temp\Nota ;
For ( Nota->data_lc >=dDATAINI ;
.And. ;
Nota->data_lc <=dDataFim )
//dbedit(00,00,24,79)
Go top
//--- Colocando Apenas um Estabelecimento
nPos := Ascan(wRegistros_140,cEmpresa)
if nPos==0
Aadd(wRegistros_140,cEmpresa)
Endif
nCorte := 0
Do While ! Eof()
If lSomentePDV=="S"
Exit
Endif
If lTestando2
nPos := Ascan(wListaNotas,Val(Nota->Numero_Nf))
If nPos==0
Skip+1
Loop
Endif
Endif
If nCorte>100
Exit
Endif
//cCodModelo := Nota->Especie_Nf
cCodModelo := '55' // Nota->Especie_Nf
If Nota->status#"A" // Nota nao Atualizada Ainda..
Skip+1
Loop
Endif
// Testando Agendas
Sele Agenda
OrdSetFocus('Agd01')
Go top
Seek Nota->agenda
If Found()
If Agenda->CONTABILI==.f.
Sele Nota
Skip+1
Loop
Endif
If !Empty(Agenda->MODELONF)
cCodModelo := Agenda->MODELONF
Endif
Endif
_Cnpj:= ''
Sele Forneced
OrdSetFocus('Forneced')
Go top
Seek Nota->cli_codi
If Found()
If Forneced->PessJurid==.t.
_Cnpj := StrZero(val(LimpaStr(Forneced->CGC)),14)
Else
_Cnpj := StrZero(val(LimpaStr(Forneced->CGC)),11)
Endif
Endif
lNotaDevolucao:= Iif(Nota->movto=='D',.t.,.f.)
lNotaDevolucao:= .f.
cTipoOperacao := Iif(Nota->movto=='C','0','1') // Emissao Nota Propria
cChaveNfe := Nota->Chave_Nfe // Ver tem que ter a Chave da NFE
If cTipoOperacao=='1'
cCodModelo:= '01'
cCodModelo:= '55' // Somente NFe
Endif
Sele C100
Append Blank
Repla C100->Reg With 'C100'
Repla C100->IndOper With cTipoOperacao
Repla C100->IndEmit With Iif(cTipoOperacao=='0','1','0')
Repla C100->CodPart With Nota->cli_codi
Repla C100->CodSit With '00'
Repla C100->CodMod With cCodModelo//Nota->Especie_Nf
Repla C100->Ser With Iif(Alltrim(Nota->serie_nf)=='UN','1',Nota->serie_nf)
Repla C100->NumDoc With StrZero(val(Nota->numero_nf),9)
//Repla C100->chvnfe With Iif(C100->CodMod=='55',Substr(cChaveNfe,4,44),'')
//Repla C100->chvnfe With Right(Alltrim(Nota->Chave_Nfe),44)
Repla C100->chvnfe With PegaChaveNfe(Nota->Chave_Nfe)
If Empty(C100->chvnfe)
Repla C100->CodMod With "01"
Endif
* 21/03/2012
*If C100->IndEmit=='1'
* Repla C100->chvnfe With ''
*Endif
Repla C100->dtdoc With Nota->data_nf
Repla C100->Dtes With Nota->data_nf
Repla C100->vldoc With Nota->valor_nf
Repla C100->indpagto With '0'
Repla C100->vldesc With Nota->vlr_Desco
//Repla C100->vlabatnt With Nota->
//Repla C100->vlmerc With Nota->ValorProd // Atulizado pelo C170
Repla C100->indfrt With '1'
//Repla C100->vlfrt With Nota->
//Repla C100->vlSeg With Nota->
Repla C100->vloutda With Nota->ValorOutro
Repla C100->vlbcicms With Nota->BaseIcms
Repla C100->vlicms With Nota->ValorIcms
Repla C100->vlbcicmsst With Nota->BaseSubstr
Repla C100->vlicmsst With Nota->ValorSubst
Repla C100->vlipi With Nota->ValorIpi
//Esta Solicitando a geracao do C190
*Repla C100->vlpis With Nota->VLRPIS
*Repla C100->vlcofins With Nota->VLRCOFINS
*Repla C100->vlpisst With Nota->
*Repla C100->vlconfisst With Nota->
nPos := Ascan(wRegistros_150,Nota->cli_codi)
if nPos==0
Aadd(wRegistros_150,Nota->cli_codi)
Endif
cNota := Nota->numero_nf+Space(0)
cSerie:= Nota->serie_nf
cForne:= Nota->cli_codi
cTpoRegUF := Nota->UF_NOTA+Iif(C100->IndOper=='0','E',"S")
//--- JAFFILTRO
_cPesq := C100->CodPart+C100->NumDoc+C100->Ser
If lNotaDevolucao==.t.
GeraRegistroC113(_cPesq)
Endif
Sele Mvto
OrdSetFocus("movimen1")
Go Top
Seek (cNota+Substr(cSerie,1,3)+cForne)
If !Found()
//--Nota sem item Nao pode Enviar
Sele C100
Repla C100->reg With 'X100'
Sele Nota
Skip+1
Loop
Endif
Centra(24,'Selecionando Nota......'+cNota+'/'+cForne)
nSeq := 1
wTotalCofins := 0
wTotalPIS := 0
wTotalMERC := 0
Do While( Mvto->nf_num == cNota .And. ;
Mvto->nf_serie == Substr(cSerie,1,3) .And. ;
Mvto->nf_dest == cForne .and. ! Eof() )
nQuant := iif(Empty(Mvto->Qsaida),Mvto->Qentrada,Mvto->Qsaida)
nValor := iif(Empty(Mvto->Qsaida),Mvto->Custo_nf,Mvto->Venda)
cEmbal := "UN"
cCodMCN:= ''
Sele Prod
OrdSetFocus('Prod01')
Go top
Seek Mvto->Codigo
If Found()
cEmbal := Iif(Empty(Prod->EMBALTITUL),"UN",Alltrim(Prod->EMBALTITUL))
cCodMCN:= ValidaCodigoNCM(Prod->MCN)
Endif
cCfopIcms:= Mvto->nf_cfo
If cTipoOperacao=='0' // Quebra galho
If Substr(cCfopIcms,1,1)=="5"
cCfopIcms:='1'+Substr(cCfopIcms,2,3)
ElseIf Substr(cCfopIcms,1,1)=="6"
cCfopIcms:='2'+Substr(cCfopIcms,2,3)
Endif
Endif
Sele C170
Append Blank
Repla C170->Reg With 'C170'
Repla C170->numitem With StrZero(nSeq++,3)
Repla C170->Coditem With Mvto->Codigo
Repla C170->descricao With Mvto->Descricao
Repla C170->qtd With nQuant
Repla C170->unid With cEmbal
Repla C170->vlitem With nValor*nQuant
//Repla C170->vldesc With Mvto->
Repla C170->indmov With '0'
Repla C170->csticms With StrZero(Val(Mvto->cst_nf),3)
//Repla C170->cfop With LimpaStr(Mvto->nf_cfo)
Repla C170->cfop With LimpaStr(cCfopIcms)
//Repla C170->codnat With Mvto->
Repla C170->vlbcicms With Mvto->BASEICMS
Repla C170->Aliqicms With Mvto->icmsc
Repla C170->vlicms With Mvto->VLRICMS
Repla C170->vlbcicmsst With Mvto->BASEST
//Repla C170->aliqst With Mvto->
Repla C170->vlicmsst With Mvto->VLRST
Repla C170->indapur With '0'
//Repla C170->cstipi With
//Repla C170->codenq With Mvto->
//Repla C170->vlbcipi With Mvto->
//Repla C170->aliqipi With Mvto->
Repla C170->vlipi With Mvto->VLRIPI //* nQuant
Repla C170->cstpis With '98' // Mvto->Pis_Cst
Repla C170->vlbcpis With Mvto->Pis_Base
Repla C170->aliqpis With Mvto->Pis_Aliq
//--- Pegando pelo cadastro do JAF
//Repla C170->quantbcpis With nQuant
//Repla C170->vlpis With Mvto->VLRPIS
//Repla C170->cstcofins With '98' // Mvto->conf_Cst
//Repla C170->vlbcconfis With Mvto->conf_Base
//Repla C170->aliqconfis With Mvto->conf_Aliq
//Repla C170->qtdbcconfi With nQuant
//Repla C170->vlcofins With Mvto->VLRCOFINS
//Repla C170->codcta With Mvto->
Repla C170->JAFFiltro With _cPesq
* If C170->vlcofins<=0 .or. C170->aliqpis==0
* Repla C170->vlpis With 0
* Repla C170->cstcofins With '98'
* Repla C170->vlbcconfis With 0
* Repla C170->aliqconfis With 0
* Repla C170->vlcofins With 0
* Endif
//---Dados de Pis e Cofins
Sele TABPIS
OrdSetFocus('PISCOFI1')
Go top
Seek C170->Coditem
If Found() //
If cTipoOperacao=='0' // Entrada
Repla C170->cstpis With TabPis->PISCSTENT
Repla C170->vlbcpis With C170->vlitem//Mvto->Pis_Base
Repla C170->aliqpis With TabPis->PISALIQET // nAliqPis_Basica
//Repla C170->aliqpis With nAliqPis_Basica
//Repla C170->quantbcpis With nQuant
Repla C170->vlpis With C170->vlbcpis * C170->aliqpis/100
Repla C170->cstcofins With TabPis->CFSCSTENT
Repla C170->vlbcconfis With C170->vlitem//Mvto->conf_Base
Repla C170->aliqconfis With TabPis->CFSALIQET //nAqliCofins_bas
Repla C170->aliqconfis With nAqliCofins_bas
//Repla C170->qtdbcconfi With nQuant
Repla C170->vlcofins With C170->vlbcconfis*C170->aliqconfis /100
*If C170->cstcofins=='50' .and. C170->aliqpis=0.66
* Repla C170->cstcofins With '60'
* Repla C170->cstpis With '60'
*
* ElseIf C170->aliqpis==0
* Repla C170->aliqpis With nAliqPis_Basica
* Repla C170->aliqconfis With nAqliCofins_bas
*Endif
Else
Repla C170->cstpis With TabPis->PISCSTSDA
Repla C170->vlbcpis With C170->vlitem//Mvto->Pis_Base
Repla C170->aliqpis With TabPis->PISALIQSD // nAliqPis_Basica
// Repla C170->aliqpis With nAliqPis_Basica
Repla C170->quantbcpis With nQuant
Repla C170->vlpis With C170->vlbcpis*C170->aliqpis/100
Repla C170->cstcofins With TabPis->CFSCSTSDA
Repla C170->vlbcconfis With C170->vlitem//Mvto->conf_Base
Repla C170->aliqconfis With TabPis->CFSALIQSD //nAqliCofins_bas
//Repla C170->aliqconfis With nAqliCofins_bas
//Repla C170->qtdbcconfi With nQuant
Repla C170->vlcofins With C170->vlbcconfis*C170->aliqconfis /100
*If C170->cstcofins=='50' .and. C170->aliqpis=0.66
* Repla C170->cstcofins With '60'
* Repla C170->cstpis With '60'
*
* ElseIf C170->aliqpis==0
* *Repla C170->aliqpis With nAliqPis_Basica
* *Repla C170->aliqconfis With nAqliCofins_bas
*Endif
Endif
Endif
//--- Armazena para Atualizar o Registro C100
wTotalCofins += C170->vlcofins
wTotalPIS += C170->vlpis
wTotalMERC += C170->vlitem
nPos := Ascan(wRegistros_200,Mvto->codigo)
if nPos==0
Aadd(wRegistros_200,Mvto->codigo)
Endif
cPesq := C170->cfop+C170->csticms+Str(C170->Aliqicms,6,2)+Alltrim(_cPesq)
cPesq := C170->Coditem
If cTipoOperacao#'0' // Saida
cChavePesqC185 := C170->cstcofins+C170->cfop+Str(C170->aliqconfis,8,4)
cChavePesqC181 := C170->cstpis+C170->cfop+Str(C170->aliqpis,8,4)
Grava_Saidas(cPesq,cChavePesqC181,cChavePesqC185)
Sele Mvto
Skip+1
Loop
Endif
Sele C190
OrdSetFocus('c190_1')
Go top
Seek cPesq
If !Found()
Append Blank
Repla C190->Reg With 'C190'
Repla C190->CODMOD With '55'
Repla C190->DTREFINI With dDATAINI
Repla C190->DTREFFIM With dDATAFIM
Repla C190->CODITEM With cPesq
Repla C190->CODNCM With cCodMCN
Repla C190->EXPIPI With ''
Repla C190->JAFFiltro With cPesq//+cForne
Endif
Repla C190->VLTOTITEM With C190->VLTOTITEM + (C170->vlitem + C170->vlipi + C170->vlicmsst + Mvto->VLROUTRA )
cChavePesqC191 := cPesq+cForne+C170->cstpis +C170->cfop
cChavePesqC195 := cPesq+cForne+C170->cstcofins+C170->cfop
Sele C191 // Dados de Resumo de Pis
Go top
Seek cChavePesqC191
If ! Found()
Append Blank
Repla C191->Reg With 'C191'
Repla C191->CNPJPART With _Cnpj
Repla C191->JAFFiltro With cChavePesqC191
Repla C191->CSTPIS With C170->cstpis
Repla C191->CFOP With C170->cfop
Endif
Repla C191->VLRITEM With C191->VLRITEM+C170->vlitem
Repla C191->VLRDESC With 0
Repla C191->VLRBCPIS With C191->VLRBCPIS+C170->vlbcpis
Repla C191->ALIQPIS With C170->aliqpis
Repla C191->QTDBCPIS With 0
Repla C191->ALIQPISQT With 0
Repla C191->VLPIS With C191->VLPIS+C170->vlpis
Sele C195 // Dados de Cofins
Go top
Seek cChavePesqC195
If ! Found()
Append Blank
Repla C195->Reg With 'C195'
Repla C195->CNPJPART With _Cnpj
Repla C195->JAFFiltro With cChavePesqC195
Repla C195->CSTCOF With C170->cstcofins
Repla C195->CFOP With C170->cfop
Endif
Repla C195->VLRITEM With C195->VLRITEM+C170->vlitem
Repla C195->VLRDESC With 0
Repla C195->VLRBCCOF With C195->VLRBCCOF+C170->vlbcconfis
Repla C195->ALIQCOF With C170->aliqconfis
//Repla C195->QTDBCCOF With C195->QTDBCCOF+C170->qtdbcconfi
Repla C195->ALIQCOFQT With 0
Repla C195->VLCOF With C195->VLCOF+C170->vlcofins
Sele Mvto
Skip+1
Enddo
//--- Atualizando o arquivo c:\temp\C100
Repla C100->VLCOFINS With wTotalCofins
Repla C100->VlPis With wTotalPIS
Repla C100->VLMERC With wTotalMERC
Sele Nota
Skip+1
Enddo
Return nil