Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mi codigo se salta una linea! por que ?

Estas en el tema de Mi codigo se salta una linea! por que ? en el foro de PHP en Foros del Web. Como andan gente?? Necesito una mano con mi codigo, no se porque me saltea una linea del codigo muy importante que es la siguiente Código: ...
  #1 (permalink)  
Antiguo 02/05/2016, 18:15
 
Fecha de Ingreso: enero-2016
Ubicación: Rio Negro - Cipolletti
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 0
Exclamación Mi codigo se salta una linea! por que ?

Como andan gente??

Necesito una mano con mi codigo, no se porque me saltea una linea del codigo muy importante que es la siguiente

Código:
     exec("python2 /srv/http/Gcom/facturacion/pyafipws/pyfepdf.py /srv/http/Gcom/facturacion/rece.ini --cargar --json");
Aqui mi codigo completo:

Código:
<?php

function facturarGcom($id){

    // Establezco los valores de la factura a autorizar:
    $factura = array(
         'id' => $datos[0]['id'],                     // identificador único (obligatorio WSFEX)

         'punto_vta' => $datos[0]['punto_vta'],
         'tipo_cbte' => $datos[0]['tipo_cbte'],              // 1: FCA, 2: NDA, 3:NCA, 6: FCB, 11: FCC
         'cbte_nro' => $datos[0]['cbte_nro'],               // solicitar proximo con /ult

         'tipo_doc' => $datos[0]['tipo_doc'],              // 96: DNI, 80: CUIT, 99: Consumidor Final
         'nro_doc' => $datos[0]['nro_doc'],    // Nro. de CUIT o DNI

         'fecha_cbte' => $datos[0]['fecha_cbte'],   // Formato AAAAMMDD
         'fecha_serv_desde' => $datos[0]['fecha_serv_desde'],    // competar si concepto > 1
         'fecha_serv_hasta' => $datos[0]['fecha_serv_hasta'],    // competar si concepto > 1
         'fecha_venc_pago' => $datos[0]['fecha_venc_pago'],     // competar si concepto > 1

         'concepto' => $datos[0]['concepto'],               // 1: Productos, 2: Servicios, 3/4: Ambos

         'nombre_cliente' => $datos[0]['nombre_cliente'],
         'domicilio_cliente' => $datos[0]['domicilio_cliente'],
         'pais_dst_cmp' => $datos[0]['pais_dst_cmp'],  // solo exportacion

         'moneda_ctz' => $datos[0]['moneda_ctz'],   // 1 para pesos
         'moneda_id' => $datos[0]['moneda_id'],  // 'PES': pesos, 'DOL': dolares (solo exportacion)

         'obs_comerciales' => $datos[0]['obs_comerciales'],
         'obs_generales' => $datos[0]['obs_generales'],
         'forma_pago' => $datos[0]['forma_pago'],             
         'incoterms' => $datos[0]['incoterms'],                  // solo exportacion
         'id_impositivo' => $datos[0]['id_impositivo'],     // solo exportacion

         // importes subtotales generales:
         'imp_neto' => $imp_neto,            // neto gravado
         'imp_op_ex' => $datos[0]['imp_op_ex'],             // operacioens exentas
         'imp_tot_conc' => $datos[0]['imp_tot_conc'],          // no gravado
         'imp_iva' => $imp_iva,              // IVA liquidado
         'imp_trib' => $datos[0]['imp_trib'],              // otros tributos
         'imp_total' => $imp_neto + $imp_iva,           // total de la factura

         // Datos devueltos por AFIP (completados luego al llamar al webservice):
         'cae' => '',                       // ej. '61123022925855'
         'fecha_vto' => '',                 // ej. '20110320'
         'motivos_obs' => '',               // ej. '11'
         'err_code' => '',                  // ej. 'OK'

         'descuento' => $datos[0]['descuento'],
         'detalles' => $detalles,
         'ivas' => array (
              array(
                 'base_imp' => $iva[0]['base_imp'],
                 'importe' => $iva[0]['importe'],
                 'iva_id' => $iva[0]['iva_id'],
              ),
            ),
         // Comprobantes asociados (solo notas de crédito y débito):
         //'cbtes_asoc' => array (
         //   array('cbte_nro' => 1234, 'cbte_punto_vta' => 2, 'cbte_tipo' => 91, ),
         //   array('cbte_nro' => 1234, 'cbte_punto_vta' => 2, 'cbte_tipo' => 5, ),
         // ),
         'tributos' => array (
              array(
                 'alic' => $tri[0]['alic'],
                 'base_imp' => $tri[0]['base_imp'],
                 'desc' => $tri[0]['desc'],
                 'importe' => $tri[0]['importe'],
                 'tributo_id' => $tri[0]['tributo_id'],
              ),
            ),
         'permisos' => array (),
         'datos' => array (),
    );


    // Guardar el archivo json para consultar la ultimo numero de factura:
    $json = file_put_contents('/srv/http/Gcom/facturacion/factura.json', json_encode(array($factura)));

    // Obtener el último número para este tipo de comprobante / punto de venta:
    exec("python2 /srv/http/Gcom/facturacion/pyafipws/rece1.py /srv/http/Gcom/facturacion/rece.ini /json /ult 1 4000");

    $json = file_get_contents('/srv/http/Gcom/facturacion/salida.json');
    $facturas = json_decode($json, True);

    // leo el ultimo numero de factura del archivo procesado (salida)
    $cbte_nro = intval($facturas[0]['cbt_desde']) + 1;
    echo "Proximo Numero: ", $cbte_nro, "\n\r";

    // Vuelvo a guardar el archivo json para actualizar el número de factura:
    $factura['cbt_desde'] = $cbte_nro;  // para WSFEv1
    $factura['cbt_hasta'] = $cbte_nro;  // para WSFEv1
    $factura['cbte_nro'] = $cbte_nro;   // para PDF
    $json = file_put_contents('/srv/http/Gcom/facturacion/factura.json', json_encode(array($factura)));

    // Obtención de CAE: llamo a la herramienta para WSFEv1
    exec("python2 /srv/http/Gcom/facturacion/pyafipws/rece1.py /srv/http/Gcom/facturacion/rece.ini /json ");

    // Ejemplo para levantar el archivo json con el CAE obtenido:
    $json = file_get_contents('/srv/http/Gcom/facturacion/salida.json');
    $facturas = json_decode($json, True);

    // leo el CAE del archivo procesado
    echo "CAE OBTENIDO: ", $facturas[0]['cae'], "\n\r";
    echo "Observaciones: ", $facturas[0]['motivos_obs'], "\n\r";
    echo "Errores: ", $facturas[0]['err_msg'], "\n\r";

    // Vuelvo a guardar el archivo json para actualizar el CAE y otros datos:
    $factura['cae'] = $facturas[0]['cae'];
    $factura['fecha_vto'] = $facturas[0]['fch_venc_cae'];
    $factura['motivos_obs'] = $facturas[0]['motivos_obs'];
    $factura['err_code'] = $facturas[0]['err_code'];
    $factura['err_msg'] = $facturas[0]['err_msg'];
    $json = file_put_contents('/srv/http/Gcom/facturacion/factura.json', 
    json_encode(array($factura)));

    // Genero la factura en PDF (agregar --mostrar si se tiene visor de PDF)
    exec("python2 /srv/http/Gcom/facturacion/pyafipws/pyfepdf.py /srv/http/Gcom/facturacion/rece.ini --cargar --json");

    // leer factura.pdf o similar para obtener el documento generado. TIP: --mostrar
}
?>
  #2 (permalink)  
