| Linha de Produto: | Microsiga Protheus® |
|---|---|
| Segmento: | Serviços |
| Módulo: | Fiscal |
...
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.
| Nome | Tipo | Descrição |
|---|---|---|
| PARAMIXB | Array 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; |
| Nome | Tipo | Descriçã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. |
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
#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()
|
| Aviso | ||
|---|---|---|
| ||
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. |
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.
...