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.
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. |
#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() |
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.
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 |
1 | 126 | 126 |
1 | 127 | 127 |
1 | 127 | 127 |
1 | 127 | 127 |
1 | 128 | 128 |