Antiguo 03/05/2016, 01:34
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 8 meses
Puntos: 123
Respuesta: Mi codigo se salta una linea! por que ?

Y por qué dices que php se la salta, como sabes que el problema no es el comando, si no muestras ni guardas la salida del exec en ningún lado.

Revisa el manual exec, y muestra la salida de exec por algún lado para saber que esta pasando.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 03/05/2016, 10:00
 
Fecha de Ingreso: enero-2016
Ubicación: Rio Negro - Cipolletti
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Mi codigo se salta una linea! por que ?

Buenas,

Digo que se salta esa linea ( esa linea me genera un PDF ) porque si agarro el codigo y lo ejecuto manuealmente no me da problemas, pero ahora cuando lo ejecuto desde aca

Case 1 del switch

Código:
<?php
	include("conexion.php");
	include("../facturacion/factura_electronicaV2.php");
	$orden = $_POST['orden'];
	$fecha = date("Y-m-d");

	switch($orden){
		case 0:
			$listarFacturas=  mysqli_query($conexion,"SELECT * FROM factura") or die(mysqli_error());
			$json = '{"listarFacturas" : [ ';
			while($row=mysqli_fetch_array($listarFacturas)){
			$json.= '{ "id" : "'.$row['id'].'" , "cliente_cuit" : "'.$row['cliente_cuit'].'" , "forma_pago_id" : "'.$row['forma_pago_id'].'" , "estado" : "'.$row['estado'].'" , "empleado" : "'.$row['empleado'].'", "observacion" : "'.$row['observacion'].'", "fecha" : "'.$row['fecha'].'", "total" : "'.$row['total'].'", "iva" : "'.$row['iva'].'" },';
			}
			$json= substr($json,0,-1);
			$json .=']}';
			echo $json;
		break;
		case 10:
			$queryDetalleFactura=  mysqli_query($conexion,"SELECT * FROM tmp_detalle_factura") or die(mysqli_error());
			$json = '{"detalleFactura" : [ ';
			while($row=mysqli_fetch_array($queryDetalleFactura)){
			$json.= '{ "id" : "'.$row['id'].'" , "codigoProducto" : "'.$row['producto_id'].'" , "facturaId" : "'.$row['factura_id'].'" , "nombreProducto" : "'.$row['nombre_producto'].'" , "detalleProducto" : "'.$row['detalle_producto'].'" , "precioVenta" : "'.$row['precio_venta'].'" , "cantidadProducto" : "'.$row['cantidad'].'", "total" : "'.$row['total'].'"  },';
			}
			$json= substr($json,0,-1);
			$json .=']}';
			echo $json;
		break;
		case 1:
		//datos de facturacion
			$id = $_POST['facturaGen'];
			$clienteCuit = $_POST['clienteCuit'];
			$formaPago = $_POST['formaPago'];
			$empleado = $_POST['empleado'];
			$observacion = $_POST['observacion'];
			$total = $_POST['facturaTotal'];
			if($formaPago==1){
				$estado = 1;
			}
			else{
				$estado = 4;

			}
			if($_POST['iva']==5){
				$iva = 1;
			}
			else{
				$iva = 21;
			}
				if(!empty($clienteCuit AND $formaPago)){
					$queryFactura =  mysqli_query($conexion,"INSERT INTO factura VALUES ('$id','$clienteCuit','$formaPago','$estado','$empleado','$observacion','$fecha','$total','$iva')");
					$ultimaOperacionId = mysqli_query($conexion,"SELECT MAX(id) AS id FROM cuenta WHERE cliente_cuit=$clienteCuit");
					$maxid = $ultimaOperacionId->fetch_array(MYSQLI_ASSOC);
					$ultimaOperacion = mysqli_query($conexion,"SELECT * FROM cuenta WHERE id=$maxid[id]");
					while($row=mysqli_fetch_array($ultimaOperacion)){
						$saldoAnterior = $row['saldo'];
						$ultimoImporte = $row['importe'];
					}
						$importe = $total;
					if($formaPago==1){

						$saldoOperacion = $importe;
						$proximoSaldo = $saldoAnterior - $saldoOperacion + $importe;
					}
					else{
						$saldoOperacion = 0;
						$proximoSaldo = $saldoAnterior - $saldoOperacion - $importe;
					}				
					$queryResumen =  mysqli_query($conexion,"INSERT INTO cuenta VALUES (NULL,'$clienteCuit','$formaPago','$fecha','$id','$total','$proximoSaldo')");
					$queryDetalleFactura =  mysqli_query($conexion,"INSERT INTO detalle_factura (id,producto_id,factura_id,nombre_producto,detalle_producto,precio_venta,cantidad,total)SELECT * FROM tmp_detalle_factura");
					$descuentoStock = mysqli_query($conexion, "SELECT cantidad, producto_id FROM detalle_factura WHERE factura_id=$id");
					while($row=mysqli_fetch_array($descuentoStock)){
						$controlStock = mysqli_query($conexion,"UPDATE producto SET stock=stock-$row[cantidad] WHERE id=$row[producto_id]");
					}
					$queryTruncateTmp = mysqli_query($conexion,"TRUNCATE tmp_detalle_factura");
					facturarGcom($id);
							$jsondata = array();
							$jsondata['success'] = true;
							$jsondata['message'] = 'Se guardo correctamente.';
					} 
					   	else {
					        $jsondata['success'] = false;
					        $jsondata['message'] = 'Error al guardar.';
					    }
					header('Content-type: application/json; charset=utf-8');
				    echo json_encode($jsondata);

		break;
		case 11:
		//Producto
			$producto_id = $_POST['productoId'];
			$codigoProducto = $_POST['codigoProducto'];
			$facturaId = $_POST['facturaGen'];
			$nombreProducto = $_POST['nombreProducto'];
			$detalleProducto = $_POST['detalleProducto'];
			$precioVenta = $_POST['precioVenta'];
			$cantidadProducto = $_POST['cantidadProducto'];
			$total = $precioVenta * $cantidadProducto;
				if(!empty($codigoProducto AND $cantidadProducto)){
					$queryDetalleFactura =  mysqli_query($conexion,"INSERT INTO tmp_detalle_factura VALUES (NULL,'$producto_id','$facturaId','$nombreProducto','$detalleProducto','$precioVenta','$cantidadProducto','$total')");
					$jsondata = array();
					        $jsondata['success'] = true;
					        $jsondata['message'] = 'Se guardo correctamente.';
					    } 
					   	else {
					        $jsondata['success'] = false;
					        $jsondata['message'] = 'Error al guardar.';
					    }
					    //Aunque el content-type no sea un problema en la mayoría de casos, es recomendable especificarlo
					    header('Content-type: application/json; charset=utf-8');
					    echo json_encode($jsondata);
					    exit();
		break;
		case 13:
			$id = $_POST['delid'];		
		if(!empty($id)){
			$queryProducto =  mysqli_query($conexion,"DELETE FROM tmp_detalle_factura WHERE id=$id");
				$jsondata = array();
				        $jsondata['success'] = true;
				        $jsondata['message'] = 'Se elimino correctamente.';
				    } 
				   	else {
				        $jsondata['success'] = false;
				        $jsondata['message'] = 'Error al eliminar.';
				    }
				    //Aunque el content-type no sea un problema en la mayoría de casos, es recomendable especificarlo
				    header('Content-type: application/json; charset=utf-8');
				    echo json_encode($jsondata);
				    exit();
		break;
		case 14:
		 	$queryDetalleFactura = mysqli_query($conexion,"TRUNCATE TABLE tmp_detalle_factura ");
		break;
		case 15:


	}
		
