| 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.
Nombre | Tipo | Descripción |
|---|---|---|
| PARAMIXB | Array 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. |
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. |
#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.
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 |
| 1 | 126 | 126 |
| 1 | 127 | 127 |
| 1 | 127 | 127 |
| 1 | 127 | 127 |
| 1 | 128 | 128 |