Aleatoriamente graba mal un valor numérico en un TXT
Publicado por CARLOS (15 intervenciones) el 03/10/2018 18:43:20
Hola a todos, pido ayuda a los más experimentados.
Por alguna razón, en forma aleatoria, graba con un formato incorrecto 2 importes en un TXT, que se usa como input a la aplicación "Compras y Ventas" del SIAP (aplicación para presentar las facturas de compras y ventas en AFIP).
La parte del código que formatea los campos en cuestión es:
y parte del archivo txt resultante es:
00100006000000000000000057160000000002730000005000000000057330
00100006000000000000000057170000000000528580005000000000011100
00100006000000000000000057180000000005520000005000000000115920
001000060000000000000000571900000-1623737060005000000-34098478
00100006000000000000000057200000000000700000005000000000014700
00100006000000000000000057210000000001102660005000000000023156
00100006000000000000000057220000000000347740005000000000007303
donde se puede ver que en el registro del centro:
001000060000000000000000571900000-1623737060005000000-34098478
en lugar de grabar un par de importes (mayores que cero), graba un par de cifras en negativo que nada tienen que ver con los datos de origen.
Los importes vienen en campos tipo decimal(12,2) y en este caso debería haber grabado:
18016.50 y 9112.50, sin los puntos decimales, claro.
Espero me puedan ayudar. Desde ya muchas gracias.
Saludos cordiales,
Carlos
Por alguna razón, en forma aleatoria, graba con un formato incorrecto 2 importes en un TXT, que se usa como input a la aplicación "Compras y Ventas" del SIAP (aplicación para presentar las facturas de compras y ventas en AFIP).
La parte del código que formatea los campos en cuestión es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
while ($rowItem = mysql_fetch_assoc($itemsFactura)){
...
...
...
$fileAlicuotas .= substr(str_pad($row["tipo_comprobante"], 3, "0", STR_PAD_LEFT), 0, 3); //CAMPO_1 -> Tipo de Comprobante -> cantidad 3 -> de 1 a 3
$fileAlicuotas .= SEPARADOR_CAMPOS;
$fileAlicuotas .= substr(str_pad($row["punto_venta"], 5, "0", STR_PAD_LEFT), 0, 5); //CAMPO_2 -> Punto de Venta -> cantidad 5 -> de 4 a 8
$fileAlicuotas .= SEPARADOR_CAMPOS;
$fileAlicuotas .= substr(str_pad($row["comprobante_desde"], 20, "0", STR_PAD_LEFT), 0, 20); //CAMPO_3 -> Comprobante Desde -> cantidad 20 -> de 9 a 28
$fileAlicuotas .= SEPARADOR_CAMPOS;
////// Grabo importe gravado sin separador de miles ni punto decimal /////
$preTotalGravadoAux = number_format($totalesNetosIva[$ultimaAlicuota],2,",",".");
$preTotalGravado = str_replace(",", "", $preTotalGravadoAux);
$preTotalGravado = str_replace(".", "", $preTotalGravado);
$fileAlicuotas .= substr(str_pad($preTotalGravado, 15, "0", STR_PAD_LEFT), 0, 15); //CAMPO_4 -> Importe Neto Gravado -> cantidad 15 -> de 29 a 43
$fileAlicuotas .= SEPARADOR_CAMPOS;
//-------------------------------------------------------//
if($preTotalGravado == 0){
$alicuotaIva = "0003";
}else{
$alicuotaIva = $codigosAlicuotasIva[$ultimaAlicuota];
}
$fileAlicuotas .= $alicuotaIva; // substr(str_pad(0, $alicuotaIva, "0", STR_PAD_LEFT), 0, 4); //CAMPO_5 -> Codigo de la Alicuota de IVA -> cantidad 4 -> de 44 a 47 /*Codigo de TASA_IVA*/
$fileAlicuotas .= SEPARADOR_CAMPOS;
////// Grabo impuesto sin separador de miles ni punto decimal /////
$preTotalImpLiquidadoAux = number_format($totalesAlicuotasIva[$ultimaAlicuota],2,",",".");
$preTotalImpLiquidado = str_replace(",", "", $preTotalImpLiquidadoAux);
$preTotalImpLiquidado = str_replace(".", "", $preTotalImpLiquidado);
$fileAlicuotas .= substr(str_pad($preTotalImpLiquidado, 15, "0", STR_PAD_LEFT), 0, 15); //CAMPO_6 -> Importe del Impuesto Liquidado -> cantidad 15 -> de 48 a 62
$fileAlicuotas .= SEPARADOR_CAMPOS;
//-------------------------------------------------------//
$fileAlicuotas.="\r\n";
foreach ($totalesNetosIva as $key => $value) {
$totalesNetosIva[$key] = 0;
}
foreach ($totalesAlicuotasIva as $key => $value) {
$totalesAlicuotasIva[$key] = 0;
}
}
$fechaExplode = explode("/",$_POST["periodo"]);
file_put_contents($configuracion->getPathDuplicadoDigital().$fechaExplode[1]."-.$fechaExplode[0]."_alicuotas.txt",print_r($fileAlicuotas, true));
y parte del archivo txt resultante es:
00100006000000000000000057160000000002730000005000000000057330
00100006000000000000000057170000000000528580005000000000011100
00100006000000000000000057180000000005520000005000000000115920
001000060000000000000000571900000-1623737060005000000-34098478
00100006000000000000000057200000000000700000005000000000014700
00100006000000000000000057210000000001102660005000000000023156
00100006000000000000000057220000000000347740005000000000007303
donde se puede ver que en el registro del centro:
001000060000000000000000571900000-1623737060005000000-34098478
en lugar de grabar un par de importes (mayores que cero), graba un par de cifras en negativo que nada tienen que ver con los datos de origen.
Los importes vienen en campos tipo decimal(12,2) y en este caso debería haber grabado:
18016.50 y 9112.50, sin los puntos decimales, claro.
Espero me puedan ayudar. Desde ya muchas gracias.
Saludos cordiales,
Carlos
Valora esta pregunta


0