01. DATOS GENERALES

Línea de producto:Microsiga Protheus®
Segmento:Servicios
Módulo:Fiscal


02. DESCRIPCIÓN

Punto de entrada para inclusión de los registros 1300, 1310, 1320, 1350, 1360 y 1370.

Panorama general:

Registro presentado por los contribuyentes del ramo minorista de combustibles (estaciones de servicio de combustibles), se refiere al movimiento diario de combustibles, habiendo solamente un registro por tipo de combustible y por fecha del cierre del movimiento (campo COD_ITEM y campo DT_FECH), independientemente de que ocurran intervenciones.
No puede haber más de un registro con el mismo código de combustible y la misma fecha de cierre.

03. ESPECIFICACIÓN

Parámetros del punto de entrada:

Nombre

Tipo

Descripción

PARAMIXBArray of Record

Array con datos del procesamiento con 5 elementos

[1] = Alias de la tabla.

[2] = De Fecha.

[3] = A Fecha.

[4] = Array del registro 0200.

[5] = Array del registro 0190.

Devolución:

Nombre

Tipo

Descripción


Array of Record

Devuelve Array reg0200 con productos utilizados

Importante:

Si el punto de entrada se ejecuta, el Array reg0200 tiene todos los productos procesados en el SPED FISCAL, solamente debe agregar nuevos productos en el array reg0200

Después de la ejecución del punto SPED1300 se imprimirá el Array reg0200 de acuerdo con la devolución del punto de entrada.

04. EJEMPLO DE UTILIZACIÓN


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  := {}
 
//Función responsable por la generación del bloque 1300, movimiento diario de combustible
nPos1300 := Reg1300P(cAlias,dDataDe,dDataAte,@aReg1300)
 
//Función MovCom, esta será responsable por la generación de los bloques 1310 y 1320, donde el registro 1310 es el movimiento diario de combustible por tanque
//Registro 1320 volumen de venta
MovCom(cAlias,dDataDe,dDataAte,nPos1300,aReg1300,@aReg1310,@aReg1320)
 
//Función Reg1350P, responsable por incluir información de las bombas y sus respectivos lacres, así como también de las pistolas.   
//Esta función no debe ser activada en loop
Reg1350P(cAlias,dDataDe,dDataAte,@aReg0200,@aReg0190)
 
//Después de la generación de los arrays con todo el movimiento del período se activará la función SPEDRegs para agregarlos correctamente en el archivo del SPED
//Esta función no debe ser activada en loop
SPEDRegs(cAlias,{aReg1300,aReg1310,aReg1320})
 
Return(aReg0200) 
  
////////// Registro 1300 MOVIMIENTO DIARIO DE COMBUSTIBLES    ////////////
Static Function Reg1300P(cAlias,dDataDe,dDataAte,aReg1300)            
  
Local lConcFil      := SuperGetMv("MV_COFLSPD",,.T.) //Suma sucursal al código del producto
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 debe generarse solamente un registro diario por tanque    
       For ncontBic := 1 To 2  // Simulando 2 Pistolas
              SPED1320(cAlias,dDataDe,dDataAte,@aReg1320,nPos1310, ncontBic)        //1320 debe generarse un registro diario por pistola        
       Next      
Next  
  
Return()
   
//////////// Registro 1310 MOVIMIENTO DIARIO DE COMBUSTIBLES 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 VOLUMEN DE VENTAS/////////////////
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 intervención"                )            //04 - MOT_INTERV
aAdd(aReg1320[nPos], "Nom del 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 de las bombas | Registro 1370 Pistolas de la bomba /////////////////
Static Function Reg1350P(cAlias,dDataDe,dDataAte,aReg0200,aReg0190)
Local lConcFil  := SuperGetMv("MV_COFLSPD",,.T.) //Suma sucursal al código del producto
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], "nombre 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"        )
  
//generación del 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], "nombre 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"        )
  
//generación del 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"              )
  
//generación del 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], "nombre 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"        )
  
//generación del 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"        )
  
//generación del 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 generar un campo del registro con 3 decimales basta informar el contenido entre claves y en la segunda posición informar la cantidad de decimales.

Ejemplo:

Cómo quedará el Array de 1300:

En este caso, en el campo 4 del registro 1300 se generará el valor de 330,000 con 3 decimales.



05. OTRAS INFORMACIONES

Para el ejemplo de utilización mostrado en el código anterior se creó la tabla SPED1300C.DBF para alimentar los registros 1300, 1310 y 1320.


MV_COMB = Movimiento diario de combustibles
MV_TANQUE = Movimiento por tanque
MV_VENDAS = Volumen de ventas


MV_COMB    MV_TANQUE     MV_VENDAS
1126126
1127127
1127127
1127127
1128128