Árvore de páginas

01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:Fiscal


02. DESCRIÇÃO

Ponto de Entrada para inclusão dos registros 1300, 1310, 1320, 1350, 1360 e 1370.

Panorama geral:

Registro apresentado pelos contribuintes do ramo varejista de combustíveis (postos de combustíveis), refere-se
à movimentação diária de combustíveis, havendo apenas um registro por tipo de combustível e por data do
fechamento da movimentação (campo COD_ITEM e campo DT_FECH), independente de ocorrerem intervenções.
Não pode haver mais de um registro com o mesmo código de combustível e mesma data de fechamento.

03. ESPECIFICAÇÃO

Parâmetros do ponto de entrada:

NomeTipoDescrição
PARAMIXBArray of Record

Array com dados de processamento com 5 elementos

[1] = Alias da tabela;

[2] = Data de;

[3] = Data Até;

[4] = Array do registro 0200;

[5] = Array do registro 0190;

Retorno:

NomeTipoDescrição

Array of Record

Retorna Array reg0200 com produtos utilizados

Importante:

Quando ponto de entrada é executado Array reg0200 já possui todos produtos já processados no SPED FISCAL, deve apenas adicionar novos produtos no array reg0200

Após execução do ponto SPED1300 será impresso Array reg0200 conforme retornado do ponto de entrada.

04. EXEMPLO DE UTILIZAÇÃO


SPED1300
#include "rwmake.ch"
#include "Topconn.ch"
#include "protheus.ch"
   
  
User Function SPED1300()
  
Local cAlias    := (ParamIxb[1])
Local dDataDe   := (ParamIxb[2])
Local dDataAte  := (ParamIxb[3])
Local aReg0200  := (ParamIxb[4])
Local aReg0190  := (ParamIxb[5])   
Local aReg1300  := {}
Local aReg1310  := {}
Local aReg1320  := {}
 
//Função responsavel pela geração do bloco 1300, movimentação diaria de combustivel
nPos1300 := Reg1300P(cAlias,dDataDe,dDataAte,@aReg1300)
 
//Função MovCom, ela sera responsavel pela geração dos blocos 1310 e 1320, onde o registro 1310 é a movimentação diaria de combustivel por tanque
//Registro 1320 volume de venda
MovCom(cAlias,dDataDe,dDataAte,nPos1300,aReg1300,@aReg1310,@aReg1320)
 
//Função Reg1350P, responsável por inserir informações das bombas e seus respectivos lacres e também dos bicos.   
//Esta função não deverá ser chamada em loop
Reg1350P(cAlias,dDataDe,dDataAte,@aReg0200,@aReg0190)
 
//Após a geração dos arrays com toda a movimentação do periodo será chamado a função SPEDRegs para adiciona-los corretamente no arquivo do SPED
//Esta função não deverá ser chamada em loop
SPEDRegs(cAlias,{aReg1300,aReg1310,aReg1320})
 
Return(aReg0200) 
  
////////// Registro 1300 MOVIMENTACAO DIARIA DE COMBUSTIVEIS    ////////////
Static Function Reg1300P(cAlias,dDataDe,dDataAte,aReg1300)            
  
Local lConcFil      := SuperGetMv("MV_COFLSPD",,.T.) //Soma filial ao codigo do produto
Local cProd         := PadR(Alltrim("001"+ Iif(lConcFil,xFilial("SB1"),"")),TamSX3("B1_COD")[1])
Local nPos          := 0
Local dData         := ctod("25/08/2022")
  
aAdd(aReg1300, {})
nPos:= Len(aReg1300)
aAdd(aReg1300[nPos], "1300"      )            //01 - REG
aAdd(aReg1300[nPos], cProd       )            //02 - COD_ITEM
aAdd(aReg1300[nPos], dData       )            //03 - DT_FECH
aAdd(aReg1300[nPos], {330.000,3} )            //04 - ESTQ_ABERT
aAdd(aReg1300[nPos], 0           )            //05 - VOL_ENTR
aAdd(aReg1300[nPos], {330.000,3} )            //00 - VOL_DISP
aAdd(aReg1300[nPos], {150.000,3} )            //00 - VOL_SAIDAS
aAdd(aReg1300[nPos], {180.000,3} )            //00 - ESTQ_ESCR
aAdd(aReg1300[nPos], 0           )            //00 - VAL_AJ_PERDA
aAdd(aReg1300[nPos], 0           )            //00 - VAL_AJ_GANHO
aAdd(aReg1300[nPos], {180.000,3} )            //00 - FECH_FISICO
  