?>
De esta forma llama bien a la funcion facturarGcom();. Lo se porque me genera un JSON y otros, pero no me ejecuta esa linea que genera el PDF que lo saca del JSON. Probe ejecutar el comando en la terminal de PHP y me creo el PDF sin problemas, por eso llego a la conclusion de que no es un error drastico de syntaxis si no que algo mas de estructura que me esta saltado esa linea, pero no logro dar con el clavo..
  #4 (permalink)  
Antiguo 03/05/2016, 10:38
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 8 meses
Puntos: 123
Respuesta: Mi codigo se salta una linea! por que ?

Habilita el reporte de errores, para asegurarte que no hay ningún error en el código.

Y intenta comprobar que devuelve exec cuando se ejecuta, no creo que cueste tanto hacer una prueba con algo como esto
Código PHP:
Ver original
  1. echo 'echo antes de exec <br/>';
  2. $salida = shell_exec('mi comando');
  3. echo "<pre>$salida</pre>";
  4. echo 'echo despues de exec <br/>';

Para ver que devuelve y que se ejecuta.

Y ten en cuenta las notas del manual
Cita:
Nota:
Esta función puede devolver NULL cuando ocurre un error o cuando el programa no produce ninguna salida. No es posible detectar los fallos de ejecución usando esta función. exec() debería usarse cuando sea necesario el acceso al código de salida del programa.
Igualmente asegúrate que no hay algún requerimiento concreto para poder utilizar exec, por ejemplo si php se ejecuta en modo seguro exec esta deshabilitado.
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 03/05/2016, 11:10
 
Fecha de Ingreso: enero-2016
Ubicación: Rio Negro - Cipolletti
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Mi codigo se salta una linea! por que ?

Gracias por la ayuda de ante mano!

Probe el codigo y la verdad no me mostro ningun error.

Consulta, el codigo funciona de 10 al ejecutardo desde consola, pero cuando lo quiero ejecutar desde la web no anda el exec...

Como deberia llamar a un exec desde un boton en una web por ejemplo? probe con un onclick= " codigo php " aunque no funciono.
  #6 (permalink)  
Antiguo 03/05/2016, 17:44
 
Fecha de Ingreso: enero-2016
Ubicación: Rio Negro - Cipolletti
Mensajes: 5
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Mi codigo se salta una linea! por que ?

El probla era que Apache no tenia permisos para ejecutar los EXEC de PHP.

en mi caso se soluciona dandole permisos modificando /etc/httpd/httpd.conf

Etiquetas: fecha, mysql, salta, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:15.