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 |