Return(nPos)
  
Static Function MovCom(cAlias,dDataDe,dDataAte,nPos1300,aReg1300,aReg1310,aReg1320)
Local nRectan      := 0
Local nPos1310     := 0
Local nCont        := 0
Local ncontBic     := 0
 
Default aReg1310     := {}
Default aReg1320     := {}
 
For nCont := 1 To 3 // Simulando 3 tanques
       nRectan := 126 + nCont    
        
       nPos1310 := SPED1310(cAlias,dDataDe,dDataAte,nRectan,@aReg1310,nPos1300)     //1310 deverá ser gerado apenas um registro diario por tanque    
       For ncontBic := 1 To 2  // Simulando 2 Bicos
              SPED1320(cAlias,dDataDe,dDataAte,@aReg1320,nPos1310, ncontBic)        //1320 deverá ser gerado um registro diario por bico        
       Next      
Next  
  
Return()
   
//////////// Registro 1310 MOVIMENTACAO DIARIA DE COMBUSTIVEIS POR TANQUE/////////////////
Static Function SPED1310(cAlias,dDataDe,dDataAte,nRectan,aReg1310,nPos1300) 
Local nPos     := 0
Local cTanque  := STRzero(nRectan,3)
  
aAdd(aReg1310, {})
  
nPos:= Len(aReg1310)
aAdd(aReg1310[nPos], nPos1300    )            //00 - RELACAO
aAdd(aReg1310[nPos], "1310"      )            //01 - REG
aAdd(aReg1310[nPos], cTanque     )            //02 - NUM_TANQUE
aAdd(aReg1310[nPos], {330.000,3} )            //03 - ESTQ_ABERT
aAdd(aReg1310[nPos], {0,3}       )            //04 - VOL_ENTR
aAdd(aReg1310[nPos], {330.000,3} )            //05 - VOL_DISP
aAdd(aReg1310[nPos], { 50.000,3} )            //06 - VOL_SAIDAS
aAdd(aReg1310[nPos], {280.000,3} )            //07 - ESTQ_ESCR
aAdd(aReg1310[nPos], 0           )            //08 - VAL_AJ_PERDA
aAdd(aReg1310[nPos], 0           )            //09 - VAL_AJ_GANHO
aAdd(aReg1310[nPos], {280.000,3} )            //10 - FECH_FISICO
  
 
  
Return(nPos)  
  
  
///////////////// Registro 1320 VOLUME DE VENDAS/////////////////
Static Function SPED1320(cAlias,dDataDe,dDataAte,aReg1320,nPos1310,ncontBic)  
Local nPos   := 0
Local nBico  := 0
 
aAdd(aReg1320, {})
 
nBico  := 123 + ncontBic
  
nPos:= Len(aReg1320)
aAdd(aReg1320[nPos], nPos1310                        )            //00 - RELACAO
aAdd(aReg1320[nPos], "1320"                          )            //01 - REG
aAdd(aReg1320[nPos], StrZero(nBico,3)                )            //02 - NUM_BICO
aAdd(aReg1320[nPos], "192"                           )            //03 - NR_INTERV
aAdd(aReg1320[nPos], "mo intervencao"                )            //04 - MOT_INTERV
aAdd(aReg1320[nPos], "Nom do Interventor"            )            //05 - NOM_INTERV
aAdd(aReg1320[nPos], "79427589000320"                )            //06 - CNPJ_INTERV
aAdd(aReg1320[nPos], "45723220667"                   )            //07 - CPF_INTERV
aAdd(aReg1320[nPos], 100                             )            //08 - VAL_FECHA
aAdd(aReg1320[nPos], 20                              )            //09 - VAL_ABERT
aAdd(aReg1320[nPos], 10                              )            //10 - VOL_AFERI
aAdd(aReg1320[nPos], "70"                            )            //11 - VOL_VENDAS
  
 
  
Return(aReg1320)
   
///////////////// Registro 1350 Bombas | Registro 1360 Lacres das bombas | Registro 1370 Bicos da bomba /////////////////
Static Function Reg1350P(cAlias,dDataDe,dDataAte,aReg0200,aReg0190)
Local lConcFil  := SuperGetMv("MV_COFLSPD",,.T.) //Soma filial ao codigo do produto
Local cProd     := PadR(Alltrim("001"+ Iif(lConcFil,xFilial("SB1"),"")),TamSX3("B1_COD")[1])
Local aReg1350  := {}
Local aReg1360  := {}
Local aReg1370  := {}
Local nPos      := 0
  
//------------------------------- 1
  
aAdd(aReg1350, {})
nPos:= Len(aReg1350)
aAdd(aReg1350[nPos], "1350"                   )            //01 - REG
aAdd(aReg1350[nPos], "01"                     )            //02 - SERIE
aAdd(aReg1350[nPos], "nome fabricante 1"      )            //03 - FABRICANTE
aAdd(aReg1350[nPos], "mod bomba 1"            )            //04 - MODELO
aAdd(aReg1350[nPos], "0"                      )            //04 - TIPO_MEDICAO
  
aAdd(aReg1360, {})
nPos:= Len(aReg1360)
aAdd(aReg1360[nPos], "1360"      )            //01 - REG
aAdd(aReg1360[nPos], "01"        )            //02 - NUM_LACRE
aAdd(aReg1360[nPos], dDataAte    )            //03 - DT_APLICACAO
  
aAdd(aReg1360, {})
nPos:= Len(aReg1360)
aAdd(aReg1360[nPos], "1360"      )            //01 - REG
aAdd(aReg1360[nPos], "011"       )            //02 - NUM_LACRE
aAdd(aReg1360[nPos], dDataAte    )            //03 - DT_APLICACAO
  
aAdd(aReg1370, {})
nPos:= Len(aReg1370)
aAdd(aReg1370[nPos], "1370"      )            //01 - REG
aAdd(aReg1370[nPos], "01"        )            //02 - NUM_BICO
aAdd(aReg1370[nPos], cProd       )            //03 - COD_ITEM
aAdd(aReg1370[nPos], "10"        )
  
//geracao do 0200
SPEDSeek("SB1",,xFilial("SB1")+cProd)
SFRG0200(cAlias,@aReg0200,@aReg0190,dDataDe,dDataAte,,cProd)
  
GrvRegTrS(cAlias,1,aReg1350)
GrvRegTrS(cAlias,1,aReg1360)
GrvRegTrS(cAlias,1,aReg1370)
  
//-------------------------------------------- 2
  
aReg1350     := {}
aReg1360     := {}
aReg1370     := {}
  
aAdd(aReg1350, {})
nPos:= Len(aReg1350)
aAdd(aReg1350[nPos], "1350"                   )            //01 - REG
aAdd(aReg1350[nPos], "02"                     )            //02 - SERIE
aAdd(aReg1350[nPos], "nome fabricante 2"      )            //03 - FABRICANTE
aAdd(aReg1350[nPos], "mod bomba 2"            )            //04 - MODELO
aAdd(aReg1350[nPos], "0"                      )            //04 - TIPO_MEDICAO
  
aAdd(aReg1360, {})
nPos:= Len(aReg1360)
aAdd(aReg1360[nPos], "1360"      )            //01 - REG
aAdd(aReg1360[nPos], "02"        )            //02 - NUM_LACRE
aAdd(aReg1360[nPos], dDataAte    )            //03 - DT_APLICACAO
  
aAdd(aReg1370, {})
nPos:= Len(aReg1370)
aAdd(aReg1370[nPos], "1370"      )            //01 - REG
aAdd(aReg1370[nPos], "02"        )            //02 - NUM_BICO
aAdd(aReg1370[nPos], cProd       )            //03 - COD_ITEM
aAdd(aReg1370[nPos], "10"        )
  
//geração do 0200
SPEDSeek("SB1",,xFilial("SB1")+cProd)
SFRG0200(cAlias,@aReg0200,@aReg0190,dDataDe,dDataAte,,cProd)
  
aAdd(aReg1370, {})
nPos:= Len(aReg1370)
aAdd(aReg1370[nPos], "1370"            )            //01 - REG
aAdd(aReg1370[nPos], "022"             )            //02 - NUM_BICO
aAdd(aReg1370[nPos], cProd             )            //03 - COD_ITEM
aAdd(aReg1370[nPos], "10"              )
  
//geração do 0200
SPEDSeek("SB1",,xFilial("SB1")+cProd)
SFRG0200(cAlias,@aReg0200,@aReg0190,dDataDe,dDataAte,,cProd)
  
GrvRegTrS(cAlias,2,aReg1350)
GrvRegTrS(cAlias,2,aReg1360)
GrvRegTrS(cAlias,2,aReg1370)
  
//-------------------------------- 3
  
aReg1350     := {}
aReg1360     := {}
aReg1370     := {}
  
aAdd(aReg1350, {})
nPos:= Len(aReg1350)
aAdd(aReg1350[nPos], "1350"                   )            //01 - REG
aAdd(aReg1350[nPos], "03"                     )            //02 - SERIE
aAdd(aReg1350[nPos], "nome fabricante 3"      )            //03 - FABRICANTE
aAdd(aReg1350[nPos], "mod bomba 3"            )            //04 - MODELO
aAdd(aReg1350[nPos], "0"                      )            //04 - TIPO_MEDICAO
  
aAdd(aReg1360, {})
nPos:= Len(aReg1360)
aAdd(aReg1360[nPos], "1360"      )            //01 - REG
aAdd(aReg1360[nPos], "03"        )            //02 - NUM_LACRE
aAdd(aReg1360[nPos], dDataAte    )            //03 - DT_APLICACAO
  
aAdd(aReg1360, {})
nPos:= Len(aReg1360)
aAdd(aReg1360[nPos], "1360"      )            //01 - REG
aAdd(aReg1360[nPos], "033"       )            //02 - NUM_LACRE
aAdd(aReg1360[nPos], dDataAte    )            //03 - DT_APLICACAO
  
aAdd(aReg1370, {})
nPos:= Len(aReg1370)
aAdd(aReg1370[nPos], "1370"      )            //01 - REG
aAdd(aReg1370[nPos], "03"        )            //02 - NUM_BICO
aAdd(aReg1370[nPos], cProd       )            //03 - COD_ITEM
aAdd(aReg1370[nPos], "10"        )
  
//geração do 0200
SPEDSeek("SB1",,xFilial("SB1")+cProd)
SFRG0200(cAlias,@aReg0200,@aReg0190,dDataDe,dDataAte,,cProd)
  
aAdd(aReg1370, {})
nPos:= Len(aReg1370)
aAdd(aReg1370[nPos], "1370"      )            //01 - REG
aAdd(aReg1370[nPos], "033"       )            //02 - NUM_BICO
aAdd(aReg1370[nPos], cProd       )            //03 - COD_ITEM
aAdd(aReg1370[nPos], "10"        )
  
//geração do 0200
SPEDSeek("SB1",,xFilial("SB1")+cProd)
SFRG0200(cAlias,@aReg0200,@aReg0190,dDataDe,dDataAte,,cProd)
  
GrvRegTrS(cAlias,3,aReg1350)
GrvRegTrS(cAlias,3,aReg1360)
GrvRegTrS(cAlias,3,aReg1370)
  
Return()

Importante

Para gerar um campo do registro com 3 decimais basta informar o conteúdo entre chaves e na segunda posição informar a quantidade de casas decimais.

Exemplo:

Como ficará o Array do 1300:

No caso será gerado no campo 4 do registro 1300 o valor de 330,000 com 3 decimais.



05. DEMAIS INFORMAÇÕES

Para o exemplo de utilização demonstrado no código acima foi criada a tabela SPED1300C.DBF para alimentar os registros 1300, 1310 e 1320.


MV_COMB = Movimentação Diária de Combustíveis
MV_TANQUE = Movimentação por Tanque
MV_VENDAS = Volume de Vendas


MV_COMB    MV_TANQUE     MV_VENDAS
1126126
1127127
1127127
1127127
1128128