#!/usr/local/bin/python
# -*-coding: utf-8 -*-
# Importa las librerias necesarias para el funcionamiento, asi mismo importa los modelos de los modulos a utilizar en la interfaz contable
from django.conf import settings
import logging
logger_saves = logging.getLogger('logview.usersaves')
import os
import batch;
import time
import math
from django.core.cache import cache
from datetime import datetime, date, timedelta
import calendar
import cx_Oracle
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from modulos.models import Modulo
from transacciones.models import Transaccion
from conexiones.models import Conexion
from conceptos.models import Concepto
from campo_valor.models import Campo_Valor
from grupos.models import Grupo
from asientos.models import Asiento
from tablas.models import Tabla
from campo_cuenta.models import Campo_Cuenta
from workflow_transaccion.models import Workflow_Transaccion
from rel_actividad.models import Rel_Actividad
from tabla_propiedades.models import Tabla_Propiedades

class JSONResponse(HttpResponse):
    """
    Un respuesta de tipo HttResponse que devuelve un Json.
    """
    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)

#--Metodo que se encarga de verirficar si existe el Maeter en Contabilidad, en caso que no exista, lo crea en la base de datos de Contabilidad
#--Entrada: Id del Maeter
#--Retorna: Ninguno
def verificaMaeter(idmaeter,cursorConexion,cursorContabilidad):
	#--Realiza la consulta en la base de datos
	consultaMaeter="SELECT NITOCC FROM CN_MAE_TER WHERE ID_MAE_TER="+str(idmaeter)
	cursorContabilidad.execute(consultaMaeter)
	ccMaeter=cursorContabilidad.fetchone()
	if ccMaeter is None:
		cursorConexion.execute("SELECT ID_MAE_TER,NUM_DOC,RAZON_SOC FROM INTERCEROS WHERE ID_MAE_TER="+str(idmaeter))
		maeterData=cursorConexion.fetchone()
		ingresaMaeter="INSERT INTO CN_MAE_TER (ID_MAE_TER,ID_CIA,NITOCC,NOMBRE,EMAIL,RECIPROCA) VALUES ("+str(maeterData[0])+",1,"+str(maeterData[1])+",'"+str(maeterData[2])+"','','')";
		cursorContabilidad.execute(ingresaMaeter)

#--Metodo que se encarga de cargar en una lista un array de movimientos de bancos de acuerdo al concepto
#--Entrada: Fecha de realizacion y el id del concepto
#--Retorna: Lista de movimientos de bancos segun las fechas establecidas
def verificaMovimiento(fechaEjecucion, id_ts_mb):
	tsmovbancactual=[]
	consultaDatos="SELECT ID,VALOR,ID_TS_TD,ESTADO,FECHA,ID_TS_CB,ID_MAE_TER,NUMERO_DOC,FECHA_PROC,OBSERVACIONES,ID_MINERAL_CB from TS_MOV_BANC WHERE FECHA_PROC=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_TS_MB="+str(id_ts_mb)
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID="+str(id_movimiento_ejecutado)
	cursorModuloConexionTesoreriaMovimientoBancos.execute(consultaDatos)
	tsmovbancid=cursorModuloConexionTesoreriaMovimientoBancos.fetchall()
	for idmovbanc in tsmovbancid:
		tsmovbancactual.append(idmovbanc)
	return tsmovbancactual

#--Metodo que se encarga de cargar en una lista un array de movimientos de bancos anulados de acuerdo al concepto
#--Entrada: Fecha de realizacion y el id del concepto
#--Retorna: Lista de movimientos de bancos segun las fechas establecidas
def verificaMovimientoAnulacion(fechaEjecucion, id_ts_mb):
	tsmovbancactual=[]
	consultaDatos="SELECT ID_MOV_BANC from TS_ANU_MOV_BANC WHERE FECHA_ANUL=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_MOV_BANC="+str(id_movimiento_ejecutado)
	cursorModuloConexionTesoreriaMovimientoBancos.execute(consultaDatos)
	tsmovbancidAnul=cursorModuloConexionTesoreriaMovimientoBancos.fetchall()
	for idAnulmovbanc in tsmovbancidAnul:
		cursorModuloConexionTesoreriaMovimientoBancos.execute("SELECT ID,VALOR,ID_TS_TD,ESTADO,FECHA,ID_TS_CB,ID_MAE_TER,NUMERO_DOC,FECHA_PROC,OBSERVACIONES,ID_MINERAL_CB from TS_MOV_BANC WHERE ID="+str(idAnulmovbanc[0])+" AND ID_TS_MB="+str(id_ts_mb))
		tsmovbancactualAnulado=cursorModuloConexionTesoreriaMovimientoBancos.fetchone();
		if tsmovbancactualAnulado is not None:
			tsmovbancactual.append(tsmovbancactualAnulado)
	return tsmovbancactual

#--Metodo que se encarga de cargar en una lista un array facturas Pos
#--Entrada: Fecha de realizacion
#--Retorna: Lista de facturas segun las fechas establecidas
def verificaFacturaPos(fechaEjecucion):
	datosfacturactualpos=[]
	consultaDatos="SELECT * from CA_FACTURA_POS WHERE trunc(FECHA_FACTURACION) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_FACTURA="+str(id_movimiento_ejecutado)
	logger_saves.info("Query de la busqueda del producto")
	logger_saves.info(consultaDatos)
	cursorModuloConexionCarteraVentasPos.execute(consultaDatos)
	facturapos=cursorModuloConexionCarteraVentasPos.fetchall()
	for factu in facturapos:
		datosfacturactualpos.append(factu)
	return datosfacturactualpos

#--Metodo que se encarga de cargar en una lista un array facturas Pos Anuladas de acuerdo a la fecha de anulacion
#--Entrada: Fecha de realizacion
#--Retorna: Lista de facturas anuladas segun las fechas establecidas
def verificaFacturaPosAnuladas(fechaEjecucion):
	datosfacturactualpos=[]
	consultaDatos="SELECT * from CA_FACTURA_POS WHERE trunc(FECHA_ANU) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_FACTURA="+str(id_movimiento_ejecutado)
	cursorModuloConexionCarteraVentasPos.execute(consultaDatos)
	facturapos=cursorModuloConexionCarteraVentasPos.fetchall()
	for factu in facturapos:
		datosfacturactualpos.append(factu)
	return datosfacturactualpos

#--Metodo que se encarga de cargar en una lista un array notas debito
#--Entrada: Fecha de realizacion
#--Retorna: Lista de notas debito segun las fechas establecidas
def verificaNotaDebito(fechaEjecucion):
	datosnotadebiroactual=[]
	consultaDatos="SELECT * from CA_DEBITO WHERE trunc(FECHA_PROCESO) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_DEBITO="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	notasdebito=cursormoduloconexion.fetchall()
	for notadebito in notasdebito:
		datosnotadebiroactual.append(notadebito)
	return datosnotadebiroactual

#--Metodo que se encarga de cargar en una lista un array notas debito auladas de acuerdo a la fecha establecida
#--Entrada: Fecha de realizacion
#--Retorna: Lista de notas debito anuladas segun las fechas establecidas
def verificaNotaDebitoAnulada(fechaEjecucion):
	datosnotadebiroactual=[]
	consultaDatos="SELECT * from CA_DEBITO WHERE trunc(FECHA_ANU) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_DEBITO="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	notasdebito=cursormoduloconexion.fetchall()
	for notadebito in notasdebito:
		datosnotadebiroactual.append(notadebito)
	return datosnotadebiroactual

#--Metodo que se encarga de cargar en una lista un array notas credito
#--Entrada: Fecha de realizacion
#--Retorna: Lista de notas debito segun las fechas establecidas
def verificaNotaCredito(fechaEjecucion):
	datosnotadebiroactual=[]
	consultaDatos="SELECT * from CA_CREDITO WHERE trunc(FECHA_PROCESO) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_CREDITO="+str(id_movimiento_ejecutado)
	logger_saves.info("Llamada a la base de datos")
	logger_saves.info(consultaDatos)
	cursormoduloconexion.execute(consultaDatos)
	notasdebito=cursormoduloconexion.fetchall()
	for notadebito in notasdebito:
		datosnotadebiroactual.append(notadebito)
	logger_saves.info("Datos a trabajar en la consulta")
	logger_saves.info(datosnotadebiroactual)
	return datosnotadebiroactual

#--Metodo que se encarga de cargar en una lista un array notas credito anuladas de acuerdo a la fecha
#--Entrada: Fecha de realizacion
#--Retorna: Lista de notas debito anuladas segun las fechas establecidas
def verificaNotaCreditoAnulada(fechaEjecucion):
	datosnotadebiroactual=[]
	consultaDatos="SELECT * from CA_CREDITO WHERE trunc(FECHA_ANU) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_CREDITO="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	notasdebito=cursormoduloconexion.fetchall()
	for notadebito in notasdebito:
		datosnotadebiroactual.append(notadebito)
	return datosnotadebiroactual

#--Metodo que se encarga de cargar en una lista los periodos de nomina solicitaods
#--Entrada: Fecha de realizacion
#--Retorna: Lista de periodos de nomina segun las fechas establecidas
def verificaPeriodoNomina(fechaEjecucion):
	periodonominaactual=[]
	cursormoduloconexion.execute("SELECT * from NO_PERIODO WHERE trunc(FECHA_PAGO) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_TIPO_PERIODO!=9")
	periodonominaseleccionado=cursormoduloconexion.fetchall()
	for periodonominafecha in periodonominaseleccionado:
		periodonominaactual.append(periodonominafecha)
	return periodonominaactual

#--Metodo que se encarga de cargar en una lista un array con inventarios DV
#--Entrada: Fecha de realizacion y tipo de movimiento DV
#--Retorna: Lista de inventarios dv segun las fechas establecidas
def verificaPeriodoInventarioDV(fechaEjecucion,id_tipo_movimiento_entrada):
	datosinventarioDV=[]
	consultaDatos="SELECT * from IN_MOVIMIENTOS_DV WHERE trunc(FECHA_MOV) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') and ID_TIPO_MOVIMIENTO="+id_tipo_movimiento_entrada+" and ESTADO=0"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_MOVIMIENTOS_DV="+str(id_movimiento_ejecutado)
	if id_cen_op_filtro is not None:
		consultaDatos=consultaDatos+" and ID_CEN_OP="+str(id_cen_op_filtro)
	logger_saves.info("Consulta de datos con los parametros establecidos")
	logger_saves.info(consultaDatos)
	cursormoduloconexion.execute(consultaDatos)
	inventarioDV=cursormoduloconexion.fetchall()
	for invDV in inventarioDV:
		datosinventarioDV.append(invDV)
	return datosinventarioDV

#--20140219 - Modificacion, Se agrega metodo para generar paquete con movimientos anulados, de acuerdo a la fehca de anulacion
#--Metodo que se encarga de cargar en una lista un array con inventarios DV Anulados
#--Entrada: Fecha de realizacion y tipo de movimiento DV
#--Retorna: Lista de inventarios dv segun las fechas establecidas
def verificaPeriodoInventarioDVAnulado(fechaEjecucion,id_tipo_movimiento_entrada):
	datosinventarioDV=[]
	consultaDatos="SELECT * from IN_MOVIMIENTOS_DV WHERE trunc(FECHA_ANU) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') and ID_TIPO_MOVIMIENTO="+id_tipo_movimiento_entrada+" and ESTADO=0"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_MOVIMIENTOS_DV="+str(id_movimiento_ejecutado)
	if id_cen_op_filtro is not None:
		consultaDatos=consultaDatos+" and ID_CEN_OP="+str(id_cen_op_filtro)
	cursormoduloconexion.execute(consultaDatos)
	inventarioDV=cursormoduloconexion.fetchall()
	for invDV in inventarioDV:
		datosinventarioDV.append(invDV)
	return datosinventarioDV

#--Metodo que se encarga de cargar en una lista un array con inventarios CON
#--Entrada: Fecha de realizacion y tipo de movimiento CON
#--Retorna: Lista de inventarios dv segun las fechas establecidas
def verificaPeriodoInventarioCON(fechaEjecucion,id_tipo_movimiento_entrada):
	datosinventarioCON=[]
	consultaDatos="SELECT * from IN_MOVIMIENTOS_CON WHERE trunc(FECHA_MOV) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') and ID_TIPO_MOVIMIENTO="+id_tipo_movimiento_entrada+" and ESTADO=0"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_MOVIMIENTOS_CON="+str(id_movimiento_ejecutado)
	if id_cen_op_filtro is not None:
		consultaDatos=consultaDatos+" and ID_CEN_OP="+str(id_cen_op_filtro)
	cursormoduloconexion.execute(consultaDatos)
	inventarioCON=cursormoduloconexion.fetchall()
	for invCON in inventarioCON:
		datosinventarioCON.append(invCON)
	return datosinventarioCON

#--Metodo que se encarga de cargar en una lista un array con inventarios CON
#--Entrada: Fecha de realizacion y tipo de movimiento CON
#--Retorna: Lista de inventarios dv segun las fechas establecidas
def verificaPeriodoInventarioCONAnulado(fechaEjecucion,id_tipo_movimiento_entrada):
	datosinventarioCON=[]
	consultaDatos="SELECT * from IN_MOVIMIENTOS_CON WHERE trunc(FECHA_ANU) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') and ID_TIPO_MOVIMIENTO="+id_tipo_movimiento_entrada+" and ESTADO=0"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and ID_MOVIMIENTOS_CON="+str(id_movimiento_ejecutado)
	if id_cen_op_filtro is not None:
		consultaDatos=consultaDatos+" and ID_CEN_OP="+str(id_cen_op_filtro)
	cursormoduloconexion.execute(consultaDatos)
	inventarioCON=cursormoduloconexion.fetchall()
	for invCON in inventarioCON:
		datosinventarioCON.append(invCON)
	return datosinventarioCON

#--Metodo que se encarga de cargar en una lista un array con regalias en un perido establecido
#--Entrada: Fecha de realizacion 
#--Retorna: Lista de regalias segun las fechas establecidas
def verificaPeriodoRegalias(fechaEjecucion):
	datosRegalias=[]
	cursormoduloconexion.execute("SELECT * from RE_DISTRIBUCION WHERE trunc(FECHA_CREA) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
	regaliasInfo=cursormoduloconexion.fetchall()
	for regalias in regaliasInfo:
		datosRegalias.append(regalias)
	return datosRegalias

#--Metodo que se encarga de cargar en una lista un array con depreciaciones en un perido establecido
#--Entrada: Vigencia y id del mes 
#--Retorna: Lista de depreciaciones segun las fechas establecidas
def traeDepreciaciones(vigencia,periodo_contable):
	datosDepreciacion=[]
	cursormoduloconexion.execute("select IN_SALDO_INVENTARIO_DV.ID_CEN_OP,SUM(IN_DEPRECIACION.VALOR_DEPRECIADO),in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos,in_param_contab.naturaleza,IN_PARAM_CONTAB.ID_GRUPO,IN_PARAM_CONTAB.ID_CLASE,IN_PARAM_CONTAB.ID_LINEA FROM IN_DEPRECIACION JOIN IN_INVENTARIO_DV ON IN_DEPRECIACION.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV JOIN IN_SALDO_INVENTARIO_DV ON IN_DEPRECIACION.ID_MESES=IN_SALDO_INVENTARIO_DV.ID_MESES AND IN_DEPRECIACION.ID_VIGENCIA=IN_SALDO_INVENTARIO_DV.ID_VIGENCIA AND IN_DEPRECIACION.ID_INVENTARIO_DV=IN_SALDO_INVENTARIO_DV.ID_INVENTARIO_DV JOIN IN_TIPO_ALMACENAMIENTO ON  IN_SALDO_INVENTARIO_DV.ID_TIPO_ALMACENAMIENTO=IN_TIPO_ALMACENAMIENTO.ID_TIPO_ALMACENAMIENTO JOIN IN_PARAM_CONTAB ON IN_PARAM_CONTAB.ID_GRUPO=IN_TIPO_ALMACENAMIENTO.ID_GRUPO_ALMACENAMIENTO AND IN_PARAM_CONTAB.ID_CLASE=IN_INVENTARIO_DV.ID_CLASE AND IN_PARAM_CONTAB.ID_LINEA=IN_INVENTARIO_DV.ID_LINEA AND IN_PARAM_CONTAB.ID_TIPO_TRANSAC=2 WHERE IN_DEPRECIACION.ID_MESES="+str(periodo_contable)+" AND IN_DEPRECIACION.ID_VIGENCIA="+str(vigencia)+" GROUP BY in_param_contab.naturaleza,IN_SALDO_INVENTARIO_DV.ID_CEN_OP,IN_PARAM_CONTAB.ID_GRUPO,IN_PARAM_CONTAB.ID_CLASE,IN_PARAM_CONTAB.ID_LINEA,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos ORDER BY in_param_contab.naturaleza,IN_SALDO_INVENTARIO_DV.ID_CEN_OP,IN_PARAM_CONTAB.ID_GRUPO,IN_PARAM_CONTAB.ID_CLASE,IN_PARAM_CONTAB.ID_LINEA")
	logger_saves.info("Consulta depreciacion")
	logger_saves.info("select IN_SALDO_INVENTARIO_DV.ID_CEN_OP,SUM(IN_DEPRECIACION.VALOR_DEPRECIADO),in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos,in_param_contab.naturaleza,IN_PARAM_CONTAB.ID_GRUPO,IN_PARAM_CONTAB.ID_CLASE,IN_PARAM_CONTAB.ID_LINEA FROM IN_DEPRECIACION JOIN IN_INVENTARIO_DV ON IN_DEPRECIACION.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV JOIN IN_SALDO_INVENTARIO_DV ON IN_DEPRECIACION.ID_MESES=IN_SALDO_INVENTARIO_DV.ID_MESES AND IN_DEPRECIACION.ID_VIGENCIA=IN_SALDO_INVENTARIO_DV.ID_VIGENCIA AND IN_DEPRECIACION.ID_INVENTARIO_DV=IN_SALDO_INVENTARIO_DV.ID_INVENTARIO_DV JOIN IN_TIPO_ALMACENAMIENTO ON  IN_SALDO_INVENTARIO_DV.ID_TIPO_ALMACENAMIENTO=IN_TIPO_ALMACENAMIENTO.ID_TIPO_ALMACENAMIENTO JOIN IN_PARAM_CONTAB ON IN_PARAM_CONTAB.ID_GRUPO=IN_TIPO_ALMACENAMIENTO.ID_GRUPO_ALMACENAMIENTO AND IN_PARAM_CONTAB.ID_CLASE=IN_INVENTARIO_DV.ID_CLASE AND IN_PARAM_CONTAB.ID_LINEA=IN_INVENTARIO_DV.ID_LINEA AND IN_PARAM_CONTAB.ID_TIPO_TRANSAC=2 WHERE IN_DEPRECIACION.ID_MESES="+str(periodo_contable)+" AND IN_DEPRECIACION.ID_VIGENCIA="+str(vigencia)+" GROUP BY in_param_contab.naturaleza,IN_SALDO_INVENTARIO_DV.ID_CEN_OP,IN_PARAM_CONTAB.ID_GRUPO,IN_PARAM_CONTAB.ID_CLASE,IN_PARAM_CONTAB.ID_LINEA,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos ORDER BY in_param_contab.naturaleza,IN_SALDO_INVENTARIO_DV.ID_CEN_OP,IN_PARAM_CONTAB.ID_GRUPO,IN_PARAM_CONTAB.ID_CLASE,IN_PARAM_CONTAB.ID_LINEA")
	depreciacionInfo=cursormoduloconexion.fetchall()
	for depreciacion in depreciacionInfo:
		datosDepreciacion.append(depreciacion)
	return datosDepreciacion

#--Metodo que se encarga de cargar en una lista un array con novedades de cartera en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de novedades segun las fechas establecidas
def verificaNovedadDebito(fechaEjecucion):
	datosnotadebiroactual=[]
	consultaDatos="SELECT * from CA_NOVEDAD_CARTERA WHERE trunc(FECHA_NOVEDAD) = to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	#if id_movimiento_ejecutado is not None:
		#consultaDatos=consultaDatos+" and ID_DEBITO="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	notasdebito=cursormoduloconexion.fetchall()
	for notadebito in notasdebito:
		datosnotadebiroactual.append(notadebito)
	return datosnotadebiroactual

#--Metodo que se encarga de cargar en una lista un array con pagos a acreedores en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de pagos segun las fechas establecidas
def verificaPagosAcreedores(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT TS_PAGO_OBL.NRO_ORDEN_PAGO,TS_PAGO_OBL.VALOR,TS_PAGO_OBL.ID_TERCERO,TS_PAGO_OBL.DESCRIPCION,TS_OBLIGACION.OBSERVACIONES,TS_OBLIGACION.ID_CLASE_CXP,TS_EMISION_PAGO.ID_CLASE,TS_EMISION_PAGO.ID_BN,TS_EMISION_PAGO.ID_CB,TS_PAGO_OBL.ID_VIGENCIA,TS_PAGO_OBL.ID_OBLIGACION,TS_OBLIGACION.SECUENCIA,TS_OBLIGACION.ANO_FISCAL,TS_PAGO_OBL.ID_PAGO_OBL  FROM TS_PAGO_OBL LEFT JOIN TS_EMISION_PAGO ON TS_EMISION_PAGO.ID_EMISION_PAGO=TS_PAGO_OBL.ID_EMISION_PAGO LEFT JOIN TS_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_PAGO_OBL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_PAGO_OBL.VIGENCIA=TS_OBLIGACION.ANO_FISCAL WHERE trunc(TS_EMISION_PAGO.FECHA_PROC)=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND(TS_PAGO_OBL.ID_CLASE_PAGO !=4 or TS_PAGO_OBL.ID_CLASE_PAGO IS NULL) AND(TS_PAGO_OBL.ESTADO !=1 or TS_PAGO_OBL.ESTADO IS NULL)"
	cursormoduloconexion.execute(consultaDatos)
	datospagos=cursormoduloconexion.fetchall()
	for datopago in datospagos:
		datosPagoAcreedores.append(datopago)
	return datosPagoAcreedores

#--Metodo que se encarga de cargar en una lista un array con pagos a acreedores anulados en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de pagos segun las fechas establecidas
def verificaPagosAcreedoresAnulados(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT ID_PAGO_OBL FROM TS_ANUL_PAGOS WHERE FECHA_ANUL=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	cursormoduloconexion.execute(consultaDatos)
	datosPagoAcreedoresAnul=cursormoduloconexion.fetchall()
	for datosPagoAcreedorAnul in datosPagoAcreedoresAnul:
		cursormoduloconexion.execute("SELECT TS_PAGO_OBL.NRO_ORDEN_PAGO,TS_PAGO_OBL.VALOR,TS_PAGO_OBL.ID_TERCERO,TS_ANUL_PAGOS.OBSERVACIONES,TS_OBLIGACION.ID_CLASE_CXP,TS_EMISION_PAGO.ID_CLASE,TS_EMISION_PAGO.ID_BN,TS_EMISION_PAGO.ID_CB,TS_PAGO_OBL.ID_VIGENCIA,TS_PAGO_OBL.ID_OBLIGACION,TS_OBLIGACION.SECUENCIA,TS_OBLIGACION.ANO_FISCAL,TS_PAGO_OBL.ID_PAGO_OBL FROM TS_PAGO_OBL LEFT JOIN TS_EMISION_PAGO ON TS_EMISION_PAGO.ID_EMISION_PAGO=TS_PAGO_OBL.ID_EMISION_PAGO LEFT JOIN TS_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_PAGO_OBL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_PAGO_OBL.VIGENCIA=TS_OBLIGACION.ANO_FISCAL LEFT JOIN TS_ANUL_PAGOS ON TS_PAGO_OBL.ID_PAGO_OBL=TS_ANUL_PAGOS.ID_PAGO_OBL WHERE TS_PAGO_OBL.ID_PAGO_OBL="+str(datosPagoAcreedorAnul[0])+" AND(TS_PAGO_OBL.ID_CLASE_PAGO !=4 or TS_PAGO_OBL.ID_CLASE_PAGO IS NULL)")
		datosPagoAcreedoresAnulado=cursormoduloconexion.fetchone();
		if datosPagoAcreedoresAnulado is not None:
			datosPagoAcreedores.append(datosPagoAcreedoresAnulado)
	return datosPagoAcreedores

#--Metodo que se encarga de cargar en una lista un array con obligaciones presupuestales en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de obligaciones segun las fechas establecidas
def verificaObligacionesPresupuestales(fechaEjecucion):
	datosObligacionesPresupuestales=[]
	consultaDatos="SELECT TS_OBLIGACION.ID_OBLIGACION,TS_OBLIGACION.ID_VIGENCIA,TS_OBLIGACION.SECUENCIA,TS_OBLIGACION.ANO_FISCAL,TS_OBLIGACION.OBSERVACIONES,TS_OBLIGACION.ID_CLASE_CXP,TS_OBLIGACION.USUARIO FROM TS_OBLIGACION WHERE trunc(TS_OBLIGACION.FECHA_PROCESO)=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and TS_OBLIGACION.ID_OBLIGACION="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	datospagos=cursormoduloconexion.fetchall()
	for datopago in datospagos:
		datosObligacionesPresupuestales.append(datopago)
	return datosObligacionesPresupuestales

#--Metodo que se encarga de cargar en una lista un array con obligaciones presupuestales en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de obligaciones segun las fechas establecidas
def verificaObligacionesPresupuestalesAnuladas(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT ID_OBLIGACION,SECUENCIA,ID_VIGENCIA,VIGENCIA FROM TS_ANUL_OBLIGACION WHERE FECHA_PROCESO=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and TS_ANUL_OBLIGACION.ID_OBLIGACION="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	datosPagoAcreedoresAnul=cursormoduloconexion.fetchall()
	for datosPagoAcreedorAnul in datosPagoAcreedoresAnul:
		cursormoduloconexion.execute("SELECT TS_OBLIGACION.ID_OBLIGACION,TS_OBLIGACION.ID_VIGENCIA,TS_OBLIGACION.SECUENCIA,TS_OBLIGACION.ANO_FISCAL,TS_OBLIGACION.OBSERVACIONES,TS_OBLIGACION.ID_CLASE_CXP,TS_OBLIGACION.USUARIO FROM TS_OBLIGACION WHERE TS_OBLIGACION.ID_OBLIGACION="+str(datosPagoAcreedorAnul[0])+" AND TS_OBLIGACION.ID_VIGENCIA="+str(datosPagoAcreedorAnul[2])+" AND TS_OBLIGACION.SECUENCIA="+str(datosPagoAcreedorAnul[1])+" AND TS_OBLIGACION.ANO_FISCAL="+str(datosPagoAcreedorAnul[3]))
		datosPagoAcreedoresAnulado=cursormoduloconexion.fetchone();
		if datosPagoAcreedoresAnulado is not None:
			datosPagoAcreedores.append(datosPagoAcreedoresAnulado)
	return datosPagoAcreedores

#--Metodo que se encarga de cargar en una lista un array con pagos a acreedores en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de pagos segun las fechas establecidas
def verificaPagosRegalias(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT TS_PAGO_OBL.NRO_ORDEN_PAGO,TS_PAGO_OBL.VALOR,TS_PAGO_OBL.ID_TERCERO,TS_EMISION_PAGO.ID_CB,RE_OBL_DETALLE.OBSERVACIONES,TS_PAGO_OBL.ID_VIGENCIA FROM TS_PAGO_OBL LEFT JOIN TS_EMISION_PAGO ON TS_EMISION_PAGO.ID_EMISION_PAGO=TS_PAGO_OBL.ID_EMISION_PAGO LEFT JOIN RE_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=RE_OBLIGACION.ID_OBLIGACION LEFT JOIN RE_OBL_DETALLE ON TS_PAGO_OBL.ID_OBLIGACION=RE_OBL_DETALLE.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA = RE_OBL_DETALLE.SECUENCIA WHERE trunc(TS_EMISION_PAGO.FECHA_PROC)=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND (TS_PAGO_OBL.ID_CLASE_PAGO =4) AND (TS_PAGO_OBL.ESTADO !=1 or TS_PAGO_OBL.ESTADO IS NULL)"
	logger_saves.info("Consulta de regalias")
	logger_saves.info(consultaDatos)
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and TS_PAGO_OBL.ID_PAGO_OBL="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	datospagos=cursormoduloconexion.fetchall()
	for datopago in datospagos:
		datosPagoAcreedores.append(datopago)
	return datosPagoAcreedores

#--Metodo que se encarga de cargar en una lista un array con pagos a acreedores anulados en un perido establecido
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de pagos segun las fechas establecidas
def verificaPagosRegaliasAnulados(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT ID_PAGO_OBL FROM TS_ANUL_PAGOS WHERE FECHA_ANUL=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')"
	if id_movimiento_ejecutado is not None:
		consultaDatos=consultaDatos+" and TS_ANUL_PAGOS.ID_PAGO_OBL="+str(id_movimiento_ejecutado)
	cursormoduloconexion.execute(consultaDatos)
	datosPagoAcreedoresAnul=cursormoduloconexion.fetchall()
	for datosPagoAcreedorAnul in datosPagoAcreedoresAnul:
		cursormoduloconexion.execute("SELECT TS_PAGO_OBL.NRO_ORDEN_PAGO,TS_PAGO_OBL.VALOR,TS_PAGO_OBL.ID_TERCERO,TS_EMISION_PAGO.ID_CB,RE_OBL_DETALLE.OBSERVACIONES FROM TS_PAGO_OBL LEFT JOIN TS_EMISION_PAGO ON TS_EMISION_PAGO.ID_EMISION_PAGO=TS_PAGO_OBL.ID_EMISION_PAGO LEFT JOIN RE_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=RE_OBLIGACION.ID_OBLIGACION LEFT JOIN RE_OBL_DETALLE ON TS_PAGO_OBL.ID_OBLIGACION=RE_OBL_DETALLE.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA = RE_OBL_DETALLE.SECUENCIA WHERE TS_PAGO_OBL.ID_PAGO_OBL="+str(datosPagoAcreedorAnul[0])+" AND (TS_PAGO_OBL.ID_CLASE_PAGO =4)")
		datosPagoAcreedoresAnulado=cursormoduloconexion.fetchone();
		if datosPagoAcreedoresAnulado is not None:
			datosPagoAcreedores.append(datosPagoAcreedoresAnulado)
	return datosPagoAcreedores

#--Metodo que se encarga de cargar en una lista un array con inverisones propias
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de pagos segun las fechas establecidas
def verificaPagosInverisonesPropias(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT SUM(VALOR) FROM RESUMEN_VALORACION_DIARIA WHERE trunc(FECHA_VALORACION)=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND PORTAFOLIO=1"
	logger_saves.info("Consulta de regalias")
	logger_saves.info(consultaDatos)
	cursormoduloconexion.execute(consultaDatos)
	datospagos=cursormoduloconexion.fetchall()
	for datopago in datospagos:
		datosPagoAcreedores.append(datopago)
	return datosPagoAcreedores

#--Metodo que se encarga de cargar en una lista un array con inverisones distribuidas
#--Entrada: Fecha de ejecución 
#--Retorna: Lista de pagos segun las fechas establecidas
def verificaPagosInverisonesDistribuidas(fechaEjecucion):
	datosPagoAcreedores=[]
	consultaDatos="SELECT SUM(VALOR) FROM RESUMEN_VALORACION_DIARIA WHERE trunc(FECHA_VALORACION)=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND PORTAFOLIO=2"
	logger_saves.info("Consulta de regalias")
	logger_saves.info(consultaDatos)
	cursormoduloconexion.execute(consultaDatos)
	datospagos=cursormoduloconexion.fetchall()
	for datopago in datospagos:
		datosPagoAcreedores.append(datopago)
	return datosPagoAcreedores


#--Metodo que empieza el procesamiento de la interfaz contable, de acuerdo a las variables parametrizadas
#--Entrada: Una peticiòn web que puede ser GET o POST
#--Retorno: Json con los totales, el número de CAD, la fecha y el total de debitos y creditos de acuerdo al movimiento
@csrf_exempt
def batch_procesar(request):
	#--20140519 - MOdificacion - Se captura el valor que viene por POST de el id del movimento en caso que sea por ejecucion live
	global id_movimiento_ejecutado
	#--Variable global que contiene la fecha ingresada de inicio de ejecución
	global fecha_ini
	#--Variable global que contiene la fecha ingresada de fin de ejecución
	global fecha_fin 
	#--Variable global que contiene el id de la transacción a ejecutar
	global id_transaccion
	#--Variable global que contiene el id del usuario que esta ejecutando
	global user
	#--Variable global que contiene el id del modulo en ejecución
	global id_modulo
	#--Variable global que contiene el id del centro de operacion seleccionado 
	global id_cen_op
	#--201405 - Modificacion, se agrega el centro de operacion a filtrar en caso que venga en la consulta
	global id_cen_op_filtro
	#--Variable global que contiene el id de la compañia que ejecuta el proceso
	global id_cia
	#--Variable global para manejo de movimientos contables
	global idmovcontab
	#--20140811 - Modificación, se agrega una variable mas global la cual se va a encargar de separar los mundos de ejecución normal y anulación;
	#-- Solo aplica para las ejecuciones Live; 1 si es ejecución normal, 2 si es anulación; si es nula ejecuta normalmente - para batch.
	global tipoEjecucionLive
	#--Variable global de seguimiento de ejecución de código - Para pruebas del mismo
	global quehace
	#--20140424 - Modificacion, se crea variables para el manejo de errores Otras Dependencias:
	global erroresGeneral
	#--20140424 - Modificacion, se crea variables para el manejo de errores en CADS:
	global erroresCads
	#--20140424 - Modificacion, se crea variables para el manejo de errores en Documentos:
	global erroresDocumentos
	#--20140424 - Modificacion, se crea variables para el manejo de errores en Movimientos
	global erroresMovimientos
	#--Variable para manejo de cuentas no parametrizadas, para log
	global idscuentasfaltantes
	#--20140425 - Modificacion, se crea variables para el manejo de errores en conceptos:
	global idsconceptosfaltantes
	#--20140819 - Modificación, se crea variable para el manejo de coneptos que no contienen asinetos:
	global conceptosasientosfaltantes
	#--20140428 - Modificación, se crea variable para manejo de parametrización en inventario
	global conceptosInventarioFaltantes
	#--20140428 - Modificación, se crea variable para manejo de errores de secuencias
	global errorSecuencias
	#--20140507 - Modificación, se crea variable para manejo de errores cuando no se especifica el centro de operacion 
	global errorCenOp
	#--20140520 - Modificación, se crea variable para manejo de errores cuando no se parametriza alguna cuneta en depreciacion 
	global errorDepreciacion
	#--Variable que contiene errores - 20140408 - MOdificacion, se construye como global para el manejo de excepciones en el programa
	global error
	#--Se inicializa la variable como un tipo lista para ir agregando las ejecuciones -- Esta se remplaza por res para ver la ejecucion en un programa rest, simepre y cuando se anexen datos con append
	quehace=[]
	erroresCads=[]
	erroresDocumentos=[]
	erroresMovimientos=[]
	idscuentasfaltantes=[]
	idsconceptosfaltantes=[]
	conceptosasientosfaltantes=[]
	conceptosInventarioFaltantes=[]
	erroresGeneral=[]
	errorSecuencias=[]
	errorCenOp=[]
	errorDepreciacion=[]	
	idmovcontab=0
	error=0
	id_cen_op=0
	cache.set("error", error)
	#--20140317 - Modificacion, se crea las variables de manejo del LOG para las ejecuciones
	#--Verifica que la ejecución entra por una llamada POST
	if request.method == 'POST':
		#--Se capturan las variables que vienen del llamado POST
		fecha_ini = request.POST.get('fecha_ini')
		fecha_fin = request.POST.get('fecha_fin')
		id_transaccion = request.POST.get('id_transaccion')
		id_modulo = request.POST.get('id_modulo')
		user=request.GET.get('id_username')
		id_movimiento_ejecutado=request.POST.get('id_movimiento_ejecutado')
		id_cen_op_filtro=request.POST.get('id_cen_op')
		id_cia=request.POST.get('id_cia')
		tipoEjecucionLive=request.POST.get('id_tipo_ejecucion_live')
		#--Conntenedor de respuestas tipo List
		contenedorrespuesta=[]
		#--Llamada al modelo de DJANGO correspondiente a la relación entre la transacción y el workflow
		relacionworktrans=Workflow_Transaccion.objects.get(id_transaccion=id_transaccion)
		#--Captura el id del workflow a ejecutar
		workflow=relacionworktrans.id_workflow
		#--Llamada al modelo de DJANGO correspondiente a la relación entre la workflow y la actividad
		relaciones = Rel_Actividad.objects.filter(id_workflow=workflow.id_workflow)
		#--Contenedor de información que devuelve -- Solo para pruebas de ejecución
		devuelveinfo=[]
		#--Ciclo que recorre las actividades propuestas por el workflow
		for i in range(len(relaciones)-1):
			#--Verifica si la actividad es la actividad base, la cual no ejecuta, pero si es la cabecera para las actividades hijo correspondientes
			if i == 0:
				#--Se llama al modelo DJANGO para traer la relación base
				relacioninicio = Rel_Actividad.objects.get(id_workflow=workflow.id_workflow,id_actividad_padre=0)
				#--Se ejecuta la primera relaciòn hijo en el modelo
				ejecutarAccion(relacioninicio.id_actividad_hijo)
				#--Se captura el id del padre para buscar ejecución en el hijo
				id_padre=relacioninicio.id_actividad_hijo.id_actividad
			else:
				#--Se llama al modelo DJANGO para traer la actividad de acuerod al  hijo
				relacioninicio = Rel_Actividad.objects.get(id_workflow=workflow.id_workflow,id_actividad_padre=id_padre)
				#--Se ejecuta la accion correspondiente
				res=ejecutarAccion(relacioninicio.id_actividad_hijo)
				#--Se captura el id del padre para buscar ejecución en el hijo
				id_padre=relacioninicio.id_actividad_hijo.id_actividad
			cache.set("erroresDocumentos", erroresDocumentos)
			cache.set("erroresMovimientos", erroresMovimientos)
			cache.set("erroresCads", erroresCads)
			cache.set("idscuentasfaltantes", idscuentasfaltantes)
		#--Retorna el Jason con el resultado de la operación, si se desea ver la ejecucion se remplaza con la variable quehace y se ejecuta desde un programa rest, de resto se mantiene con res
		return JSONResponse(res)

#--Método que se encarga de ejecutar las acciones propuestas en las actividades de acuerdo a cada interfaz contable
#--Entrada: Actividad a ejecutar
#--Salida: Json de respuesta
def ejecutarAccion(Actividad):
	#--Variables globales para las ejecuciones correspondientes en cada modulo
	#--Variable que contiene el modelo de la transacción generado por DJANGO
	global transaccion
	#--Variable que contiene el modelo del modulo generado por DJANGO
	global modulo
	#--Variable que contiene el modelo de la conexion generado por DJANGO
	global conexion
	#--Variable que contiene ejecución -- Solo para pruebas
	global ejecutar
	#--Variable que contiene una lista con los CADS que fueron ejecutados
	global cuantosejecutados
	#--Variable que contiene el modelo del campo valor utilizado en la parametrización generada por DJANGO
	global contenedorcampovalor
	#--Variable que contiene el modelo del grupo utilizado en la parametrización generada por DJANGO
	global contenedorgrupos
	#--Conexión a la base de datos establecida por la parametrización y cursor para ejecución ---CX_ORACLE
	global moduloconexion
	global cursormoduloconexion
	#--Conexión a la base de datos de contabilidad por la parametrización y cursor para ejecución ---CX_ORACLE
	global modulocontabilidad
	global cursormodulocontabilidad
	#--20140829 - Modificación, Cursores especializados para evitar deadlock
	#--Tesoreria Movimiento Bancos
	global cursorModuloConexionTesoreriaMovimientoBancos
	global cursorModuloContabilidadTesoreriaMovimientoBancos
	#--Cartera Ventas Pos
	global cursorModuloConexionCarteraVentasPos
	global cursorModuloContabilidadCarteraVentasPos
	#--Cartera Nota Debito
	global cursorModuloConexionCarteraNotaDebito
	global cursorModuloContabilidadCarteraNotaDebito
	#--Cartera Novedades Nota Debito
	global cursorModuloConexionCarteraNovedadesNotaDebito
	global cursorModuloContabilidadCarteraNovedadesNotaDebito
	#--Cartera Notas Credito
	global cursorModuloConexionCarteraNotasCredito
	global cursorModuloContabilidadCarteraNotasCredito
	#--Nomina
	global cursorModuloConexionNomina
	global cursorModuloContabilidadNomina
	#--Inventario Depreciacion
	global cursorModuloConexionInventarioDepreciacion
	global cursorModuloContabilidadInventarioDepreciacion
	#--Inventario DV Entrada
	global cursorModuloConexionInventarioDVEntrada
	global cursorModuloContabilidadInventarioDVEntrada
	#--Inventario CON Entrada
	global cursorModuloConexionInventarioCONEntrada
	global cursorModuloContabilidadInventarioCONEntrada
	#--Inventario DV Traslado
	global cursorModuloConexionInventarioDVTraslado
	global cursorModuloContabilidadInventarioDVTraslado
	#--Inventario DV Salida
	global cursorModuloConexionInventarioDVSalida
	global cursorModuloContabilidadInventarioDVSalida
	#--Tesoreria Pagos Presupuestales
	global cursorModuloConexionTesoreriaPagosPresupuestales
	global cursorModuloContabilidadTesoreriaPagosPresupuestales
	#--Tesoreria Obligaciones Presupuestales
	global cursorModuloConexionTesoreriaObligacionesPresupuestales
	global cursorModuloContabilidadTesoreriaObligacionesPresupuestales
	#--Tesoreria Pagos Regalias
	global cursorModuloConexionTesoreriaPagosRegalias
	global cursorModuloContabilidadTesoreriaPagosRegalias
	#--Inversiones
	global cursorModuloConexionInversiones
	global cursorModuloContabilidadInversiones
	#--Variable que contiene el modelo de los conceptos utilizado en la parametrización generada por DJANGO
	global conceptos
	#--Variable que contiene los ids de los cadas ejecutados
	global idscadsejecutados
	#--Variable que contiene generacion de llamados a parametrización -- Solo para pruebas
	global idgen
	#--Variable global que maneja los centros de operacion
	global id_cen_op
	#--Inicializa variables globales de prueba
	idgen=0
	#--Se sel da un valor a las variables para manejo del Memcache en caso que la ejecución demoras mas del timeout permitido
	cache.set("oper", None)
	cache.set("foo", None)
	#--Actividad de incio en las cuales se cargan los modelos a utilizar y las parametrizaciones correspondientes
	if Actividad.programa == "cargarIni()":
		#--Llama el modelo de transacción de acuerdo al seleccionado al inicio de la ejecución
		transaccion = Transaccion.objects.get(id_transaccion=id_transaccion)
		#--20140507 - MOdificacion, se revisa si el id del centro de operacion no viene vaia para setearlo y que ejecute de acuerdo al solicitado en el 
		#--ingreso de las interfaces correspondientes
		logger_saves.info("Valor del campo en la transaccion: "+str(transaccion.id_cen_op_con))
		if transaccion.id_cen_op_con is not None or transaccion.id_cen_op_con!=0:
			logger_saves.info("Setea el valor del centro de operacion")
			id_cen_op=transaccion.id_cen_op_con
		else:
			id_cen_op=None
		#--Llama el modelo de modulo de acuerdo al seleccionado al inicio de la ejecución
		modulo = Modulo.objects.get(id_modulo=id_modulo)
		#--Selecciona la conexión de acuerdo al modulo
		conexion = modulo.id_conexion
		#--Genera el string de conexión y genera el cursor de ejecución en Base de datos para CX_ORACLE de acuerdo a lo parametrizado
		moduloconexionstring=conexion.username+"/"+conexion.password+"@"+conexion.host+":"+str(conexion.puerto)+"/"+conexion.esquema
		try:
			moduloconexion = cx_Oracle.connect(moduloconexionstring)
			cursormoduloconexion = moduloconexion.cursor()
		except cx_Oracle.DatabaseError, ex:
			error, = ex.args
			logger_saves.error("Fallo al conectar con la base de datos del ERP")
			logger_saves.error(moduloconexionstring)
			logger_saves.error('Error.code = '+str(error.code))
			logger_saves.error('str(error.message) = '+str(error.message))
			logger_saves.error('str(error.offset) = '+str(error.offset))
			errorConexion="Fallo al conectar con la base de datos del ERP|"+str(moduloconexionstring)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
			erroresGeneral.append(errorConexion)
			cache.set("error", -1)
		#--Genera el string de conexión y genera el cursor de ejecución en Base de datos para CX_ORACLE para contabilidad
		modulocontabilidadconexion = getattr(settings, 'RUTA_BD', 'default_value')
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Carga basicas")
		try:
			modulocontabilidad = cx_Oracle.connect(modulocontabilidadconexion)
			cursormodulocontabilidad = modulocontabilidad.cursor()
		except cx_Oracle.DatabaseError, ex:
			error, = ex.args
			logger_saves.error("Fallo al conectar con la base de datos del Contabilidad")
			logger_saves.error(modulocontabilidadconexion)
			logger_saves.error('Error.code = '+str(error.code))
			logger_saves.error('str(error.message) = '+str(error.message))
			logger_saves.error('str(error.offset) = '+str(error.offset))
			errorConexion="Fallo al conectar con la base de datos de Contabilidad|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
			erroresGeneral.append(errorConexion)
			cache.set("error", -1)
		#--Genera el string para prefijo de la base de datos
		prefijoBD = getattr(settings, 'PREFIJO_BD', 'default_value')
		#--Deshabilita trigger para ejecutar interfaces
		cursormodulocontabilidad.execute("ALTER TRIGGER "+str(prefijoBD)+".CN_COTROL_CAD_TOT_TRG DISABLE")
		#--Setea variables con las que se guardan los campos y los grupos asignados en la parametrización
		contenedorcampovalor = []
		contenedorgrupos= []
		#--Busca el modelo de DJANGO para mirar los conceptos correspondientes a la transaccion
		conceptos = Concepto.objects.filter(id_transaccion=id_transaccion)
		for concepto  in conceptos:
			#--Por cada concepto busca los asientos para mirar que grupos y tablas estan parametrizados
			asientos = Asiento.objects.filter(id_concepto=concepto.id_concepto)
			for asiento in asientos:
				#--Crea dos variables para ir cagando los datos
				camposvalores = {}
				grupos = {}
				#--Ingresa los valores para trabajarlos
				camposvalores["campovalor_"+asiento.nombre]=asiento.id_campo_valor
				contenedorcampovalor.append(camposvalores)
				#--Verifica si el asiento tiene grupos apra almacenarlos
				if asiento.usa_grupo == 1:
					#--Almacena los grupos
					grupos["grupo_"+asiento.nombre]=asiento.id_grupo
					contenedorgrupos.append(grupos)
		
	#--Actividad que ejecuta la interfaz contable para Movimiento de Bancos
	if Actividad.programa == "ejecutarMovTesoreria()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento de Bancos")
		#--20140829 - Modificación, Cursores especializados para evitar deadlock
		cursorModuloConexionTesoreriaMovimientoBancos=moduloconexion.cursor()
		cursorModuloContabilidadTesoreriaMovimientoBancos=modulocontabilidad.cursor()
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - MOdificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			'''#--Consulta en la base de datos a ver si el dia es o no feriado
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursorModuloConexionTesoreriaMovimientoBancos.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:'''
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(consultaconsecutivo)
					idcontrolcad=cursorModuloContabilidadTesoreriaMovimientoBancos.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(consultaconsecutivomov)
					idmovcontab=cursorModuloContabilidadTesoreriaMovimientoBancos.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursorModuloContabilidadTesoreriaMovimientoBancos.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursorModuloContabilidadTesoreriaMovimientoBancos.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursorModuloContabilidadTesoreriaMovimientoBancos.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursorModuloContabilidadTesoreriaMovimientoBancos.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursorModuloContabilidadTesoreriaMovimientoBancos.execute(buscacad)
			existecad=cursorModuloContabilidadTesoreriaMovimientoBancos.fetchone()
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				rta=1
				#--Entra a ejecutar los movimientos con el id del cad creado
				idgen=ejecutaMovimiento(idgen, fechaatrabajar, rta, tipo_comprobante,idgen)
			else:
				#--Ingresa por existente y ejecuta
				#--Elimina los movimientos y los documentos
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				if id_movimiento_ejecutado is not None:
					datoEliminaMOVIMIENTO=(existecad[0],vigencia,id_movimiento_ejecutado)
					cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
				else:
					datoEliminaMOVIMIENTO=(existecad[0],vigencia)
					cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(None,datoEliminaMOVIMIENTO)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al eliminar Movimientos Contables")
					logger_saves.error(datoEliminaMOVIMIENTO)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				if id_movimiento_ejecutado is not None:
					cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
				else:
					cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(None,datoEliminaMOVIMIENTO)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al eliminar Documentos")
					logger_saves.error(datoEliminaMOVIMIENTO)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				rta=0
				#--Entra a ejecutar el movimiento con el id del CAD existente
				ejecutaMovimiento(existecad[0], fechaatrabajar, rta, tipo_comprobante,idgen)
				idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

    #--Actividad que ejecuta la interfaz contable para Ventas POS
	if Actividad.programa == "ejecutarMovVentasPOS()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento Ventas POS")
		estacad=[]
		#--20140829 - Modificación, Cursores especializados para evitar deadlock
		cursorModuloConexionCarteraVentasPos=moduloconexion.cursor()
		cursorModuloContabilidadCarteraVentasPos=modulocontabilidad.cursor()
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursorModuloContabilidadCarteraVentasPos.execute(consultaconsecutivo)
					idcontrolcad=cursorModuloContabilidadCarteraVentasPos.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursorModuloContabilidadCarteraVentasPos.execute(consultaconsecutivomov)
					idmovcontab=cursorModuloContabilidadCarteraVentasPos.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursorModuloContabilidadCarteraVentasPos.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursorModuloContabilidadCarteraVentasPos.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursorModuloContabilidadCarteraVentasPos.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursorModuloContabilidadCarteraVentasPos.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursorModuloContabilidadCarteraVentasPos.execute(buscacad)
			existecad=cursorModuloContabilidadCarteraVentasPos.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaFacturaPos(fechaatrabajar)
			logger_saves.info("Datos a trabajar para el dia 10")
			logger_saves.info(dat)
			#--20140325 - Modificacion, se ingresan los datos de las facturas anuladas para la ejecucion por aparte
			datAnul=verificaFacturaPosAnuladas(fechaatrabajar)
			logger_saves.info("Datos anulados a trabajar para el dia 10")
			logger_saves.info(datAnul)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursorModuloContabilidadCarteraVentasPos.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursorModuloContabilidadCarteraVentasPos.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoCarteraPos(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoCarteraPos(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if len(dat)!=0:
						iddocelimina=dat[0][4]
					elif len(datAnul)!=0:
						iddocelimina=datAnul[0][4]
					logger_saves.info("Numero de CAD: "+str(existecad[0]))
					logger_saves.info("Numero de documento: "+str(iddocelimina))
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,iddocelimina)
						cursorModuloContabilidadCarteraVentasPos.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursorModuloContabilidadCarteraVentasPos.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursorModuloContabilidadCarteraVentasPos.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursorModuloContabilidadCarteraVentasPos.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursorModuloContabilidadCarteraVentasPos.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursorModuloContabilidadCarteraVentasPos.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoCarteraPos(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoCarteraPos(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Notas Debito
	if Actividad.programa == "ejecutarMovNotaDebito()":
		logger_saves.info("Ejecuta movimiento nota debito")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			"""#--Consulta en la base de datos a ver si el dia es o no feriado
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables"+"|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaNotaDebito(fechaatrabajar)
			#--20140325 - Modificacion, se capturan las anulaciones para procesarlas por aparte
			datAnul=verificaNotaDebitoAnulada(fechaatrabajar)
			logger_saves.info("Datos que trae para trabajar")
			logger_saves.info(dat)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				if len(dat)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNotaDebito(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, se revisa si tiene datos y de ser asi se procede a procesar las anuladas
					if len(datAnul)!=0:
						ejecutaMovimientoNotaDebito(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				if len(dat)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					logger_saves.info("Valor del documento para eliminar: ")
					logger_saves.info(dat[0][4])
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,dat[0][4])
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					logger_saves.info("Hasta aca llega y borra los movimientos y el elemento")
					logger_saves.info("Datos que se traen en la consulta")
					logger_saves.info(dat)
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNotaDebito(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, se revisa si tiene datos y de ser asi se procede a procesar las anuladas
					if len(datAnul)!=0:
						ejecutaMovimientoNotaDebito(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Novedades de Nota Débito
	if Actividad.programa == "ejecutarMovNovedadNotaDebito()":
		logger_saves.info("Ejecuta movimiento novedades nota debito")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			"""#--Consulta en la base de datos a ver si el dia es o no feriado
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables"+"|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaNovedadDebito(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				if len(dat)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNovedadesNotaDebito(idgen,fechaatrabajar,dat,0)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				if len(dat)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					logger_saves.info("Valor del documento para eliminar: ")
					logger_saves.info(dat[0][2])
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,dat[0][2])
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					logger_saves.info("Hasta aca llega y borra los movimientos y el elemento")
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNovedadesNotaDebito(existecad[0],fechaatrabajar,dat,0)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Notas Credito
	if Actividad.programa == "ejecutarMovNotaCredito()":
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			"""#--Consulta en la base de datos a ver si el dia es o no feriado
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaNotaCredito(fechaatrabajar)
			logger_saves.info("Datos a trabajar")
			logger_saves.info(dat)
			#--20140325 - Modificacion, se capturan los valores anulados para trabajarlos por aparte
			datAnul=verificaNotaCreditoAnulada(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				if len(dat)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNotaCredito(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, se revisa si tiene datos y de ser asi se procede a procesar las anuladas
					if len(datAnul)!=0:
						ejecutaMovimientoNotaCredito(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				if len(dat)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,dat[0][4])
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNotaCredito(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, se revisa si tiene datos y de ser asi se procede a procesar las anuladas
					if len(datAnul)!=0:
						ejecutaMovimientoNotaCredito(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Nomina
	if Actividad.programa == "ejecutaMovimientoNomina()":
		logger_saves.info("Ejecuta movimiento de nomina")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Variable para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			if contadorcads == 0:
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				cursormodulocontabilidad.execute(consultaconsecutivo)
				idcontrolcad=cursormodulocontabilidad.fetchone()
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				cursormodulocontabilidad.execute(consultaconsecutivomov)
				idmovcontab=cursormodulocontabilidad.fetchone()
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				logger_saves.info("CAD EN QUE ESTA: ")
				logger_saves.info(idgen)
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaPeriodoNomina(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				if len(dat)!=0:
					#--Crea el cad con el consecutivo
					consultacad = "INSERT INTO CN_CONTROL_CAD VALUES ( \'"+str(idgen)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(periodo_contable)+"','"+str(tipo_comprobante)+"',to_date('"+str(fechaatrabajar)+"','YYYY-MM-DD'),'"+str(totcredito)+"','"+str(totdebito)+"','','','')"
					logger_saves.error("Query para insercion de CAD: ")
					logger_saves.error(consultacad)
					cursormodulocontabilidad.execute(consultacad)
					#--Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNomina(idgen,fechaatrabajar,dat)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				if len(dat)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(existecad[0])+" AND ID_VIGENCIA="+str(vigencia)
					cursormodulocontabilidad.execute(eliminamovimientos)
					eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(existecad[0])+" AND ID_VIGENCIA="+str(vigencia)
					cursormodulocontabilidad.execute(eliminadocumentos)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					ejecutaMovimientoNomina(existecad[0],fechaatrabajar,dat)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Ejecuta movimiento contable para Inventario de entrada
	if Actividad.programa == "ejecutaMovimientoInventarioDepreciacion()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Comienza ejecucion en depreciacion")
		estacad=[]
		#20140319 - Modificacion,Se agrega un contenedor para los datos del CAD
		datosInsertCAD=[] 
		#20140319 - Modificacion,Se agrega un contenedor para los datos del DOCUMENTO
		datosInsertDOCUMENTO=[] 
		#20140319 - Modificacion,Se agrega un contenedor para los datos del MOVIMIENTO
		datosInsertMOVIMIENTO=[]
		#20140319 - Modificacion,Se agrega un contenedor para eliminar los datos del MOVIMIENTO
		datosEliminaDOCUMENTO=[]
		#20140319 - Modificacion,Se agrega un contenedor para eliminar los datos del DOCUMENTO
		datosEliminaMOVIMIENTO=[]
		#--Ingresa el id del centro de operación
		cen_op=id_cen_op
		#--Id de la compañia 
		cia=id_cia
		#--Variable que cuenta los CADS
		contadorcads=0
		#--Tipo de comprobante
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que manejan el total de debitos y creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Formato de fech para inserción
		formatofecha="%Y-%m-%d"
		#--Cuadra la fehca de inicio y de fin con el formato establecido
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Calcula la cantidad de dias del mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Contenedor para las fechas
		listadodefechas=[]
		#--Contenedor para manejar los ids de los CADS ejecutados
		idscadsejecutados=[]
		#--Variable que maneja los ids para creación de CADS
		idgen=0
		#--Recorre los dias del mes para verificar si el dia esta en festivo o en fin de semana
		for i in range(cantidaddias):
			#--Captura el dia
			d=fechainicio+timedelta(days=i)
			listadodefechas.append(d.date())
		#--Se cuadran las fechas 
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Captura la fecha a trabajar
		now = d.date()
		#--Captura la vigencia de la ejecucion
		vigencia = now.year
		#--Se genera el periodo contable para la ejecucion
		periodo_contable=now.month
		#--Fecha Final Cuadrada sobre el ultimo de mes
		FechaEjecucion=datetime(now.year, now.month, calendar.mdays[now.month])
		FechaEjecucion=FechaEjecucion.date()
		#--Se tranforma la fehca a un tipo String para la insercion en la base de datos
		fecha=str(now) 
		#--Verifica si el contador de CADS para consultar el id del CAD en la base de datos
		if contadorcads == 0:
			#--Se consulta el valor dle ID del CAD
			consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
			try:
				cursormodulocontabilidad.execute(consultaconsecutivo)
				idcontrolcad=cursormodulocontabilidad.fetchone()
			except cx_Oracle.DatabaseError, ex:
				logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
				logger_saves.error(consultaconsecutivo)
				logger_saves.error('Error.code = '+str(error.code))
				logger_saves.error('str(error.message) = '+str(error.message))
				logger_saves.error('str(error.offset) = '+str(error.offset))
				errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
				erroresGeneral.append(errorConexion)
				cache.set("error", -1)
			#--Se aumenta en uno para emepzar las inserciones
			idgen=idcontrolcad[0]+1
			logger_saves.info("/*********************************************************************************/")
			logger_saves.info("Selecciona el valor para ingreso de nuevos CADS "+str(idgen))
			#--20140219 - Modificacion, Consulta consecutivos para los movimientos contables
			#--Consulta el consecutivo para asientos contables
			consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
			try:
				cursormodulocontabilidad.execute(consultaconsecutivomov)
				idmovcontab=cursormodulocontabilidad.fetchone()
			except cx_Oracle.DatabaseError, ex:
				logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
				logger_saves.error(consultaconsecutivo)
				logger_saves.error('Error.code = '+str(error.code))
				logger_saves.error('str(error.message) = '+str(error.message))
				logger_saves.error('str(error.offset) = '+str(error.offset))
				errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
				erroresGeneral.append(errorConexion)
				cache.set("error", -1)
			#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
			idmovcontab=idmovcontab[0]+1
			#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
			queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
			cursormodulocontabilidad.execute(queryConsultaSecuencias)
			idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
			if idCADSecuenciaInvalida is not None:
				logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
				logger_saves.error(queryConsultaSecuencias)
				errorConexion="Error en Secuencias para Ingreso de CADS"
				errorSecuencias.append(errorConexion)
				cache.set("error", -1)
			queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
			cursormodulocontabilidad.execute(queryConsultaSecuencias)
			idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
			if idCADSecuenciaInvalida is not None:
				logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
				logger_saves.error(queryConsultaSecuencias)
				errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
				errorSecuencias.append(errorConexion)
				cache.set("error", -1)
			logger_saves.info("/*********************************************************************************/")
			logger_saves.info("Selecciona el valor para ingreso de nuevos Movimientos "+str(idmovcontab))
		#--Aumenta en uno el contador de CADS para no volver a generar consulta de secuencia para nuevos
		contadorcads=contadorcads+1
		#--TRae la depreciacion de acuerdo al mes y la vigencia
		depreciacionesMes=traeDepreciaciones(vigencia,periodo_contable)
		#--Fecha ejecucion depreciacion
		fechaEjecucion=d.date()
		#--Se setean los valores del memcache para la barra de progreso
		total=float(len(depreciacionesMes))
		if total==0:
			total=98
		total=float(98)/total
		ini_proc=datetime.now()
		logger_saves.info("/*********************************************************************************/")
		logger_saves.error(" Inicia El total de proceso en: "+str(ini_proc))
		logger_saves.info("Recorre las depreciaciones")
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info(depreciacionesMes)
		logger_saves.info("/*********************************************************************************/")
		#--Recorre los valores de depreciacion
		for depreciacion in depreciacionesMes:
			#--20140520 - Modificacion, se genera error asi la cuenta en depreciacion no esta parametrizada
			if depreciacion[3] is None:
				errorDepreciacion.append("Error en depreciacion")
				cache.set("error", -1)
			#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
			if cen_op is None or cen_op==0:
				cen_op=depreciacion[0]
			#--Se captura el valor actual en Cache
			res=cache.get("oper")
			#--Verifica si esta vacion para detener la ejecucion
			if res is None:
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Ingresa los valores periodicos en la cahce para la ejecucion
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(FechaEjecucion)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+"AND ID_CEN_OP="+str(cen_op)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchall()
			logger_saves.info("/*********************************************************************************/")
			logger_saves.info("Busca el correspondiente CAD")
			logger_saves.info(existecad)
			logger_saves.info("/*********************************************************************************/")
			#--Verifica si existe CAD en la fecha y de acuerdo al centro de operacion 
			if len(existecad)==0:
				#--Ingresa el CAD correspondiente al movimiento de inventario
				#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
				datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,FechaEjecucion,0,0,'','','')
				cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursormodulocontabilidad.execute(None,datosCAD)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear CAD")
					logger_saves.error(datosCAD)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresCads.append(errorConexion)
					cache.set("error", -1)
				#--Ingresa el id del CAD en el contenedor de los CADS ejecutados
				idscadsejecutados.append(str(idgen)+","+str(vigencia))
				#--Ingresa el valor del nuevo CAD
				idcad=idgen
				#--Aumenta la variable de consecutivo de CAD
				idgen+=1
			else:
				#--Captura el valor del CAD para verificar si ya fue operado
				cadexistente=existecad[0]
				cadexistente=cadexistente[0]
			    #--Manejo de excepcion para corroborar si se debe o no blanquear la base de datos 
				try:
				    #--Se busca la posición de los indices de las variables que se estan recorriendo
					#--Si no lo encuentra la anexa, no permite replicas
					#--20140224 - MOdificacion, se hace la busqueda sobre el array general de CADS para verificar que no se repite el ingreso y los casos en que debe blanquear
					posicion=idscadsejecutados.index(str(cadexistente)+","+str(vigencia))
				except:
					#--Si no encuentra Index, procede a ingresar el valor de la variable
					#--Elimina los movimientos y los documentos creados con anterioridad
					#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
					datoEliminaMOVIMIENTO=(cadexistente,vigencia)
					cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--Ingresa el id del CAD en el contenedor de los CADS ejecutados
					idscadsejecutados.append(str(cadexistente)+","+str(vigencia))
				#--Ingresa el valor del nuevo CAD
				idcad=cadexistente
			#--Ingresa el numero de documento
			iddocumento=str(vigencia)+str(periodo_contable)
			#--Setea el periodo contable para la descripcion del elemento
			mesEscrito=["ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO","JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE"]
			#--Ingresa la vigencia
			id_vigencia=vigencia
			#--Ingresa el centro de operaciones en el cual quedo
			idcenop=cen_op
			#--Id de la compañia que ejecuta
			idcia=cia
			#--Id del maestro de terceros que ejecuto la entrada
			id_maeter=user
			#--Variable que maneja las anulaciones
			anula=0
			logger_saves.info("/*********************************************************************************/")
			logger_saves.info("Id Del MAETER")
			logger_saves.info(depreciacion)
			logger_saves.info("/*********************************************************************************/")
			for concepto in conceptos:
				#--Inserta el documento correspondiente al movimiento
				#--20140224 - Modificacion, Verifica que el documento exista para no repetirlo, de lo contrario lo crea
				sqlbuscadocumentoentrada="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(idcad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(idcenop)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(iddocumento)
				cursormodulocontabilidad.execute(sqlbuscadocumentoentrada)
				existedocumentoentrada=cursormodulocontabilidad.fetchall()
				#--20140224 - Modificacion, Se evalua si existe o no el documento para ingresarlo, esto con el fin que no se repita el ingreso
				if len(existedocumentoentrada)==0:
					#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
					datosDocumento=(iddocumento,idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,concepto.descripcion+" "+str(mesEscrito[periodo_contable-1])+"/"+str(vigencia),iddocumento,FechaEjecucion,0,0)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("inserta el documento ya que no existe")
					logger_saves.info("/*********************************************************************************/")
				#--Setea el valor correspondiente para hacer los ingresos correspondientes en los movimientos contables
				valori=depreciacion
				#--Verifica que si contiene datos
				if valori is not None:
					#--Cuadra el nombre de la variable apra consumir los datos en la logica
					datoscuenta=valori
					#--20140113 Se ingresa el codigo de busqeuda para maeter de acuerdo a lo establecido por el codigo de in_param_contab
					#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
					if datoscuenta[8] is None:
						id_maeter=''
					else:
						querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+str(datoscuenta[7])
						cursormodulocontabilidad.execute(querytercero)
						datostercero=cursormodulocontabilidad.fetchone()
						#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
						if datostercero[0]==0:
							id_maeter=''
						else:
							id_maeter=str(id_maeter)
					#--Captura el valor del auxiliar
					prueba=str(datoscuenta[6])
					#--Verifica si tiene o no auxiliar
					if prueba=="None":
						#--Ejecuta sin auxiliar
						#--Verifica si anula o no el movimiento
						if anula==0:
							#--Verifica la naturaleza del asiento
							if datoscuenta[8] == "C":
								if datoscuenta[2]!=0:
									#--Inserta asiento en credito sin auxiliar
									#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
									datosMovimiento=(idmovcontab,iddocumento,idcad,vigencia,idcenop,int(cia),int(datoscuenta[5]),datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',0,datoscuenta[1],'')
									cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
									try:
										cursormodulocontabilidad.execute(None,datosMovimiento)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
									logger_saves.info("/*********************************************************************************/")
									logger_saves.info("Inserta en credito sin auxiliar")
									logger_saves.info("/*********************************************************************************/")
							else:
								if datoscuenta[2]!=0:
									#--Inserta asiento en debito sin auxiliar
									#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
									datosMovimiento=(idmovcontab,iddocumento,idcad,vigencia,idcenop,int(cia),int(datoscuenta[5]),datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',datoscuenta[1],0,'')
									cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
									logger_saves.info(datosMovimiento)
									try:
										cursormodulocontabilidad.execute(None,datosMovimiento)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
									logger_saves.info("/*********************************************************************************/")
									logger_saves.info("inserta en debito sin auxiliar")
									logger_saves.info("/*********************************************************************************/")
					else:
						#--Ejecuta con auxiliar
						#--Verifica si el movimiento tiene anulacion
						if anula==0:
							#--Verifica la naturaleza del movimiento
							if datoscuenta[8] == "C":
								if datoscuenta[0]!=0:
									#--Ingresa con auxiliar en credito
									#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
									datosMovimiento=(idmovcontab,iddocumento,idcad,vigencia,idcenop,int(cia),int(datoscuenta[5]),datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',0,datoscuenta[1],'')
									cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
									try:
										cursormodulocontabilidad.execute(None,datosMovimiento)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
									logger_saves.info("/*********************************************************************************/")
									logger_saves.info("inserta en credito con auxiliar")
									logger_saves.info("/*********************************************************************************/")
							else:
								if datoscuenta[0]!=0:
									#--Ingresa con auxiliar en debito
									#20140319 - Modificacion, Se agrega un contenedor donde se depositan los datos para ingresarlos con bind en ORACLE
									datosMovimiento=(idmovcontab,iddocumento,idcad,vigencia,idcenop,int(cia),int(datoscuenta[5]),datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',datoscuenta[1],0,'')
									cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
									logger_saves.info(datosMovimiento)
									try:
										cursormodulocontabilidad.execute(None,datosMovimiento)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
									logger_saves.info("/*********************************************************************************/")
									logger_saves.info("inserta en debito con auxiliar")
									logger_saves.info("/*********************************************************************************/")
					#--Aumenta en uno la secuencia de insercion del movimiento contable
					idmovcontab+=1
			#--20140609 - Modificacion, Se iguala al centro de operacion que viene para que discrimine y coloque el centro de operacion que es
			cen_op=id_cen_op
		logger_saves.error(str(datosInsertCAD))
		end_proc= datetime.now()
		logger_saves.error(" Finaliza el total del proceso en: "+str(end_proc))	
		logger_saves.error("Tiempo transcurrido Total del proceso")
		logger_saves.error(str(end_proc-ini_proc))
		logger_saves.info("/*********************************************************************************/")



	#--Ejecuta movimiento contable para Inventario de entrada Devolutivo
	if Actividad.programa == "ejecutaMovimientoInventarioEntrada()":
		estacad=[]
		logger_saves.info("Valor del centro de operacion")
		#--Ingresa el id del centro de operación
		cen_op=id_cen_op
		#--Id de la compañia 
		cia=id_cia
		#--Variable que cuenta los CADS
		contadorcads=0
		#--Tipo de comprobante
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que manejan el total de debitos y creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Formato de fech para inserción
		formatofecha="%Y-%m-%d"
		#--Cuadra la fehca de inicio y de fin con el formato establecido
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Calcula la cantidad de dias del mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Contenedor para las fechas
		listadodefechas=[]
		#--Contenedor para manejar los ids de los CADS ejecutados
		idscadsejecutados=[]
		#--Variable que maneja los ids para creación de CADS
		idgen=0
		#--Recorre los dias del mes para verificar si el dia esta en festivo o en fin de semana
		for i in range(cantidaddias):
			#--Captura el dia
			d=fechainicio+timedelta(days=i)
			"""#--Consulta si el dia esta en festivo
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica si la fecha no a retornado nada, se garega la fechapara ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#--Se cuadran las fechas 
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Se setean los valores del memcache para la barra de progreso
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Se recorren las fechas generadas para empezar a crear los CADS y los movimientos
		for fechaatrabajar in listadodefechas:
			#--Captura la fecha a trabajar
			now = fechaatrabajar
			#--Captura la vigencia de la ejecucion
			vigencia = now.year
			#--Se genera el periodo contable para la ejecucion
			periodo_contable=now.month
			#--Se tranforma la fehca a un tipo String para la insercion en la base de datos
			fecha=str(now)
			#--Se captura el valor actual en Cache
			res=cache.get("oper")
			#--Verifica si esta vacion para detener la ejecucion
			if res is None:
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Ingresa los valores periodicos en la cahce para la ejecucion
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si el contador de CADS para consultar el id del CAD en la base de datos
			if contadorcads == 0:
				#--Se consulta el valor dle ID del CAD
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se aumenta en uno para emepzar las inserciones
				idgen=idcontrolcad[0]+1
				#--20140219 - Modificacion, Consulta consecutivos para los movimientos contables
				#--Consulta el consecutivo para asientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta de la tabla de propiedades para ver cual es el tipo de movimiento de entrada
			id_tipo_movimiento_entrada=Tabla_Propiedades.objects.get(nombre="TIPO_MOVIMIENTO_ENTRADA")
			id_tipo_movimiento_entrada=id_tipo_movimiento_entrada.valor
			#--Consulta en la base de datos los movimientos de inventario de entrada
			datosinventarioDV=verificaPeriodoInventarioDV(fechaatrabajar,id_tipo_movimiento_entrada)
			#--20140219 - Modificiacion, Se agrega consulta datos anulados en el rango de la fecha de anulacion
			datosinventarioDVAnulados=verificaPeriodoInventarioDVAnulado(fechaatrabajar,id_tipo_movimiento_entrada)
			#--Se obvia el levantamiento de la informacion de movimientos CON dado que no hay cuentas parametrizadas
			#--datosinventarioCON=verificaPeriodoInventarioCON(fechaatrabajar,id_tipo_movimiento_entrada)
			#--Verifica si existe o no datos en el contenedor de movimientos inventario DV
			if len(datosinventarioDV)!=0:
				    #--20140219 - Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				    paqueteCompletoDatos=1;
				    #--Ejecuta el movimiento contable
				    idgen=ejecutaMovimientoInventarioDV(idgen,fechaatrabajar,datosinventarioDV,tipo_comprobante,paqueteCompletoDatos)
			#--20140219 - Modificacion, Se ingresa verificacion si existe o no datos en el contenedor de movimientos inventario DV	Anulados y procede a operar en un lote aparte	
			if len(datosinventarioDVAnulados)!=0:
			        #--Ejecuta el movimiento contable
				    #--20140219- Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				    paqueteCompletoDatos=0;
				    #--20140219- Modificiacion, Se modifica el metodo para que reciba la variable que maneja si los datos son anulados o si es el paquete completo
				    idgen=ejecutaMovimientoInventarioDV(idgen,fechaatrabajar,datosinventarioDVAnulados,tipo_comprobante,paqueteCompletoDatos)
			#--Aumenta en uno el contador de CADS para no volver a generar consulta de secuencia para nuevos
			contadorcads=contadorcads+1

	#--20140519 - Modificacion, Se construye a partir de la ejecucion de movimientos de entrada dv los movimientos de entradas con
	#--Ejecuta movimiento contable para Inventario de entrada Consumo
	if Actividad.programa == "ejecutaMovimientoInventarioEntradaCON()":
		estacad=[]
		logger_saves.info("Valor del centro de operacion")
		#--Ingresa el id del centro de operación
		cen_op=id_cen_op
		#--Id de la compañia 
		cia=id_cia
		#--Variable que cuenta los CADS
		contadorcads=0
		#--Tipo de comprobante
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que manejan el total de debitos y creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Formato de fech para inserción
		formatofecha="%Y-%m-%d"
		#--Cuadra la fehca de inicio y de fin con el formato establecido
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Calcula la cantidad de dias del mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Contenedor para las fechas
		listadodefechas=[]
		#--Contenedor para manejar los ids de los CADS ejecutados
		idscadsejecutados=[]
		#--Variable que maneja los ids para creación de CADS
		idgen=0
		#--Recorre los dias del mes para verificar si el dia esta en festivo o en fin de semana
		for i in range(cantidaddias):
			#--Captura el dia
			d=fechainicio+timedelta(days=i)
			"""#--Consulta si el dia esta en festivo
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica si la fecha no a retornado nada, se garega la fechapara ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#--Se cuadran las fechas 
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Se setean los valores del memcache para la barra de progreso
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Se recorren las fechas generadas para empezar a crear los CADS y los movimientos
		for fechaatrabajar in listadodefechas:
			#--Captura la fecha a trabajar
			now = fechaatrabajar
			#--Captura la vigencia de la ejecucion
			vigencia = now.year
			#--Se genera el periodo contable para la ejecucion
			periodo_contable=now.month
			#--Se tranforma la fehca a un tipo String para la insercion en la base de datos
			fecha=str(now)
			#--Se captura el valor actual en Cache
			res=cache.get("oper")
			#--Verifica si esta vacion para detener la ejecucion
			if res is None:
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Ingresa los valores periodicos en la cahce para la ejecucion
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si el contador de CADS para consultar el id del CAD en la base de datos
			if contadorcads == 0:
				#--Se consulta el valor dle ID del CAD
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se aumenta en uno para emepzar las inserciones
				idgen=idcontrolcad[0]+1
				#--20140219 - Modificacion, Consulta consecutivos para los movimientos contables
				#--Consulta el consecutivo para asientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta de la tabla de propiedades para ver cual es el tipo de movimiento de entrada
			id_tipo_movimiento_entrada=Tabla_Propiedades.objects.get(nombre="TIPO_MOVIMIENTO_ENTRADA")
			id_tipo_movimiento_entrada=id_tipo_movimiento_entrada.valor
			#--Consulta en la base de datos los movimientos de inventario de entrada CON
			datosinventarioCON=verificaPeriodoInventarioCON(fechaatrabajar,id_tipo_movimiento_entrada)
			#--Consulta en la base de datos los movimientos de inventario de entrada CON Anulados
			datosinventarioCONAnulados=verificaPeriodoInventarioCONAnulado(fechaatrabajar,id_tipo_movimiento_entrada)
			#--Verifica si existe o no datos en el contenedor de movimientos inventario CON
			if len(datosinventarioCON)!=0:
				    #--20140219 - Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				    paqueteCompletoDatos=1;
				    logger_saves.info("Entra a ejecutar movimientos normales")
				    #--Ejecuta el movimiento contable
				    idgen=ejecutaMovimientoInventarioCON(idgen,fechaatrabajar,datosinventarioCON,tipo_comprobante,paqueteCompletoDatos)
			#--20140219 - Modificacion, Se ingresa verificacion si existe o no datos en el contenedor de movimientos inventario CON	Anulados y procede a operar en un lote aparte	
			if len(datosinventarioCONAnulados)!=0:
			        #--Ejecuta el movimiento contable
				    #--20140219- Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				    paqueteCompletoDatos=0;
				    #--20140219- Modificiacion, Se modifica el metodo para que reciba la variable que maneja si los datos son anulados o si es el paquete completo
				    idgen=ejecutaMovimientoInventarioCON(idgen,fechaatrabajar,datosinventarioCONAnulados,tipo_comprobante,paqueteCompletoDatos)
			#--Aumenta en uno el contador de CADS para no volver a generar consulta de secuencia para nuevos
			contadorcads=contadorcads+1

	#--Ejecuta movimiento para traslado de inventario
	if Actividad.programa == "ejecutaMovimientoInventarioTraslado()":
		estacad=[]
		#--20140611 - Modificacion, se agrega el centro de operacion filtro en caso que llegue para que filtre solo por él.
		if id_cen_op_filtro is not None:
			#--Ingresa el Id del centro de operacion filtro
			cen_op=id_cen_op_filtro
		#--20140711 - Modificación, se agrega código para que filtre y tome la variable como debe ser
		elif type(id_cen_op_filtro) is int or type(id_cen_op_filtro) is str and id_cen_op_filtro!=0:
			#--Ingresa el Id del centro de operacion filtro
			cen_op=id_cen_op_filtro
		else:
			#--Ingresa el id del centro de operación
			cen_op=id_cen_op
		#--Id de la compañia 
		cia=id_cia
		#--Variable que cuenta los CADS
		contadorcads=0
		#--Tipo de comprobante
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que manejan el total de debitos y creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Formato de fecha para inserción
		formatofecha="%Y-%m-%d"
		#--Cuadra la fehca de inicio y de fin con el formato establecido
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Calcula la cantidad de dias del mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Contenedor para las fechas
		listadodefechas=[]
		#--Contenedor para manejar los ids de los CADS ejecutados
		idscadsejecutados=[]
		#--Recorre los dias del mes para verificar si el dia esta en festivo o en fin de semana
		for i in range(cantidaddias):
			#--Captura la fecha a trabajar
			d=fechainicio+timedelta(days=i)
			"""#--Consulta si el dia esta en festivo
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica si la fecha no a retornado nada, se agrega la fecha para ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#--Se cuadran las fechas 
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Se setean los valores del memcache para la barra de progreso
		total=float(len(listadodefechas))
		total=float(98)/total
		idmovcontab=0
		logger_saves.info("Estado de la variable que maneja el movimeinto ejecutado: "+str(id_movimiento_ejecutado))
		#--Se recorren las fechas generadas para empezar a crear los CADS y los movimientos
		for fechaatrabajar in listadodefechas:
			#--Captura la fecha a trabajar
			now = fechaatrabajar
			#--Captura la vigencia de la ejecucion
			vigencia = now.year
			#--Se genera el periodo contable para la ejecucion
			periodo_contable=now.month
			#--Se tranforma la fehca a un tipo String para la insercion en la base de datos
			fecha=str(now)
			#--Se captura el valor actual en Cache
			res=cache.get("oper")
			#--Verifica si esta vacion para detener la ejecucion
			if res is None:
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Ingresa los valores periodicos en la cahce para la ejecucion
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si el contador de CADS para consultar el id del CAD en la base de datos
			if contadorcads == 0:
				#--Se consulta el valor del ID del CAD
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se aumenta en uno para emepzar las inserciones
				idgen=idcontrolcad[0]+1
				#--20140219 - Modificacion, Consulta consecutivos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--20140219 - Modificacion, Cuadra el CAD mas uno para empezar el proceso de ingreso en caso que sea nuevo
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta de la tabla de propiedades para ver cual es el tipo de movimiento de entrada	
			id_tipo_movimiento_traslado=Tabla_Propiedades.objects.get(nombre="TIPO_MOVIMIENTO_TRASLADO")
			id_tipo_movimiento_traslado=id_tipo_movimiento_traslado.valor
			logger_saves.info("Variable que maneja la ejecución live, para separar si es anulación o si es ejecución normal")
			logger_saves.info(tipoEjecucionLive)
			#--20140811 - Modificación - Revisa la variable de ejecución, si esta vacia trae datos de ambos, de lo contrario revisa el tipo de ejecución para hacer al correspondiente
			#--busqueda, esto con el fin de separar la ejecución batch de la ejecución live.
			if tipoEjecucionLive is None:
				#--En caso de ser nulo se consultan movimientos y anulaciones para ejecutar.
				#--Consulta en la base de datos los movimientos de inventario de traslado.
				datosinventarioIN=verificaPeriodoInventarioDV(fechaatrabajar,id_tipo_movimiento_traslado)
				#--20140219 - Modificiacion, Se agrega consulta datos anulados en el rango de la fecha de anulacion
				datosinventarioINAnulados=verificaPeriodoInventarioDVAnulado(fechaatrabajar,id_tipo_movimiento_traslado)
			else:
				#--Verifica que tipo de ejecución se va a realizar
				if int(tipoEjecucionLive) == 1:
					#-- Ejecución normal
					#--Consulta en la base de datos los movimientos de inventario de entrada
					datosinventarioIN=verificaPeriodoInventarioDV(fechaatrabajar,id_tipo_movimiento_traslado)
					#--20140219 - Modificiacion, Se agrega consulta datos anulados en el rango de la fecha de anulacion
					datosinventarioINAnulados=''
				elif int(tipoEjecucionLive) == 2:
					#-- Ejecución anulación
					#--Consulta en la base de datos los movimientos de inventario de entrada
					datosinventarioIN=''
					#--20140219 - Modificiacion, Se agrega consulta datos anulados en el rango de la fecha de anulacion
					datosinventarioINAnulados=verificaPeriodoInventarioDVAnulado(fechaatrabajar,id_tipo_movimiento_traslado)
			#--Se obvia el levantamiento de la informacion de movimientos CON dado que no hay cuentas parametrizadas
			#--datosinventarioCON=verificaPeriodoInventarioCON(fechaatrabajar,id_tipo_movimiento_traslado)
			#--20140613 - Modificacion - Se instancia a variable antes para la busqueda de los cads
			buscacad=[]
			#--20140613 - Modificacion - Se agrega una variable para el manejo de ids en caso que entre a eliminar por centro de operacion
			idsDocumentos=[]
			#--Verifica el CAD cuando no es por centro de operaci´on
			if cen_op is None or cen_op==0:
				#--Genera la busqueda
				buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			else:
				#--Genera la consulta de acuerdo al centro de operación (Regionales y locales)
				buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+" AND ID_CEN_OP in ("
				#--Crea una variable para validar que no se repitan los centros de operación
				centros_operacion=[]
				#--Verifica los datos que están en la ejecución normal
				if len(datosinventarioIN)!=0:
					#--Recorre los datos pertinentes
					for datosinventario in datosinventarioIN:
						try:
							#--Verifica si ya se encuentra el id del documento a operar
							idsDocumentos.index(datosinventario[0])
						except Exception, e:
							#--Ingresa el id del documento en caso que no exista
							idsDocumentos.append(datosinventario[0])
						#--Verifica si los centros de operación son iguales en el movimento de traslado
						if int(datosinventario[2])==int(datosinventario[20]):
							try:
								#--Verifica si el centro de operación ya se encuentra en la lista de operados
								centros_operacion.index(datosinventario[2])
							except Exception, e:
								#--Ingresa el centro de opración en caso que no exista
								centros_operacion.append(datosinventario[2])
						#--Los centros de operación no son iguales, asi que ingresa los dos centros a operar
						else:
							try:
								#--Verifica si los centros de operación están en el listado
								centros_operacion.index(datosinventario[2])
								centros_operacion.index(datosinventario[20])
							except Exception, e:
								#--Ingresa los centros de operación en el listado
								centros_operacion.append(datosinventario[2])
								centros_operacion.append(datosinventario[20])
				#--Verifica los datos que están en la ejecución de anulados
				if len(datosinventarioINAnulados)!=0:
					#--Recorre los datos pertinentes
					for datosinventario in datosinventarioINAnulados:
						try:
							#--Verifica si ya se encuentra el id del documento a operar
							idsDocumentos.index(datosinventario[0])
						except Exception, e:
							#--Ingresa el id del documento en caso que no exista
							idsDocumentos.append(datosinventario[0])
						#--Recorre los centros de operación
						for datosinventario in datosinventarioIN:
							#--Verifica si los centros de operación son iguales en el movimento de traslado
							if int(datosinventario[2])==int(datosinventario[20]):
								try:
									#--Verifica si el centro de operación ya se encuentra en la lista de operados
									centros_operacion.index(datosinventario[2])
								except Exception, e:
									#--Ingresa el centro de opración en caso que no exista
									centros_operacion.append(datosinventario[2])
							#--Los centros de operación no son iguales, asi que ingresa los dos centros a operar
							else:
								try:
									#--Verifica si los centros de operación están en el listado
									centros_operacion.index(datosinventario[2])
									centros_operacion.index(datosinventario[20])
								except Exception, e:
									#--Ingresa los centros de operación en el listado
									centros_operacion.append(datosinventario[2])
									centros_operacion.append(datosinventario[20])
				#---Variable que contiene el tamaño del array de centros de operación
				tamanoDatos=len(centros_operacion)-1
				#--Variable que funciona como contador de datos
				contadorDatos=0
				#--20140711 - Modificación, se agrega código para que filtre y tome la variable como debe ser para el query de busqueda de CADS
				if id_cen_op_filtro is not None:
					#--Ingresa el Id del centro de operacion filtro
					buscacad=buscacad+str(cen_op)
				elif type(id_cen_op_filtro) is int or type(id_cen_op_filtro) is str and id_cen_op_filtro!=0:
					#--Ingresa el Id del centro de operacion filtro
					buscacad=buscacad+str(cen_op)
				elif id_cen_op is not None:
					#--Ingresa el Id del centro de operacion filtro
					buscacad=buscacad+str(cen_op)
				elif type(id_cen_op) is int or type(id_cen_op) is str and id_cen_op_filtro!=0:
					#--Ingresa el Id del centro de operacion filtro
					buscacad=buscacad+str(cen_op)
				else:
					#--Ingresa el id del centro de operación
					for cenOp in centros_operacion:
						if contadorDatos==tamanoDatos:
							buscacad=buscacad+str(cenOp)
						else:
							buscacad=buscacad+str(cenOp)+","
						contadorDatos=contadorDatos+1
				buscacad=buscacad+")"
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchall()
			#--Si existen CADS en la fecha establecida se borran los documentos y los movimientos
			if len(existecad)!=0:
				#--Recorre los CAD para borrar los documentos
				for idcadatrabajar in existecad:
					#--Elimina Movimientos
					#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
					#--20140811 - Modificación, Dentro de la validación se agrega que el tipo de ejcución por el que viene no sea anulación
					if id_movimiento_ejecutado is not None and int(tipoEjecucionLive)!=2:
						#--Elimina movimientos de acuerdo al id con el que viene
						eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(idcadatrabajar[0])+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
						try:
							#--Elimina los movimientos
							cursormodulocontabilidad.execute(eliminamovimientos)
						#--Captura la excepción en caso de generarse un fallo
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al eliminar Movimientos Contables")
							logger_saves.error(eliminamovimientos)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al eliminar Movimientos Contables|"+str(eliminamovimientos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresGeneral.append(errorConexion)
							cache.set("error", -1)
							break
					#--Si no se cumple verifica si hay movimientos, por el filtrado de de centros de operación o si es geenral para hacer las eliminaciones del caso
					else:
						#--Verifica si existen movimientos en la lista por centro de operación
						if len(idsDocumentos)!=0:
							#--Recorre los documentos
							for idDoc in idsDocumentos:
								#--Genera la consulta de eliminación de movimientos
								eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(idcadatrabajar[0])+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+str(idDoc)
								try:
									#--Ejecuta la eliminación de movimientos
									cursormodulocontabilidad.execute(eliminamovimientos)
								#--Captura la excepción en caso de generarse un fallo
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al eliminar Movimientos Contables")
									logger_saves.error(eliminamovimientos)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al eliminar Movimientos Contables|"+str(eliminamovimientos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresGeneral.append(errorConexion)
									cache.set("error", -1)
									break
						#--Verifica si la ejecución viene por batch para retirar los movimientos a nivel general
						elif tipoEjecucionLive is None:
							#--Construye el query para eliminar los movimientos
							eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(idcadatrabajar[0])+" AND ID_VIGENCIA="+str(vigencia)
							try:
								#--Elimina los movimientos
								cursormodulocontabilidad.execute(eliminamovimientos)
							#--Captura la excepción en caso de generarse un fallo
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al eliminar Movimientos Contables")
								logger_saves.error(eliminamovimientos)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al eliminar Movimientos Contables|"+str(eliminamovimientos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresGeneral.append(errorConexion)
								cache.set("error", -1)
								break
					#--Elimina documentos
					#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
					#--20140811 - Modificación, Dentro de la validación se agrega que el tipo de ejcución por el que viene no sea anulación
					if id_movimiento_ejecutado is not None and int(tipoEjecucionLive)!=2:
						#--Elimina documentos de acuerdo al id con el que viene
						eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(idcadatrabajar[0])+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
						try:
							#--Elimina los documentos
							cursormodulocontabilidad.execute(eliminadocumentos)
						#--Captura la excepción en caso de generarse un fallo
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al eliminar Documentos")
							logger_saves.error(eliminadocumentos)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al eliminar Documentos|"+str(eliminadocumentos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresGeneral.append(errorConexion)
							cache.set("error", -1)
							break
					#--Si no se cumple verifica si hay documentos, por el flistrado de de centros de operación o si es geenral para hacer las eliminaciones del caso
					else:
						#--Verifica si existen documentos en la lista por centro de operación
						if len(idsDocumentos)!=0:
							#--Recorre los documentos
							for idDoc in idsDocumentos:
								#--Genera la consulta de eliminación de documentos
								eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(idcadatrabajar[0])+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+str(idDoc)
								try:
									#--Ejecuta la eliminación de documentos
									cursormodulocontabilidad.execute(eliminadocumentos)
								#--Captura la excepción si algo falla
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al eliminar Documentos")
									logger_saves.error(eliminadocumentos)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al eliminar Documentos|"+str(eliminadocumentos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresGeneral.append(errorConexion)
									cache.set("error", -1)
									break
						#--Verifica si la ejecución viene por batch para retirar los documentos a nivel general
						elif tipoEjecucionLive is None:
							#--Construye el query para eliminar los documentos
							eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(idcadatrabajar[0])+" AND ID_VIGENCIA="+str(vigencia)
							try:
								#--Elimina los documentos
								cursormodulocontabilidad.execute(eliminadocumentos)
							#--Captura la excepción si no ejecuta mal
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al eliminar Documentos")
								logger_saves.error(eliminadocumentos)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al eliminar Documentos|"+str(eliminadocumentos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresGeneral.append(errorConexion)
								cache.set("error", -1)
								break
			if id_cen_op_filtro is not None or id_cen_op_filtro!=0:
				#--Ingresa el Id del centro de operacion filtro
				cen_op=id_cen_op
			#--Verifica si existe o no datos en el contenedor de movimientos inventario DV		
			if len(datosinventarioIN)!=0:
				#--Ejecuta el movimiento contable
				#--20140219 - Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				paqueteCompletoDatos=1;
				#--20140219 - Modificiacion, Se modifica el metodo para que reciba la variable que maneja si los datos son anulados o si es el paquete completo
				idgen=ejecutaMovimientoInventarioTrasladoDV (fechaatrabajar,datosinventarioIN,idgen,tipo_comprobante,paqueteCompletoDatos)
			#--20140219 - Modificacion, Se ingresa verificacion si existe o no datos en el contenedor de movimientos inventario DV	Anulados y procede a operar en un lote aparte	
			if len(datosinventarioINAnulados)!=0:
				#--Ejecuta el movimiento contable
				#--20140219- Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				paqueteCompletoDatos=0;
				#--20140219- Modificiacion, Se modifica el metodo para que reciba la variable que maneja si los datos son anulados o si es el paquete completo
				idgen=ejecutaMovimientoInventarioTrasladoDV(fechaatrabajar,datosinventarioINAnulados,idgen,tipo_comprobante,paqueteCompletoDatos)
			#--Se obvia la parametrizacion de datosinventarioCON ya que no estan aun las cuentas arriba	
			#--if len(datosinventarioCON)!=0:
			#--	quehace.append("Llega a llamar la funcion de acuerdo al tipo de traslado")
			#--	idgen=ejecutaMovimientoInventarioTrasladoCON(fechaatrabajar,datosinventarioIN,idgen,tipo_comprobante)
			#--Aumenta en uno el contador de CADS para no volver a generar consulta de secuencia para nuevos"""
			contadorcads=contadorcads+1

	#--Ejecuta movimiento para salidas de inventario
	if Actividad.programa == "ejecutaMovimientoInventarioSalida()":
		estacad=[]
		#--Ingresa el id del centro de operación
		cen_op=id_cen_op
		#--Id de la compañia 
		cia=id_cia
		#--Variable que cuenta los CADS
		contadorcads=0
		#--Tipo de comprobante
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que manejan el total de debitos y creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Formato de fecha para inserción
		formatofecha="%Y-%m-%d"
		#--Cuadra la fecha de inicio y de fin con el formato establecido
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Calcula la cantidad de dias del mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Contenedor para las fechas
		listadodefechas=[]
		#--Contenedor para manejar los ids de los CADS ejecutados
		idscadsejecutados=[]
		#--Variable que maneja los ids para creación de CADS
		idgen=0
		#--Recorre los dias del mes para verificar si el dia esta en festivo o en fin de semana
		for i in range(cantidaddias):
			d=fechainicio+timedelta(days=i)
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#--Se cuadran las fechas 
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Se setean los valores del memcache para la barra de progreso
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Se recorren las fechas generadas para empezar a crear los CADS y los movimientos
		for fechaatrabajar in listadodefechas:
			#--Captura la fecha a trabajar
			now = fechaatrabajar
			#--Captura la vigencia de la ejecucion
			vigencia = now.year
			#--Se genera el periodo contable para la ejecucion
			periodo_contable=now.month
			#--Se tranforma la fehca a un tipo String para la insercion en la base de datos
			fecha=str(now)
			#--Se captura el valor actual en Cache
			res=cache.get("oper")
			#--Verifica si esta vacion para detener la ejecucion
			if res is None:
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			#--Ingresa los valores periodicos en la cahce para la ejecucion
			else:
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si el contador de CADS para consultar el id del CAD en la base de datos	
			if contadorcads == 0:
				#--Se consulta el valor dle ID del CAD
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se aumenta en uno para emepzar las inserciones
				idgen=idcontrolcad[0]+1
				#--20140219 - Modificacion, Consulta consecutivos para los movimientos contables
				#--Consulta el consecutivo para asientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(modulocontabilidadconexion)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta de la tabla de propiedades para ver cual es el tipo de movimiento de entrada	
			id_tipo_movimiento_salida=Tabla_Propiedades.objects.get(nombre="TIPO_MOVIMIENTO_SALIDA")
			id_tipo_movimiento_salida=id_tipo_movimiento_salida.valor
			#--Consulta en la base de datos los movimientos de inventario de salida
			datosinventarioDV=verificaPeriodoInventarioDV(fechaatrabajar,id_tipo_movimiento_salida)
			#--20140219 - Modificiacion, Se agrega consulta datos anulados en el rango de la fecha de anulacion
			datosinventarioDVAnulados=verificaPeriodoInventarioDVAnulado(fechaatrabajar,id_tipo_movimiento_salida)
			#--Se obvia el levantamiento de la informacion de movimientos CON dado que no hay cuentas parametrizadas
			#datosinventarioCON=verificaPeriodoInventarioCON(fechaatrabajar,id_tipo_movimiento_salida)
			#--Verifica que existan movimientos para proseguir con la ejecucion
			logger_saves.info("Trae los movimientos de salida de fecha: "+str(fechaatrabajar))
			logger_saves.info(datosinventarioDV)
			logger_saves.info("Trae los movimientos anulados de salida de fecha: "+str(fechaatrabajar))
			logger_saves.info(datosinventarioDVAnulados)
			if len(datosinventarioDV)!=0:
				#--20140219- Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				paqueteCompletoDatos=1;
				#--Ejecuta el movimiento de salida
				#--20140219- Modificiacion, Se modifica el metodo para que reciba la variable que maneja si los datos son anulados o si es el paquete completo
				idgen=ejecutaMovimientoInventarioSalidaDV(idgen,fechaatrabajar,datosinventarioDV,tipo_comprobante,paqueteCompletoDatos)
			#--Verifica que existan movimientos para proseguir con la ejecucion
			if len(datosinventarioDVAnulados)!=0:
				#--20140219- Modificiacion, Se agrega una variable para saber si debe procesar todo o si debe procesar anulados para generar descripcion y movimientos
				paqueteCompletoDatos=0;
				#--Ejecuta el movimiento de salida
				#--20140219- Modificiacion, Se modifica el metodo para que reciba la variable que maneja si los datos son anulados o si es el paquete completo
				idgen=ejecutaMovimientoInventarioSalidaDV(idgen,fechaatrabajar,datosinventarioDVAnulados,tipo_comprobante,paqueteCompletoDatos)
			#--Se obvia el levantamiento de la informacion de movimientos CON dado que no hay cuentas parametrizadas
			#if len(datosinventarioCON)!=0:
			#	eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(existecad[0])+" AND ID_VIGENCIA="+str(vigencia)
			#	cursormodulocontabilidad.execute(eliminamovimientos)
			#	eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(existecad[0])+" AND ID_VIGENCIA="+str(vigencia)
			#	cursormodulocontabilidad.execute(eliminadocumentos)
			#	idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
			#	quehace.append("Ejecuta movimientos en Inventario CON")
			#	idgen=ejecutaMovimientoSalidaCON(existecad[0],fechaatrabajar,datosinventarioCON,tipo_comprobante)
			#	quehace.append("Ejecuta datos en CON con cad existente")
            #--Aumenta en uno el contador de CADS para no volver a generar consulta de secuencia para nuevos
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Pagos Presupuestales y Acreedores
	if Actividad.programa == "ejecutaMovimientoPagosPresupuestales()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento Pagos Presupuestales y Acreedores")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaPagosAcreedores(fechaatrabajar)
			#--20140325 - Modificacion, se ingresan los datos de las facturas anuladas para la ejecucion por aparte
			datAnul=verificaPagosAcreedoresAnulados(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoPagosAcreedores(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoPagosAcreedores(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if len(dat)!=0:
						iddocelimina=dat[0][4]
					elif len(datAnul)!=0:
						iddocelimina=datAnul[0][4]
					logger_saves.info("Numero de CAD: "+str(existecad[0]))
					logger_saves.info("Numero de documento: "+str(iddocelimina))
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,iddocelimina)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoPagosAcreedores(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoPagosAcreedores(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Obligaciones Presupuestales
	if Actividad.programa == "ejecutaMovimientoObligacionesPresupuestales()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento Obligaciones Presupuestales")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			logger_saves.info("Consulta obligaciones para ejecucion de movimientos")
			#--Verifica si existen datos para ejecutar
			dat=verificaObligacionesPresupuestales(fechaatrabajar)
			#--20140325 - Modificacion, se ingresan los datos de las facturas anuladas para la ejecucion por aparte
			datAnul=verificaObligacionesPresupuestalesAnuladas(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoObligacionPresupuestal(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoObligacionPresupuestal(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if len(dat)!=0:
						iddocelimina=dat[0][0]
					elif len(datAnul)!=0:
						iddocelimina=datAnul[0][0]
					logger_saves.info("Numero de CAD: "+str(existecad[0]))
					logger_saves.info("Numero de documento: "+str(iddocelimina))
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,iddocelimina)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales Obligaciones Presupuestales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoObligacionPresupuestal(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados Obligaciones Presupuestales")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoObligacionPresupuestal(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Pagos de Regalias
	if Actividad.programa == "ejecutaMovimientoPagosRegalias()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento Pagos de Regalias")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaPagosRegalias(fechaatrabajar)
			#--20140325 - Modificacion, se ingresan los datos de las facturas anuladas para la ejecucion por aparte
			datAnul=verificaPagosRegaliasAnulados(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoPagoRegalias(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoPagoRegalias(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if len(dat)!=0:
						iddocelimina=dat[0][0]
					elif len(datAnul)!=0:
						iddocelimina=datAnul[0][0]
					logger_saves.info("Numero de CAD: "+str(existecad[0]))
					logger_saves.info("Numero de documento: "+str(iddocelimina))
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,iddocelimina)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoPagoRegalias(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					if len(datAnul)!=0:
						logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						ejecutaMovimientoPagoRegalias(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Inversiones Para Distribuir
	if Actividad.programa == "ejecutaMovimientoInversionesDistribuidas()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento Inversiones Para Distribuir")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaPagosInverisonesDistribuidas(fechaatrabajar)
			#--20140325 - Modificacion, se ingresan los datos de las facturas anuladas para la ejecucion por aparte
			#datAnul=verificaPagosRegaliasAnulados(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoInversionesDistribuidas(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					#if len(datAnul)!=0:
						#logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						#ejecutaMovimientoInversionesDistribuidas(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if len(dat)!=0:
						iddocelimina=dat[0][0]
					elif len(datAnul)!=0:
						iddocelimina=datAnul[0][0]
					logger_saves.info("Numero de CAD: "+str(existecad[0]))
					logger_saves.info("Numero de documento: "+str(iddocelimina))
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,iddocelimina)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoInversionesDistribuidas(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					#if len(datAnul)!=0:
						#logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						#ejecutaMovimientoInversionesDistribuidas(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	#--Actividad que ejecuta la interfaz contable para Inversiones Para Distribuir
	if Actividad.programa == "ejecutaMovimientoInversionesPropias()":
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Ejecuta Movimiento Inversiones Propias")
		estacad=[]
		#--Setea el centro de operación
		cen_op=id_cen_op
		#--20140507 - Modificacion, se agrega manejo de errores cuando no se ha especificado el centro de operacion, esto para los movimientos que
		#--No manejan centro de operacion desde los datos
		if cen_op is None or cen_op==0:
			logger_saves.error("No se ha agregado centro de operación para ingreso de movimientos contables")
			errorConexion="No se ha agregado centro de operación para ingreso de movimientos contables"
			errorCenOp.append(errorConexion)
			cache.set("error", -1)
		#--Setea el id de la compañia
		cia=id_cia
		#--Variable que maneja un contador de CADS
		contadorcads=0
		#--Variable que contiene el tipo de comprobante parametrizado en la transacción
		tipo_comprobante=transaccion.id_tipo_comprobante
		#--Variables que setean a cero los debitos y los creditos para la inserción de CADS
		totcredito=0
		totdebito=0
		#--Setea el formato de fecha de acuerdo a lo solicitado por la consulta
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		#--Resta las fechas con el fin de saber cuantos dias tiene el mes
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		#--Inicializa las variables de cads ejecutados y de listado de fechas para ejecución
		listadodefechas=[]
		idscadsejecutados=[]
		#--Variable que maneja la secuencia de numeros de los CAD
		idgen=0
		#--Recorre la cantidad de dias y verifica si la fecha es algun festivo o dia feriado para no incluirla
		for i in range(cantidaddias):
			#--Fecha a verificar
			d=fechainicio+timedelta(days=i)
			#--Consulta en la base de datos a ver si el dia es o no feriado
			"""buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			#--Verifica que la fecha no esta en los festivos o en fin de semana y procede a guardarla para la ejecución
			if estafecha is None:"""
			listadodefechas.append(d.date())
		#cuadra el listado de fechas para recorrerlo
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		#--Varianble para el manedo del porcentaje en la barra de progreso del Memcache
		total=float(len(listadodefechas))
		total=float(98)/total
		#--Recorre las fechas para empezar la ejecución de las interfaces contables
		for fechaatrabajar in listadodefechas:
			#--Fecha de ejecución
			now = fechaatrabajar
			#--Vigencia que se ejecuta
			vigencia = now.year
			#--Periodo o mes que se ejecuta
			periodo_contable=now.month
			#--Por motivos de comodidad al momento de insertar el dato se cambia la fecha de date a string
			fecha=str(now)
			#--Verifica en la cache los valores para ir manejando los porcentajes de ejecución
			res=cache.get("oper")
			if res is None:
				#--Setea el valor de la barra y el valor total
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				#--Incrementa el valor de la barra de acuerdo a la ejecución planteada
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			#--Verifica si es la primera vez que entra para solicitar el consecutivo del CAD
			if contadorcads == 0:
				#--Realiza la consulta en la base de datos
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivo)
					idcontrolcad=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar CADS")
					logger_saves.error(consultaconsecutivo)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar CADS|"+str(consultaconsecutivo)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Se ingresa el valor en el que va la secuencia
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				try:
					cursormodulocontabilidad.execute(consultaconsecutivomov)
					idmovcontab=cursormodulocontabilidad.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al consultar la tabla de secuencias para generar Movimientos Contables")
					logger_saves.error(consultaconsecutivomov)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al consultar la tabla de secuencias para generar Movimientos Contables|"+str(consultaconsecutivomov)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresGeneral.append(errorConexion)
					cache.set("error", -1)
					break
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
				#--20140502 - Modificación, se ingresa codigo de verificacion de secuencias de CADS y Movimientos Contables:
				queryConsultaSecuencias="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE ID_CAD="+str(idgen)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de CADS, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de CADS"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
				queryConsultaSecuencias="SELECT ID_MOV_CONT FROM CN_MOVIMIENTO_CONTABLE WHERE ID_MOV_CONT="+str(idmovcontab)+" AND ID_VIGENCIA="+str(vigencia)
				cursormodulocontabilidad.execute(queryConsultaSecuencias)
				idCADSecuenciaInvalida=cursormodulocontabilidad.fetchone()
				if idCADSecuenciaInvalida is not None:
					logger_saves.error("Error de secuencias de Movimientos Contables, ya existe uno con la secuencia seleccionada en la tabla")
					logger_saves.error(queryConsultaSecuencias)
					errorConexion="Error en Secuencias para Ingreso de Movimientos Contables"
					errorSecuencias.append(errorConexion)
					cache.set("error", -1)
					break
			#--Consulta si el CAD existe o no para cuadrar la ejecución
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			#--Verifica si existen datos para ejecutar
			dat=verificaPagosInverisonesPropias(fechaatrabajar)
			#--20140325 - Modificacion, se ingresan los datos de las facturas anuladas para la ejecucion por aparte
		    #datAnul=verificaPagosRegaliasAnulados(fechaatrabajar)
			#--Verifica la existencia del CAD, si no existe lo crea y ejecuta el movimiento, si existe borra los movimientos y los documentos y ejecuta la interfaz
			if existecad is None:
				#--Ingresa por nuevo y ejecuta
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Crea el cad con el consecutivo
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaatrabajar,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					#--Entra a ejecutar los movimientos con el id del cad creado
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoInversionesPropias(idgen,fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					#if len(datAnul)!=0:
						#logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						#ejecutaMovimientoInversionesPropias(idgen,fechaatrabajar,datAnul,1)
					#--Aumenta la variable de secuencia
					idgen+=1
			else:
				#--Revisa si existen datos para ejecutar
				#--20140701 - Modificacion, ajuste para que entre a ejecutar ya sea con un valor de factura o de anulacion
				if len(dat)!=0 or len(datAnul)!=0:
					#--Ingresa por existente y ejecuta
					#--Elimina los movimientos y los documentos
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if len(dat)!=0:
						iddocelimina=dat[0][0]
					elif len(datAnul)!=0:
						iddocelimina=datAnul[0][0]
					logger_saves.info("Numero de CAD: "+str(existecad[0]))
					logger_saves.info("Numero de documento: "+str(iddocelimina))
					if id_movimiento_ejecutado is not None:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia,iddocelimina)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						datoEliminaMOVIMIENTO=(existecad[0],vigencia)
						cursormodulocontabilidad.prepare("DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Movimientos Contables")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Movimientos Contables|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					if id_movimiento_ejecutado is not None:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2 AND ID_DOCUMENTO=:3")
					else:
						cursormodulocontabilidad.prepare("DELETE FROM CN_DOCUMENTO WHERE ID_CAD=:1 AND ID_VIGENCIA=:2")
					try:
						cursormodulocontabilidad.execute(None,datoEliminaMOVIMIENTO)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(datoEliminaMOVIMIENTO)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(datoEliminaMOVIMIENTO)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--*Ingresa el cad a los ejecutados
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					#--20140701 - Modificacion, verifica si exi9sten o no datos en facturas para ejecutar.
					if len(dat)!=0:
						logger_saves.info("Entro a ejecutar los movimientos normales")
						#--Entra a ejecutar los movimientos con el id del cad creado
						ejecutaMovimientoInversionesPropias(existecad[0],fechaatrabajar,dat,0)
					#--20140325 - Modificacion, Se verifica que existen datos y se procede a ingresarlos de acuerdo a la anulacion
					#if len(datAnul)!=0:
						#logger_saves.info("Entro a ejecutar los movimientos anulados")
						#--20140325 - Modificacion, Se ejecutan los movimientos de anulacion
						#ejecutaMovimientoInversionesPropias(existecad[0],fechaatrabajar,datAnul,1)
			#--Aumenta la variable de contadores para que ya no vuelva a revisar el consecutivo
			contadorcads=contadorcads+1

	if Actividad.programa == "ejecutaMovimientoRegalias()":
		estacad=[]
		cen_op=id_cen_op
		cia=id_cia
		contadorcads=0
		tipo_comprobante=transaccion.id_tipo_comprobante
		totcredito=0
		totdebito=0
		formatofecha="%Y-%m-%d"
		fechainicio=datetime.strptime(fecha_ini,formatofecha)
		fechafin=datetime.strptime(fecha_fin,formatofecha)
		delta = fechafin-fechainicio
		cantidaddias=delta.days
		listadodefechas=[]
		idscadsejecutados=[]
		idgen=0
		for i in range(cantidaddias):
			d=fechainicio+timedelta(days=i)
			buscafestivo="SELECT ID_FESTIVO FROM INFESTIVO WHERE FECHA=to_date(\'"+str(d.date())+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(buscafestivo)
			estafecha=cursormoduloconexion.fetchone()
			if estafecha is None:
				listadodefechas.append(d.date())
		d=fechainicio+timedelta(days=cantidaddias)
		listadodefechas.append(d.date())
		total=float(len(listadodefechas))
		total=float(98)/total
		for fechaatrabajar in listadodefechas:
			now = fechaatrabajar
			vigencia = now.year
			periodo_contable=now.month
			fecha=str(now)
			res=cache.get("oper")
			if res is None:
				cache.set("oper", total)
				valorbar=math.floor(total)
				cache.set("foo", int(valorbar))
			else:
				oper=cache.get("oper")
				valorbar=total+oper
				cache.set("oper", valorbar)
				valorbar=math.floor(valorbar)
				cache.set("foo", int(valorbar))
			if contadorcads == 0:
				consultaconsecutivo="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_CONTROL_CAD'"
				cursormodulocontabilidad.execute(consultaconsecutivo)
				idcontrolcad=cursormodulocontabilidad.fetchone()
				idgen=idcontrolcad[0]+1
				#--20140421 - Modificacion - Se sube el codigo para que solo ejecute una vez la busqueda de las secuencias de movimientos contables
				#--Consulta de la secuencia de datos para los movimientos contables
				consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
				cursormodulocontabilidad.execute(consultaconsecutivomov)
				idmovcontab=cursormodulocontabilidad.fetchone()
				#--Aumenta en uno el consecutivo de asientos para empezar la ejecucion
				idmovcontab=idmovcontab[0]+1
				cache.set("idmovcontab", int(idmovcontab))
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			datosinventarioIN=verificaPeriodoInventarioDV(fechaatrabajar)
			datosinventarioCON=verificaPeriodoInventarioCON(fechaatrabajar)
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaatrabajar)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchone()
			datosregalias=verificaPeriodoRegalias(fechaatrabajar)
			if existecad is None:
				if len(datosinventarioIN)!=0:
					consultacad = "INSERT INTO WS_CONTAB.CN_CONTROL_CAD VALUES ( \'"+str(idgen)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(periodo_contable)+"','"+str(tipo_comprobante)+"',to_date('"+str(fechaatrabajar)+"','YYYY-MM-DD'),'"+str(totcredito)+"','"+str(totdebito)+"','','','')"
					cursormodulocontabilidad.execute(consultacad)
					idscadsejecutados.append(str(idgen)+","+str(vigencia))
					ejecutaMovimientoRegalias(idgen,fechaatrabajar,dat)
			else:
				if len(ejecutaMovimientoInventarioDV)!=0:
					eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(existecad[0])+" AND ID_VIGENCIA="+str(vigencia)
					cursormodulocontabilidad.execute(eliminamovimientos)
					eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(existecad[0])+" AND ID_VIGENCIA="+str(vigencia)
					cursormodulocontabilidad.execute(eliminadocumentos)
					idscadsejecutados.append(str(existecad[0])+","+str(vigencia))
					ejecutaMovimientoRegalias(existecad[0],fechaatrabajar,dat)
			contadorcads=contadorcads+1
	#--Con este if entra la parte que pinta la respuesta del JSON después de la ejecuciòn
	if Actividad.programa == "retornaResul()":
		#--Variable que maneja la cantidad de datos procesados
		cantidadprocesados=0
		#--Variable que maneja errores -- Solo prueba
		errores={}
		#--Contenedor que maneja los datos --> Tipo LIST
		contenedor=[]
		#--Contenedor que maneja los mensajes de error -- Solo para prueba
		contenedorerror=[]
		#--Variables para construir el JSON de acuerdo a lo solicitado por GWT
		response={}
		rta={}
		#--Setea el valor de error para ver la respuesta
		error=cache.get("error")
		erroresCADS=""
		erroresDOCS=""
		erroresMOVS=""
		errorSecuencia=""
		cuentas=""
		erroresGEN=""
		erroresParamInventario=""
		#--Verifica si existe error
		if error==-1:
			mensajeError='<p style="text-align:left;padding-left:2px;padding-right:2px;">Señor Usuario:<br/>Ocurrieron los siguientes inconvenientes a la hora de ejecutar la interfaz contable seleccionada:<br/><br/>'
			"""if len(erroresCads)!=0:
				for err in erroresCads:
					tempErr=err
					tempErr=tempErr.split("|")
					erroresCADS+=str(tempErr[0])+", Consulta: "+str(tempErr[1])+" Codigo de Error: "+str(tempErr[2])+"<br/>"
				mensajeError+="Errores en Ejecución de CADS: <br/>"+erroresCADS+"<br/><br/>"
			if len(erroresDocumentos)!=0:
				for err in erroresDocumentos:
					tempErr=err
					tempErr=tempErr.split("|")
					erroresDOCS+=str(err[0])+", Consulta: "+str(err[1])+" Codigo de Error: "+str(err[2])+"<br/>"
				mensajeError+="Errores en Ejecución de Documentos: <br/>"+erroresDOCS+"<br/><br/>"
			if len(erroresMovimientos)!=0:
				for err in erroresMovimientos:
					tempErr=err
					tempErr=tempErr.split("|")
					erroresMOVS+=str(err[0])+", Consulta: "+str(err[1])+" Codigo de Error: "+str(err[2])+"<br/>
				mensajeError+="Errores en Ejecución de Movimientos: <br/>"+erroresMOVS+"<br/><br/>"""
			if len(errorCenOp)!=0:
				mensajeError+='Error en parametrización de Centro de Operación: <br/><ol style="text-align:left"><li>No se ha parametrizado centro de operación contable para esta ejecución</li></ol>'
			if len(errorSecuencias)!=0:
				for errorSec in errorSecuencias:
					errorSecuencia+="<li><strong>"+errorSec+"</strong><br/></li>"
				mensajeError+='Errores en Secuencias para Ingreso de Nuevos Movimientos: <br/><ol style="text-align:left">'+errorSecuencia+'</ol>'
			if len(idscuentasfaltantes)!=0:
				for cuenta in idscuentasfaltantes:
					tempErr=cuenta
					tempErr=tempErr.split("|")
					cuentas+="<li>Falta cuenta No. "+str(tempErr[0])+" en el Grupo: <strong>"+str(tempErr[1])+"</strong><br/></li>"
				mensajeError+='Errores en Parametrización de Cuentas: <br/><ol style="text-align:left">'+cuentas+'</ol>'
			if len(idsconceptosfaltantes)!=0:
				for cuenta in idsconceptosfaltantes:
					tempErr=cuenta
					tempErr=tempErr.split("|")
					nombreModulo=tempErr[1]
					cuentas+="<li>Falta parametrizar concepto No. "+str(tempErr[0])+"<br/></li>"
				mensajeError+='Errores en Parametrización de Conceptos en el Módulo: <strong>'+nombreModulo+'</strong> <br/><ol style="text-align:left">'+cuentas+'</ol>'
			if len(conceptosasientosfaltantes)!=0:
				for cuenta in conceptosasientosfaltantes:
					tempErr=cuenta
					tempErr=tempErr.split("|")
					nombreModulo=tempErr[1]
					cuentas+="<li>Falta parametrizar Asientos en el concepto "+str(tempErr[0])+"<br/></li>"
				mensajeError+='Errores en Parametrización de Conceptos en el Módulo: <strong>'+nombreModulo+'</strong> <br/><ol style="text-align:left">'+cuentas+'</ol>'
			if len(conceptosInventarioFaltantes)!=0:
				for concepto in conceptosInventarioFaltantes:
					tempErr=concepto
					tempErr=tempErr.split("|")
					erroresParamInventario+="<li><strong>ID GRUPO ALAMCENAMENTO</strong>: "+str(tempErr[3])+"<br/>"
					erroresParamInventario+="<strong>ID LINEA</strong>: "+str(tempErr[1])+"<br/>"
					erroresParamInventario+="<strong>ID CLASE</strong>: "+str(tempErr[2])+"<br/></li>"
				mensajeError+='Errores de Parametrización de cuentas para Inventario: <br/><ol style="text-align:left">'+erroresParamInventario+'</ol>'
			if len(errorDepreciacion)!=0:
				mensajeError+='Errores de Parametrización de cuentas para Depreciación <br/>'
			"""if len(erroresGeneral)!=0:
				for err in erroresGeneral:
					tempErr=err
					tempErr=tempErr.spplit("|")
					erroresGEN+=str(tempErr[0])+", Consulta: "+str(tempErr[1])+" Codigo de Error: "+str(tempErr[2])+"<br/>"
				mensajeError="Otros Fallos Generados: <br/>"+erroresGEN+"<br/><br/>"""
			if len(errorSecuencias)!=0:
				mensajeError+="Por favor pongase en contacto con el Administrador e intente nuevamente.</p>"
			else:
				mensajeError+="Por favor revise la parametrización e intente nuevamente.</p>"
			#--Contenedor para el mensaje de error
			pruebacon={}
			#--Configura la respuesta del JSON para generar error en el GWT
			response['status']=3
			response['totalRows']=0
			response['startRow']=0
			response['endRow']=0
			pruebacon['mensaje']=mensajeError
			contenedor.append(pruebacon)
			response['data']=contenedor
			rta['response']=response
			#--2010508 - MOdificación, si se ejecuta error con conceptos, igual ejecuta los movimentos que ya existen
			if len(idsconceptosfaltantes)!=0 or len(idscuentasfaltantes)!=0 or len(conceptosInventarioFaltantes)!=0 or len(conceptosasientosfaltantes)!=0:
				#--Llama a un procedimeinto almacenado para actualizar los ids correspondientes a los CADS y a los MOVIMIENTOS CONTABLES
				logger_saves.info("Entra a generar el movimiento y el commit, cuanod el fallo es solo de conceptos")
				prefijoBD=getattr(settings, 'PREFIJO_BD', 'default_value')
				#--Habilita trigger para ejecutar contabilidad
				cursormodulocontabilidad.execute("ALTER TRIGGER "+str(prefijoBD)+".CN_COTROL_CAD_TOT_TRG ENABLE")
				r=cursormodulocontabilidad.callproc(prefijoBD+".RESET_VIG_SEQ",[1,])
				modulocontabilidad.commit()
				logger_saves.info("Realiza el commit")
			#--Retorna la lista que va a ser transformada en JSON con la respuesta de error
			return rta
		else:
			#--Configura la respuesta del JSON para generar JSON para GWT
			response['status']=0
			response['startRow']=0
			#--Ingreso del tamaño total de cads que se han ejecutado
			response['endRow']=len(idscadsejecutados)
			#--Recorre cada uno de los cads ejecutados para conseguir la información correpsondiente
			for indicador in idscadsejecutados:
				#--Variable que cuenta la cantidad de cads procesados
				cantidadprocesados+=1
				#--Contenedor temporal que maneja los datos consultados para la respuesta JSON
				pruebacon={}
				#--Separa los datos que llegan del cad, para procesamiento
				dato=indicador.split(",")
				#--Consulta los datos de respuesta en la base de datos
				consultacadingresado="SELECT FECHA_CAD, TOT_DEBITO, TOT_CREDITO, ID_TIPO_COMPROBANTE FROM CN_CONTROL_CAD WHERE ID_CAD="+str(dato[0])+" AND ID_VIGENCIA="+str(dato[1])
				cursormodulocontabilidad.execute(consultacadingresado)
				datoscad=cursormodulocontabilidad.fetchone()
				buscadescripcion="SELECT NOM_TIPO_COMPROBANTE FROM CN_TIPO_COMPROBANTE WHERE ID_TIPO_COMPROBANTE="+str(datoscad[3])
				cursormodulocontabilidad.execute(buscadescripcion)
				nom=cursormodulocontabilidad.fetchone()
				#--Variable que maneja la fecha a mover
				fecha=datoscad[0].date()
				#--Setea los datos correspondientes a cada movimiento 
				pruebacon['id_cad']=dato[0]
				pruebacon['fecha_cad']=fecha
				pruebacon['tot_debito']=datoscad[1]
				pruebacon['tot_credito']=datoscad[2]
				pruebacon['nom_tipo_comprobante']=nom[0]
				#--Ingresa cada movimiento en la lista de movimientos
				contenedor.append(pruebacon)
			#--Termina la construcción de la lista que construye el JSON de respuesta
			response['totalRows']=len(idscadsejecutados)
			response['data']=contenedor
			rta['response']=response
			#--Llama a un procedimeinto almacenado para actualizar los ids correspondientes a los CADS y a los MOVIMIENTOS CONTABLES
			prefijoBD=getattr(settings, 'PREFIJO_BD', 'default_value')
			#--Habilita trigger para ejecutar contabilidad
			cursormodulocontabilidad.execute("ALTER TRIGGER "+str(prefijoBD)+".CN_COTROL_CAD_TOT_TRG ENABLE")
			r=cursormodulocontabilidad.callproc(prefijoBD+".RESET_VIG_SEQ",[1,])
			modulocontabilidad.commit()
			#--Devuelve los resultados propuestos
			return rta;

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos de Inverisones
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----facturaPOS: Datos sobre las facturas POS
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoInversionesPropias(idCAD,fechaEjecucion,PagosInversiones,anulaPago):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Ejecuta Basicas para movimiento de Pagos Acreedores")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_PAGO_OBL"
	#--Se recorren las facturas de acuerdo al dia del mes
	for pagos in PagosInversiones:
		#--Se recorren los conceptos establecidos
		for concepto in conceptos:
			 #--Se acomoda el número de la factura
			iddocumento=1
			#--Variable que contiene el número del CAD
			idcad=id_cad
			#--Variable que contiene la vigencia para el Documento
			id_vigencia=vigencia
			#--Id del centro de operaciones para el documento
			idcenop=cen_op
			#--Id de la cómpañia para el documento
			idcia=cia
			#--Variable que maneja el estado de anulación
			anula=0
			#--Se cambia el valor de la variable de control de ejecución
			ejecucion=1
			#--Id del maestro de terceros para el movimiento contable
			id_maeter=None;
			#--Valida que el documento halla o no sido creado
			creaDoc=0
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			logger_saves.info("Id del concepto a ejecutar")
			logger_saves.info(concepto.id_concepto)
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			logger_saves.info("Nombre del concepto")
			logger_saves.info(concepto.nombre)
			logger_saves.info("Asegra que el concepto contiene asientos para ejecucion")
			logger_saves.info("Tamaño de los asientos: "+str(len(asientosconcepto)))
			if len(asientosconcepto)==0:
				try:
					conceptosasientosfaltantes.index(str(concepto.nombre)+"|"+str(transaccion.nombre))
				except Exception, e:
					conceptosasientosfaltantes.append(str(concepto.nombre)+"|"+str(transaccion.nombre))
					cache.set("error", -1)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto:
				logger_saves.info("/*********************************************************************************/")
				logger_saves.info("Nombre del asiento")
				logger_saves.info(asiento.nombre)
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaPago==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento Anulado")
					logger_saves.info(asiento.naturaleza)
					descDocumento="ANULACION - VALORACION DIARIA DE INVERSIONES PORTAFOLIO RECURSOS PROPIOS"
				else:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento")
					logger_saves.info(asiento.naturaleza)
					descDocumento="VALORACION DIARIA DE INVERSIONES PORTAFOLIO RECURSOS PROPIOS"
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=factura[13].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación 
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(iddocumento)
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentopagoacreedor=cursormodulocontabilidad.fetchone()
				if existedocumentopagoacreedor is None:
					datosDocumento=(iddocumento,id_cad,vigencia,cen_op,int(cia),concepto.id_tipo_documento,id_maeter,descDocumento,iddocumento,fechaEjecucion,0,0)
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Ingresa Documento")
					logger_saves.info(datosDocumento)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Se captura el nombre del asiento
				nombreasiento=asiento.nombre
				#--Variable que maneja la anulación del movimiento
				anula=0
				#--Busca si el asiento posee o no formula
				formu=asiento.formula
				#--Valida el nombre de la tabla, si es por sumatoria, pasa en un solo campo el id con el que se debe operar y el id del documento para buscar la sumatoria con el id
				logger_saves.info("Nombre de la tabla a verificar")
				logger_saves.info(nombretabla)
				#--Entra por Ejecucion Normal
				#--Revisa si el asiento cuenta o no con evaluación
				if len(formu)!=0:
					#--Se ejecuta la evaluación de la formula
					evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
				else:
					#--Se asigna el valor del movimiento de banco
					valormovbanc=pagos[0]
				logger_saves.info("Valores de pago")
				logger_saves.info(pagos)
				#--Se asigna el valor en la variable para el movimiento de bancos
				evaluacion=valormovbanc
				#--Verifica si el valor a ingresar es negativo
				if evaluacion<0:
					#--Cambia el valor de la evaluacion a positivo
					evaluacion=evaluacion*-1
					#--Cambia la naturaleza del asiento por ser el valor negativo
					if asiento.naturaleza == "C":
						asiento.naturaleza = "D"
					else:
						asiento.naturaleza = "C"
				#--Numero de la cuenta a operar
				cuenta_oper=asiento.catalogo
				#--Revisa si el asiento usa o no grupo
				if(asiento.usa_grupo==1):
					#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
					grupo=asiento.id_grupo 
					logger_saves.info("Nombre del grupo")
					logger_saves.info(grupo.nombre)
					logger_saves.info("/************************************************************************************/")
					logger_saves.info("Nombre del campo de los grupos a operar")
					logger_saves.info(grupo.campo)
					#--Ejecuta movimiento contable
					ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
				else:
					#--Ejecuta movimiento contable
					ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
	#--Retorno del metodo
	return tsmovbanctrabajar

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos de Inverisones
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----facturaPOS: Datos sobre las facturas POS
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoInversionesDistribuidas(idCAD,fechaEjecucion,PagosInversiones,anulaPago):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Ejecuta Basicas para movimiento de Pagos Acreedores")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_PAGO_OBL"
	#--Se recorren las facturas de acuerdo al dia del mes
	for pagos in PagosInversiones:
		#--Se recorren los conceptos establecidos
		for concepto in conceptos:
			 #--Se acomoda el número de la factura
			iddocumento=2
			#--Variable que contiene el número del CAD
			idcad=id_cad
			#--Variable que contiene la vigencia para el Documento
			id_vigencia=vigencia
			#--Id del centro de operaciones para el documento
			idcenop=cen_op
			#--Id de la cómpañia para el documento
			idcia=cia
			#--Variable que maneja el estado de anulación
			anula=0
			#--Se cambia el valor de la variable de control de ejecución
			ejecucion=1
			#--Id del maestro de terceros para el movimiento contable
			id_maeter=None;
			#--Valida que el documento halla o no sido creado
			creaDoc=0
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			logger_saves.info("Id del concepto a ejecutar")
			logger_saves.info(concepto.id_concepto)
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			logger_saves.info("Nombre del concepto")
			logger_saves.info(concepto.nombre)
			logger_saves.info("Asegra que el concepto contiene asientos para ejecucion")
			logger_saves.info("Tamaño de los asientos: "+str(len(asientosconcepto)))
			if len(asientosconcepto)==0:
				try:
					conceptosasientosfaltantes.index(str(concepto.nombre)+"|"+str(transaccion.nombre))
				except Exception, e:
					conceptosasientosfaltantes.append(str(concepto.nombre)+"|"+str(transaccion.nombre))
					cache.set("error", -1)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto:
				logger_saves.info("/*********************************************************************************/")
				logger_saves.info("Nombre del asiento")
				logger_saves.info(asiento.nombre)
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaPago==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento Anulado")
					logger_saves.info(asiento.naturaleza)
					descDocumento="ANULACION - VALORACION DIARIA DE INVERSIONES PORTAFOLIO RECURSOS PARA DISTRIBUIR"
				else:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento")
					logger_saves.info(asiento.naturaleza)
					descDocumento="VALORACION DIARIA DE INVERSIONES PORTAFOLIO RECURSOS PARA DISTRIBUIR"
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=factura[13].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación 
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(iddocumento)
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentopagoacreedor=cursormodulocontabilidad.fetchone()
				if existedocumentopagoacreedor is None:
					datosDocumento=(iddocumento,id_cad,vigencia,cen_op,int(cia),concepto.id_tipo_documento,id_maeter,descDocumento,iddocumento,fechaEjecucion,0,0)
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Ingresa Documento")
					logger_saves.info(datosDocumento)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Se captura el nombre del asiento
				nombreasiento=asiento.nombre
				#--Variable que maneja la anulación del movimiento
				anula=0
				#--Busca si el asiento posee o no formula
				formu=asiento.formula
				#--Valida el nombre de la tabla, si es por sumatoria, pasa en un solo campo el id con el que se debe operar y el id del documento para buscar la sumatoria con el id
				logger_saves.info("Nombre de la tabla a verificar")
				logger_saves.info(nombretabla)
				#--Entra por Ejecucion Normal
				#--Revisa si el asiento cuenta o no con evaluación
				if len(formu)!=0:
					#--Se ejecuta la evaluación de la formula
					evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
				else:
					#--Se asigna el valor del movimiento de banco
					valormovbanc=pagos[0]
				#--Se asigna el valor en la variable para el movimiento de bancos
				evaluacion=valormovbanc
				logger_saves.info("Valor de la evaluación")
				logger_saves.info(evaluacion)
				#--Verifica si el valor a ingresar es negativo
				if evaluacion<0:
					#--Cambia el valor de la evaluacion a positivo
					evaluacion=evaluacion*-1
					#--Cambia la naturaleza del asiento por ser el valor negativo
					if asiento.naturaleza == "C":
						asiento.naturaleza = "D"
					else:
						asiento.naturaleza = "C"
				#--Numero de la cuenta a operar
				cuenta_oper=asiento.catalogo
				#--Revisa si el asiento usa o no grupo
				if(asiento.usa_grupo==1):
					#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
					grupo=asiento.id_grupo 
					logger_saves.info("Nombre del grupo")
					logger_saves.info(grupo.nombre)
					logger_saves.info("/************************************************************************************/")
					logger_saves.info("Nombre del campo de los grupos a operar")
					logger_saves.info(grupo.campo)
					#--Ejecuta movimiento contable
					ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
				else:
					#--Ejecuta movimiento contable
					ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
	#--Retorno del metodo
	return tsmovbanctrabajar

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos de Pagos Regalias
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----facturaPOS: Datos sobre las facturas POS
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoPagoRegalias(idCAD,fechaEjecucion,PagosRegaliasPOS,anulaPago):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Ejecuta Basicas para movimiento de Pagos Acreedores")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_PAGO_OBL"
	#--Se recorren las facturas de acuerdo al dia del mes
	for pagos in PagosRegaliasPOS:
		#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
		verificaMaeter(pagos[2])
		#--Se recorren los conceptos establecidos
		for concepto in conceptos:
			 #--Se acomoda el número de la factura
			iddocumento=pagos[0]
			#--Variable que contiene el número del CAD
			idcad=id_cad
			#--Variable que contiene la vigencia para el Documento
			id_vigencia=vigencia
			#--Id del centro de operaciones para el documento
			idcenop=cen_op
			#--Id de la cómpañia para el documento
			idcia=cia
			#--Variable que maneja el estado de anulación
			anula=0
			#--Se cambia el valor de la variable de control de ejecución
			ejecucion=1
			#--Id del maestro de terceros para el movimiento contable
			id_maeter=pagos[2]
			#--Valida que el documento halla o no sido creado
			creaDoc=0
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			logger_saves.info("Id del concepto a ejecutar")
			logger_saves.info(concepto.id_concepto)
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			logger_saves.info("Nombre del concepto")
			logger_saves.info(concepto.nombre)
			logger_saves.info("Asegra que el concepto contiene asientos para ejecucion")
			logger_saves.info("Tamaño de los asientos: "+str(len(asientosconcepto)))
			if len(asientosconcepto)==0:
				try:
					conceptosasientosfaltantes.index(str(concepto.nombre)+"|"+str(transaccion.nombre))
				except Exception, e:
					conceptosasientosfaltantes.append(str(concepto.nombre)+"|"+str(transaccion.nombre))
					cache.set("error", -1)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto:
				logger_saves.info("/*********************************************************************************/")
				logger_saves.info("Nombre del asiento")
				logger_saves.info(asiento.nombre)
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaPago==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento Anulado")
					logger_saves.info(asiento.naturaleza)
					if pagos[4] is None:
						descDocumento=" "
					else:
						descDocumento="ANULACION - "+str(pagos[4])
					descDocumento="ANULACION - "+str(pagos[4])
				else:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento")
					logger_saves.info(asiento.naturaleza)
					if int(pagos[5])==1:
						descDocumento="VIG-"
					elif int(pagos[5])==2:
						descDocumento="CXP-"
					else:
						descDocumento="RES-"
					if pagos[4] is None:
						descDocumento=descDocumento
					else:
						descDocumento=descDocumento+str(pagos[4])
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=factura[13].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación 
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(pagos[0])
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentopagoacreedor=cursormodulocontabilidad.fetchone()
				if existedocumentopagoacreedor is None:
					datosDocumento=(pagos[0],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,pagos[2],descDocumento,pagos[0],fechaEjecucion,0,0)
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Ingresa Documento")
					logger_saves.info(datosDocumento)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Se captura el nombre del asiento
				nombreasiento=asiento.nombre
				#--Variable que maneja la anulación del movimiento
				anula=0
				#--Busca si el asiento posee o no formula
				formu=asiento.formula
				#--Valida el nombre de la tabla, si es por sumatoria, pasa en un solo campo el id con el que se debe operar y el id del documento para buscar la sumatoria con el id
				logger_saves.info("Nombre de la tabla a verificar")
				logger_saves.info(nombretabla)
				iddocumento=str(pagos[0])
				#--Entra por Ejecucion Normal
				#--Revisa si el asiento cuenta o no con evaluación
				if len(formu)!=0:
					#--Se ejecuta la evaluación de la formula
					evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
				else:
					#--Se asigna el valor del movimiento de banco
					valormovbanc=pagos[1]
				#--Se asigna el valor en la variable para el movimiento de bancos
				evaluacion=valormovbanc
				#--Verifica si el valor a ingresar es negativo
				if evaluacion<0:
					#--Cambia el valor de la evaluacion a positivo
					evaluacion=evaluacion*-1
					#--Cambia la naturaleza del asiento por ser el valor negativo
					if asiento.naturaleza == "C":
						asiento.naturaleza = "D"
					else:
						asiento.naturaleza = "C"
				#--Busca el id de la cuenta para operar, revisa si esta poranulaciones o por ejecucion normal
				idcb=pagos[3]
				#--Busca la cuenta para compararlo contra el parametrizado en la interfaz
				cursormoduloconexion.execute("SELECT NUMERO_CUENTA from TS_CB WHERE ID_CB="+str(idcb))
				cuenta_oper=cursormoduloconexion.fetchone()
				cuenta_oper=cuenta_oper[0]
				#--Revisa si el asiento usa o no grupo
				if(asiento.usa_grupo==1):
					#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
					grupo=asiento.id_grupo 
					logger_saves.info("Nombre del grupo")
					logger_saves.info(grupo.nombre)
					logger_saves.info("/************************************************************************************/")
					logger_saves.info("Nombre del campo de los grupos a operar")
					logger_saves.info(grupo.campo)
					#--Ejecuta movimiento contable
					ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
				else:
					#--Ejecuta movimiento contable
					ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
	#--Retorno del metodo
	return tsmovbanctrabajar

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos de Obligacion Presupuestal
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----facturaPOS: Datos sobre las facturas POS
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoObligacionPresupuestal(idCAD,fechaEjecucion,PagosAcreedoresPOS,anulaPago):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Ejecuta Basicas para movimiento de Obligacion Presupuestal")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_OBLIGACION"
	#--Se recorren las facturas de acuerdo al dia del mes
	for pagos in PagosAcreedoresPOS:
		#--Consulta ID del Maeter para poder hacer la verificación del mismo
		logger_saves.info("Consulta de mae ter")
		logger_saves.info("SELECT ID_MAE_TER FROM USUARIO LEFT JOIN INTERCEROS ON USUARIO.NUM_DOC = INTERCEROS.NUM_DOC WHERE USUARIO.USERNAME=\'"+str(pagos[6])+"'")
		cursormoduloconexion.execute("SELECT ID_MAE_TER FROM USUARIO LEFT JOIN INTERCEROS ON USUARIO.NUM_DOC = INTERCEROS.NUM_DOC WHERE USUARIO.USERNAME=\'"+str(pagos[6])+"'")
		idMaeterObligaciones=cursormoduloconexion.fetchone()
		#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
		verificaMaeter(idMaeterObligaciones[0])
		#--Consulta el concepto para verificar si existe o no en la ejecución
		conceptoVerificar=pagos[5]
		#--Busca si el concepto existe para ejecutarlo, de lo contrario lo reporta
		queryBusquedaConcepto="SELECT id_concepto_generico,id_concepto from ic_concepto where id_concepto_generico="+str(conceptoVerificar)+" and id_transaccion_id="+str(id_transaccion)
		logger_saves.info("Query de busqueda de concepto: ")
		logger_saves.info(queryBusquedaConcepto )
		cursormodulocontabilidad.execute(queryBusquedaConcepto)
		datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
		logger_saves.info("Datos del concepto seleccionado")
		logger_saves.info(datosConceptosParametrizadas)
		if datosConceptosParametrizadas is None:
			try:
				idsconceptosfaltantes.index(str(conceptoVerificar)+"|"+str(transaccion.nombre))
			except Exception, e:
				idsconceptosfaltantes.append(str(conceptoVerificar)+"|"+str(transaccion.nombre))
				cache.set("error", -1)
		else:
			logger_saves.info("Encontro el concepto, ejecuta")
		    #--Se acomoda el número de la factura
			iddocumento=pagos[0]
			#--Variable que contiene el número del CAD
			idcad=id_cad
			#--Variable que contiene la vigencia para el Documento
			id_vigencia=vigencia
			#--Id del centro de operaciones para el documento
			idcenop=cen_op
			#--Id de la cómpañia para el documento
			idcia=cia
			#--Variable que maneja el estado de anulación
			anula=0
			#--Se cambia el valor de la variable de control de ejecución
			ejecucion=1
			#--Id del maestro de terceros para el movimiento contable
			id_maeter=idMaeterObligaciones[0]
			#--Valida que el documento halla o no sido creado
			creaDoc=0
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			logger_saves.info("Id del concepto a ejecutar")
			logger_saves.info(datosConceptosParametrizadas[1])
			asientosconcepto=Asiento.objects.filter(id_concepto=datosConceptosParametrizadas[1])
			#--Filtra los conceptos que pertecen a inventario de entrada devolutivos
			concepto=Concepto.objects.get(id_concepto=datosConceptosParametrizadas[1])
			logger_saves.info("Nombre del concepto")
			logger_saves.info(concepto.nombre)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto:
				logger_saves.info("/*********************************************************************************/")
				logger_saves.info("Nombre del asiento")
				logger_saves.info(asiento.nombre)
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaPago==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento Anulado")
					logger_saves.info(asiento.naturaleza)
					descDocumento="ANULACION - "+str(pagos[4])
				else:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento")
					logger_saves.info(asiento.naturaleza)
					if int(pagos[1])==1:
						descDocumento="VIG-"
					elif int(pagos[1])==2:
						descDocumento="CXP-"
					else:
						descDocumento="RES-"
					descDocumento=descDocumento+pagos[4]
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=factura[13].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación 
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(pagos[0])
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentopagoacreedor=cursormodulocontabilidad.fetchone()
				if existedocumentopagoacreedor is None:
					datosDocumento=(pagos[0],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,id_maeter,descDocumento,pagos[0],fechaEjecucion,0,0)
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Ingresa Documento")
					logger_saves.info(datosDocumento)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Se captura el nombre del asiento
				nombreasiento=asiento.nombre
				#--Variable que maneja la anulación del movimiento
				anula=0
				#--Busca si el asiento posee o no formula
				formu=asiento.formula
				#--Valida el nombre de la tabla, si es por sumatoria, pasa en un solo campo el id con el que se debe operar y el id del documento para buscar la sumatoria con el id
				logger_saves.info("Nombre de la tabla a verificar")
				logger_saves.info(nombretabla)
				if nombretabla=='TS_OBLIGACION_VAL':
					logger_saves.info("Entra a generar la llave unica con el id del pago")
					iddocumento=str(pagos[0])+"|"+str(pagos[1])+"|"+str(pagos[2])+"|"+str(pagos[3])
				else:
					iddocumento=str(pagos[0])
				#--Verifica si contiene o no Retenciones
				if nombretabla=="TS_DEDUCCIONES":
					#--Cuadra el id de la busqueda de acuerdo a si es o no anulacion
					idobligacion=pagos[0]
					idvigencia=pagos[1]
					idsecuencia=pagos[2]
					idaniofiscal=pagos[3]
					logger_saves.info("Consulta de retenciones")
					logger_saves.info("SELECT VALOR_IMPUESTO,ID_IM from TS_DEDUCCIONES WHERE "+idbusqueda+"="+str(idobligacion)+" AND TS_DEDUCCIONES.SECUENCIA="+str(idsecuencia)+" AND TS_DEDUCCIONES.ID_VIGENCIA="+str(idvigencia)+" AND TS_DEDUCCIONES.ANO_FISCAL="+str(idaniofiscal))
					#--Consulta los datos correspondientes para la retención -20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
					cursormoduloconexion.execute("SELECT VALOR_IMPUESTO,ID_IM from TS_DEDUCCIONES WHERE "+idbusqueda+"="+str(idobligacion)+" AND TS_DEDUCCIONES.SECUENCIA="+str(idsecuencia)+" AND TS_DEDUCCIONES.ID_VIGENCIA="+str(idvigencia)+" AND TS_DEDUCCIONES.ANO_FISCAL="+str(idaniofiscal))
					try:
						retencion1=cursormoduloconexion.fetchall()
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al consultar retenciones")
						logger_saves.error("SELECT VALOR_IMPUESTO,ID_IM from TS_DEDUCCIONES WHERE "+idbusqueda+"="+str(idobligacion)+" AND TS_DEDUCCIONES.SECUENCIA="+str(idsecuencia)+" AND TS_DEDUCCIONES.ID_VIGENCIA="+str(idvigencia)+" AND TS_DEDUCCIONES.ANO_FISCAL="+str(idaniofiscal))
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al consultar retenciones"+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
					#--Verifica que si existen datos de la retención - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
					if retencion1 is not None:
						#--Recorre retenciones existentes - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
						for retencion in retencion1:
							#--Cuadra las variables para el manejo de los Movimientos Contables en la inserción
							ts_im=retencion[1]
							valor_maeter=id_maeter
							evaluacion=retencion[0]
							id_maeter=valor_maeter
							#--Ajusta la cuenta a operar
							cuenta_oper=ts_im
							#--Verifica si el valor a ingresar es negativo
							if evaluacion<0:
								#--Cambia el valor de la evaluacion a positivo
								evaluacion=evaluacion*-1
								#--Cambia la naturaleza del asiento por ser el valor negativo
								if asiento.naturaleza == "C":
									asiento.naturaleza = "D"
								else:
									asiento.naturaleza = "C"
							#--Revise si el movimiento posee anulación
							#20140314 - Modificacion, Se Obvia el proceso de anulacion, debido a que estas se procesan en otro lote 
							#if movimiento[3] == 1:
								#--Busca la fecha de anulación 
								#cursormoduloconexion.execute("SELECT FECHA_ANUL from TS_ANU_MOV_BANC WHERE "+idbusqueda+"="+str(movimiento[0]))
								#fechaanulacion=cursormoduloconexion.fetchone()
								#--Revisa si existe la fecha de anulación
								#if len(str(fechaanulacion))!=0:
								#	#--Variable con la fecha de anulación
								#	fechaanulacion=fechaanulacion[0].date()
								#	#--Variable con el mes de la fecha
								#	mesanulacion=fechaanulacion.month
									#--Variable con el año de la anulación
								#	anioanulacion=fechaanulacion.year
								#	#--Verifica si el mes y el año esta dentro del periodo ejecutado
								#	if(mesanulacion==me and anioanulacion==vigencia):
										#--Se activa la anulación
								#		anula=1
								#	else:
										#--No se activa la anulación
								#		anula=0
								#else:
									#--No se activa la anulación
								#	anula=0
							#else:
								#--No se activa la anulación
							anula=0
							#--Ejecuta movimiento contable
							if asiento.usa_grupo==1:
								ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
							else:
								ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
				else:
					#--Entra por Ejecucion Normal
					#--Revisa si el asiento cuenta o no con evaluación
					if len(formu)!=0:
						#--Se ejecuta la evaluación de la formula
						evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
					else:
						#--Se asigna el valor del movimiento de banco
						valormovbanc=0
					#--Se asigna el valor en la variable para el movimiento de bancos
					evaluacion=valormovbanc
					#--Verifica si el valor a ingresar es negativo
					if evaluacion<0:
					    #--Cambia el valor de la evaluacion a positivo
						evaluacion=evaluacion*-1
						#--Cambia la naturaleza del asiento por ser el valor negativo
						if asiento.naturaleza == "C":
							asiento.naturaleza = "D"
						else:
							asiento.naturaleza = "C"
					#--Se cancela la busqueda de cuenta de banco, dado que en la tabla no existe referencia al respecto
					#--Busca el id de la cuenta para operar, revisa si esta poranulaciones o por ejecucion normal
					#idcb=pagos[8]
					#--Busca la cuenta para compararlo contra el parametrizado en la interfaz
					#cursormoduloconexion.execute("SELECT NUMERO_CUENTA from TS_CB WHERE ID_CB="+str(idcb))
					#cuenta_oper=cursormoduloconexion.fetchone()
					#cuenta_oper=cuenta_oper[0]
					#--Revisa si el asiento usa o no grupo
					if(asiento.usa_grupo==1):
						#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
						grupo=asiento.id_grupo 
						logger_saves.info("Nombre del grupo")
						logger_saves.info(grupo.nombre)
						logger_saves.info("/************************************************************************************/")
						logger_saves.info("Nombre del campo de los grupos a operar")
						logger_saves.info(grupo.campo)
						#--Ejecuta movimiento contable
						#ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
					else:
						#--Ejecuta movimiento contable
						ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
	#--Retorno del metodo
	return tsmovbanctrabajar

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos de Pagos Acreedores
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----facturaPOS: Datos sobre las facturas POS
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoPagosAcreedores(idCAD,fechaEjecucion,PagosAcreedoresPOS,anulaPago):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Ejecuta Basicas para movimiento de Pagos Acreedores")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_PAGO_OBL"
	#--Se recorren las facturas de acuerdo al dia del mes
	for pagos in PagosAcreedoresPOS:
		#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
		verificaMaeter(pagos[2])
		#--Consulta el concepto para verificar si existe o no en la ejecución
		if anulaPago==1:
			if pagos[4] is None:
				conceptoVerificar=pagos[5]
			else:
				conceptoVerificar=pagos[4]
		else:
			if pagos[5] is None:
				conceptoVerificar=pagos[6]
			else:
				conceptoVerificar=pagos[5]
		queryBusquedaConcepto="SELECT id_concepto_generico,id_concepto from ic_concepto where id_concepto_generico="+str(conceptoVerificar)+" and id_transaccion_id="+str(id_transaccion)
		logger_saves.info("Query de busqueda de concepto: ")
		logger_saves.info(queryBusquedaConcepto )
		cursormodulocontabilidad.execute(queryBusquedaConcepto)
		datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
		logger_saves.info("Datos del concepto seleccionado")
		logger_saves.info(datosConceptosParametrizadas)
		if datosConceptosParametrizadas is None:
			try:
				idsconceptosfaltantes.index(str(conceptoVerificar)+"|"+str(transaccion.nombre))
			except Exception, e:
				idsconceptosfaltantes.append(str(conceptoVerificar)+"|"+str(transaccion.nombre))
				cache.set("error", -1)
		else:
			logger_saves.info("Encontro el concepto, ejecuta")
		    #--Se acomoda el número de la factura
			iddocumento=pagos[0]
			#--Variable que contiene el número del CAD
			idcad=id_cad
			#--Variable que contiene la vigencia para el Documento
			id_vigencia=vigencia
			#--Id del centro de operaciones para el documento
			idcenop=cen_op
			#--Id de la cómpañia para el documento
			idcia=cia
			#--Variable que maneja el estado de anulación
			anula=0
			#--Se cambia el valor de la variable de control de ejecución
			ejecucion=1
			#--Id del maestro de terceros para el movimiento contable
			id_maeter=pagos[2]
			#--Valida que el documento halla o no sido creado
			creaDoc=0
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			logger_saves.info("Id del concepto a ejecutar")
			logger_saves.info(datosConceptosParametrizadas[1])
			asientosconcepto=Asiento.objects.filter(id_concepto=datosConceptosParametrizadas[1])
			#--Filtra los conceptos que pertecen a inventario de entrada devolutivos
			concepto=Concepto.objects.get(id_concepto=datosConceptosParametrizadas[1])
			logger_saves.info("Nombre del concepto")
			logger_saves.info(concepto.nombre)
			logger_saves.info("Asegra que el concepto contiene asientos para ejecucion")
			logger_saves.info("Tamaño de los asientos: "+str(len(asientosconcepto)))
			if len(asientosconcepto)==0:
				try:
					conceptosasientosfaltantes.index(str(concepto.nombre)+"|"+str(transaccion.nombre))
				except Exception, e:
					conceptosasientosfaltantes.append(str(concepto.nombre)+"|"+str(transaccion.nombre))
					cache.set("error", -1)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto:
				logger_saves.info("/*********************************************************************************/")
				logger_saves.info("Nombre del asiento")
				logger_saves.info(asiento.nombre)
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaPago==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento Anulado")
					logger_saves.info(asiento.naturaleza)
					descDocumento="ANULACION - "+str(pagos[3])
				else:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento")
					logger_saves.info(asiento.naturaleza)
					if int(pagos[9])==1:
						descDocumento="VIG-"
					elif int(pagos[9])==2:
						descDocumento="CXP-"
					else:
						descDocumento="RES-"
					if pagos[3] is None:
						descDocumento=descDocumento+pagos[4]
					else:
						descDocumento=descDocumento+pagos[3]
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=factura[13].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación 
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(pagos[0])
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentopagoacreedor=cursormodulocontabilidad.fetchone()
				if existedocumentopagoacreedor is None:
					datosDocumento=(pagos[0],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,pagos[2],descDocumento,pagos[0],fechaEjecucion,0,0)
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Ingresa Documento")
					logger_saves.info(datosDocumento)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Se captura el nombre del asiento
				nombreasiento=asiento.nombre
				#--Variable que maneja la anulación del movimiento
				anula=0
				#--Busca si el asiento posee o no formula
				formu=asiento.formula
				#--Valida el nombre de la tabla, si es por sumatoria, pasa en un solo campo el id con el que se debe operar y el id del documento para buscar la sumatoria con el id
				logger_saves.info("Nombre de la tabla a verificar")
				logger_saves.info(nombretabla)
				if nombretabla=='TS_OBLIGACION_VAL':
					logger_saves.info("Entra a generar la llave unica con el id del pago")
					if anulaPago==1:
						iddocumento=str(iddocumento)+"|"+str(pagos[12])
					else:
						iddocumento=str(iddocumento)+"|"+str(pagos[13])
				else:
					iddocumento=str(pagos[0])
				#--Verifica si contiene o no Retenciones
				if nombretabla=="TS_DEDUCCIONES":
					#--Cambia el valor de la busqueda para las retenciones
					idbusqueda="ID_OBLIGACION"
					#--Cuadra el id de la busqueda de acuerdo a si es o no anulacion
					if anulaPago==1:
						idobligacion=pagos[9]
						idvigencia=pagos[8]
						idsecuencia=pagos[10]
						idaniofiscal=pagos[11]
					else:
						idobligacion=pagos[10]
						idvigencia=pagos[9]
						idsecuencia=pagos[11]
						idaniofiscal=pagos[12]
					logger_saves.info("Consulta de retenciones")
					logger_saves.info("SELECT VALOR_IMPUESTO,ID_IM from TS_DEDUCCIONES WHERE "+idbusqueda+"="+str(idobligacion)+" AND TS_DEDUCCIONES.SECUENCIA="+str(idsecuencia)+" AND TS_DEDUCCIONES.ID_VIGENCIA="+str(idvigencia)+" AND TS_DEDUCCIONES.ANO_FISCAL="+str(idaniofiscal))
					#--Consulta los datos correspondientes para la retención -20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
					cursormoduloconexion.execute("SELECT VALOR_IMPUESTO,ID_IM from TS_DEDUCCIONES WHERE "+idbusqueda+"="+str(idobligacion)+" AND TS_DEDUCCIONES.SECUENCIA="+str(idsecuencia)+" AND TS_DEDUCCIONES.ID_VIGENCIA="+str(idvigencia)+" AND TS_DEDUCCIONES.ANO_FISCAL="+str(idaniofiscal))
					try:
						retencion1=cursormoduloconexion.fetchall()
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al consultar retenciones")
						logger_saves.error("SELECT VALOR_IMPUESTO,ID_IM from TS_DEDUCCIONES WHERE "+idbusqueda+"="+str(idobligacion)+" AND TS_DEDUCCIONES.SECUENCIA="+str(idsecuencia)+" AND TS_DEDUCCIONES.ID_VIGENCIA="+str(idvigencia)+" AND TS_DEDUCCIONES.ANO_FISCAL="+str(idaniofiscal))
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al consultar retenciones"+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
					#--Verifica que si existen datos de la retención - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
					if retencion1 is not None:
						#--Recorre retenciones existentes - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
						for retencion in retencion1:
							#--Cuadra las variables para el manejo de los Movimientos Contables en la inserción
							ts_im=retencion[1]
							valor_maeter=pagos[2]
							evaluacion=retencion[0]
							id_maeter=valor_maeter
							#--Ajusta la cuenta a operar
							cuenta_oper=ts_im
							#--Verifica si el valor a ingresar es negativo
							if evaluacion<0:
								#--Cambia el valor de la evaluacion a positivo
								evaluacion=evaluacion*-1
								#--Cambia la naturaleza del asiento por ser el valor negativo
								if asiento.naturaleza == "C":
									asiento.naturaleza = "D"
								else:
									asiento.naturaleza = "C"
							#--Revise si el movimiento posee anulación
							#20140314 - Modificacion, Se Obvia el proceso de anulacion, debido a que estas se procesan en otro lote 
							#if movimiento[3] == 1:
								#--Busca la fecha de anulación 
								#cursormoduloconexion.execute("SELECT FECHA_ANUL from TS_ANU_MOV_BANC WHERE "+idbusqueda+"="+str(movimiento[0]))
								#fechaanulacion=cursormoduloconexion.fetchone()
								#--Revisa si existe la fecha de anulación
								#if len(str(fechaanulacion))!=0:
								#	#--Variable con la fecha de anulación
								#	fechaanulacion=fechaanulacion[0].date()
								#	#--Variable con el mes de la fecha
								#	mesanulacion=fechaanulacion.month
									#--Variable con el año de la anulación
								#	anioanulacion=fechaanulacion.year
								#	#--Verifica si el mes y el año esta dentro del periodo ejecutado
								#	if(mesanulacion==me and anioanulacion==vigencia):
										#--Se activa la anulación
								#		anula=1
								#	else:
										#--No se activa la anulación
								#		anula=0
								#else:
									#--No se activa la anulación
								#	anula=0
							#else:
								#--No se activa la anulación
							anula=0
							#--Ejecuta movimiento contable
							if asiento.usa_grupo==1:
								ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
							else:
								ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
				else:
					#--Entra por Ejecucion Normal
					#--Revisa si el asiento cuenta o no con evaluación
					if len(formu)!=0:
						#--Se ejecuta la evaluación de la formula
						evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
					else:
						#--Se asigna el valor del movimiento de banco
						valormovbanc=pagos[1]
					#--Se asigna el valor en la variable para el movimiento de bancos
					evaluacion=valormovbanc
					#--Verifica si el valor a ingresar es negativo
					if evaluacion<0:
					    #--Cambia el valor de la evaluacion a positivo
						evaluacion=evaluacion*-1
						#--Cambia la naturaleza del asiento por ser el valor negativo
						if asiento.naturaleza == "C":
							asiento.naturaleza = "D"
						else:
							asiento.naturaleza = "C"
					#--Busca el id de la cuenta para operar, revisa si esta poranulaciones o por ejecucion normal
					if anulaPago==1:
						idcb=pagos[7]
					else:
						idcb=pagos[8]
					#--Busca la cuenta para compararlo contra el parametrizado en la interfaz
					cursormoduloconexion.execute("SELECT NUMERO_CUENTA from TS_CB WHERE ID_CB="+str(idcb))
					cuenta_oper=cursormoduloconexion.fetchone()
					cuenta_oper=cuenta_oper[0]
					#--Revisa si el asiento usa o no grupo
					if(asiento.usa_grupo==1):
						#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
						grupo=asiento.id_grupo 
						logger_saves.info("Nombre del grupo")
						logger_saves.info(grupo.nombre)
						logger_saves.info("/************************************************************************************/")
						logger_saves.info("Nombre del campo de los grupos a operar")
						logger_saves.info(grupo.campo)
						#--Ejecuta movimiento contable
						ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
					else:
						#--Ejecuta movimiento contable
						ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
	#--Retorno del metodo
	return tsmovbanctrabajar

def ejecutaMovimientoSalidaCON(idCAD,fechaEjecucion,inventarioCON,tipo_comprobante):
	quehace.append("Entra a ejecutar el movimiento contable CON")
	quehace.append(" Variable global modificada "+str(idgen))
	tsmovbanctrabajar=[]
	cuantosejecutados=0
	id_cad=idCAD
	now = fechaEjecucion
	vigencia = now.year
	me=now.month
	cen_op=id_cen_op
	cia=id_cia
	fecha=str(now)
	periodo_contable=now.month
	totcredito=0
	totdebito=0
	contcad=0
	consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
	cursormodulocontabilidad.execute(consultaconsecutivomov)
	idmovcontab=cursormodulocontabilidad.fetchone()
	idmovcontab=idmovcontab[0]+1
	ejecucion=-3
	vecesentra=1
	contcad=idgen
	idbusqueda="ID_MOVIMIENTOS_CON"
	for inventario in inventarioCON:
		quehace.append("Comienza a recorrer los asientos correspondientes")
		quehace.append("Veces que entra "+str(vecesentra))
		iddocumento=inventario[0]
		idcad=id_cad
		id_vigencia=vigencia
		idcenop=cen_op
		idcia=cia
		id_maeter=user
		anula=0
		id_tipo_concepto_entrada=Tabla_Propiedades.objects.get(nombre="CONCEPTO_INVENTARIO_ENTRADA_CON")
		id_tipo_concepto_entrada=id_tipo_concepto_entrada.valor
		concepto=Concepto.objects.get(id_concepto=id_tipo_concepto_entrada)
		quehace.append(concepto.nombre)
		ejecucion=1
		quehace.append("Levanta concepto para ejecucion contable de Entradas CON, nombre: "+concepto.nombre)
		buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fecha)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+" AND ID_CEN_OP="+str(inventario[2])
		cursormodulocontabilidad.execute(buscacad)
		datoscadconsultado=cursormodulocontabilidad.fetchone()
		quehace.append("Consulta para el cad ejecutado "+buscacad)
		quehace.append("Datos del cad consultado")
		quehace.append(datoscadconsultado)
		if datoscadconsultado is None:
			quehace.append("NO existe el CAD, se debe crear para ingresar el documento")
			consultacad = "INSERT INTO WS_CONTAB.CN_CONTROL_CAD VALUES ( \'"+str(idgen)+"','"+str(vigencia)+"','"+str(inventario[2])+"','"+str(cia)+"','"+str(periodo_contable)+"','"+str(tipo_comprobante)+"',to_date('"+str(fecha)+"','YYYY-MM-DD'),'"+str(totcredito)+"','"+str(totdebito)+"','','','')"
			cursormodulocontabilidad.execute(consultacad)
			quehace.append(consultacad)	
			idcad=idgen
			contcad=idgen+1
		else:
			quehace.append("Existe el CAD, por ende se debe crear el documento y proceder a ejecutar")
			idcad=datoscadconsultado[0]
		sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES("+str(inventario[0])+",'"+str(idcad)+"','"+str(vigencia)+"','"+str(inventario[2])+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+user+"','"+concepto.descripcion+"','',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
		cursormodulocontabilidad.execute(sqlinserciondocumento)
		quehace.append(sqlinserciondocumento)
		asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
		for asiento in asientosconcepto:
			quehace.append("Recorre los asientos para aplicar a los conceptos")
			campovalor=asiento.id_campo_valor
			tabla=campovalor.id_tabla
			nombretabla=tabla.nombre
			formu=asiento.formula
			if len(formu)!=0:
				evaluacion=evaluaFuncion(formu,iddocumento)
			else:
				evaluacion=None
			estadofactura=inventario[14]
			if estadofactura==1:
				fechaanulacion=inventario[15].date()
				mesanulacion=fechaanulacion.month
				anioanulacion=fechaanulacion.year
				if(mesanulacion==me and anioanulacion==vigencia):
					anula=1
				else:
					anula=0
			valorbusqueda=inventario[0]
			id_tipo_documento_entrada=inventario[3]
			id_tipo_concepto_entradaDV=inventario[4]
			quehace.append("Antes de generar movimientos")
			if(asiento.usa_grupo==1):
				quehace.append("Genera movimiento con grupo")
				idmovcontab=ejecutaMovimientoGrupoInventarioSalidasCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV)
			else:
				quehace.append("Genera movimiento sin grupo")
				#idmovcontab=ejecutaMovimientoGrupoInventarioCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula)
		vecesentra+=1
	return contcad

def ejecutaMovimientoInventarioTrasladoCON(fechaEjecucion,trasladosFecha,idgen,tipo_comprobante):
	quehace.append("Comienza movimiento de traslado CON")
	smovbanctrabajar=[]
	cuantosejecutados=0
	now = fechaEjecucion
	vigencia = now.year
	periodo_contable=now.month
	me=now.month
	cen_op=id_cen_op
	cia=id_cia
	fecha=str(now)
	ejecucion=-3
	idcenop=0
	totcredito=0
	totdebito=0
	eliminadato=0
	consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
	cursormodulocontabilidad.execute(consultaconsecutivomov)
	idmovcontab=cursormodulocontabilidad.fetchone()
	idmovcontab=idmovcontab[0]+1
	idbusqueda="ID_MOVIMIENTOS_CON"
	quehace.append("Carga basicas para ejecucion")
	for traslado in trasladosFecha:
		iddocumento=traslado[0]
		id_vigencia=vigencia
		idcia=cia
		id_maeter=user
		anula=0
		id_tipo_concepto_traslado=Tabla_Propiedades.objects.get(nombre="CONCEPTO_INVENTARIO_TRASLADO_DV")
		id_tipo_concepto_traslado=id_tipo_concepto_traslado.valor
		concepto=Concepto.objects.get(id_concepto=id_tipo_concepto_traslado)
		ejecucion=1
		asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
		for asiento in asientosconcepto:
			quehace.append("Ingreso a recorrer los asientos para cuadrar CAD y documento")
			quehace.append("Naturaleza del asiento "+asiento.naturaleza)
			if asiento.naturaleza == "C":
				cen_op=traslado[20]
				quehace.append("Busca cad y si no existe lo genera y genera el documento entra por credito")
				quehace.append("Id del movmiento contable: "+str(idgen))
				buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fecha)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+" AND ID_CEN_OP="+str(cen_op)
				quehace.append(buscacad)
				cursormodulocontabilidad.execute(buscacad)
				existecad=cursormodulocontabilidad.fetchone()
				quehace.append("Genera la busqueda del cad y trae el resultado")
				quehace.append(existecad)
				if existecad is None:
					idcad=idgen
					consultacad = "INSERT INTO WS_CONTAB.CN_CONTROL_CAD VALUES ( "+str(idgen)+","+str(vigencia)+","+str(cen_op)+","+str(cia)+","+str(periodo_contable)+","+str(tipo_comprobante)+",to_date('"+str(fecha)+"','YYYY-MM-DD'),"+str(totcredito)+","+str(totdebito)+",'','','')"
					quehace.append(consultacad)
					cursormodulocontabilidad.execute(consultacad)
					quehace.append("No existe el CAD")
					quehace.append("Id del nuevo ingreso "+str(idgen))
					idgen=idgen+1
				else:
					quehace.append("Existe el CAD")
					idcad=existecad[0]
					quehace.append("Cad localizado: "+str(idcad))
			else:
				cen_op=traslado[2]
				quehace.append("Busca cad y si no existe lo genera y genera el documento entra por credito")
				quehace.append("Id del movmiento contable: "+str(idgen))
				buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fecha)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+" AND ID_CEN_OP="+str(cen_op)
				quehace.append(buscacad)
				cursormodulocontabilidad.execute(buscacad)
				existecad=cursormodulocontabilidad.fetchone()
				quehace.append("Genera la busqueda del cad y trae el resultado")
				quehace.append(existecad)
				if existecad is None:
					idcad=idgen
					consultacad = "INSERT INTO WS_CONTAB.CN_CONTROL_CAD VALUES ( "+str(idgen)+","+str(vigencia)+","+str(cen_op)+","+str(cia)+","+str(periodo_contable)+","+str(tipo_comprobante)+",to_date('"+str(fecha)+"','YYYY-MM-DD'),"+str(totcredito)+","+str(totdebito)+",'','','')"
					quehace.append(consultacad)
					cursormodulocontabilidad.execute(consultacad)
					quehace.append("No existe el CAD")
					quehace.append("Id del nuevo ingreso "+str(idgen))
					idgen=idgen+1
				else:
					quehace.append("Existe el CAD")
					idcad=existecad[0]
					quehace.append("Cad localizado: "+str(idcad))
			idscadsejecutados.append(str(idcad)+","+str(vigencia))
			consultadocumento="SELECT * FROM CN_DOCUMENTO WHERE ID_CAD="+str(idcad)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_CEN_OP="+str(cen_op)+" AND ID_CIA="+str(cia)+" AND FECHA_SOPORTE=to_date('"+fecha+"','YYYY-MM-DD')"
			quehace.append("Consulta documento a ver si exite con esas caracteristicas:")
			quehace.append(consultadocumento)
			cursormodulocontabilidad.execute(consultadocumento)
			existedocumento=cursormodulocontabilidad.fetchone()
			quehace.append("Busqueda de docuemnto a ver si existe o no")
			quehace.append(existedocumento)
			if existedocumento is None:
				sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES(\'"+str(traslado[0])+"','"+str(idcad)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+user+"','"+concepto.descripcion+"','',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
				cursormodulocontabilidad.execute(sqlinserciondocumento)
				quehace.append("Creacion del documento:")
				quehace.append(sqlinserciondocumento)
				iddocumento=traslado[0]
			else:
				quehace.append("No se necesita crear documento")
				iddocumento=existedocumento[0]
			campovalor=asiento.id_campo_valor
			tabla=campovalor.id_tabla
			nombretabla=tabla.nombre
			formu=asiento.formula
			if len(formu)!=0:
				evaluacion=evaluaFuncion(formu,iddocumento)
			else:
				evaluacion=None
			estadofactura=traslado[14]
			if estadofactura==1:
				fechaanulacion=traslado[15].date()
				mesanulacion=fechaanulacion.month
				anioanulacion=fechaanulacion.year
				if(mesanulacion==me and anioanulacion==vigencia):
					anula=1
				else:
					anula=0
			valorbusqueda=traslado[0]
			id_tipo_documento_entrada=traslado[3]
			id_tipo_concepto_entradaDV=traslado[4]
			quehace.append("LLega hasta antes de llamar el movimiento contable")
			quehace.append("Ejecuta el movimiento con la siguiente naturaleza: "+asiento.naturaleza+" en la sguiente fecha: "+str(fechaEjecucion))
			idmovcontab=ejecutaMovimientoGrupoInventarioTrasladoCON(asiento,iddocumento,idcad,vigencia,cen_op,cia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV)
	return idgen

#--Metodo que ejecuta el movimiento del inventario
#--Entrada:
#---idCAD: Id del consecutivo del CAD
#---fechaEjecucion: Fecha de ejecucion del CAD
#---inventarioDV: Movimientos de Inventario DV
#---tipo_comprobante: Id del tipo del comprobante
#---paqueteCompletoDatos:Variable que regula si la ejecucion es por anulacione so si es el paquete completo de datos
#--Salida:
#---id_cad: id del consecutivo de CAD aumentado de acuerdo al movimiento
def ejecutaMovimientoInventarioSalidaDV(idCAD,fechaEjecucion,inventarioDV,tipo_comprobante,paqueteCompletoDatos):
	cadssininfo=[]
	#--Cantidad de CAD ejecutados
	cuantosejecutados=0
	#--Id del consecutivo de movimiento
	id_cad=idCAD
	#--Fecha de ejecucion
	now = fechaEjecucion
	#--Vigencia del movimiento
	vigencia = now.year
	#--Mes del movimiento
	me=now.month
	#--Id del centro de operacion
	cen_op=id_cen_op
	#--Id de la compañia
	cia=id_cia
	#--Se traspasa la fecha a String para facilidad en la insercion
	fecha=str(now)
	#--Periodo contable de ejecucion, para insercion de CAD
	periodo_contable=now.month
	#--Total debito y credito para la insercion del CAD
	totcredito=0
	totdebito=0
	#--Variable que maneja la ejecucion
	ejecucion=-3
	#--20140428 - Modificacion,Concepto a utilizar
	conceptosEvaluados=[]
	#--Id de busqueda de movimiento
	idbusqueda="ID_MOVIMIENTOS_DV"
	#--Itera sobre los conceptos
	for concepto in conceptos:
		#--Itera sobre los movimientos para saber si hay de acuerdo al concepto entradas
		for inventario in inventarioDV:
			#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
			verificaMaeter(inventario[9])
			logger_saves.info("Verifica si el concepto establecido y la salida son iguales para ejecutar:")
			logger_saves.info("Concepto Salida: "+str(inventario[4]))
			logger_saves.info("Tipo concepto salida "+str(type(inventario[4])))
			logger_saves.info("Concepto Parametrizado: "+str(concepto.id_concepto_generico))
			logger_saves.info("Tipo concepto Parametrizado "+str(type(concepto.id_concepto_generico)))
			queryBusquedaConcepto="SELECT id_concepto_generico from ic_concepto where id_concepto_generico="+str(inventario[4])+" and id_transaccion_id="+str(id_transaccion)
			cursormodulocontabilidad.execute(queryBusquedaConcepto)
			datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
			if datosConceptosParametrizadas is None:
				try:
					idsconceptosfaltantes.index(str(inventario[4])+"|"+str(transaccion.nombre))
				except Exception, e:
					idsconceptosfaltantes.append(str(inventario[4])+"|"+str(transaccion.nombre))
				cache.set("error", -1) 
			#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
			if cen_op is None or cen_op==0:
				cen_op=inventario[2]
			if inventario[4]==int(concepto.id_concepto_generico):
				#--Consulta si existe un CAD ya creado en la fecha y con el tipo establecido
				buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+"AND ID_CEN_OP="+str(cen_op)
				cursormodulocontabilidad.execute(buscacad)
				existecad=cursormodulocontabilidad.fetchall()
				#--Verifica si existe CAD en la fecha y de acuerdo al centro de operacion 
				if len(existecad)==0:
					#--Ingresa el CAD correspondiente al movimiento de inventario
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					datosCAD=(id_cad,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaEjecucion,0,0,'','','')
					cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosCAD)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear CAD")
						logger_saves.error(datosCAD)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresCads.append(errorConexion)
						cache.set("error", -1)
					#--Ingresa el id del CAD en el contenedor de los CADS ejecutados
					idscadsejecutados.append(str(id_cad)+","+str(vigencia))
					#--Ingresa el valor del nuevo CAD
					idcad=id_cad
					#--Aumenta la variable de consecutivo de CAD
					id_cad+=1
				else:
					#--Captura el valor del CAD para verificar si ya fue operado
					cadexistente=existecad[0]
					cadexistente=cadexistente[0]
					#--Manejo de excepcion para corroborar si se debe o no blanquear la base de datos 
					try:
						#--Se busca la posición de los indices de las variables que se estan recorriendo
						#--Si no lo encuentra la anexa, no permite replicas
						#--20140224 - MOdificacion, se hace la busqueda sobre el array general de CADS para verificar que no se repite el ingreso y los casos en que debe blanquear
						posicion=idscadsejecutados.index(str(cadexistente)+","+str(vigencia))
					except:
						#--Si no encuentra Index, procede a ingresar el valor de la variable
						#--Elimina los movimientos y los documentos creados con anterioridad
						#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
						if id_movimiento_ejecutado is not None:
							eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
						else:
							eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)
						cursormodulocontabilidad.execute(eliminamovimientos)
						#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
						if id_movimiento_ejecutado is not None:
							eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
						else:
							eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)
						cursormodulocontabilidad.execute(eliminadocumentos)
						#--Agrega el id del CAD
						cadssininfo.append(cadexistente)
						#--Ingresa el id del CAD a ejecutar
						idscadsejecutados.append(str(cadexistente)+","+str(vigencia))
					#--Ingresa el valor del nuevo CAD
					idcad=cadexistente
				#--Ingresa el numero de documento
				iddocumento=inventario[0]
				#--Ingresa la vigencia
				id_vigencia=vigencia
				#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
				if cen_op is None or cen_op==0:
					cen_op=inventario[2]
				cen_op_busqueda=inventario[2]
				#--Ingresa el centro de operaciones en el cual quedo
				idcenop=cen_op
				#--Id de la compañia que ejecuta
				idcia=cia
				#--Id del maestro de terceros que ejecuto la salida
				id_maeter=inventario[9]
				#--Variable que maneja las anulaciones
				anula=0
				#--Captura el concepto para inventario de salida devolutivos
				id_tipo_concepto_salida=Tabla_Propiedades.objects.get(nombre="CONCEPTO_INVENTARIO_SALIDA_DV")
				id_tipo_concepto_salida=id_tipo_concepto_salida.valor
				#--Variable de control de ejecucion
				ejecucion=1
				#--Inserta el documento correspondiente al movimiento
				#--20140224 - Modificacion, Verifica que el documento exista para no repetirlo, de lo contrario lo crea
				sqlbuscadocumentoentrada="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(idcad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(inventario[0])
				cursormodulocontabilidad.execute(sqlbuscadocumentoentrada)
				existedocumentoentrada=cursormodulocontabilidad.fetchall()
				#--20140224 - Modificacion, Se evalua si existe o no el documento para ingresarlo, esto con el fin que no se repita el ingreso
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				if len(existedocumentoentrada)==0:
					if(paqueteCompletoDatos==0):
						datosDocumento=(inventario[0],idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,"'ANULADO - "+concepto.descripcion+"'",iddocumento,fechaEjecucion,0,0)
					else:
						datosDocumento=(inventario[0],idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,"'"+concepto.descripcion+"'",iddocumento,fechaEjecucion,0,0)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Filtra los asientos correspondientes al concepto seleccionado
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				for asiento in asientosconcepto:
					logger_saves.info("Nombre del asiento a operar: "+asiento.nombre)
					#--20140219 - Modificacion, Se Agrega codigo para cambiar la naturaleza del movimiento y asi generar los ingresos necesarios anulados.
					if(paqueteCompletoDatos==0):
						if asiento.naturaleza == "C":
							asiento.naturaleza="D"
						else:
							asiento.naturaleza="C"
						fechabusqueda='FECHA_ANU'
					else:
						fechabusqueda='FECHA_MOV'
					#--20140219 - Modificacion, Se agrega la anulacion para que haga ejecucion normal
					anula=0
					#--Captura el campo valor correspondiente
					campovalor=asiento.id_campo_valor
					#--Ingresa el modelo de la tabla
					tabla=campovalor.id_tabla
					#--Captura el nombre de la tabla
					nombretabla=tabla.nombre
					#--Captura la formula si existe
					formu=asiento.formula
					#--20140219, Modificacion se desactiva para ver la ejecucion con cambio de naturaleza
					#--estadofactura=inventario[14]
					#--if estadofactura==1:
					#--	fechaanulacion=inventario[15].date()
					#--	mesanulacion=fechaanulacion.month
					#--	anioanulacion=fechaanulacion.year
					#--	if(mesanulacion==me and anioanulacion==vigencia):
					#--		anula=1
					#--	else:
					#--		anula=0
					#--Captura el valor de la busqueda
					valorbusqueda=inventario[0]
					#--Captura el documento de salida
					id_tipo_documento_entrada=inventario[3]
					#--Captura el concepto de salida
					id_tipo_concepto_entradaDV=inventario[4]
					#--Valida si usa o no grupo para ejecucion
					if(asiento.usa_grupo==1):
						#--Ejecuta movimiento con grupo
						ejecutaMovimientoGrupoInventarioSalidasDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda)
					else:
						ejecutaMovimientoNoGrupoInventarioSalidasDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda)
	#--Devuelve el consecutivo de ingreso de CAD
	return id_cad
#--Metodo que ejecuta el movimiento del inventario
#--Entrada:
#---idgen: Id del consecutivo del CAD
#---fechaEjecucion: Fecha de ejecucion del CAD
#---trasladosFecha: Movimientos de Inventario DV
#---tipo_comprobante: Id del tipo del comprobante
#---paqueteCompletoDatos:Variable que regula si la ejecucion es por anulacione so si es el paquete completo de datos
#--Salida:
#---id_cad: id del consecutivo de CAD aumentado de acuerdo al movimiento
def ejecutaMovimientoInventarioTrasladoDV(fechaEjecucion,trasladosFecha,idgen,tipo_comprobante,paqueteCompletoDatos):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Empieza movimiento de traslado")
	cadssininfo=[]
	#--Cnatidad de cads ejecutados
	smovbanctrabajar=[]
	#--Numero de cads ejecutados
	cuantosejecutados=0
	#--Fecha de ejecucion
	now = fechaEjecucion
	#--Vigencia actual
	vigencia = now.year
	#--Peridod a trabajar
	periodo_contable=now.month
	me=now.month
	#--Centro de operacion
	cen_op=id_cen_op
	#--Id de la compañia
	cia=id_cia
	#--Cuadra fecha como objeto para trabajar
	fecha=str(now)
	#--Variable que maneja la ejecucion del sistema
	ejecucion=-3
	#--Setea el id del centro de operacion para manejo interno
	idcenop=0
	#--Cuadra variables de debito y credito para creacion de CADS
	totcredito=0
	totdebito=0
	#--Variable que cuiadra si se debe eliminar algun dato
	eliminadato=0
	#--Consulta consecutivos para los CADS
	consultaconsecutivomov="SELECT SEQ FROM CN_TABLE_VIG_SEQ WHERE ID_VIGENCIA="+str(vigencia)+"AND NOM_ENTIDAD='CN_MOVIMIENTO_CONTABLE'"
	cursormodulocontabilidad.execute(consultaconsecutivomov)
	idmovcontab=cursormodulocontabilidad.fetchone()
	#--Cuadra el CAD mas uno para empezar el proceso de ingreso en caso que sea nuevo
	idmovcontab=idmovcontab[0]+1
	#--Setea el id de busqueda de acuerdo a la tabla seleccionada
	idbusqueda="ID_MOVIMIENTOS_DV"
	#--20140508 - Modificacion, se cuadra la transaccion para que maneje conceptos
	for traslado in trasladosFecha:
		#--20140508 - Modificacion, se verifica que el usuario exista o si no se crea
		verificaMaeter(traslado[9])
		queryBusquedaConcepto="SELECT id_concepto_generico,id_concepto from ic_concepto where id_concepto_generico="+str(traslado[4])+" and id_transaccion_id="+str(id_transaccion)
		cursormodulocontabilidad.execute(queryBusquedaConcepto)
		datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
		if datosConceptosParametrizadas is None:
			try:
				idsconceptosfaltantes.index(str(traslado[4])+"|"+str(transaccion.nombre))
			except Exception, e:
				idsconceptosfaltantes.append(str(traslado[4])+"|"+str(transaccion.nombre))
				cache.set("error", -1)
		else:
			#--Setea el documento
			iddocumento=traslado[0]
			#--Setea la vigencia
			id_vigencia=vigencia
			#--Setea la compañia
			idcia=cia
			#--Setea el maetsro de terceros
			id_maeter=user
			#--Variable que revisa el estado para anular o no
			anula=0
			#--Consulta el concepto del traslado
			id_tipo_concepto_traslado=Tabla_Propiedades.objects.get(nombre="CONCEPTO_INVENTARIO_TRASLADO_DV")
			id_tipo_concepto_traslado=id_tipo_concepto_traslado.valor
			#--Consulta los conceptos de la operacion
			concepto=Concepto.objects.get(id_concepto=int(datosConceptosParametrizadas[1]))
			#--Variable que maneja la ejecucion
			ejecucion=1
			#--Consulta los asientos en la transaccion
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			#20140313, Modificacion - Busca la contrapartida a nivel regional en caso que se aplique
			logger_saves.info("Revisa si el traslado es Regional o no, de acuerdo a eso activa el código para la contrapartida")
			consultaRegional="SELECT TRASLADO_REGIONAL FROM IN_CONCEPTO_MOVIMIENTO WHERE ID_CONCEPTO_MOVIMIENTO="+str(traslado[4])
			cursormoduloconexion.execute(consultaRegional)
			movimientoRegional=cursormoduloconexion.fetchone()
			logger_saves.info("Dato si contiene o no asiento regional")
			logger_saves.info(movimientoRegional)
			if int(movimientoRegional[0])==1:
				asientoRegional=1
			else:
				asientoRegional=None
			for asiento in asientosconcepto:
				#--Comienza a recorrer los asientos y va creando CAD para cada uno de los movimientos
				#--20140219 - Modificacion, Se agrega la anulacion para que haga ejecucion normal
				anula=0
				#--Verifica si la entrada es Debito o Credito para setear los valores
				if asiento.naturaleza == "D":
					#--Toma el centro de operaciones final
					#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
					if cen_op is None or cen_op==0:
						cen_op=traslado[20]
					cen_op_busqueda=traslado[20]
					logger_saves.info("Centro de Operación que entra en Debito para busqueda: "+str(cen_op_busqueda)+" Centro de operación Movimiento: "+str(cen_op))
					#2010312 - Modificacion, Se agrega aca el centro de operacion para hacer la ejecucion, esto con el fin de nivelar los CADS quie son entre regionales
					tipoCentroOperacion="id_cen_op_fin"
					#2010312 - Modificacion, Se agrega aca el tipo de almacenamiento para hacer la ejecucion, esto con el fin de nivelar los CADS quie son entre regionales
					tipoAlmacenamiento="id_tipo_almacenamiento_fin"
					#--Busca el CAD
					buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fecha)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+" AND ID_CEN_OP="+str(cen_op)
					logger_saves.info("Selecciona a ver si existe el CAD")
					logger_saves.info(buscacad)
					cursormodulocontabilidad.execute(buscacad)
					existecad=cursormodulocontabilidad.fetchone()
					#--Revisa si existe o no el CAD, si no existe lo genera
					if existecad is None:
						#--Toma el valor del CAD para generarlo
						idcad=idgen
						#--Inserta el CAD
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaEjecucion,0,0,'','','')
						cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
						try:
							cursormodulocontabilidad.execute(None,datosCAD)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al crear CAD")
							logger_saves.error(datosCAD)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresCads.append(errorConexion)
							cache.set("error", -1)
						#--Aumenta la variable del CAD Nuevo
						idgen=idgen+1
					else:
						#--Coloca el valor del CAD existente
						idcad=existecad[0]
				else:
					#--Toma el centro de operaciones inicial
					#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
					if cen_op is None or cen_op==0:
						logger_saves.info("Setea al valor del centro de operacion por credito")
						cen_op=traslado[2]
					cen_op_busqueda=traslado[2]
					logger_saves.info("Centro de Operación que entra en Credito para busqueda: "+str(cen_op_busqueda)+" Centro de operación Movimiento: "+str(cen_op))
					#2010312 - Modificacion, Se agrega aca el tipo de operacion para hacer la ejecucion, esto con el fin de nivelar los CADS quie son entre regionales
					tipoCentroOperacion="id_cen_op"
					#2010312 - Modificacion, Se agrega aca el tipo de almacenamiento para hacer la ejecucion, esto con el fin de nivelar los CADS quie son entre regionales
					tipoAlmacenamiento="id_tipo_almacenamiento_ini"
					#--Busca el CAD
					buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fecha)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+" AND ID_CEN_OP="+str(cen_op)
					cursormodulocontabilidad.execute(buscacad)
					existecad=cursormodulocontabilidad.fetchone()
					#--Revisa si existe o no el CAD, si no existe lo genera
					if existecad is None:
						#--Toma el valor del CAD para generarlo
						idcad=idgen
						#--Inserta el CAD
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosCAD=(idgen,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaEjecucion,0,0,'','','')
						cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
						try:
							cursormodulocontabilidad.execute(None,datosCAD)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al crear CAD")
							logger_saves.error(datosCAD)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresCads.append(errorConexion)
							cache.set("error", -1)
						#--Aumenta la variable del CAD Nuevo
						idgen=idgen+1
					else:
						#--Coloca el valor del CAD existente
						idcad=existecad[0]
				idscadsejecutados.append(str(idcad)+","+str(vigencia))
				logger_saves.info("Id de los cads a ejecutar")
				logger_saves.info(idcad)
				logger_saves.info("Naturaleza del asiento: "+asiento.naturaleza)
				logger_saves.info("Centro de operaciones "+str(cen_op))
				#--Ingresa el numero de documento
				iddocumento=traslado[0]
				#--Ingresa la vigencia
				id_vigencia=vigencia
				#--Id de la compañia que ejecuta
				idcia=cia
				#--Id del maestro de terceros que ejecuto la entrada
				id_maeter=traslado[9]
				#--Consulta documento para saber si existe o no
				consultadocumento="SELECT * FROM CN_DOCUMENTO WHERE ID_CAD="+str(idcad)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_CEN_OP="+str(cen_op)+" AND ID_CIA="+str(cia)+" AND FECHA_SOPORTE=to_date('"+fecha+"','YYYY-MM-DD') AND ID_DOCUMENTO="+str(iddocumento)
				cursormodulocontabilidad.execute(consultadocumento)
				existedocumento=cursormodulocontabilidad.fetchone()
				#--Verifica existencia del documento, si no existe y lo genera
				if existedocumento is None:
					#--Genera el documento para el movimiento
					#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
					if(paqueteCompletoDatos==0):
						desc=str(traslado[19])
						desc="ANULADO - "+desc
						desc=(desc[:253] + '..') if len(desc) > 256 else desc
						datosDocumento=(traslado[0],idcad,vigencia,cen_op,cia,concepto.id_tipo_documento,id_maeter,desc,traslado[5],fechaEjecucion,0,0)
					else:
						if str(traslado[19]) is None:
							desc=" "
						else:
							desc=str(traslado[19])
						desc=(desc[:253] + '..') if len(desc) > 256 else desc
						datosDocumento=(traslado[0],idcad,vigencia,cen_op,cia,concepto.id_tipo_documento,id_maeter,desc,traslado[5],fechaEjecucion,0,0)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
					#--Setea el id del documento
					iddocumento=traslado[0]
				else:
					#--20140811 - Modificación - Si existe el documento y viene por anulación, se actualiza el dosumento para que tome la descripción
					#--de la anulación.
					#--Verifica si viene por anulación
					if(paqueteCompletoDatos==0):
						#--Verifica si las fechas son iguales para cambiar el estado del documento de lo contrario lo deja como esta
						if traslado[21]==traslado[15]:
							logger_saves.info("Las fecha son iguales")
							#--Toma la descripción del documento
							desc=str(traslado[19])
							#--Setea el valor de anulado
							desc="ANULADO - "+desc
							#--Verifica que la descipción no pase del tamaño establecido del campo, si no la resume con puntos suspensivos
							desc=(desc[:253] + '..') if len(desc) > 256 else desc
							#--Actualiza el campo
							cursormodulocontabilidad.execute("UPDATE CN_DOCUMENTO SET DESCR_MTO='"+str(desc)+"' WHERE ID_DOCUMENTO="+str(existedocumento[0]))
					#--Toma el id del documento existente
					iddocumento=existedocumento[0]
				#--Setea el objetoc on el campo valor
				campovalor=asiento.id_campo_valor
				#--Setea el valor con la tabla
				tabla=campovalor.id_tabla
				#--Captura el nombre de la tabla pertinente
				nombretabla=tabla.nombre
				#--Captura la formula en caso de haberla
				formu=asiento.formula
				#--Verifica si existe formula, si existe la evalua
				#--20140509 - Modificacion, se invalida la evaluacion de la formula, en la parte de ejecucion se debe validar para saber que camino tomar.
				#--if len(formu)!=0:
					#--Evalua formula
					#evaluacion=evaluaFuncion(formu,iddocumento)
				#--else:
					#--Invalida la formula para no ser evaluada
				evaluacion=None
				#--Revisa si el documento esta o no anulado	
				estadofactura=traslado[14]
				#--20140219, Modificacion se desactiva para ver la ejecucion con cambio de naturaleza
				#--if estadofactura==1:
					#--Toma la fecha de anulacion
					#--fechaanulacion=traslado[15].date()
					#--Toma el mes de anulacion
					#--mesanulacion=fechaanulacion.month
					#--Toma el dia de anulacion
					#--anioanulacion=fechaanulacion.year
					#--Verifica si la fecha esta en el rango para anular
					#--if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulacion
						#--anula=1
					#--else:
						#--No Activa la anulacion
						#--anula=0
				#--Toma el parametro de busqueda
				valorbusqueda=traslado[0]
				#--Setea el tipo de documento de entrada
				id_tipo_documento_entrada=traslado[3]
				#--Setea el concepto
				id_tipo_concepto_entradaDV=traslado[4]
				#--20140219 - Modificacion, Se Agrega codigo para cambiar la naturaleza del movimiento y asi generar los ingresos necesarios anulados.
				if(paqueteCompletoDatos==0):
					if asiento.naturaleza == "C":
						asiento.naturaleza="D"
					else:
						asiento.naturaleza="C"
					fechabusqueda='FECHA_ANU'
				else:
					fechabusqueda='FECHA_MOV'
				#--20140521 - MOdificacion, revisa si el concepto no contiene regional ejecuta normal, si lo contiene hace la ejecución con el ajuste en regionales
				logger_saves.info("Valor que contiene el asiento Regional")
				logger_saves.info(asientoRegional)
				if asientoRegional is None:
					#--Ejecuta el movimiento
					if(asiento.usa_grupo==1):
						ejecutaMovimientoGrupoInventarioTrasladoDV(asiento,iddocumento,idcad,vigencia,cen_op,cia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda)
					else:
						ejecutaMovimientoNoGrupoInventarioTrasladoDV(asiento,iddocumento,idcad,vigencia,cen_op,cia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda)
				else:
					logger_saves.info("Número de movimiento: "+str(traslado[0]))
					logger_saves.info("Nombre del asiento en regional: "+asiento.nombre)
					asientoRegional=Asiento.objects.get(usa_grupo=0,id_concepto_id=concepto.id_concepto)
					logger_saves.info("Ejecuta por movimiento de traslados")
					logger_saves.info("Id del asiento que viene "+str(asiento.id_asiento))
					logger_saves.info("Id del asiento regional "+str(asientoRegional.id_asiento))
					#20140313, Modificacion - Revisa que el id del asiento sea diferente al regional para ejecutar los movimientos
					if(asiento.id_asiento!=asientoRegional.id_asiento):
						#--Ejecuta el movimiento
						if(asiento.usa_grupo==1):
							ejecutaMovimientoGrupoInventarioTrasladoDV(asiento,iddocumento,idcad,vigencia,cen_op,cia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda)
						else:
							ejecutaMovimientoNoGrupoInventarioTrasladoDV(asiento,iddocumento,idcad,vigencia,cen_op,cia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda)
						#20140313, Modificacion - Verifica si el centro de operaciones principal y final son diferentes para asumir que es un traslado regional
						if traslado[2]!=traslado[20]:
							#20140313, Modificacion - Cambia la naturaleza del traslado regional de acuerdo a la entrada principal
							if(asiento.naturaleza == "D"):
								asientoRegional.naturaleza="C"
							else:
								asientoRegional.naturaleza="D"
							#20140313, Modificacion - Ejecuta el movimiento con el asiento para traslado regional
							ejecutaMovimientoNoGrupoInventarioTrasladoDV(asientoRegional,iddocumento,idcad,vigencia,cen_op,cia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda)
				#--20140521 - Modificacion, Se setea otra vez el valor del centro de operacion, para que contenga el que viene originalmente, esto
				#--Con el fin que compare d emanera efectiva sobre que centro de operación esta ejecutando
				cen_op=id_cen_op
			logger_saves.info("Ejecuta movimiento traslado ya que encontro el concepto, id del movimiento: "+str(iddocumento))
			logger_saves.info("\n")
	return idgen
def ejecutaMovimientoRegalias(idCAD,fechaEjecucion,regaliasFecha):
	quehace.append("Entra a ejecutar el movimiento contable")
	tsmovbanctrabajar=[]
	cuantosejecutados=0
	id_cad=idCAD
	now = fechaEjecucion
	vigencia = now.year
	me=now.month
	cen_op=id_cen_op
	cia=id_cia
	fecha=str(now)
	ejecucion=-3
	idbusqueda="ID_DEBITO"
	for regalias in regaliasFecha:
		iddocumento=regalias[0]
		idcad=id_cad
		id_vigencia=vigencia
		idcenop=cen_op
		idcia=cia
		id_maeter=user
		anula=0
		for concepto in conceptos:
			ejecucion=1
			sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES("+str(regalias[0])+",'"+str(id_cad)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+user+"','"+concepto.descripcion+"','',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
			cursormodulocontabilidad.execute(sqlinserciondocumento)
			iddocumento=regalias[0]
			idcad=id_cad
			id_vigencia=vigencia
			idcenop=cen_op
			idcia=cia
			id_maeter=user
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			for asiento in asientosconcepto:
				campovalor=asiento.id_campo_valor
				tabla=campovalor.id_tabla
				nombretabla=tabla.nombre
				formu=asiento.formula
				if len(formu)!=0:
					evaluacion=evaluaFuncion(formu,iddocumento)
				else:
					evaluacion=None
				estadofactura=regalias[14]
				if estadofactura==0:
					fechaanulacion=regalias[15].date()
					mesanulacion=fechaanulacion.month
					anioanulacion=fechaanulacion.year
					if(mesanulacion==me and anioanulacion==vigencia):
						anula=1
				else:
					anula=0
				if(asiento.usa_grupo==1):
					ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
				else:
					ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)	

#--Metodo que ejecuta el movimiento del inventario
#--Entrada:
#---idCAD: Id del consecutivo del CAD
#---fechaEjecucion: Fecha de ejecucion del CAD
#---inventarioDV: Movimientos de Inventario DV
#---tipo_comprobante: Id del tipo del comprobante
#---paqueteCompletoDatos:Variable que regula si la ejecucion es por anulacione so si es el paquete completo de datos
#--Salida:
#---id_cad: id del consecutivo de CAD aumentado de acuerdo al movimiento
def ejecutaMovimientoInventarioDV(idCAD,fechaEjecucion,inventarioDV,tipo_comprobante,paqueteCompletoDatos):
	cadssininfo=[]
	#--Cantidad de CAD ejecutados
	cuantosejecutados=0
	#--Id del consecutivo de movimiento
	id_cad=idCAD
	#--Fecha de ejecucion
	now = fechaEjecucion
	#--Vigencia del movimiento
	vigencia = now.year
	#--Mes del movimiento
	me=now.month
	#--Id del centro de operacion
	cen_op=id_cen_op
	#--Id de la compañia
	cia=id_cia
	#--Se traspasa la fecha a String para facilidad en la insercion
	fecha=str(now)
	#--Periodo contable de ejecucion, para insercion de CAD
	periodo_contable=now.month
	#--Total debito y credito para la insercion del CAD
	totcredito=0
	totdebito=0
	#--Variable que maneja la ejecucion
	ejecucion=-3
	#--Id de busqueda de movimiento
	idbusqueda="ID_MOVIMIENTOS_DV"
	#--Recorre las entradas de inventario para hacer las inserciones
	for inventario in inventarioDV:
		#--20140508 - Modificacion, se verifica que el usuario exista o si no se crea
		verificaMaeter(inventario[9])
		queryBusquedaConcepto="SELECT id_concepto_generico,id_concepto from ic_concepto where id_concepto_generico="+str(inventario[4])+" and id_transaccion_id="+str(id_transaccion)
		logger_saves.info("Query de busqueda de concepto: ")
		logger_saves.info(queryBusquedaConcepto )
		cursormodulocontabilidad.execute(queryBusquedaConcepto)
		datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
		logger_saves.info("Datos del concepto seleccionado")
		logger_saves.info(datosConceptosParametrizadas)
		if datosConceptosParametrizadas is None:
			try:
				idsconceptosfaltantes.index(str(inventario[4])+"|"+str(transaccion.nombre))
			except Exception, e:
				idsconceptosfaltantes.append(str(inventario[4])+"|"+str(transaccion.nombre))
				cache.set("error", -1)
		else:
			#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
			logger_saves.info("Id del centro de operacion con el que opera: "+str(cen_op))
			if cen_op is None or cen_op==0:
				cen_op=inventario[20]
			cen_op_busqueda=inventario[20]
			logger_saves.info("Id del centro de operacion con el que opera: "+str(cen_op))
			#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
			verificaMaeter(inventario[9])
			#--Consulta si existe un CAD ya creado en la fecha y con el tipo establecido
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+"AND ID_CEN_OP="+str(cen_op)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchall()
			#--Verifica si existe CAD en la fecha y de acuerdo al centro de operacion
			if len(existecad)==0:
				#--Ingresa el CAD correspondiente al movimiento de inventario
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosCAD=(id_cad,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaEjecucion,0,0,'','','')
				cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursormodulocontabilidad.execute(None,datosCAD)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear CAD")
					logger_saves.error(datosCAD)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresCads.append(errorConexion)
					cache.set("error", -1)
				#--Ingresa el id del CAD en el contenedor de los CADS ejecutados
				idscadsejecutados.append(str(id_cad)+","+str(vigencia))
				#--Ingresa el valor del nuevo CAD
				idcad=id_cad
				#--Aumenta la variable de consecutivo de CAD
				id_cad+=1
			else:
				#--Captura el valor del CAD para verificar si ya fue operado
				cadexistente=existecad[0]
				cadexistente=cadexistente[0]
				#--Manejo de excepcion para corroborar si se debe o no blanquear la base de datos 
				try:
				    #--Se busca la posición de los indices de las variables que se estan recorriendo
					#--Si no lo encuentra la anexa, no permite replicas
					#--20140224 - MOdificacion, se hace la busqueda sobre el array general de CADS para verificar que no se repite el ingreso y los casos en que debe blanquear
					posicion=idscadsejecutados.index(str(cadexistente)+","+str(vigencia))
					idcad=cadexistente
				except:
					#--Si no encuentra Index, procede a ingresar el valor de la variable
					#--Elimina los movimientos y los documentos creados con anterioridad
					#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
					if id_movimiento_ejecutado is not None:
						eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
					else:
						eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)
					try:
							cursormodulocontabilidad.execute(eliminamovimientos)
					except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al eliminar Movimientos Contables")
							logger_saves.error(eliminamovimientos)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al eliminar Movimientos Contables|"+str(eliminamovimientos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresGeneral.append(errorConexion)
							cache.set("error", -1)
							break
					#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
					if id_movimiento_ejecutado is not None:
						eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
					else:
						eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)
					try:
						cursormodulocontabilidad.execute(eliminadocumentos)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(eliminadocumentos)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(eliminadocumentos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--Agrega el id del CAD
					cadssininfo.append(cadexistente)
					#--Ingresa el id del CAD a ejecutar
					idscadsejecutados.append(str(cadexistente)+","+str(vigencia))
				#--Ingresa el valor del nuevo CAD
				idcad=cadexistente
			#--Ingresa el numero de documento
			iddocumento=inventario[0]
			#--Ingresa la vigencia
			id_vigencia=vigencia
			#--Ingresa el centro de operaciones en el cual quedo
			idcenop=cen_op
			#--Id de la compañia que ejecuta
			idcia=cia
			#--Id del maestro de terceros que ejecuto la entrada
			id_maeter=inventario[9]
			#--Variable que maneja las anulaciones
			anula=0
			#--Captura el concepto para inventario de entrada devolutivos
			id_tipo_concepto_entrada=Tabla_Propiedades.objects.get(nombre="CONCEPTO_INVENTARIO_ENTRADA_DV")
			id_tipo_concepto_entrada=id_tipo_concepto_entrada.valor
			logger_saves.info("Concepto")
			logger_saves.info("Id con el que hace la busqueda del concepto ")
			logger_saves.info(id_tipo_concepto_entrada)
			#--Filtra los conceptos que pertecen a inventario de entrada devolutivos
			concepto=Concepto.objects.get(id_concepto=datosConceptosParametrizadas[1])
			#--Inserta el documento correspondiente al movimiento
			#--20140224 - Modificacion, Verifica que el documento exista para no repetirlo, de lo contrario lo crea
			sqlbuscadocumentoentrada="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(idcad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(idcenop)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(inventario[0])
			cursormodulocontabilidad.execute(sqlbuscadocumentoentrada)
			existedocumentoentrada=cursormodulocontabilidad.fetchall()
			#--20140224 - Modificacion, Se evalua si existe o no el documento para ingresarlo, esto con el fin que no se repita el ingreso
			if len(existedocumentoentrada)==0:
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				if(paqueteCompletoDatos==0):
					desc=str(inventario[19])
					desc="ANULADO - "+desc
					desc=(desc[:253] + '..') if len(desc) > 256 else desc
					datosDocumento=(inventario[0],idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,desc,inventario[5],fechaEjecucion,0,0)
				else:
					if str(inventario[19]) is None:
						desc=" "
					else:
						desc=str(inventario[19])
					desc=(desc[:253] + '..') if len(desc) > 256 else desc
					datosDocumento=(inventario[0],idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,desc,inventario[5],fechaEjecucion,0,0)
				cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursormodulocontabilidad.execute(None,datosDocumento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear Documento")
					logger_saves.error(datosDocumento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresDocumentos.append(errorConexion)
					cache.set("error", -1)
			#--Filtra los asientos correspondientes al concepto seleccionado
			asientosconcepto=Asiento.objects.filter(id_concepto=datosConceptosParametrizadas[1])
			#--Recorre los asientos para ejecucion
			for asiento in asientosconcepto:
				#--20140219 - Modificacion, Se Agrega codigo para cambiar la naturaleza del movimiento y asi generar los ingresos necesarios anulados.
				if(paqueteCompletoDatos==0):
					if asiento.naturaleza == "C":
						asiento.naturaleza="D"
					else:
						asiento.naturaleza="C"
					fechabusqueda='FECHA_ANU'
				else:
					fechabusqueda='FECHA_MOV'
				#--20140219 - Modificacion, Se agrega la anulacion para que haga ejecucion normal
				anula=0
				#--Captura el campo valor correspondiente
				campovalor=asiento.id_campo_valor
				#--Ingresa el modelo de la tabla
				tabla=campovalor.id_tabla
				#--Ingresa el nombre de la tabla
				nombretabla=tabla.nombre
				#--Captura el nombre de la tabla
				formu=asiento.formula
				#--Verifica si existe o no formula para ejecutar la evaluacion de la misma
				if len(formu)!=0:
					evaluacion=evaluaFuncion(formu,iddocumento)
				else:
					evaluacion=None
				#--Captura la variable para saber si es una anulacion
				estadofactura=inventario[14]
				#--20140219, Modificacion se desactiva para ver la ejecucion con cambio de naturaleza
				#--if estadofactura==1:
					#--Toma la fecha de anulacion
					#--fechaanulacion=traslado[15].date()
					#--Toma el mes de anulacion
					#--mesanulacion=fechaanulacion.month
					#--Toma el dia de anulacion
					#--anioanulacion=fechaanulacion.year
					#--Verifica si la fecha esta en el rango para anular
					#--if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulacion
						#--anula=1
					#--else:
						#--No Activa la anulacion
						#--anula=0
				#--Captura el valor de la busqueda
				valorbusqueda=inventario[0]
				#--Captura el documento de entrada
				id_tipo_documento_entrada=inventario[3]
				#--Captura el concepto de entrada
				id_tipo_concepto_entradaDV=inventario[4]
				#--Valida si usa o no grupo para ejecucion
				if(asiento.usa_grupo==1):
					logger_saves.info("Ejecuta sobre Grupo")
					#--Ejecuta movimiento con grupo
					ejecutaMovimientoGrupoInventarioDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,cen_op_busqueda)
				else:
					logger_saves.info("Ejecuta sobre sin Grupo")
					ejecutaMovimientoNoGrupoInventarioDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda)
	#--Devuelve el consecutivo de ingreso de CAD
	return id_cad

#--Metodo que ejecuta el movimiento de entrada inventario CON
#--Entrada:
#---idCAD: Id del consecutivo del CAD
#---fechaEjecucion: Fecha de ejecucion del CAD
#---inventarioCON: Movimientos de Inventario CON
#---tipo_comprobante: Id del tipo del comprobante
#---paqueteCompletoDatos:Variable que regula si la ejecucion es por anulacione so si es el paquete completo de datos
#--Salida:
#---id_cad: id del consecutivo de CAD aumentado de acuerdo al movimiento
def ejecutaMovimientoInventarioCON(idCAD,fechaEjecucion,inventarioDV,tipo_comprobante,paqueteCompletoDatos):
	cadssininfo=[]
	#--Cantidad de CAD ejecutados
	cuantosejecutados=0
	#--Id del consecutivo de movimiento
	id_cad=idCAD
	#--Fecha de ejecucion
	now = fechaEjecucion
	#--Vigencia del movimiento
	vigencia = now.year
	#--Mes del movimiento
	me=now.month
	#--Id del centro de operacion
	cen_op=id_cen_op
	#--Id de la compañia
	cia=id_cia
	#--Se traspasa la fecha a String para facilidad en la insercion
	fecha=str(now)
	#--Periodo contable de ejecucion, para insercion de CAD
	periodo_contable=now.month
	#--Total debito y credito para la insercion del CAD
	totcredito=0
	totdebito=0
	#--Variable que maneja la ejecucion
	ejecucion=-3
	#--Id de busqueda de movimiento
	idbusqueda="ID_MOVIMIENTOS_CON"
	#--Recorre las entradas de inventario para hacer las inserciones
	for inventario in inventarioDV:
		#--20140508 - Modificacion, se verifica que el usuario exista o si no se crea
		verificaMaeter(inventario[9])
		queryBusquedaConcepto="SELECT id_concepto_generico,id_concepto from ic_concepto where id_concepto_generico="+str(inventario[4])+" and id_transaccion_id="+str(id_transaccion)
		logger_saves.info("Query de busqueda de concepto: ")
		logger_saves.info(queryBusquedaConcepto )
		cursormodulocontabilidad.execute(queryBusquedaConcepto)
		datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
		logger_saves.info("Datos del concepto seleccionado")
		logger_saves.info(datosConceptosParametrizadas)
		if datosConceptosParametrizadas is None:
			try:
				idsconceptosfaltantes.index(str(inventario[4])+"|"+str(transaccion.nombre))
			except Exception, e:
				idsconceptosfaltantes.append(str(inventario[4])+"|"+str(transaccion.nombre))
				cache.set("error", -1)
		else:
			#--20140507 - Modificacion - Se evalua el centro de operacion a ver si viene establecido o si se toma el que viene del recurso
			logger_saves.info("Id del centro de operacion con el que opera: "+str(cen_op))
			if cen_op is None or cen_op==0:
				cen_op=inventario[20]
			cen_op_busqueda=inventario[20]
			logger_saves.info("Id del centro de operacion con el que opera: "+str(cen_op))
			#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
			verificaMaeter(inventario[9])
			#--Consulta si existe un CAD ya creado en la fecha y con el tipo establecido
			buscacad="SELECT ID_CAD FROM CN_CONTROL_CAD WHERE FECHA_CAD=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_TIPO_COMPROBANTE="+str(tipo_comprobante)+"AND ID_CEN_OP="+str(cen_op)
			cursormodulocontabilidad.execute(buscacad)
			existecad=cursormodulocontabilidad.fetchall()
			#--Verifica si existe CAD en la fecha y de acuerdo al centro de operacion
			if len(existecad)==0:
				#--Ingresa el CAD correspondiente al movimiento de inventario
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosCAD=(id_cad,vigencia,int(cen_op),int(cia),periodo_contable,tipo_comprobante,fechaEjecucion,0,0,'','','')
				cursormodulocontabilidad.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursormodulocontabilidad.execute(None,datosCAD)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear CAD")
					logger_saves.error(datosCAD)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresCads.append(errorConexion)
					cache.set("error", -1)
				#--Ingresa el id del CAD en el contenedor de los CADS ejecutados
				idscadsejecutados.append(str(id_cad)+","+str(vigencia))
				#--Ingresa el valor del nuevo CAD
				idcad=id_cad
				#--Aumenta la variable de consecutivo de CAD
				id_cad+=1
			else:
				#--Captura el valor del CAD para verificar si ya fue operado
				cadexistente=existecad[0]
				cadexistente=cadexistente[0]
				#--Manejo de excepcion para corroborar si se debe o no blanquear la base de datos 
				try:
				    #--Se busca la posición de los indices de las variables que se estan recorriendo
					#--Si no lo encuentra la anexa, no permite replicas
					#--20140224 - MOdificacion, se hace la busqueda sobre el array general de CADS para verificar que no se repite el ingreso y los casos en que debe blanquear
					posicion=idscadsejecutados.index(str(cadexistente)+","+str(vigencia))
					idcad=cadexistente
				except:
					#--Si no encuentra Index, procede a ingresar el valor de la variable
					#--Elimina los movimientos y los documentos creados con anterioridad
					#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
					if id_movimiento_ejecutado is not None:
						eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
					else:
						eliminamovimientos="DELETE FROM CN_MOVIMIENTO_CONTABLE WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)
					try:
							cursormodulocontabilidad.execute(eliminamovimientos)
					except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al eliminar Movimientos Contables")
							logger_saves.error(eliminamovimientos)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al eliminar Movimientos Contables|"+str(eliminamovimientos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresGeneral.append(errorConexion)
							cache.set("error", -1)
							break
					#--20140520 - MOdificacion, Se valida si viene o no id de movimiento para restringir la busqueda a ese elemento o a los que vengan
					if id_movimiento_ejecutado is not None:
						eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)+" AND ID_DOCUMENTO="+id_movimiento_ejecutado
					else:
						eliminadocumentos="DELETE FROM CN_DOCUMENTO WHERE ID_CAD="+str(cadexistente)+" AND ID_VIGENCIA="+str(vigencia)
					try:
						cursormodulocontabilidad.execute(eliminadocumentos)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al eliminar Documentos")
						logger_saves.error(eliminadocumentos)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al eliminar Documentos|"+str(eliminadocumentos)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresGeneral.append(errorConexion)
						cache.set("error", -1)
						break
					#--Agrega el id del CAD
					cadssininfo.append(cadexistente)
					#--Ingresa el id del CAD a ejecutar
					idscadsejecutados.append(str(cadexistente)+","+str(vigencia))
				#--Ingresa el valor del nuevo CAD
				idcad=cadexistente
			#--Ingresa el numero de documento
			iddocumento=inventario[0]
			#--Ingresa la vigencia
			id_vigencia=vigencia
			#--Ingresa el centro de operaciones en el cual quedo
			idcenop=cen_op
			#--Id de la compañia que ejecuta
			idcia=cia
			#--Id del maestro de terceros que ejecuto la entrada
			id_maeter=inventario[9]
			#--Variable que maneja las anulaciones
			anula=0
			#--Captura el concepto para inventario de entrada devolutivos
			id_tipo_concepto_entrada=Tabla_Propiedades.objects.get(nombre="CONCEPTO_INVENTARIO_ENTRADA_CON")
			id_tipo_concepto_entrada=id_tipo_concepto_entrada.valor
			logger_saves.info("Concepto")
			#--Filtra los conceptos que pertecen a inventario de entrada devolutivos
			concepto=Concepto.objects.get(id_concepto=datosConceptosParametrizadas[1])
			#--Inserta el documento correspondiente al movimiento
			#--20140224 - Modificacion, Verifica que el documento exista para no repetirlo, de lo contrario lo crea
			sqlbuscadocumentoentrada="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(idcad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(idcenop)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(inventario[0])
			cursormodulocontabilidad.execute(sqlbuscadocumentoentrada)
			existedocumentoentrada=cursormodulocontabilidad.fetchall()
			#--20140224 - Modificacion, Se evalua si existe o no el documento para ingresarlo, esto con el fin que no se repita el ingreso
			if len(existedocumentoentrada)==0:
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				if(paqueteCompletoDatos==0):
					desc=str(inventario[19])
					desc="ANULADO - "+desc
					desc=(desc[:253] + '..') if len(desc) > 256 else desc
					datosDocumento=(inventario[0],idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,desc,inventario[5],fechaEjecucion,0,0)
				else:
					if str(inventario[19]) is None:
						desc=" "
					else:
						desc=str(inventario[19])
					desc=(desc[:253] + '..') if len(desc) > 256 else desc
					datosDocumento=(inventario[0],idcad,vigencia,idcenop,cia,concepto.id_tipo_documento,id_maeter,desc,inventario[5],fechaEjecucion,0,0)
				cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursormodulocontabilidad.execute(None,datosDocumento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear Documento")
					logger_saves.error(datosDocumento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresDocumentos.append(errorConexion)
					cache.set("error", -1)
			#--Filtra los asientos correspondientes al concepto seleccionado
			asientosconcepto=Asiento.objects.filter(id_concepto=datosConceptosParametrizadas[1])
			#--Recorre los asientos para ejecucion
			for asiento in asientosconcepto:
				#--20140219 - Modificacion, Se Agrega codigo para cambiar la naturaleza del movimiento y asi generar los ingresos necesarios anulados.
				if(paqueteCompletoDatos==0):
					if asiento.naturaleza == "C":
						asiento.naturaleza="D"
					else:
						asiento.naturaleza="C"
					fechabusqueda='FECHA_ANU'
				else:
					fechabusqueda='FECHA_MOV'
				#--20140219 - Modificacion, Se agrega la anulacion para que haga ejecucion normal
				anula=0
				#--Captura el campo valor correspondiente
				campovalor=asiento.id_campo_valor
				#--Ingresa el modelo de la tabla
				tabla=campovalor.id_tabla
				#--Ingresa el nombre de la tabla
				nombretabla=tabla.nombre
				#--Captura el nombre de la tabla
				formu=asiento.formula
				#--Verifica si existe o no formula para ejecutar la evaluacion de la misma
				if len(formu)!=0:
					evaluacion=evaluaFuncionInventario(formu,iddocumento,idbusqueda,id_vigencia,inventario[3])
				else:
					evaluacion=None
				logger_saves.info("Valor de la evaluación: ")
				logger_saves.info(evaluacion)
				#--Captura la variable para saber si es una anulacion
				estadofactura=inventario[14]
				#--20140219, Modificacion se desactiva para ver la ejecucion con cambio de naturaleza
				#--if estadofactura==1:
					#--Toma la fecha de anulacion
					#--fechaanulacion=traslado[15].date()
					#--Toma el mes de anulacion
					#--mesanulacion=fechaanulacion.month
					#--Toma el dia de anulacion
					#--anioanulacion=fechaanulacion.year
					#--Verifica si la fecha esta en el rango para anular
					#--if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulacion
						#--anula=1
					#--else:
						#--No Activa la anulacion
						#--anula=0
				#--Captura el valor de la busqueda
				valorbusqueda=inventario[0]
				#--Captura el documento de entrada
				id_tipo_documento_entrada=inventario[3]
				#--Captura el concepto de entrada
				id_tipo_concepto_entradaDV=inventario[4]
				#--Valida si usa o no grupo para ejecucion
				if(asiento.usa_grupo==1):
					logger_saves.info("Ejecuta sobre Grupo")
					#--Ejecuta movimiento con grupo
					ejecutaMovimientoGrupoInventarioCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,cen_op_busqueda)
				else:
					logger_saves.info("Ejecuta sobre sin Grupo")
					ejecutaMovimientoNoGrupoInventarioCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda,evaluacion)
	#--Devuelve el consecutivo de ingreso de CAD
	return id_cad


#--Metodo que cuadra la ejecución del movimiento contable para Nomina
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----periodoNomina: Datos sobre el periodo nomina
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoNomina(idCAD,fechaEjecucion,periodoNomina):
	#--Contenedor para manejo del personal administrativo
	listapersonaladmin=[]
	#--Contenedor para manejo del personal operativo
	listapersonalplanta=[]
	#--Id del periodo nomina para ejecucion
	periodoNomina=periodoNomina[0]
	#--Variable que maneja cuantos CADS se han ejecutado
	cuantosejecutados=0
	#--Variable que toma el id del CAD que esta en ese momento operando
	id_cad=idCAD
	#--Fecha de cierrre de nomina para manejo 
	now = periodoNomina[11].date()
	#--Variable que maneja la vigencia
	vigencia = now.year
	#--Variable que maneja el mes
	me=now.month
	#--Variable para manejar el centro de operacion
	cen_op=id_cen_op
	#--Variable que maneja el id de la compañia
	cia=id_cia
	#--Se cambia la fecha a string para manejo mas comodo de inserciones
	fecha=str(now)
	#--Variable que controla la ejecucion del movimiento
	ejecucion=-3
	#--Variable para manejar si crea el documento
	creadoc=0
	#--Id de busqueda en las tablas de nomina
	idbusqueda="ID_CONCEP_NOMINA"
	#--Id con el que se crea el documento y los movimientos contables
	iddocumento=periodoNomina[12]
	#--Id del cad para el manejo de documento
	idcad=id_cad
	#--Id de vigencia para el documento
	id_vigencia=vigencia
	#--Id del centro de operacion para el documento
	idcenop=cen_op
	#--Id de la compañia para el manejo dede documento
	idcia=cia
	#--Id del maestro de terceros
	id_maeter=user
	#--Variable que maneja las anulaciones
	anula=0
	#--Numero de documento 
	numdoc=0
	#--Busca en la tabla propiedades el id de tipo de funcionario, en este caso administrativo
	datoadmin=Tabla_Propiedades.objects.get(nombre="ID_TIPO_ADMIN")
	idpersonaladmin=datoadmin.valor
	#--Consulta en liquida nomina los movientos segun el periodo
	cursormoduloconexion.execute("SELECT * from NO_LIQUIDA_NOMINA WHERE ID_PERIODO="+str(periodoNomina[0]))
	personalnominaperiodo=cursormoduloconexion.fetchall()
	ini_proc=datetime.now()
	logger_saves.info("/*********************************************************************************/")
	logger_saves.error(" Inicia El total de proceso en: "+str(ini_proc))
	logger_saves.info("Recorre las depreciaciones")
	logger_saves.info("/*********************************************************************************/")
	#--Recorre los datos de la liquidacion de la nomina
	cont=1
	for personalnomina in personalnominaperiodo:
		#--Captura el documento de la persona a la que se le liquido nomina
		docpersona=personalnomina[2]
		#--Consulta con el documento la planta a la que pertenece
		cursormoduloconexion.execute("SELECT ID_CLASE_PLANTA from NO_NOMBRAMIENTO WHERE NUM_DOC="+str(docpersona))
		personalnominaperiodo=cursormoduloconexion.fetchone()
		#--Verifica a que tipo de planta pertenece
		if idpersonaladmin==str(personalnominaperiodo[0]):
			#--Si la persona pertenece a tipo admin, se ingresa en el contenedor de administrativos
			try:
				#--Se busca la posición de el documento que se esta evaluando, si no existe lo ingresa por el except,no permite replicas
				posicion=listapersonaladmin.index(docpersona)
			except:
			    #--Si no encuentra Index, procede a ingresar el valor del documento
			    listapersonaladmin.append(docpersona)
		else:
			#--Si la persona pertenece a tipo admin, se ingresa en el contenedor de administrativos
			try:
				#--Se busca la posición de el documento que se esta evaluando, si no existe lo ingresa por el except,no permite replicas
				posicion=listapersonalplanta.index(docpersona)
			except:
			    #--Si no encuentra Index, procede a ingresar el valor del documento
				listapersonalplanta.append(docpersona)
		cont=cont+1
	logger_saves.info("Listado de personas que se va a calcular:")
	logger_saves.info(personalnominaperiodo)
	logger_saves.info("Listado de personas del lado admin:")
	logger_saves.info(listapersonaladmin)
	logger_saves.info("Listado de personas del lado planta:")
	logger_saves.info(listapersonalplanta)
	#--Verifica que el listado de personal administrativo es mayor a cero
	if len(listapersonaladmin)>0:
		#--Consulta el id del concepto de nomina para ejecución
		idconceptoadmin=Tabla_Propiedades.objects.get(nombre="CONCEPTO_NOMINA_ADMIN")
		#--Variable que contiene el id del concepto de nomina para admin
		concepto = Concepto.objects.get(id_concepto=idconceptoadmin.valor)
		#--Validacion para ingresar solo un documento por ingreso
		#--Se corrige el codigo para que se cree un documento por cada persona a fin que sea mas facil el movimiento y la traza
		#---if numdoc != iddocumento:
		    #--Ingresa el documento para insertar los movimientos contables
		    #--sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES("+str(iddocumento)+",'"+str(id_cad)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+user+"','"+concepto.descripcion+"','',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
		    #--cursormodulocontabilidad.execute(sqlinserciondocumento)
		#--Setea el numero de documento
		numdoc=iddocumento
		#--Recorre los documentos del personal administrativo
		for personaladmin in listapersonaladmin:
			#--Busca el id del maestro de terceros para subir el documento
			try:
				cursormoduloconexion.execute("SELECT ID_MAE_TER FROM INTERCEROS WHERE NUM_DOC=\'"+personaladmin+"'")
				id_user=cursormoduloconexion.fetchone()
				for idm in id_user:
					id_maeter=idm
			except Exception, e:
				id_maeter=user
			#--Crea un documento por cada persona 
			sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES("+str(personaladmin)+",'"+str(id_cad)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+str(id_maeter)+"','"+concepto.descripcion+"','"+str(personaladmin)+"',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
			try:
				cursormodulocontabilidad.execute(sqlinserciondocumento)
				iddocumento=personaladmin
			except Exception, e:
				quehace.append(sqlinserciondocumento)
			#--Busca los conceptos de nomina de acuerdo al periodo y al documento
			cursormoduloconexion.execute("SELECT * from NO_LIQUIDA_NOMINA WHERE ID_PERIODO="+str(periodoNomina[0])+"AND NUM_DOC="+str(personaladmin))
			conceptosnomina=cursormoduloconexion.fetchall()
			#--Setea la variable con la que se hace ejecuón en caso de ser neto
			es_valor_neto=0
			#--Recorre los conceptos para ingresarlos con los asientos
			for conceptonomina in conceptosnomina:
				#--Busca los asintos correspondientes al concepto establecido
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				#--Recorre los asientos de acuerdo al concepto
				for asiento in asientosconcepto:
					#--Ingresa el valor que esta designado para el campo valor
					campovalor=asiento.id_campo_valor
					#--Cuadra el nombre de la tabla a usar
					tabla=campovalor.id_tabla
					nombretabla=tabla.nombre
					#--Revisa si el asiento posee o no formula
					formu=asiento.formula
					if len(formu)!=0:
						evaluacion=evaluaFuncion(formu,iddocumento)
					else:
						evaluacion=None
					#--Busca de la tabla de propiedadesel id del asiento que cuadra el valor neto	
					idconceptoadmin=Tabla_Propiedades.objects.get(nombre="ASIENTO_NETO_NOMINA_ADMINISTRATIVA")
					#--Verifica que los conceptos que se van a mover son distintos al valor nomina
					if int(idconceptoadmin.valor)!=asiento.id_asiento:
						#--Cuadra el valor de busqueda en las tablas
						idbusqueda="ID_CONCEP_NOMINA"
						#--Ingresa el valor de la busqueda
						valorbusqueda=conceptonomina[3]
						#--Ingresa el valor a ingresar
						evaluacion=conceptonomina[5]
						#--Ingresa el id del concepto de nomina
						id_concep_nomina=conceptonomina[3]
						#--Ingresa el ud del periodo
						id_periodo=conceptonomina[4]
						#--Verifica si el asiento usa grupo para ejecutar
						if(asiento.usa_grupo==1):
							#--Ejecuta movimiento con grupo
							ejecutaMovimientoGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
						else:
							#--Ejecuta movimiento sin grupo
							ejecutaMovimientoSinGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
			#--Despues de ejecutar los asientos correspondientes se procede a ingresar el neto de la nomina
			#--Consulta del id del asiento que ejecuta el ingreso del valor neto de la nomina
			idconceptonomina=Tabla_Propiedades.objects.get(nombre="ASIENTO_NETO_NOMINA_ADMINISTRATIVA")
			#--Se consulta el asiento que ejecuta el movimiento
			asiento=Asiento.objects.get(id_asiento=idconceptonomina.valor)
			#--Consulta la formula del asiento a ver si existe o no
			formu=asiento.formula
			#--Verifica si el valor contienhe o no formula
			if len(formu)!=0:
				evaluacion=evaluaFuncion(formu,iddocumento)
			else:
				evaluacion=None
			#--Se ingresa el valor de la busqueda en la vista 
			idbusqueda="NUM_DOC"
			#--Ingresa el valor del documento del usuario
			valorbusqueda=personaladmin
			#--Valida si el asiento usa o no grupo para ejecutar
			if(asiento.usa_grupo==1):
				#--Evalua el asiento con grupo
				ejecutaMovimientoGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
			else:
				#--Evalua el asiento sin grupo
				ejecutaMovimientoSinGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
	#--Verifica que el listado de personal operativo es mayor a cero
	if len(listapersonalplanta)>0:
		#--Consulta el id del concepto de nomina para ejecución
		idconceptooperativo=Tabla_Propiedades.objects.get(nombre="CONCEPTO_NOMINA_OPERATIVA")
		#--Variable que contiene el id del concepto de nomina para operativo
		concepto = Concepto.objects.get(id_concepto=idconceptooperativo.valor)
		#--Validacion para ingresar solo un documento por ingreso
		#--Se corrige el codigo para que se cree un documento por cada persona a fin que sea mas facil el movimiento y la traza
		#if numdoc != iddocumento:
		    #--Ingresa el documento para insertar los movimientos contables
		    #sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES("+str(iddocumento)+",'"+str(id_cad)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+user+"','"+concepto.descripcion+"','',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
		    #cursormodulocontabilidad.execute(sqlinserciondocumento)
		#--Setea el numero de documento
		numdoc=iddocumento
		#--Recorre los documentos del personal administrativo
		for personalplanta in listapersonalplanta:
			#--Busca el id del maestro de terceros para subir el documento
			try:
				cursormoduloconexion.execute("SELECT ID_MAE_TER FROM INTERCEROS WHERE NUM_DOC=\'"+personalplanta+"'")
				id_user=cursormoduloconexion.fetchone()
				for idm in id_user:
					id_maeter=idm
			except Exception, e:
				id_maeter=user
			#--Crea un documento por cada persona 
			sqlinserciondocumento="INSERT INTO CN_DOCUMENTO VALUES("+str(personalplanta)+",'"+str(id_cad)+"','"+str(vigencia)+"','"+str(cen_op)+"','"+str(cia)+"','"+str(concepto.id_tipo_documento)+"','"+str(id_maeter)+"','"+concepto.descripcion+"','"+str(personalplanta)+"',to_date('"+fecha+"','YYYY-MM-DD'),'0','0')"
			try:
				cursormodulocontabilidad.execute(sqlinserciondocumento)
				iddocumento=personalplanta
			except Exception, e:
				quehace.append(sqlinserciondocumento)
			#--Busca los conceptos de nomina de acuerdo al periodo y al documento
			cursormoduloconexion.execute("SELECT * from NO_LIQUIDA_NOMINA WHERE ID_PERIODO="+str(periodoNomina[0])+"AND NUM_DOC="+str(personalplanta))
			conceptosnomina=cursormoduloconexion.fetchall()
			#--Setea la variable con la que se hace ejecuón en caso de ser neto
			es_valor_neto=0
			#--Recorre los conceptos para ingresarlos con los asientos
			for conceptonomina in conceptosnomina:
				#--Busca los asintos correspondientes al concepto establecido
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				#--Recorre los asientos de acuerdo al concepto
				for asiento in asientosconcepto:
					#--Ingresa el valor que esta designado para el campo valor
					campovalor=asiento.id_campo_valor
					#--Cuadra el nombre de la tabla a usar
					tabla=campovalor.id_tabla
					nombretabla=tabla.nombre
					#--Revisa si el asiento posee o no formula
					formu=asiento.formula
					if len(formu)!=0:
						evaluacion=evaluaFuncion(formu,iddocumento)
					else:
						evaluacion=None
					#--Busca de la tabla de propiedadesel id del asiento que cuadra el valor neto	
					idconceptoadmin=Tabla_Propiedades.objects.get(nombre="ASIENTO_NETO_NOMINA_OPERATIVA")
					#--Verifica que los conceptos que se van a mover son distintos al valor nomina
					if int(idconceptoadmin.valor)!=asiento.id_asiento:
						#--Cuadra el valor de busqueda en las tablas
						idbusqueda="ID_CONCEP_NOMINA"
						#--Ingresa el valor de la busqueda
						valorbusqueda=conceptonomina[3]
						#--Ingresa el valor a ingresar
						evaluacion=conceptonomina[5]
						#--Ingresa el id del concepto de nomina
						id_concep_nomina=conceptonomina[3]
						#--Ingresa el ud del periodo
						id_periodo=conceptonomina[4]
						#--Verifica si el asiento usa grupo para ejecutar
						if(asiento.usa_grupo==1):
							#--Ejecuta movimiento con grupo
							ejecutaMovimientoGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
						else:
							#--Ejecuta movimiento sin grupo
							ejecutaMovimientoSinGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
			#--Despues de ejecutar los asientos correspondientes se procede a ingresar el neto de la nomina
			#--Consulta del id del asiento que ejecuta el ingreso del valor neto de la nomina
			idconceptonomina=Tabla_Propiedades.objects.get(nombre="ASIENTO_NETO_NOMINA_OPERATIVA")
			#--Se consulta el asiento que ejecuta el movimiento
			asiento=Asiento.objects.get(id_asiento=idconceptonomina.valor)
			#--Consulta la formula del asiento a ver si existe o no
			formu=asiento.formula
			#--Verifica si el valor contienhe o no formula
			if len(formu)!=0:
				evaluacion=evaluaFuncion(formu,iddocumento)
			else:
				evaluacion=None
			#--Se ingresa el valor de la busqueda en la vista 
			idbusqueda="NUM_DOC"
			#--Ingresa el valor del documento del usuario
			valorbusqueda=personalplanta
			#--Valida si el asiento usa o no grupo para ejecutar
			if(asiento.usa_grupo==1):
				#--Evalua el asiento con grupo
				ejecutaMovimientoGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
			else:
				#--Evalua el asiento sin grupo
				ejecutaMovimientoSinGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo)
	end_proc= datetime.now()
	logger_saves.error(" Finaliza el total del proceso en: "+str(end_proc))	
	logger_saves.error("Tiempo transcurrido Total del proceso")
	logger_saves.error(str(end_proc-ini_proc))
	logger_saves.info("/*********************************************************************************/")

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos Notas Debito
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----notasDebito: Datos sobre las notas debito
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoNotaCredito(idCAD,fechaEjecucion,notasCredito,anulaMovimiento):
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_CREDITO"
	#--Se recorren las notas debito de acuerdo al dia del mes
	for notaCredito in notasCredito:
		#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
		verificaMaeter(notaCredito[19])
		#--Se acomoda el número de la factura
		iddocumento=notaCredito[0]
		#--Variable que contiene el número del CAD
		idcad=id_cad
		#--Año de ejecución del CAD
		id_vigencia=vigencia
		#--Id del centro de operación
		idcenop=cen_op
		#--Id del a compañia
		idcia=cia
		#--Id del maestro de terceros
		#--20140404 - Modificacion - Se cambia el id del que esta ejecutando por el que viene en el movimiento
		id_maeter=notaCredito[19]
		#--Variable que maneja el estado de anulación
		anula=0
		logger_saves.info("Llega a recorrer los conceptos")
		logger_saves.info("Conceptos")
		logger_saves.info(conceptos)
		#--Recorre uno a uno los conceptos establecidos para el asiento
		for concepto in conceptos:
			logger_saves.info("Concepto generico: ")
			logger_saves.info(concepto.id_concepto_generico)
			logger_saves.info("Concepto de Nota Crédito")
			logger_saves.info(notaCredito[5])
			queryBusquedaConcepto="SELECT id_concepto_generico from ic_concepto where id_concepto_generico="+str(notaCredito[5])+" and id_transaccion_id="+str(id_transaccion)
			cursormodulocontabilidad.execute(queryBusquedaConcepto)
			datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
			if datosConceptosParametrizadas is None:
				try:
					idsconceptosfaltantes.index(str(notaCredito[5])+"|"+str(transaccion.nombre))
				except Exception, e:
					idsconceptosfaltantes.append(str(notaCredito[5])+"|"+str(transaccion.nombre))
				cache.set("error", -1)
			#--Corrobora que el concepto que se encuentra parametrizado y el que esta actualmente en el movimiento de la nota debito coincidan para ejecutar
			if int(concepto.id_concepto_generico)==notaCredito[5]:
				#--Se cambia el valor de la variable de control de ejecución
				ejecucion=1
				#--Ingresa el documento correspondiente
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaMovimiento==1:
					descDocumento="ANULADO - "+notaCredito[12]
				else:
					if notaCredito[12] is None:
						descDocumento=" "
					else:
						descDocumento=notaCredito[12]
				logger_saves.info("Descripcion Que viene antes de fallar")
				logger_saves.info(notaCredito[12])
				descDocumento=(descDocumento[:253] + '..') if len(descDocumento) > 256 else descDocumento
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(notaCredito[4])
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentofactura=cursormodulocontabilidad.fetchone()
				if existedocumentofactura is None:
					datosDocumento=(notaCredito[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,notaCredito[19],descDocumento,notaCredito[4],now,0,0)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Cuadra el número de documento para el movimiento contable
				iddocumento=notaCredito[4]
				#--Variable que maneja el número de CAD para el movimiento contable
				idcad=id_cad
				#--Vigencia para el movimiento contable
				id_vigencia=vigencia
				#--Id del centro de operación para el ingreso del movimiento contable
				idcenop=cen_op
				#--Id de la cómpañia para el documento
				idcia=cia
				#--Id del maestro de terceros
				id_maeter=notaCredito[19]
				#--Se setea el tipo de movimiento de la nota crédito
				id_tipo_movimiento=notaCredito[3]
				#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				#--Recorre los asientos correspondientes a cada concepto
				for asiento in asientosconcepto: 
					logger_saves.info("Id del movimiento: "+str(iddocumento))
					logger_saves.info("Asiento a ejecutar: "+asiento.nombre)
					#--Variable que contiene la referencia al campo valor
					campovalor=asiento.id_campo_valor
					#--Variable que contiene la referencia a la tabla a manejar 
					tabla=campovalor.id_tabla
					#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
					nombretabla=tabla.nombre 
					#--Variable que controla si la factura va a ser o no anulada
					estadofactura=notaCredito[13]
					#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
					#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
					if anulaMovimiento==1:
						#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
						if asiento.naturaleza=='C':
							asiento.naturaleza='D'
						else:
							asiento.naturaleza='C'
					anula=0
					#if estadofactura==0:
					   #--Captura de la fecha de anulación
					   #fechaanulacion=notaCredito[14].date()
					   #--Se extrae el mes de anulación
					   #mesanulacion=fechaanulacion.month
					   #--Se extrae el año de anulación
					   #anioanulacion=fechaanulacion.year
					   #--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					   #if(mesanulacion==me and anioanulacion==vigencia):
					      #--Activa la anulación
					      #anula=1
					#else:
					   #--No se activa la anulación
					   #anula=0
					#--Verifica si el asiento usa o no grupo
					if(asiento.usa_grupo==1):
						logger_saves.info("Entra por grupo")
						#--Variable que contiene la formula del asiento
						formu=asiento.formula	
						#--Consulta los productos a recorrer con el fin de ver como aplica la parametrización con la formula
						#--20140526 - Modificación, se revisa si se peude hacer el query con el tipo de vencimiento para traerlo al producto con el fin de
						#--Sesgar los valores en el Join.
						try:
							cursormoduloconexion.execute("SELECT "+campovalor.nombre+",id_vencimiento from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaCredito[0]))
						except Exception, e:
							cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaCredito[0]))
						logger_saves.info("Query de busqeuda para saber que viene en la consulta:")
						logger_saves.info("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaCredito[0]))
						productos=cursormoduloconexion.fetchall()
						#--Recorre los productos
						for producto in productos:
							#--Revisa si el asiento tiene o no formula
							if len(formu)!=0:
								evaluacion=evaluaFuncion(formu,notaCredito[0],idbusqueda)
							else:
								evaluacion=producto[0]
							#--Revisa si viene por el total de l acabecera o si vieen por los abonos
							if tabla.nombre=="CA_CREDITO":
							   #--Viene por el total de la cabecera, asi que toma el banco de la cabecera para operar contra las cuentas
							   id_ts_cb=notaCredito[8]
							   #--Consulta el numero de cuenta para generar el movimiento
							   cursormoduloconexion.execute("SELECT NUMERO_CUENTA FROM TS_CB WHERE ID_CB="+str(id_ts_cb))
							   valor_cuenta=cursormoduloconexion.fetchone()
							   cuenta_oper=valor_cuenta[0]
							   #--Ejecuta si el valor de la operación es distinto a cero
							   if evaluacion!=0:
							   	ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
							else:
							   #--Viene por los abonos, asi que ejecuta un joijn entre las tablas de ca_credito_detalle, ca vencimiento y ca_debito_detalle para buscar el producto a operar en la contrapartida
							   #--20140526, Modificación, se traen todos lo valores en la consulta y se especializa con el id del vigencia para que solo traiga el del elemento que se esta seleccionando
							   cursormoduloconexion.execute("select ca_debito_detalle.id_producto from ca_debito_detalle join ca_vencimientos on ca_vencimientos.id_debito = ca_debito_detalle.id_debito join ca_credito_detalle on ca_vencimientos.id_vencimiento = ca_credito_detalle.id_vencimiento where ca_credito_detalle.id_credito="+str(notaCredito[0])+" and ca_credito_detalle.id_vencimiento="+str(producto[1]))
							   idprod=cursormoduloconexion.fetchall()
							   #--Setea elvalor de la cuenta con el id del producto generado del join para hacer la ejecución contra la partida de bancos
							   #--20140526, Modificación, Se recorren la scunetas segun el criterio establecido
							   logger_saves.info("Busca las cuentas de los productos en el debito para hacer la ejecucion")
							   for ctaOperar in idprod:
							   	cuenta_oper=ctaOperar[0]
							   	logger_saves.info("Valor con el que entra: "+str(cuenta_oper))
							   	#--Ejecuta si el valor de la operación es distinto a cero
							   	if evaluacion!=0:
							   		ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
					else:
						logger_saves.info("Entra por no grupo")
						#--Verifica si la tabla viene de excedentes o si es la diferencia")
						if tabla.nombre=="CA_EXCEDENTES":
							logger_saves.info("Entra por excedentes")
							#--Variable que contiene la formula del asiento
							formu=asiento.formula
							#--Revisa si el asiento tiene o no formula
							if len(formu)!=0:
							   #--Setea la variable con el valor de la evaluación de la función
							   evaluacion=evaluaFuncion(formu,notaDebito[0],idbusqueda)
							else:
								#--Consulta el dato a ingresar en el movimiento contable
								cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaCredito[0]))
								evaluacion=cursormoduloconexion.fetchone()
							#--Setea la variable con el dato a ingresar
							if evaluacion is None:
								evaluacion=0
							else:
								evaluacion=evaluacion[0]
							#--Ejecuta movimiento sin grupo para ingresar valores que no manejan cunetas parametrizadas
							if evaluacion!=0:
								#--Ejeucta el movimiento con Excedentes
								ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
						else:
							logger_saves.info("Entra por otros conceptos")
							#--Consulta el dato a ingresar en el movimiento contable
							cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaCredito[0]))
							diferencias=cursormoduloconexion.fetchall()
							logger_saves.info("Query de busqueda: ")
							logger_saves.info("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaCredito[0]))
							logger_saves.info("Ingresa a revisar si tene diferencias: ")
							logger_saves.info(diferencias)
							#--Recorre las diferencias para ingresarlas si el valor es mayor o menor a cero
							for diferencia in diferencias:
								#--Consulta en la tabla de propiedades, para saber cuales son los asientos para valores positivos y negativos
								diferenciapositiva=Tabla_Propiedades.objects.get(nombre="ID_ASIENTO_DIFERENCIA_EN_CAMBIO_POSITIVO")
								diferencianegativa=Tabla_Propiedades.objects.get(nombre="ID_ASIENTO_DIFERENCIA_EN_CAMBIO_NEGATIVO")
								#--Compara si el valor es positivo y si el id del asiento es el de diferencia positiva para aplicar parametrizacion
								if diferencia[0]>0 and diferenciapositiva.valor==asiento.id_asiento:
									logger_saves.info("Entra por diferencia positiva")
									#--Ingresa el valor a ejecutar
									evaluacion=diferencia[0]
									#--Ejecuta movimiento sin grupo para ingresar valores que no manejan cunetas parametrizadas
									if evaluacion!=0:
										ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
									#--Compara si el valor es negativo y si el id del asiento es el de diferencia negativa para aplicar parametrizacion
								elif diferencia[0]<0 and diferencianegativa.valor==asiento.id_asiento:
									logger_saves.info("Entra por diferencia negativa")
									#--Ingresa el valor a ejecutar
									evaluacion=diferencia[0]
									#--Transforma el valor en positivo para ingresarlo
									evaluacion=evaluacion*-1
									#--Ejecuta movimiento sin grupo para ingresar valores que no manejan cunetas parametrizadas
									if evaluacion!=0:
										ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
								#--20140516 - Modificación, en caso que no sea un valor de diferencia ejecuta el movimento normalmente
								else:
									logger_saves.info("Entra por ejecución diferente a diferencias")
									logger_saves.info("Nombre de la tabla que entra: "+tabla.nombre)
									#--Setea el valor a ingresar
									evaluacion=diferencia[0]
									#--Evalua si el valor es negativo para cambiarlo a positivo
									if evaluacion<0:
										#--Cambia el valor a positivo
										evaluacion=evaluacion*-1;
									#--Evalua si el valor no es cero para ingresarlo
									if evaluacion!=0:
										#--Ingresa el valor correspondiente.
										ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)


#--Metodo que cuadra la ejecución del movimiento contable para Movimientos Notas Debito
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----notasDebito: Datos sobre las notas debito
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoNovedadesNotaDebito(idCAD,fechaEjecucion,notasDebito,anulaMovimiento):
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_DEBITO"
	#--Se recorren las notas debito de acuerdo al dia del mes
	for notaDebito in notasDebito:
		logger_saves.info("Recorriendo Cada Novedad Para evaluar")
		logger_saves.info("\n")
		logger_saves.info(notaDebito)
		#--Se ubica de el id del maestro de terceros que se encunetra en Debito
		queryIdMaeter="SELECT ID_MAE_TER FROM CA_DEBITO WHERE ID_DEBITO="+str(notaDebito[11])
		cursormoduloconexion.execute(queryIdMaeter)
		idMaeter=cursormoduloconexion.fetchone()
		#--Se ingresa en la variable el Maestro de terceros
		idMaeter=idMaeter[0]
		#--Se verifica que exista el tercero
		verificaMaeter(idMaeter)
		#--Se acomoda el número de la factura
		iddocumento=notaDebito[2]
		#--Variable que contiene el número del CAD
		idcad=id_cad
		#--Año de ejecución del CAD
		id_vigencia=vigencia
		#--Id del centro de operación
		idcenop=cen_op
		#--Id del a compañia
		idcia=cia
		#--Id del maestro de terceros
		#--20140404 - Modificacion - Se cambia el id del que esta ejecutando por el que viene en el movimiento
		id_maeter=idMaeter
		#--Variable que maneja el estado de anulación
		anula=0
		#--Recorre uno a uno los conceptos establecidos para el asiento
		for concepto in conceptos:
			#--Verifica la existencia del concepto
			queryBusquedaConcepto="SELECT id_concepto_generico from ic_concepto where id_concepto_generico="+str(notaDebito[1])+" and id_transaccion_id="+str(id_transaccion)
			cursormodulocontabilidad.execute(queryBusquedaConcepto)
			datosConceptosParametrizadas=cursormodulocontabilidad.fetchone()
			#--Verifica al existencia del concepto, si es asi ejecuta de lo contratrio reporta
			if datosConceptosParametrizadas is None:
				try:
					idsconceptosfaltantes.index(str(notaDebito[1])+"|"+str(transaccion.nombre))
				except Exception, e:
					idsconceptosfaltantes.append(str(notaDebito[1])+"|"+str(transaccion.nombre))
				cache.set("error", -1) 
			else:
				#--Se cmabia el valor de la variable de control de ejecución
				ejecucion=1
				#--Ingresa el documento correspondiente
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaMovimiento==1:
					descDocumento="ANULADO - "+str(notaDebito[5])
					descDocumento=(descDocumento[:253] + '..') if len(descDocumento) > 256 else descDocumento
				else:
					if notaDebito[5] is None:
						descDocumento=" "
					else:
						descDocumento=notaDebito[5]
					descDocumento=(descDocumento[:253] + '..') if len(descDocumento) > 256 else descDocumento
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(notaDebito[2])
				cursormodulocontabilidad.execute(queryverificadocumento)
				existedocumentofactura=cursormodulocontabilidad.fetchone()
				if existedocumentofactura is None:
					datosDocumento=(notaDebito[2],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,id_maeter,descDocumento,notaDebito[2],fechaEjecucion,0,0)
					cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursormodulocontabilidad.execute(None,datosDocumento)
					except cx_Oracle.DatabaseError, ex:
						error, = ex.args
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Cuadra el número de documento para el movimiento contable
				iddocumento=notaDebito[2]
				#--Variable que maneja el número de CAD para el movimiento contable
				idcad=id_cad
				#--Vigencia para el movimiento contable
				id_vigencia=vigencia
				#--Id del centro de operación para el ingreso del movimiento contable
				idcenop=cen_op
				#--Id de la cómpañia para el documento
				idcia=cia
				#--Se setea el tipo de movimiento de la nota crédito
				id_tipo_movimiento=notaDebito[3]
				#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				#--Recorre los asientos correspondientes a cada concepto
				for asiento in asientosconcepto: 
					#--Variable que contiene la referencia al campo valor
					campovalor=asiento.id_campo_valor
					#--Variable que contiene la referencia a la tabla a manejar 
					tabla=campovalor.id_tabla
					#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
					nombretabla=tabla.nombre 
					#--Variable que controla si la factura va a ser o no anulada
					estadofactura=notaDebito[7]
					#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
					#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
					if anulaMovimiento==1:
						#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
						if asiento.naturaleza=='C':
							asiento.naturaleza='D'
						else:
							asiento.naturaleza='C'
					anula=0
					#if estadofactura==0:
						#--Captura de la fecha de anulación
						#fechaanulacion=notaDebito[19].date()
						#--Se extrae el mes de anulación
						#mesanulacion=fechaanulacion.month
						#--Se extrae el año de anulación
						#anioanulacion=fechaanulacion.year
						#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
						#if(mesanulacion==me and anioanulacion==vigencia):
							#--Activa la anulación
							#anula=1
					#else:
						#--No se activa la anulación
						#anula=0
					#--Verifica si el asiento usa o no grupo
					if(asiento.usa_grupo==1):
					 	#--Variable que contiene la formula del asiento
						evaluacion=notaDebito[12]
						logger_saves.info("Valor a ingresar")
						logger_saves.info(evaluacion)
						#--Captura el grupo para mirar del nombre si va por productos o pro contrapartida
						#--Variable que almacena el grupo con el que se va a trabajar
						grupo=asiento.id_grupo
						cursormoduloconexion.execute("select ca_debito_detalle.id_producto from ca_debito_detalle left join ca_debito on ca_debito_detalle.ID_DEBITO=ca_debito.ID_DEBITO left join CA_NOVEDAD_CARTERA on CA_NOVEDAD_CARTERA.ID_DEBITO=ca_debito.ID_DEBITO where CA_NOVEDAD_CARTERA.ID_NOVEDAD_CARTERA="+str(notaDebito[0]))
						idprod=cursormoduloconexion.fetchall()
						logger_saves.info("\n")
						logger_saves.info("Productos Que se encuentran")
						logger_saves.info(idprod)
						for ctaOperar in idprod:
							cuenta_oper=ctaOperar[0]
							logger_saves.info("Valor con el que entra: "+str(cuenta_oper))
							#--Ejecuta si el valor de la operación es distinto a cero
							if evaluacion!=0:
								ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
							

#--Metodo que cuadra la ejecución del movimiento contable para Movimientos Notas Debito
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----notasDebito: Datos sobre las notas debito
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoNotaDebito(idCAD,fechaEjecucion,notasDebito,anulaMovimiento):
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_DEBITO"
	#--Se recorren las notas debito de acuerdo al dia del mes
	for notaDebito in notasDebito:
		#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
		verificaMaeter(notaDebito[5])
		#--Se acomoda el número de la factura
		iddocumento=notaDebito[0]
		#--Variable que contiene el número del CAD
		idcad=id_cad
		#--Año de ejecución del CAD
		id_vigencia=vigencia
		#--Id del centro de operación
		idcenop=cen_op
		#--Id del a compañia
		idcia=cia
		#--Id del maestro de terceros
		#--20140404 - Modificacion - Se cambia el id del que esta ejecutando por el que viene en el movimiento
		id_maeter=notaDebito[5]
		#--Variable que maneja el estado de anulación
		anula=0
		#--Recorre uno a uno los conceptos establecidos para el asiento
		for concepto in conceptos:
			#--Se cmabia el valor de la variable de control de ejecución
			ejecucion=1
			#--Ingresa el documento correspondiente
			#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
			if anulaMovimiento==1:
				descDocumento="ANULADO - "+str(notaDebito[14])
				descDocumento=(descDocumento[:253] + '..') if len(descDocumento) > 256 else descDocumento
			else:
				if notaDebito[14] is None:
					descDocumento=" "
				else:
					descDocumento=notaDebito[14]
				descDocumento=(descDocumento[:253] + '..') if len(descDocumento) > 256 else descDocumento
			#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
			#20140328 - Modificacion, se verifica si existe el documento para no crearlo
			queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(notaDebito[4])
			cursormodulocontabilidad.execute(queryverificadocumento)
			existedocumentofactura=cursormodulocontabilidad.fetchone()
			if existedocumentofactura is None:
				datosDocumento=(notaDebito[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,notaDebito[5],descDocumento,notaDebito[4],fechaEjecucion,0,0)
				cursormodulocontabilidad.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursormodulocontabilidad.execute(None,datosDocumento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear Documento")
					logger_saves.error(datosDocumento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresDocumentos.append(errorConexion)
					cache.set("error", -1)
			#--Cuadra el número de documento para el movimiento contable
			iddocumento=notaDebito[4]
			#--Variable que maneja el número de CAD para el movimiento contable
			idcad=id_cad
			#--Vigencia para el movimiento contable
			id_vigencia=vigencia
			#--Id del centro de operación para el ingreso del movimiento contable
			idcenop=cen_op
			#--Id de la cómpañia para el documento
			idcia=cia
			#--Se setea el tipo de movimiento de la nota crédito
			id_tipo_movimiento=notaDebito[3]
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto: 
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre 
				#--Variable que controla si la factura va a ser o no anulada
				estadofactura=notaDebito[18]
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaMovimiento==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=notaDebito[19].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
					#anula=0
				#--Verifica si el asiento usa o no grupo
				if(asiento.usa_grupo==1):
					#--Variable que contiene la formula del asiento
					formu=asiento.formula	
					#--Consulta los productos a recorrer con el fin de ver como aplica la parametrización con la formula
					cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaDebito[0]))
					productos=cursormoduloconexion.fetchall()
					#--Recorre los productos
					for producto in productos:
						#--Revisa si el asiento tiene o no formula
						if len(formu)!=0:
							evaluacion=evaluaFuncion(formu,notaDebito[0],idbusqueda)
						else:
							evaluacion=producto[0]
						#--Consulta el id del producto para buscar el codigo
						cursormoduloconexion.execute("SELECT ID_PRODUCTO from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaDebito[0]))
						idprod=cursormoduloconexion.fetchone()
						idprod=idprod[0]
						#--Consulta el codigo para setear la cuenta con la que se compara la parametrización
						#--Se cuadra parametrización para que lea del ID_PRODUCTO no del código--20 de Agosto del 2013
						#---cursormoduloconexion.execute("SELECT CODIGO from CA_PRODUCTO WHERE ID_PRODUCTO="+str(idprod))
						#---codigo=cursormoduloconexion.fetchone()
						#--Se ingresa el valor del codigo a operar
						cuenta_oper=idprod
						#--Ejecuta si el valor de la operación es distinto a cero
						if evaluacion!=0:
							ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper)
				else:
					#--Variable que contiene la formula del asiento
					formu=asiento.formula
					#--Revisa si el asiento tiene o no formula
					if len(formu)!=0:
						#--Setea la variable con el valor de la evaluación de la función
						evaluacion=evaluaFuncion(formu,notaDebito[0],idbusqueda)
					else:
						#--Consulta el dato a ingresar en el movimiento contable
						cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(notaDebito[0]))
						evaluacion=cursormoduloconexion.fetchone()
						#--Setea la variable con el dato a ingresar
						evaluacion=evaluacion[0]
					#--Ejecuta movimiento sin grupo para ingresar valores que no manejan cunetas parametrizadas
					if evaluacion!=0:
						ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula)
				
#--Metodo que cuadra la ejecución del movimiento contable para Movimientos de Cartera Pos
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----facturaPOS: Datos sobre las facturas POS
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimientoCarteraPos(idCAD,fechaEjecucion,facturaPOS,anulaFactura):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Ejecuta Basicas para movimiento de facturas pos")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id de la secuencia del CAD para ingreso
	id_cad=idCAD
	#--Fecha de ejecución del CAD
	now = fechaEjecucion
	#--Año de ejecución del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id del a compañia
	cia=id_cia
	#--Por comodidad en la inserción se transforma la fecha a STRING
	fecha=str(now)
	#--Variable que controla la ejecución
	ejecucion=-3
	#--Varible que contiene el parametro de busqueda para las parametrizaciones
	idbusqueda="ID_FACTURA"
	#--Se recorren las facturas de acuerdo al dia del mes
	for factura in facturaPOS:
		#--20140408 - MOdificacion, Se agrega funcion que valida si se encunetra el Maeter, de lo contrario lo crea
		verificaMaeter(factura[5],cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
		#--Se acomoda el número de la factura
		iddocumento=factura[0]
		#--Variable que contiene el número del CAD
		idcad=id_cad
		#--Variable que contiene la vigencia para el Documento
		id_vigencia=vigencia
		#--Id del centro de operaciones para el documento
		idcenop=cen_op
		#--Id de la cómpañia para el documento
		idcia=cia
		#--Id del maestro de terceros
		id_maeter=user
		#--Se consulta el id de la tabla TS_PC_FP para saber si se aplican o no bancos
		#--2014048 - MOdificacion, se cambia la consulta para mirar por parte de pagos si afecta o no bancos y cual es el valor que debe ingresar
		cursorModuloConexionCarteraVentasPos.execute("SELECT CA_FACTURA_PAGO.ID_TS_PC_FP,TS_PC_FP.APLICA_BN,CA_FACTURA_PAGO.VALOR from CA_FACTURA_PAGO join TS_PC_FP on CA_FACTURA_PAGO.ID_TS_PC_FP=TS_PC_FP.ID WHERE "+idbusqueda+"="+str(iddocumento))
		idtspcfp=cursorModuloConexionCarteraVentasPos.fetchall()
		#--Variable que maneja el estado de anulación
		anula=0
		#--Variable que maneja el valor pagado total para comparar y balancear las facturas
		valorpagado=0
		#--Variable que maneja el valor burto de los detalles de las facturas para comparar si hay descuadre
		valorbruto=0
		#--Variable que maneja el IVA en las facturas para el balanceo
		valoriva=0
		#--Recorre uno a uno los conceptos establecidos para el asiento
		for concepto in conceptos:
			#--Se cambia el valor de la variable de control de ejecución
			ejecucion=1
			#--Variable que maneja el número de CAD para el movimiento contable
			idcad=id_cad
			#--Vigencia para el movimiento contable
			id_vigencia=vigencia
			#--Id del centro de operación para el ingreso del movimiento contable
			idcenop=cen_op
			#--Id de la compañia para el movimiento contable
			idcia=cia
			#--Id del maestro de terceros para el movimiento contable
			id_maeter=factura[5]
			#--Valida que el documento halla o no sido creado
			creaDoc=0
			#--Trae del modelo los asientos a recorrer de acuerdo al concepto seleccionado
			asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
			#--Recorre los asientos correspondientes a cada concepto
			for asiento in asientosconcepto:
				logger_saves.info("/*********************************************************************************/")
				logger_saves.info("Nombre del asiento")
				logger_saves.info(asiento.nombre)
				#--Variable que contiene la referencia al campo valor
				campovalor=asiento.id_campo_valor
				#--Variable que contiene la referencia a la tabla a manejar 
				tabla=campovalor.id_tabla
				#--Variable que maneja el nombre de la tabla con la que se va a hacer la busqueda
				nombretabla=tabla.nombre
				#--Variable que controla si la factura va a ser o no anulada
				estadofactura=factura[12]
				# --20140407 - Modificacion, se busca el punto de venta para colocarlo de acuerdo a lo solicitado en la observacion de la factura
				cursorModuloConexionCarteraVentasPos.execute("SELECT NOMBRE from CA_PUNTO_VENTA WHERE ID_PUNTO_VENTA="+str(factura[2]))
				nombrePuntoVenta=cursorModuloConexionCarteraVentasPos.fetchone()
				codigoPuntoVenta=nombrePuntoVenta[0]
				codigoPuntoVenta=codigoPuntoVenta.split('-')
				codigoPuntoVenta=codigoPuntoVenta[0]
				#--Corrobora el estado de la factura, si esta en 0 es porque esta anulada y hay que verificar si la fecha esta dentro del rango
				#--20140325 - Modificacion, Se agrega el codigo para verificar si esta o no anulado y de acuerdo a eso cambia la naturaleza
				if anulaFactura==1:
					#--20140325 - Modificacion, Cambia la naturaleza por la anulacion
					if asiento.naturaleza=='C':
						asiento.naturaleza='D'
					else:
						asiento.naturaleza='C'
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento Anulado")
					logger_saves.info(asiento.naturaleza)
					descDocumento="ANULACION FACTURA "+str(codigoPuntoVenta)+" - "+str(factura[4])
				else:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Naturaleza Movimiento")
					logger_saves.info(asiento.naturaleza)
					descDocumento="CANCELACIÓN FACTURA "+str(codigoPuntoVenta)+" - "+str(factura[4])
				anula=0
				#if estadofactura==0:
					#--Captura de la fecha de anulación
					#fechaanulacion=factura[13].date()
					#--Se extrae el mes de anulación
					#mesanulacion=fechaanulacion.month
					#--Se extrae el año de anulación 
					#anioanulacion=fechaanulacion.year
					#--Se verifica si esta vigente contra el rango de fechas para activar la anulación
					#if(mesanulacion==me and anioanulacion==vigencia):
						#--Activa la anulación
						#anula=1
				#else:
					#--No se activa la anulación
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(factura[4])
				cursorModuloContabilidadCarteraVentasPos.execute(queryverificadocumento)
				existedocumentofactura=cursorModuloContabilidadCarteraVentasPos.fetchone()
				if existedocumentofactura is not None:
					creaDoc=1
				#--Se captura el nombre del asiento
				nombreasiento=asiento.nombre
				#--Se verifica que si el asiento entra por formas de pago u otro tipo de ejecución
				if nombretabla.find("PAGO")>=0:
					logger_saves.info("/*********************************************************************************/")
					logger_saves.info("Ingresa por el manejo de pagos correspondiente")
					logger_saves.info("Formas de pago d elas facturas")
					logger_saves.info("Nombre de la tabla: ")
					logger_saves.info(nombretabla)
					logger_saves.info(idtspcfp)
					for datoPagos in idtspcfp:
						#--Mira si afecta o no bancos para generar los movimientos correspondientes
						tspcfp=datoPagos[1]
						#--Se verifica que el asiento no tiene movimiento de bancos y que es el parametrizado para este fin
						if tspcfp==0 and nombreasiento.find("SIN")>0:
							if(asiento.usa_grupo==1):
								numerocuentamover=datoPagos[0]
								#--Setea el valor de la evaluación para hacer la ejecución
								evaluacion=datoPagos[2]
								#--Setea el valor pagado para la comparación correspondiente
								valorpagado=valorpagado+evaluacion
								#--Cuadra el valor de la forma de pago para hacer comparación con las parametrizadas
								cuenta_oper=numerocuentamover
								#--Ejecuta el movimiento correspondiente
								#--Genera el movimiento contable correspondiente#--Evalua si se puede o no crea documento - 20140114 Se modifica para que cree documentos y movimientos solo si es mayor que 0
								if(evaluacion>0 and creaDoc==0):
									#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
									datosDocumento=(factura[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,factura[5],descDocumento,factura[4],fechaEjecucion,0,0)
									logger_saves.info("/*********************************************************************************/")
									logger_saves.info("Ingresa Documento")
									logger_saves.info(datosDocumento)
									cursorModuloContabilidadCarteraVentasPos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
									try:
										cursorModuloContabilidadCarteraVentasPos.execute(None,datosDocumento)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al crear Documento")
										logger_saves.error(datosDocumento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresDocumentos.append(errorConexion)
										cache.set("error", -1)
									iddocumento=factura[4]
									creaDoc=1
								else:
									iddocumento=factura[4]
								if(evaluacion>0):
									ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
						#--Genera el movimiento cuando el pago afecta a bancos
						elif tspcfp==1 and nombreasiento.find("SIN")<0:
							datoscuentavalor=[]
							logger_saves.info("/*********************************************************************************/")
							logger_saves.info("Ingresa por el manejo de pagos correspondiente a bancos")
							logger_saves.info("Formas de pago d elas facturas que se encunetra seleccionado, buscar en el registor por duplicacion")
							logger_saves.info(datoPagos)
							#--Busca el id de la cuenta para consultar el numero de cuneta
							querycuentabancomover="SELECT ID_CB FROM "+nombretabla+" WHERE "+idbusqueda+"="+str(factura[0])
							logger_saves.info("QUERY BUSQUEDA DATOS BANCO")
							logger_saves.info(querycuentabancomover)
							cursorModuloConexionCarteraVentasPos.execute(querycuentabancomover)
							datocuentamover=cursorModuloConexionCarteraVentasPos.fetchall()
							logger_saves.info("Datos en las cuentas a Mover: ")
							logger_saves.info(datocuentamover)
							for capturadatos in datocuentamover:
								logger_saves.info("Datos de las cuentas cuando se recorren")
								logger_saves.info(capturadatos)
								if capturadatos[0] is not None:
									try:
										datoscuentavalor.index(str(capturadatos[0])+","+str(datoPagos[2]))
									except Exception, e:
										#--Consulta el número de cuenta asociado para la comparación
										querynumerocuentamover="SELECT NUMERO_CUENTA FROM TS_CB WHERE ID_CB="+str(capturadatos[0])
										logger_saves.info("QUERY DE BUSQUEDA SOBRE LA CUENTA")
										logger_saves.info(querynumerocuentamover)
										cursorModuloConexionCarteraVentasPos.execute(querynumerocuentamover)
										numerocuentamover=cursorModuloConexionCarteraVentasPos.fetchone()
										numerocuentamover=numerocuentamover[0]
										#--Verifica si el movimiento utiliza o no grupo
										if(asiento.usa_grupo==1):
											#--Recorre los pagos realizados para hacer el movimiento correspondiente
											#--Setea el valor de la evaluación para hacer la ejecución
											evaluacion=datoPagos[2]
											#--Setea el valor pagado para la comparación correspondiente
											valorpagado=valorpagado+evaluacion
											#--Cuadra el valor de la forma de pago para hacer comparación con las parametrizadas
											cuenta_oper=numerocuentamover
											#--Ejecuta el movimiento correspondiente
											#--Genera el movimiento contable correspondiente#--Evalua si se puede o no crea documento - 20140114 Se modifica para que cree documentos y movimientos solo si es mayor que 0
											if(evaluacion>0 and creaDoc==0):
												#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
												datosDocumento=(factura[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,factura[5],descDocumento,factura[4],fechaEjecucion,0,0)
												logger_saves.info("/*********************************************************************************/")
												logger_saves.info("Ingresa Documento")
												logger_saves.info(datosDocumento)
												cursorModuloContabilidadCarteraVentasPos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
												try:
													cursorModuloContabilidadCarteraVentasPos.execute(None,datosDocumento)
												except cx_Oracle.DatabaseError, ex:
													error, = ex.args
													logger_saves.error("Fallo al crear Documento")
													logger_saves.error(datosDocumento)
													logger_saves.error('Error.code = '+str(error.code))
													logger_saves.error('str(error.message) = '+str(error.message))
													logger_saves.error('str(error.offset) = '+str(error.offset))
													errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
													erroresDocumentos.append(errorConexion)
													cache.set("error", -1)
												iddocumento=factura[4]
												creaDoc=1
											else:
												iddocumento=factura[4]
											if(evaluacion>0):
												ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
										datoscuentavalor.append(str(capturadatos[0])+","+str(datoPagos[2]))
					if(asiento.usa_grupo!=1):
						logger_saves.info("Ya cuadro todos los pagos, aca cuadra el valor de aprovisionamiento para la parte de descuadre de factura")
						logger_saves.info("Aca ya calculo todo el valor y este debe pasar una sola vez, para eliminar el descuadre correspondiente")
						#--Ejecuta el movimiento sin grupo
						#--Setea el valor total sumando el iva y el valor bruto que se ha calculado
						valortotal=float(valorbruto)+float(valoriva)
						#--Compara si los valores son diferentes para ver el desbalance
						logger_saves.info("Compara el valor pagado: "+str(valorpagado)+" con el valor total: "+str(valortotal))
						if valortotal!=float(valorpagado):
							#--Calcula el valor de desbalance de la factura
							evaluacion=valorpagado-valortotal
							logger_saves.info("Calculo del excedente, no es negativo?: "+str(evaluacion))
							#--Verifica si el valor es negativo para hacer cambio de naturaleza
							if evaluacion<0:
										#--Cambia el valor a positivo
										evaluacion=evaluacion*-1
										#--Cambia la naturaleza del asiento
										if asiento.naturaleza=='C':
											asiento.naturaleza='D'
										else:
											asiento.naturaleza='C' 
										logger_saves.info("/*********************************************************************************/")
										logger_saves.info("Cambia naturaleza en aprovechamientos sin bancos")
										logger_saves.info(asiento.naturaleza)
							#--Genera movimiento contable
							#--Genera el movimiento contable correspondiente#--Evalua si se puede o no crea documento - 20140114 Se modifica para que cree documentos y movimientos solo si es mayor que 0
							if(evaluacion>0 and creaDoc==0):
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosDocumento=(factura[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,factura[5],descDocumento,factura[4],fechaEjecucion,0,0)
								logger_saves.info("/*********************************************************************************/")
								logger_saves.info("Ingresa Documento")
								logger_saves.info(datosDocumento)
								cursorModuloContabilidadCarteraVentasPos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
								try:
									cursorModuloContabilidadCarteraVentasPos.execute(None,datosDocumento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al crear Documento")
									logger_saves.error(datosDocumento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresDocumentos.append(errorConexion)
									cache.set("error", -1)
								iddocumento=factura[4]
								creaDoc=1
							else:
								iddocumento=factura[4]
							if(evaluacion>0):
								ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
				#--Verifica si el asiento va por los productos de la factura 
				elif nombretabla=="CA_FACTURA_PROD":
					#--Consulta los valores de los productos para recorrerlos e ir generando el movimiento 
					cursorModuloConexionCarteraVentasPos.execute("SELECT VALOR_UNI_TOTAL,VALOR_UNI_IVA,ID_PRODUCTO,CANTIDAD FROM CA_FACTURA_PROD WHERE "+idbusqueda+"="+str(factura[0]))
					datos=cursorModuloConexionCarteraVentasPos.fetchall()
					#--Setea la cantidad de productos de acuerdo a cada factura
					cantprodfactura=datos
					#--Recorre los productos de la factura
					for datosfactura in cantprodfactura:
						#--Setea cuenta para ejecución de movimientos contables
						cuenta_oper=datosfactura[2]
						#--Consulta el valor del iva del producto
						queryivaproducto="SELECT POR_IVA FROM CA_PRODUCTO WHERE ID_PRODUCTO="+str(cuenta_oper)
						cursorModuloConexionCarteraVentasPos.execute(queryivaproducto)
						ivaproducto=cursorModuloConexionCarteraVentasPos.fetchone()
						ivaproducto=ivaproducto[0]
						#--Se clacula el valor de uno mas iva con el fin de obtener el valor burto de cada producto
						ivaproducto=1+(ivaproducto/100)
						#--Se ejecuta la operación del valor total del producto dividido el iva pra saber valor bruto
						evaluacion=(float(datosfactura[0])/ivaproducto)
						#--Se setea el valor restringiendo a dos posiciones despues del punto decimal
						evaluacion="{0:.2f}".format(evaluacion) 
						#--Se setea la variable de valor bruto para comparación en pagos
						valorbruto=float(valorbruto)+float(evaluacion)
						logger_saves.info("Setea el valor bruto: ")
						logger_saves.info(valorbruto)
						#--Genera el movimiento contable correspondiente#--Evalua si se puede o no crea documento - 20140114 Se modifica para que cree documentos y movimientos solo si es mayor que 0
						if(evaluacion>0 and creaDoc==0):
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosDocumento=(factura[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,factura[5],descDocumento,factura[4],fechaEjecucion,0,0)
							cursorModuloContabilidadCarteraVentasPos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
							try:
								cursorModuloContabilidadCarteraVentasPos.execute(None,datosDocumento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al crear Documento")
								logger_saves.error(datosDocumento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresDocumentos.append(errorConexion)
								cache.set("error", -1)
							iddocumento=factura[4]
							creaDoc=1
						else:
							iddocumento=factura[4]
						if(evaluacion>0):
							ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
				else:
					#--Genera otros movimientos
					#--Setea el valor de la formula
					formu=asiento.formula
					#--Verifica si cohntiene o no formula para ejecuciḉon
					if len(formu)!=0:
						#--Evalua la formula correspondiente 
						evaluacion=evaluaFuncion(formu,factura[0],idbusqueda)
					else:
						#--Genera la consulta del valor a operar
						cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(factura[0]))
						evaluacion=cursormoduloconexion.fetchone()
						evaluacion=evaluacion[0]
					#--Setea el valor iva para comparación en pagos	
					valoriva=factura[8]
					#--Evalua si se puede o no crea documento - 20140114 Se modifica para que cree documentos y movimientos solo si es mayor que 0
					if(evaluacion>0 and creaDoc==0):
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosDocumento=(factura[4],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,factura[5],descDocumento,factura[4],fechaEjecucion,0,0)
						cursorModuloContabilidadCarteraVentasPos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
						try:
							cursorModuloContabilidadCarteraVentasPos.execute(None,datosDocumento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al crear Documento")
							logger_saves.error(datosDocumento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresDocumentos.append(errorConexion)
							cache.set("error", -1)
						iddocumento=factura[4]
						creaDoc=1
					else:
						iddocumento=factura[4]
					#--Verifica si tiene o no grupo
					if(asiento.usa_grupo==1):
						#--Ejecuta movimiento con grupo
						if(evaluacion>0):
							idmovcontab=ejecutaMovimientoGrupoOtro(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula,cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
					else:
						#--Ejecuta movimiento sin grupo
						if(evaluacion>0):
							ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorModuloConexionCarteraVentasPos,cursorModuloContabilidadCarteraVentasPos)
	#--Retorno del metodo
	return tsmovbanctrabajar

#--Método que evalua una función construida desde el entorno gráfico
#--Entrada: Formula a ejecutar,id del documento y termino de busqueda para hacer ejecución
#--Salida: Devuelve el valor de la ejecución de la formula
def evaluaFuncion(formula,iddocumento,terminobusqueda):
	#--Variable que hace de contador para saber cantidad de expresiones
	cont=0
	#--Variable que contiene el comodin con el que se buscan los ids para operaciones
	variable=""
	#--Lista de ids para buscar los datos y remplazar en la función 
	ids=[]
	#--Contenedor que separa la funcion en partes---Solo prueba
	respar=[]
	#--Recorre los valores en la formula en busqueda de los ids
	for val in formula:
		#--Comodin con el que vienen las formulas
		variable="$"
		#--Revisa si esta el comodin para la busqueda de valores de Id
		if val=="$":
			#--Encuentra el valo de los pivotes
			#--Busca los digitos después del pivote para ir buscando los ids
			buscadigitos=formula[cont+1::]
			#--Recorre los digitos en busqueda de los ids
			for digi in buscadigitos:
				#--Con esta excepción se controla que los valores que se asignan al id sean solo númericos
				try:
					a=int(digi)
					variable+=str(a)
				except ValueError:
					break
			try:
				#--Se busca la posición de los indices de las variables que se estan recorriendo
				#--Si no lo encuentra la anexa, no permite replicas
				posicion=ids.index(variable)
			except:
				#--Si no encuentra Index, procede a ingresar el valor de la variable
				ids.append(variable)
		#--Contador aumentando de uno en uno para saber cantidad de expresiones
		cont+=1
	#--Recorre los valores con el fin de remplazar los valores para entrar en ejecucioón de la formula
	for idcampovalor in ids:
		#--Separa los valores por el pivote para hacer los remplazos correspondientes
		separavalor=idcampovalor.split("$")
		#--Logica para la busqueda desde django
		#--Consulta en el modelo los datos del campo para realizar la busqueda del valor
		campovalorestablecido=Campo_Valor.objects.get(id_campo_valor=int(separavalor[1]))
		#--Busca la tabla correspondiente para ejecución de busqueda
		tabla=campovalorestablecido.id_tabla
		#--Realiza la consulta en la base de datos del valor a remplazar
		logger_saves.info("Remplazando campos, donde esta la falla: ")
		logger_saves.info("SELECT "+str(campovalorestablecido.nombre)+" from "+str(tabla.nombre)+" WHERE "+str(terminobusqueda)+"="+str(iddocumento))
		cursormoduloconexion.execute("SELECT "+campovalorestablecido.nombre+" from "+tabla.nombre+" WHERE "+terminobusqueda+"="+str(iddocumento))
		campoformula=cursormoduloconexion.fetchone()
		#--Guarda el campo en las partes de la formula
		respar.append(campoformula[0])
		#--Remplaza los ids con valores para operar la formula
		formula=formula.replace(idcampovalor, str(campoformula[0]))
	#--Evlaua la formula ya con valores reales
	result=eval(formula)
	#--Retorna el valor de la formula ejecutada
	return result

#--Método que evalua una función construida desde el entorno gráfico
#--Entrada: Formula a ejecutar,id del documento y termino de busqueda para hacer ejecución
#--Salida: Devuelve el valor de la ejecución de la formula
def evaluaFuncionInventario(formula,iddocumento,terminobusqueda,vigencia,tipoMovimiento):
	#--Variable que hace de contador para saber cantidad de expresiones
	cont=0
	#--Variable que contiene el comodin con el que se buscan los ids para operaciones
	variable=""
	#--Lista de ids para buscar los datos y remplazar en la función 
	ids=[]
	#--Contenedor que separa la funcion en partes---Solo prueba
	respar=[]
	#--Recorre los valores en la formula en busqueda de los ids
	for val in formula:
		#--Comodin con el que vienen las formulas
		variable="$"
		#--Revisa si esta el comodin para la busqueda de valores de Id
		if val=="$":
			#--Encuentra el valo de los pivotes
			#--Busca los digitos después del pivote para ir buscando los ids
			buscadigitos=formula[cont+1::]
			#--Recorre los digitos en busqueda de los ids
			for digi in buscadigitos:
				#--Con esta excepción se controla que los valores que se asignan al id sean solo númericos
				try:
					a=int(digi)
					variable+=str(a)
				except ValueError:
					break
			try:
				#--Se busca la posición de los indices de las variables que se estan recorriendo
				#--Si no lo encuentra la anexa, no permite replicas
				posicion=ids.index(variable)
			except:
				#--Si no encuentra Index, procede a ingresar el valor de la variable
				ids.append(variable)
		#--Contador aumentando de uno en uno para saber cantidad de expresiones
		cont+=1
	#--Recorre los valores con el fin de remplazar los valores para entrar en ejecucioón de la formula
	for idcampovalor in ids:
		#--Separa los valores por el pivote para hacer los remplazos correspondientes
		separavalor=idcampovalor.split("$")
		#--Logica para la busqueda desde django
		#--Consulta en el modelo los datos del campo para realizar la busqueda del valor
		campovalorestablecido=Campo_Valor.objects.get(id_campo_valor=int(separavalor[1]))
		#--Busca la tabla correspondiente para ejecución de busqueda
		tabla=campovalorestablecido.id_tabla
		#--Realiza la consulta en la base de datos del valor a remplazar
		cursormoduloconexion.execute("SELECT "+str(campovalorestablecido.nombre)+" from "+str(tabla.nombre)+" WHERE "+str(terminobusqueda)+"="+str(iddocumento)+" and id_vigencia="+str(vigencia)+" and ID_TIPO_MOVIMIENTO="+str(tipoMovimiento))
		logger_saves.info("Query Busqueda Info Formula")
		logger_saves.info("SELECT "+str(campovalorestablecido.nombre)+" from "+str(tabla.nombre)+" WHERE "+str(terminobusqueda)+"="+str(iddocumento)+" and id_vigencia="+str(vigencia)+" and ID_TIPO_MOVIMIENTO="+str(tipoMovimiento))
		campoformula=cursormoduloconexion.fetchone()
		logger_saves.info("Tamaño del los datos a evaluar: ")
		logger_saves.info(len(campoformula))
		#--Guarda el campo en las partes de la formula
		respar.append(campoformula[0])
		#--Remplaza los ids con valores para operar la formula
		formula=formula.replace(idcampovalor, str(campoformula[0]))
		logger_saves.info("Como queda la formula remplazada: ")
		logger_saves.info(formula)
	#--Evlaua la formula ya con valores reales
	result=eval(formula)
	#--Retorna el valor de la formula ejecutada
	return result

#---Ejecucion para interfaz contable SalidaCON
def ejecutaMovimientoGrupoInventarioSalidasCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV):
	quehace.append("Entra a operar movimientos contables en la base de datos")
	campovalor=asiento.id_campo_valor
	tabla=campovalor.id_tabla
	nombretabla=tabla.nombre
	grupo=asiento.id_grupo
	valori=[]
	quehace.append("Entra a cargar las basicas para el movimiento contable de salida CON")
	if evaluacion is None:
		try:
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" and FECHA_MOV=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			quehace.append("Consulta valor a mover")
			quehace.append(cursormoduloconexion)
			valori=cursormoduloconexion.fetchone()
		except Exception, e:
			quehace.append("No existe parametrizacion, va por el join")
			consultajoincon="select in_det_mov_con.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(idcenop)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con.fecha_mov=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(consultajoincon)
			quehace.append("Imprime Join")
			quehace.append(consultajoincon)
			datosdetalle=cursormoduloconexion.fetchall()
			for infodetalle in datosdetalle:
				valori.append(infodetalle)
	else:
		quehace.append("Asume el valor de la evaluacion")
		valori.append(evaluacion)
		quehace.append(valori)
	quehace.append("Valor de id del asiento")
	quehace.append(asiento.id_asiento)
	quehace.append("Valor a operar")
	quehace.append(valori)
	id_asiento_detalle=Tabla_Propiedades.objects.get(nombre="ASIENTO_DETALLE_SALIDA_CON")
	id_asiento_detalle=id_asiento_detalle.valor
	quehace.append("Id del asiento para detalle de entrada CON "+id_asiento_detalle)
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	if str(asiento.id_asiento)==id_asiento_detalle:
		quehace.append("Ejecuta de acuerdo al join establecido con los parametros de interfaz contable")
		for datoscuenta in valori:
			prueba=str(datoscuenta[6])
			quehace.append("El tamaño del auxiliar es: "+prueba)
			if prueba=="None":
				quehace.append("No tiene auxiliar")
				if anula==0:
					if asiento.naturaleza == "C":
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
					else:
						quehace.append("Ingresa movimiento con grupo en debito - Primer Error")
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
						quehace.append(querymovimientobancario)
						cursormodulocontabilidad.execute(querymovimientobancario)
				else:
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
					quehace.append(querymovimientobancario)
					cursormodulocontabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
					cursormodulocontabilidad.execute(querymovimientobancario)
					quehace.append(querymovimientobancario)
			else:
				quehace.append("Tiene auxiliar")
				if anula==0:
					if asiento.naturaleza == "C":
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
					else:
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
				else:
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
					cursormodulocontabilidad.execute(querymovimientobancario)
					quehace.append(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
					cursormodulocontabilidad.execute(querymovimientobancario)
					quehace.append(querymovimientobancario)
			idmovcontab=idmovcontab+1
	else:
		for campoestablecido in campocuenta:
			if str(id_tipo_concepto_entradaDV)==campoestablecido.valor:
				quehace.append("Ejecuta movimiento de manera normal")
				prueba=str(campoestablecido.auxiliar)
				if len(prueba)==0:
					querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
					cursormodulocontabilidad.execute(querydatanoaux)
					datoscuenta=cursormodulocontabilidad.fetchone()
					if anula==0:
						if asiento.naturaleza == "C":
							querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','0','"+str(valori[0])+"','')"
							quehace.append(querymovimientobancario)
							cursormodulocontabilidad.execute(querymovimientobancario)
						else:
							querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','"+str(valori[0])+"','0','')"
							cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append(querymovimientobancario)
					else:
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','0','"+str(valori[0])+"','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
						idmovcontab=idmovcontab+1
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','"+str(valori[0])+"','0','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
				else:
					querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
					cursormodulocontabilidad.execute(querydatanoaux)
					datoscuenta=cursormodulocontabilidad.fetchone()
					if anula==0:
						if asiento.naturaleza == "C":
							querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
							cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append(querymovimientobancario)
						else:
							querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
							cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append(querymovimientobancario)
					else:
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
						idmovcontab=idmovcontab+1
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						quehace.append(querymovimientobancario)
			idmovcontab=idmovcontab+1
	return idmovcontab
#---Fin Ejecucion para interfaz contable SalidaCON

#--Movimiento Inventario CON cuanod no hay grupo
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de salida para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto de la salida
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
def ejecutaMovimientoNoGrupoInventarioCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda,evaluacion):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	logger_saves.info("Entro por entrada sin grupo")
	logger_saves.info("Nombre del asiento a ejecutar: "+asiento.nombre)
	logger_saves.info("Nombre del concepto: "+asiento.id_concepto.nombre)
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Variable para contenido de formula
	contenidoFormula=[]
	#--Contador para identificar el valor dentro de la formula
	cont=0
	#--Contenedor para el query
	queryFormula="SELECT ("
	#--Valor de la naturaleza si hay cambio
	naturalezaAnterior=None
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if len(formu)==0:
		if tabla.nombre=="IN_MOVIMIENTOS_CON_V":
			logger_saves.info("Query busqueda datos: ")
			logger_saves.info("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_con,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_con group by id_movimientos_con,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_CON mv on tab0.id_movimientos_con=mv.ID_MOVIMIENTOS_CON and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_CON="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.execute("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_con,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_con group by id_movimientos_con,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_CON mv on tab0.id_movimientos_con=mv.ID_MOVIMIENTOS_CON and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_CON="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.fetchall()
		else:
			logger_saves.info("Query busqueda datos: ")
			logger_saves.info("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
			valori=cursormoduloconexion.fetchall()
	else:
		#--Recorre los valores en la formula en busqueda de los ids
		for val in formu:
			#--Comodin con el que vienen las formulas
			variable="$"
			#--Revisa si esta el comodin para la busqueda de valores de Id
			if val=="$":
				#--Encuentra el valo de los pivotes
				#--Busca los digitos después del pivote para ir buscando los ids
				buscadigitos=formu[cont+1::]
				#--Recorre los digitos en busqueda de los ids
				for digi in buscadigitos:
					#--Con esta excepción se controla que los valores que se asignan al id sean solo númericos
					try:
						a=int(digi)
						variable+=str(a)
					except ValueError:
						break
				try:
					#--Se busca la posición de los indices de las variables que se estan recorriendo
					#--Si no lo encuentra la anexa, no permite replicas
					posicion=contenidoFormula.index(variable)
				except:
					#--Si no encuentra Index, procede a ingresar el valor de la variable
					contenidoFormula.append(variable)
			#--Contador aumentando de uno en uno para saber cantidad de expresiones
			cont+=1
		#--Recorre los valores con el fin de remplazar los valores para entrar en ejecucioón de la formula
		for idcampovalor in contenidoFormula:
			#--Separa los valores por el pivote para hacer los remplazos correspondientes
			separavalor=idcampovalor.split("$")
			#--Logica para la busqueda desde django
			#--Consulta en el modelo los datos del campo para realizar la busqueda del valor
			campovalorestablecido=Campo_Valor.objects.get(id_campo_valor=int(separavalor[1]))
			formu=formu.replace(idcampovalor, campovalorestablecido.nombre)
		logger_saves.info("Query busqueda datos: ")
		logger_saves.info("SELECT ("+formu+") as value from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
		cursormoduloconexion.execute("SELECT ("+formu+") as value from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
		valori=cursormoduloconexion.fetchall()
	logger_saves.info("datos:")
	logger_saves.info(valori)
	#--Asigna una variable para saber si contiene o no auxiliar
	auxasiento=str(asiento.auxiliar)
	if len(valori)!=0:
		for valor in valori:
		    #--MOdificacion - se mira por donde viene el valor para poderlo evaluar
			valorComparacion=0
			valorComparacion=valor[0]
			#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
			logger_saves.info("Tipo del valor a ingresar")
			logger_saves.info(type(valor))
			logger_saves.info("Valor a ingresar: ")
			logger_saves.info(valorComparacion)
			if valorComparacion < 0:
				ValorFinal=valorComparacion*-1
				if asiento.naturaleza=="D":
					naturalezaAnterior=asiento.naturaleza
					asiento.naturaleza="C"
				else:
					naturalezaAnterior=asiento.naturaleza
					asiento.naturaleza="D"
			else:
				ValorFinal=valorComparacion
			if len(asiento.auxiliar)==0:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					sqlJoinProveedor="select in_cotizacion.id_mae_ter from in_movimientos_con join in_contrato_mov_con on in_movimientos_con.id_movimientos_con = in_contrato_mov_con.id_movimientos_con and in_movimientos_con.id_vigencia = in_contrato_mov_con.id_vigencia_mov and in_movimientos_con.id_cen_op_fin=in_contrato_mov_con.id_cen_op_mov and in_movimientos_con.id_tipo_movimiento=in_contrato_mov_con.id_tipo_movimiento join in_contrato on in_contrato_mov_con.id_contrato = in_contrato.id_contrato and in_contrato_mov_con.id_vigencia_cont=in_contrato.id_vigencia and in_contrato_mov_con.id_cen_op_cont= in_contrato.id_cen_op join in_cotizacion on in_contrato.id_cotizacion=in_cotizacion.id_cotizacion and in_contrato.id_vigencia=in_cotizacion.id_vigencia and in_contrato.id_cen_op=in_cotizacion.id_cen_op where in_movimientos_con.id_movimientos_con="+str(valorbusqueda)+" and in_movimientos_con.id_cen_op_fin="+str(idcenop)+" and in_movimientos_con.id_vigencia="+str(id_vigencia)+" and in_movimientos_con.id_tipo_movimiento=1"
					cursormoduloconexion.execute(sqlJoinProveedor)
					maeterProveedor=cursormoduloconexion.fetchone()
					#--20140217 Modificacion, en caso que no encuentre proveedor para el entrada con esta cuenta se cambia.
					try:
						id_maeter=str(maeterProveedor[0])
					except Exception, e:
						id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación	
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,ValorFinal,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							try:
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
							except Exception, e:
								logger_saves.error('Error.code = '+str(error))
							try:
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							except Exception, e:
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',ValorFinal,0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			else:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,ValorFinal,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',ValorFinal,0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			if naturalezaAnterior is not None:
				asiento.naturaleza=naturalezaAnterior
				naturalezaAnterior=None
			#--Aumenta en uno el número de la secuencia del movimiento contable
			idmovimientoactivo+=1 
	#--Retorna el número de secuencia del movimento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#---Fin Ejecución para interfaz contable inventarioDV

#---Ejecucion para interfaz contable entradaCON
#--Ejecuta movimiento contable de inventarioDV para entradas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de entrada para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto de la entrada
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
#--20140219 - Modificacion, Se ingresa un parametro para saber por que fecha debe buscar, ya sea por la fecha de anulacion o la fecha del movimiento
def ejecutaMovimientoGrupoInventarioCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if evaluacion is None:
		#--Excepcion que maneja si debe tomar valores de la cabecera de lo contrario ejecuta JOIN para subir los valores del IN_PARAM_CONTAB
		try:
			#--Toma valores de la cabecera - 20140217 Se cambia y corrige la consulta para agregar los valores d ela llave principal compuesta a la consulta
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" and "+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP_FIN="+str(cen_op_busqueda))
			#--Almacena el valor
			valori=cursormoduloconexion.fetchone()
			cursormoduloconexion.execute("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_con,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_con group by id_movimientos_con,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_CON mv on tab0.id_movimientos_con=mv.ID_MOVIMIENTOS_CON and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.fetchone()
			if valori is None:
				valori=[0]
			logger_saves.info("Entro por la cabecera")
			logger_saves.info("Query")
			logger_saves.info("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_con,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_con group by id_movimientos_con,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_CON mv on tab0.id_movimientos_con=mv.ID_MOVIMIENTOS_CON and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info(valori)
			logger_saves.info("/************************************************************************/")
		except Exception, e:
			#--Toma valores de IN_PARAM_CONTAB - 20140113 Se agrega a la consulta el valor de los digitos para buscar si tiene o no maeter
			cursormoduloconexion.execute("select in_det_mov_con.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info("QUERY BUSQUEDA elemento")
			logger_saves.info("select in_det_mov_con.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			#--Captura los valores
			datosdetalle=cursormoduloconexion.fetchall()
			#--Recorre los valores
			for infodetalle in datosdetalle:
				#--Almacena el valor
				valori.append(infodetalle)
			logger_saves.info("Entro el join")
			logger_saves.info("Query")
			logger_saves.info("select in_det_mov_con.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info(valori)
			logger_saves.info("/************************************************************************/")
	else:
		#--Toma valores de IN_PARAM_CONTAB - 20140113 Se agrega a la consulta el valor de los digitos para buscar si tiene o no maeter
		cursormoduloconexion.execute("select (in_det_mov_con.valor_unitario*in_det_mov_con.cantidad) as valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		logger_saves.info("QUERY BUSQUEDA elemento")
		logger_saves.info("select (in_det_mov_con.valor_unitario*in_det_mov_con.cantidad) as valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		#--Captura los valores
		datosdetalle=cursormoduloconexion.fetchall()
		for infodetalle in datosdetalle:
			logger_saves.info("Datos que se recorren")
			logger_saves.info(infodetalle)
			valori.append(infodetalle)
	logger_saves.info("Valores a ingresar")
	logger_saves.info(valori)
	logger_saves.info("/************************************************************************/")
	logger_saves.info("Naturaleza del asiento")
	logger_saves.info(asiento.naturaleza)
	logger_saves.info("/************************************************************************/")
	#--Busca en la tabla de propiedades el id del asiento del detalle de la entrada DV
	id_asiento_detalle=Tabla_Propiedades.objects.get(nombre="ASIENTO_DETALLE_ENTRADA_CON")
	id_asiento_detalle=id_asiento_detalle.valor
	#--Busca las cuentas parametrizadas en el grupo
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	#--Verifica que el asiento y el id corresponda a detalle
	logger_saves.info("Id del asiento detalle")
	logger_saves.info(id_asiento_detalle)
	logger_saves.info("Id del asiento que llega")
	logger_saves.info(asiento.id_asiento)
	logger_saves.info("/************************************************************************/")
	if str(asiento.id_asiento)==id_asiento_detalle:
		logger_saves.info("Id del asiento detalle")
		logger_saves.info(id_asiento_detalle)
		logger_saves.info("/************************************************************************/")
		#--Recorre los datos de la cuenta para ingresarlo en los movimientos
		for datoscuenta in valori:
			#--20140113 Se ingresa el codigo de busqeuda para maeter de acuerdo a lo establecido por el codigo de in_param_contab
			#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
			if datoscuenta[7] is None:
				id_maeter=''
			else:
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+datoscuenta[7]
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				logger_saves.info("Cuenta para manejo de maeter")
				logger_saves.info(datostercero)
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					#--20140115 Modificacion, en caso que la cuenta sea la 240101 y que tenga Tercero se pasa al proveedor
					sqlJoinProveedor="select in_cotizacion.id_mae_ter from in_movimientos_con join in_contrato_mov_con on in_movimientos_con.id_movimientos_con = in_contrato_mov_con.id_movimientos_con and in_movimientos_con.id_vigencia = in_contrato_mov_con.id_vigencia_mov and in_movimientos_con.id_cen_op_fin=in_contrato_mov_con.id_cen_op_mov and in_movimientos_con.id_tipo_movimiento=in_contrato_mov_con.id_tipo_movimiento join in_contrato on in_contrato_mov_con.id_contrato = in_contrato.id_contrato and in_contrato_mov_con.id_vigencia_cont=in_contrato.id_vigencia and in_contrato_mov_con.id_cen_op_cont= in_contrato.id_cen_op join in_cotizacion on in_contrato.id_cotizacion=in_cotizacion.id_cotizacion and in_contrato.id_vigencia=in_cotizacion.id_vigencia and in_contrato.id_cen_op=in_cotizacion.id_cen_op where in_movimientos_con.id_movimientos_con="+str(valorbusqueda)+" and in_movimientos_con.id_cen_op_fin="+str(idcenop)+" and in_movimientos_con.id_vigencia="+str(id_vigencia)+" and in_movimientos_con.id_tipo_movimiento=1"
					cursormoduloconexion.execute(sqlJoinProveedor)
					maeterProveedor=cursormoduloconexion.fetchone()
					#--20140217 Modificacion, en caso que no encuentre proveedor para el entrada con esta cuenta se cambia.
					try:
						id_maeter=str(maeterProveedor[0])
					except Exception, e:
						id_maeter=str(id_maeter)
			#--Captura el valor del auxiliar
			prueba=str(datoscuenta[6])
			#--Verifica si tiene o no auxiliar
			if prueba=="None":
				#--Ejecuta sin auxiliar
				#--Verifica si anula o no el movimiento
				if anula==0:
					#--Verifica la naturaleza del asiento
					if asiento.naturaleza == "C":
						if datoscuenta[0]!=0:
							#--Inserta asiento en credito sin auxiliar
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',0,datoscuenta[0],'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
					else:
						if datoscuenta[0]!=0:
							#--Inserta asiento en debito sin auxiliar
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',datoscuenta[0],0,'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
				#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
				#--else:
					#--Ejecuta anulacion
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--Aumenta en uno la secuencia de ingreso
					#--idmovcontab=idmovcontab+1
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
			else:
				#--Ejecuta con auxiliar
				#--Verifica si el movimiento tiene anulacion
				if anula==0:
					#--Verifica la naturaleza del movimiento
					if asiento.naturaleza == "C":
						if datoscuenta[0]!=0:
							#--Ingresa con auxiliar en credito
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',0,datoscuenta[0],'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
					else:
						if datoscuenta[0]!=0:
							#--Ingresa con auxiliar en debito
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',datoscuenta[0],0,'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
				#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa			
				#--else:
					#--Ingresa anulacion
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--Aumenta en uno la secuencia de insercion del movimiento contable
					#--idmovcontab=idmovcontab+1
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
			#--Aumenta en uno la secuencia de insercion del movimiento contable
			idmovimientoactivo+=1
	else:
		queryCuentasParametrizadas="SELECT * from IC_CAMPO_CUENTA WHERE ID_GRUPO_ID="+str(grupo.id_grupo)+" AND VALOR='"+str(id_tipo_concepto_entradaDV)+"'"
		cursormodulocontabilidad.execute(queryCuentasParametrizadas)
		datosCuentasParametrizadas=cursormodulocontabilidad.fetchone()
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Verifica si las cuentas establecidas en las parametrizaciones estan vigentes para operar query:")
		logger_saves.info(queryCuentasParametrizadas)
		logger_saves.info("Dato cuenta en query")
		logger_saves.info(datosCuentasParametrizadas)
		if datosCuentasParametrizadas is None:
			try:
				index=idscuentasfaltantes.index(str(id_tipo_concepto_entradaDV)+"|"+str(grupo.nombre))
			except Exception, e:
				idscuentasfaltantes.append(str(id_tipo_concepto_entradaDV)+"|"+str(grupo.nombre))
			cache.set("error", -1)
		#--Recorre las cuentas parametrizadas
		for campoestablecido in campocuenta:
			#--Verifica que el concepto de entrada y la cuenta sean iguales
			logger_saves.info("Entro por las cuentas")
			logger_saves.info("Concepto entrada DV")
			logger_saves.info(id_tipo_concepto_entradaDV)
			logger_saves.info("Cuenta parametrizada")
			logger_saves.info(campoestablecido.valor)
			logger_saves.info("/************************************************************************/")
			if str(id_tipo_concepto_entradaDV)==campoestablecido.valor:
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					#--20140115 Modificacion, en caso que la cuenta sea la 240101 y que tenga Tercero se pasa al proveedor
					if(campoestablecido.catalogo=='240101'):
						sqlJoinProveedor="select in_cotizacion.id_mae_ter from in_movimientos_dv join in_contrato_mov_dv on in_movimientos_dv.id_movimientos_dv = in_contrato_mov_dv.id_movimientos_dv and in_movimientos_dv.id_vigencia = in_contrato_mov_dv.id_vigencia_mov and in_movimientos_dv.id_cen_op_fin=in_contrato_mov_dv.id_cen_op_mov and in_movimientos_dv.id_tipo_movimiento=in_contrato_mov_dv.id_tipo_movimiento join in_contrato on in_contrato_mov_dv.id_contrato = in_contrato.id_contrato and in_contrato_mov_dv.id_vigencia_cont=in_contrato.id_vigencia and in_contrato_mov_dv.id_cen_op_cont= in_contrato.id_cen_op join in_cotizacion on in_contrato.id_cotizacion=in_cotizacion.id_cotizacion and in_contrato.id_vigencia=in_cotizacion.id_vigencia and in_contrato.id_cen_op=in_cotizacion.id_cen_op where in_movimientos_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_movimientos_dv.id_cen_op_fin="+str(idcenop)+" and in_movimientos_dv.id_vigencia="+str(id_vigencia)+" and in_movimientos_dv.id_tipo_movimiento=1"
						cursormoduloconexion.execute(sqlJoinProveedor)
						maeterProveedor=cursormoduloconexion.fetchone()
						#--20140217 Modificacion, en caso que no encuentre proveedor para el entrada con esta cuenta se cambia.
						try:
							id_maeter=str(maeterProveedor[0])
						except Exception, e:
							id_maeter=str(id_maeter)
					else:
						id_maeter=str(id_maeter)
				#--Captura el auxiliar del movimiento
				prueba=str(campoestablecido.auxiliar)
				#--Verifica si el movimiento contiene o no auxiliar
				if len(prueba)==0:
					#--Consulta los datos de la cuenta correspondiente
					querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
					cursormodulocontabilidad.execute(querydatanoaux)
					datoscuenta=cursormodulocontabilidad.fetchone()
					#--Revisa si se anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del movimiento
						if asiento.naturaleza == "C":
							if valori[0]!=0:
								#--Inserta asiento en credito sin auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if valori[0]!=0:
								#--Inserta asiento en debito sin auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
					#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
					#--else:
						#--Ejecuta anulacion
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','0','"+str(valori[0])+"','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--Aumenta en uno la secuencia de insercion del movimiento contable
						#--idmovcontab=idmovcontab+1
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','"+str(valori[0])+"','0','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
				else:
					#--Consulta los datos de la cuenta correspondiente
					querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
					cursormodulocontabilidad.execute(querydatanoaux)
					datoscuenta=cursormodulocontabilidad.fetchone()
					#--Revisa si se anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del movimiento
						if asiento.naturaleza == "C":
							if valori[0]!=0:
								#--Inserta asiento en credito con auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if valori[0]!=0:
								#--Inserta asiento en debito con auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
					#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
					#--else:
						#--Ejecuta anulacion
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--Aumenta en uno la secuencia de insercion del movimiento contable
						#--idmovcontab=idmovcontab+1
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
			#--Aumenta en uno la secuencia de insercion del movimiento contable
			idmovimientoactivo+=1
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#---Fin ejecucion interfaz contable entradaCON
#---Ejecucion para interfaz contable inventarioSalidas
#--Ejecuta movimiento contable de inventarioDV para salidas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de salida para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto de la salida
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
def ejecutaMovimientoNoGrupoInventarioSalidasDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if len(formu)==0:
		if tabla.nombre=="IN_MOVIMIENTOS_DV":
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
			valori=cursormoduloconexion.fetchall()
		else:
			if tabla.nombre=="IN_INVENTARIO_DV":
				cursormoduloconexion.execute("SELECT "+tabla.nombre+"."+campovalor.nombre+" from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
				valori=cursormoduloconexion.fetchall()
	else:
		quehace.append("Entra por evaluacion")
	#--Asigna una variable para saber si contiene o no auxiliar
	auxasiento=str(asiento.auxiliar)
	if len(valori)!=0:
		for valor in valori:
			if len(asiento.auxiliar)==0:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación	
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valor[0],'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valor[0],0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			else:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valor[0],'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valor[0],0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			#--Aumenta en uno el número de la secuencia del movimiento contable
			idmovimientoactivo+=1 
	#--Retorna el número de secuencia del movimento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#--Ejecuta movimiento contable de inventarioDV para salidas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de salida para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto de la salida
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
#--20140219 - Modificacion, Se ingresa un parametro para saber por que fecha debe buscar, ya sea por la fecha de anulacion o la fecha del movimiento
def ejecutaMovimientoGrupoInventarioSalidasDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if len(formu)==0:
		#--Excepcion que maneja si debe tomar valores de la cabecera de lo contrario ejecuta JOIN para subir los valores del IN_PARAM_CONTAB
		try:
			#--Toma valores de la cabecera - 20140217 Se cambia y corrige la consulta para agregar los valores d ela llave principal compuesta a la consulta
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" and "+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
			#--Almacena el valor
			valori=cursormoduloconexion.fetchone()
			cursormoduloconexion.execute("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_dv,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_dv group by id_movimientos_dv,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_DV mv on tab0.id_movimientos_dv=mv.ID_MOVIMIENTOS_DV and tab0.id_cen_op=mv.ID_CEN_OP and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.fetchone()
			if valori is None:
				valori=[0]
		except Exception, e:
			#--Toma valores de IN_PARAM_CONTAB - 20140113 Se agrega a la consulta el valor de los digitos para buscar si tiene o no maeter
			cursormoduloconexion.execute("select "+tabla.nombre+"."+campovalor.nombre+",in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+"and IN_PARAM_CONTAB.ID_TIPO_TRANSAC=1 and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			#--Captura los valores
			datosdetalle=cursormoduloconexion.fetchall()
			#--Recorre los valores
			for infodetalle in datosdetalle:
				#--Almacena el valor
				valori.append(infodetalle)
			logger_saves.info("Query para busqueda de cuentas: ")
			logger_saves.info("select in_det_mov_dv.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+"and IN_PARAM_CONTAB.ID_TIPO_TRANSAC=1 and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info("Cuentas seleccionadas para insercion por in_param_contab")
			logger_saves.info(valori)
	else:
		#--Almacena el valor
		#--valori.append(evaluacion)
		if "DEPRECIACION ACUMULADA" in asiento.nombre:
			datosdetalle=cursormoduloconexion.execute("select (IN_INVENTARIO_DV.COSTO_INICIAL-IN_INVENTARIO_DV.COSTO_ACTUAL) as depreciacion,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and IN_PARAM_CONTAB.ID_TIPO_TRANSAC=2 and IN_PARAM_CONTAB.NATURALEZA='"+str(asiento.naturaleza)+"' and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			for infodetalle in datosdetalle:
				#--Almacena el valor
				valori.append(infodetalle)
			logger_saves.info("Query para busqueda de cuentas Depreciacion: ")
			logger_saves.info("select (IN_INVENTARIO_DV.COSTO_INICIAL-IN_INVENTARIO_DV.COSTO_ACTUAL) as depreciacion,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and IN_PARAM_CONTAB.ID_TIPO_TRANSAC=2 and IN_PARAM_CONTAB.NATURALEZA='"+str(asiento.naturaleza)+"' and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info("Cuentas seleccionadas para insercion por in_param_contab Depreciacion")
			logger_saves.info(valori)
			logger_saves.info("Naturaleza del movimiento: "+asiento.naturaleza)
	#--Busca en la tabla de propiedades el id del asiento del detalle de la entrada DV
	id_asiento_detalle=Tabla_Propiedades.objects.get(nombre="ASIENTO_DETALLE_SALIDA_DV")
	id_asiento_detalle=id_asiento_detalle.valor
	#--Busca las cuentas parametrizadas en el grupo
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	logger_saves.info("Valor del id del asiento para ejecucion: "+str(asiento.id_asiento))
	logger_saves.info("Id dle asiento que se encuentra en la bd: "+id_asiento_detalle)
	#--Verifica que el asiento y el id corresponda a detalle
	if str(asiento.id_asiento)==id_asiento_detalle:
		logger_saves.info("Entra por el id del asiento, vs id del asiento detalle")
		#--Recorre los datos de la cuenta para ingresarlo en los movimientos
		for datoscuenta in valori:
			#--20140113 Se ingresa el codigo de busqeuda para maeter de acuerdo a lo establecido por el codigo de in_param_contab
			#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
			if datoscuenta[7] is None:
				id_maeter=''
			else:
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+str(datoscuenta[7])
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
			#--Captura el valor del auxiliar
			prueba=str(datoscuenta[6])
			#--Verifica si tiene o no auxiliar
			if prueba=="None":
				#--Ejecuta sin auxiliar
				#--Verifica si anula o no el movimiento
				if anula==0:
					#--Verifica la naturaleza del asiento
					if asiento.naturaleza == "C":
						if datoscuenta[0]!=0:
							#--Inserta asiento en credito sin auxiliar
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',0,datoscuenta[0],'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
					else:
						if datoscuenta[0]!=0:
							#--Inserta asiento en debito sin auxiliar
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',datoscuenta[0],0,'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))	
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)			
				#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
				#--else:
				    #--Ejecuta anulacion
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--Aumenta en uno la secuencia de ingreso
					#--idmovcontab=idmovcontab+1
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--quehace.append(querymovimientobancario)
			else:
				#--Ejecuta con auxiliar
				#--Verifica si el movimiento tiene anulacion
				if anula==0:
					#--Verifica la naturaleza del movimiento
					if asiento.naturaleza == "C":
						if datoscuenta[0]!=0:
							#--Ingresa con auxiliar en credito
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',0,datoscuenta[0],'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
					else:
						if datoscuenta[0]!=0:
							#--Ingresa con auxiliar en debito
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',datoscuenta[0],0,'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))	
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)			
								#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa			
				#--else:
				    #--Ingresa anulacion
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--Aumenta en uno la secuencia de insercion
					#--idmovcontab=idmovcontab+1
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
			idmovimientoactivo+=1
	else:
		if len(campocuenta)==0:
			logger_saves.info("Entra cuando el campo cuenta es 0, es decir por Depreciacion")
			#--20140508 - Modificacion, se revisa si tiene o no Reversa para que cambie la naturaleza dle ingreso del asiento
			if "REVERSA" in asiento.nombre:
				logger_saves.info("Cambia la naturaleza por la reversa de la depreciacion")
				if asiento.naturaleza == "C":
					asiento.naturaleza="D"
				else:
					asiento.naturaleza="C"
				logger_saves.info("Naturaleza Cambiada: "+asiento.naturaleza)
			for datoscuenta in valori:
				#--20140113 Se ingresa el codigo de busqeuda para maeter de acuerdo a lo establecido por el codigo de in_param_contab
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				if datoscuenta[7] is None:
					id_maeter=''
				else:
					querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+str(datoscuenta[7])
					cursormodulocontabilidad.execute(querytercero)
					datostercero=cursormodulocontabilidad.fetchone()
					#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
					if datostercero[0]==0:
						id_maeter=''
					else:
						id_maeter=str(id_maeter)
				#--Captura el valor del auxiliar
				prueba=str(datoscuenta[6])
				#--Verifica si tiene o no auxiliar
				if prueba=="None":
					#--Ejecuta sin auxiliar
					#--Verifica si anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del asiento
						if asiento.naturaleza == "C":
							if datoscuenta[0]!=0:
								#--Inserta asiento en credito sin auxiliar
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if datoscuenta[0]!=0:
								#--Inserta asiento en debito sin auxiliar
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
					#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
					#--else:
					    #--Ejecuta anulacion
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--Aumenta en uno la secuencia de ingreso
						#--idmovcontab=idmovcontab+1
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--quehace.append(querymovimientobancario)
				else:
					#--Ejecuta con auxiliar
					#--Verifica si el movimiento tiene anulacion
					if anula==0:
						#--Verifica la naturaleza del movimiento
						if asiento.naturaleza == "C":
							if datoscuenta[0]!=0:
								#--Ingresa con auxiliar en credito
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if datoscuenta[0]!=0:
								#--Ingresa con auxiliar en debito
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
					#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa			
					#--else:
					    #--Ingresa anulacion
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--Aumenta en uno la secuencia de insercion
						#--idmovcontab=idmovcontab+1
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
				idmovimientoactivo+=1
		else:
			logger_saves.info("Recorre las cuentas parametrizadas")
			#--Recorre las cuentas parametrizadas
			for campoestablecido in campocuenta:
				logger_saves.info("Cuenta que viene: "+id_tipo_concepto_entradaDV)
				logger_saves.info("Cuenta establecida: "+campoestablecido.valor)
				#--Verifica que el concepto de entrada y la cuenta sean iguales
				if str(id_tipo_concepto_entradaDV)==campoestablecido.valor:
					querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
					cursormodulocontabilidad.execute(querytercero)
					datostercero=cursormodulocontabilidad.fetchone()
					#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
					if datostercero[0]==0:
						id_maeter=''
					else:
						#--20140115 Modificacion, en caso que la cuenta sea la 240101 y que tenga Tercero se pasa al proveedor
						if(campoestablecido.catalogo=='240101'):
							sqlJoinProveedor="select in_cotizacion.id_mae_ter from in_movimientos_dv join in_contrato_mov_dv on in_movimientos_dv.id_movimientos_dv = in_contrato_mov_dv.id_movimientos_dv and in_movimientos_dv.id_vigencia = in_contrato_mov_dv.id_vigencia_mov and in_movimientos_dv.id_cen_op_fin=in_contrato_mov_dv.id_cen_op_mov and in_movimientos_dv.id_tipo_movimiento=in_contrato_mov_dv.id_tipo_movimiento join in_contrato on in_contrato_mov_dv.id_contrato = in_contrato.id_contrato and in_contrato_mov_dv.id_vigencia_cont=in_contrato.id_vigencia and in_contrato_mov_dv.id_cen_op_cont= in_contrato.id_cen_op join in_cotizacion on in_contrato.id_cotizacion=in_cotizacion.id_cotizacion and in_contrato.id_vigencia=in_cotizacion.id_vigencia and in_contrato.id_cen_op=in_cotizacion.id_cen_op where in_movimientos_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_movimientos_dv.id_cen_op_fin="+str(idcenop)+" and in_movimientos_dv.id_vigencia="+str(id_vigencia)+" and in_movimientos_dv.id_tipo_movimiento=1"
							cursormoduloconexion.execute(sqlJoinProveedor)
							maeterProveedor=cursormoduloconexion.fetchone()
							#--20140217 Modificacion, en caso que no encuentre proveedor para el entrada con esta cuenta se cambia.
							try:
								id_maeter=str(maeterProveedor[0])
							except Exception, e:
								id_maeter=str(id_maeter)
						else:
							id_maeter=str(id_maeter)
					#--Captura el auxiliar del movimiento
					prueba=str(campoestablecido.auxiliar)
					#--Verifica si el movimiento contiene o no auxiliar
					if len(prueba)==0:
						#--Consulta los datos de la cuenta correspondiente
						querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
						cursormodulocontabilidad.execute(querydatanoaux)
						datoscuenta=cursormodulocontabilidad.fetchone()
						#--Revisa si se anula o no el movimiento
						if anula==0:
							#--Verifica la naturaleza del movimiento
							if asiento.naturaleza == "C":
								if valori[0]!=0:
									#--Inserta asiento en credito sin auxiliar
									querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','0','"+str(valori[0])+"','')"
									try:
										cursormodulocontabilidad.execute(querymovimientobancario)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
							else:
								if valori[0]!=0:
									#--Inserta asiento en debito sin auxiliar
									querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','"+str(valori[0])+"','0','')"
									try:
										cursormodulocontabilidad.execute(querymovimientobancario)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
						#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
						#--else:
						    #--Ejecuta anulacion
							#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','0','"+str(valori[0])+"','')"
							#--cursormodulocontabilidad.execute(querymovimientobancario)
							#--Aumenta en uno la secuencia de insercion del movimiento contable
							#--idmovcontab=idmovcontab+1
							#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','"+str(valori[0])+"','0','')"
							#--cursormodulocontabilidad.execute(querymovimientobancario)
					else:
						#--Consulta los datos de la cuenta correspondiente
						querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
						cursormodulocontabilidad.execute(querydatanoaux)
						datoscuenta=cursormodulocontabilidad.fetchone()
						#--Revisa si se anula o no el movimiento
						if anula==0:
							#--Verifica la naturaleza del movimiento
							if asiento.naturaleza == "C":
								if valori[0]!=0:
									#--Inserta asiento en credito con auxiliar
									querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
									try:
										cursormodulocontabilidad.execute(querymovimientobancario)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
							else:
								if valori[0]!=0:
									#--Inserta asiento en debito con auxiliar
									querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
									try:
										cursormodulocontabilidad.execute(querymovimientobancario)
									except cx_Oracle.DatabaseError, ex:
										error, = ex.args
										logger_saves.error("Fallo al ingresar el movimiento contable: ")
										logger_saves.error(datosMovimiento)
										logger_saves.error('Error.code = '+str(error.code))
										logger_saves.error('str(error.message) = '+str(error.message))
										logger_saves.error('str(error.offset) = '+str(error.offset))
										errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
										erroresMovimientos.append(errorConexion)
										cache.set("error", -1)
						#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
						#--else:
						    #--Ejecuta anulacion
							#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
							#--cursormodulocontabilidad.execute(querymovimientobancario)
							#--Aumenta en uno la secuencia de insercion del movimiento contable
							#--idmovcontab=idmovcontab+1
							#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
							#--cursormodulocontabilidad.execute(querymovimientobancario)
			idmovimientoactivo+=1
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#---Finaliza ejecucion movimiento contable
#---Ejecucion para interfaz contable inventarioTrasladosCON
def ejecutaMovimientoGrupoInventarioTrasladoCON(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV):
	campovalor=asiento.id_campo_valor
	tabla=campovalor.id_tabla
	nombretabla=tabla.nombre
	grupo=asiento.id_grupo
	valori=[]
	cantidaderrores=1
	if evaluacion is None:
		if asiento.naturaleza == "C":
			consultajoincon="select in_det_mov_con.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(idcenop)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con.fecha_mov=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(consultajoincon)
			datosdetalle=cursormoduloconexion.fetchall()
			for infodetalle in datosdetalle:
				valori.append(infodetalle)
		else:
			consultajoincon="select in_det_mov_con.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co from IN_DET_MOV_CON LEFT JOIN IN_MOVIMIENTOS_CON on IN_DET_MOV_CON.id_movimientos_con=IN_MOVIMIENTOS_CON.id_movimientos_con and IN_DET_MOV_CON.id_vigencia=IN_MOVIMIENTOS_CON.id_vigencia and IN_DET_MOV_CON.id_cen_op=IN_MOVIMIENTOS_CON.id_cen_op and in_det_mov_con.id_tipo_movimiento=IN_MOVIMIENTOS_CON.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_con.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_CON.id_clase=in_param_contab.id_clase and in_det_mov_con.id_linea=in_param_contab.id_linea where in_det_mov_con.id_cen_op="+str(idcenop)+" and in_det_mov_con.id_movimientos_con="+str(valorbusqueda)+" and in_det_mov_con.id_vigencia="+str(id_vigencia)+" and in_det_mov_con.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_con.fecha_mov=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')"
			cursormoduloconexion.execute(consultajoincon)
			datosdetalle=cursormoduloconexion.fetchall()
			for infodetalle in datosdetalle:
				valori.append(infodetalle)
	else:
		valori.append(evaluacion)
	quehace.append("Entra a evaluar el movimiento")
	if len(valori)!=0:
		quehace.append("El registro en el Join no esta vacio")
		for datoscuenta in valori:
			quehace.append("Id del documento con el que esta ingresando: "+str(idmovcontab))
			prueba=str(datoscuenta[6])
			if prueba=="None":
				if anula==0:
					if asiento.naturaleza == "C":
						quehace.append("Ejecuta con credito y sin auxiliar")
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
						quehace.append(querymovimientobancario)
						try:
							#cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append("Ejecuta")
						except Exception, e:
							quehace.append("Cantidad de errores: "+str(cantidaderrores))
							quehace.append("Fallo en la consulta: "+querymovimientobancario)
							cantidaderrores=cantidaderrores+1
					else:
						quehace.append("Ejecuta con debito y sin auxiliar")
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
						quehace.append(querymovimientobancario)
						try:
							#cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append("Ejecuta")
						except Exception, e:
							quehace.append("Cantidad de errores: "+str(cantidaderrores))
							quehace.append("Fallo en la consulta: "+querymovimientobancario)
							cantidaderrores=cantidaderrores+1
				else:
					quehace.append("Ejecuta anulacion y sin auxiliar")
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
					quehace.append(querymovimientobancario)
					#cursormodulocontabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
					quehace.append(querymovimientobancario)
					#cursormodulocontabilidad.execute(querymovimientobancario)
			else:
				if anula==0:
					if asiento.naturaleza == "C":
						quehace.append("Ejecuta con credito y con auxiliar")
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						try:
							#cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append("Ejecuta")
						except Exception, e:
							quehace.append("Cantidad de errores: "+str(cantidaderrores))
							quehace.append("Fallo en la consulta: "+querymovimientobancario)
							cantidaderrores=cantidaderrores+1
					else:
						quehace.append("Ejecuta con debito y con auxiliar")
						querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
						cursormodulocontabilidad.execute(querymovimientobancario)
						try:
							#cursormodulocontabilidad.execute(querymovimientobancario)
							quehace.append("Ejecuta")
						except Exception, e:
							quehace.append("Cantidad de errores: "+str(cantidaderrores))
							quehace.append("Fallo en la consulta: "+querymovimientobancario)
							cantidaderrores=cantidaderrores+1
				else:
					quehace.append("Ejecuta anulacion y con auxiliar")
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
					#cursormodulocontabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
					#cursormodulocontabilidad.execute(querymovimientobancario)
			idmovcontab=idmovcontab+1
	return idmovcontab
#---Fin ejecución interfaz contable inventarioTrasladoCON
#---Ejecucion para interfaz contable inventarioTrasladosDV
#--Ejecuta movimiento contable de inventarioDV para entradas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de traslado para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto del traslado
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
def ejecutaMovimientoNoGrupoInventarioTrasladoDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if evaluacion is None:
		#--Revisa si la naturaleza esta en credito o en debito- Se dbee tener en cuenta que de acuerdo al centro de operacion que se fijo en la ejecucion anterior
		#--Si el centro fin esta en debito, aca el join que lo contiene debe estar sincronizado
		#--Genera valor a partir de JOIN
		#--20140312 - Modificacion, Se agrega al join que el tipo de transaccion es 1 para obviar la depreciacion
		#--20140508 - Modificacion, Se agrega condicional para saber de que tabal viene para hacer le calculo y los movimientos correspondientes
		if tabla.nombre!="IN_MOVIMIENTOS_DV":
			cursormoduloconexion.execute("select "+tabla.nombre+"."+campovalor.nombre+" from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv."+tipoAlmacenamiento+"=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where IN_MOVIMIENTOS_DV."+tipoCentroOperacion+"="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info("Query con valor en IN_movimientos_dv costo actual")
			logger_saves.info("select "+tabla.nombre+"."+campovalor.nombre+" from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv."+tipoAlmacenamiento+"=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where IN_MOVIMIENTOS_DV."+tipoCentroOperacion+"="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		else:
			cursormoduloconexion.execute("select in_det_mov_dv.valor_unitario from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv."+tipoAlmacenamiento+"=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where IN_MOVIMIENTOS_DV."+tipoCentroOperacion+"="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		datosdetalle=cursormoduloconexion.fetchall()
		#--Recorre los valores para ingresar
		for infodetalle in datosdetalle:
			#--Ingresa el valor
			valori.append(infodetalle)
	else:
		quehace.append("Entra por evaluacion")
	#--Asigna una variable para saber si contiene o no auxiliar
	auxasiento=str(asiento.auxiliar)
	if len(valori)!=0:
		for valor in valori:
			#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
			querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
			cursormodulocontabilidad.execute(querytercero)
			datostercero=cursormodulocontabilidad.fetchone()
			#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
			if datostercero[0]==0:
				id_maeter=''
			else:
				id_maeter=str(id_maeter)
			if len(asiento.auxiliar)==0:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Verifica si el ingreso es o no una anulación	
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valor[0],'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valor[0],0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			else:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valor[0],'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valor[0],0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			#--Aumenta en uno el número de la secuencia del movimiento contable
			idmovimientoactivo+=1
	#--Retorna el número de secuencia del movimento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#--Ejecuta movimiento contable de inventarioDV para entradas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de traslado para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto del traslado
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
#--20140219 - Modificacion, Se ingresa un parametro para saber por que fecha debe buscar, ya sea por la fecha de anulacion o la fecha del movimiento
def ejecutaMovimientoGrupoInventarioTrasladoDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,traslado,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,tipoCentroOperacion,tipoAlmacenamiento,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache 
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura la tabla
	tabla=campovalor.id_tabla
	#--Captura el nombre de la tabla
	nombretabla=tabla.nombre
	#--Captura el grupo
	grupo=asiento.id_grupo
	#--Variable para capturar los valores
	valori=[]
	#--Variable para manejo de errores
	cantidaderrores=1
	#--Valida si debe o no tomar el valor de evaluacion
	if evaluacion is None:
		#--Revisa si la naturaleza esta en credito o en debito- Se dbee tener en cuenta que de acuerdo al centro de operacion que se fijo en la ejecucion anterior
		#--Si el centro fin esta en debito, aca el join que lo contiene debe estar sincronizado
		#--Genera valor a partir de JOIN
		#--20140312 - Modificacion, Se agrega al join que el tipo de transaccion es 1 para obviar la depreciacion
		#--20140508 - Modificacion, Se agrega un condicional para saber si viene por depreciacion o no, en caso de venir por depreciacion se adjunta al codigo
		#-- Para que calcule la depreciacion de acuerdo a los parametros enviados.
		if "DEPRECIACION" in asiento.nombre:
			datosdetalle=cursormoduloconexion.execute("select (IN_INVENTARIO_DV.COSTO_INICIAL-IN_INVENTARIO_DV.COSTO_ACTUAL) as depreciacion,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and IN_PARAM_CONTAB.ID_TIPO_TRANSAC=2 and IN_PARAM_CONTAB.NATURALEZA='"+str(asiento.naturaleza)+"' and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info("Entra por depreciacion acumulada")
			logger_saves.info("Query para busqueda de cuentas Depreciacion: ")
			logger_saves.info("select (IN_INVENTARIO_DV.COSTO_INICIAL-IN_INVENTARIO_DV.COSTO_ACTUAL) as depreciacion,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_ini=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and IN_PARAM_CONTAB.ID_TIPO_TRANSAC=2 and IN_PARAM_CONTAB.NATURALEZA='"+str(asiento.naturaleza)+"' and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		#--20140508 - Modificacion, Se agrega validacion para saber si va por IN_MOVIMIENTOS_DV para tomar el costo actual
		elif tabla.nombre!="IN_MOVIMIENTOS_DV":
			logger_saves.info("select "+tabla.nombre+"."+campovalor.nombre+",in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos,in_det_mov_dv.id_linea,in_det_mov_dv.id_clase,IN_TIPO_ALMACENAMIENTO.id_grupo_almacenamiento from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv."+tipoAlmacenamiento+"=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where IN_MOVIMIENTOS_DV."+tipoCentroOperacion+"="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			cursormoduloconexion.execute("select "+tabla.nombre+"."+campovalor.nombre+",in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos,in_det_mov_dv.id_linea,in_det_mov_dv.id_clase,IN_TIPO_ALMACENAMIENTO.id_grupo_almacenamiento from IN_DET_MOV_DV LEFT JOIN IN_INVENTARIO_DV on IN_DET_MOV_DV.ID_INVENTARIO_DV=IN_INVENTARIO_DV.ID_INVENTARIO_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv."+tipoAlmacenamiento+"=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where IN_MOVIMIENTOS_DV."+tipoCentroOperacion+"="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		else:
			cursormoduloconexion.execute("select in_det_mov_dv.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos,in_det_mov_dv.id_linea,in_det_mov_dv.id_clase,IN_TIPO_ALMACENAMIENTO.id_grupo_almacenamiento from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv."+tipoAlmacenamiento+"=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where IN_MOVIMIENTOS_DV."+tipoCentroOperacion+"="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
		datosdetalle=cursormoduloconexion.fetchall()
		#--Recorre los valores para ingresar
		for infodetalle in datosdetalle:
			#--Ingresa el valor
			valori.append(infodetalle)
	else:
		#--Toma el valor de la evaluacion
		valori.append(evaluacion)
	#--Verifica que si contiene datos
	if len(valori)!=0:
		#--20140508 - MOdificacion, se ingresa el codigo cuando es depreciacion acumulada
		if "DEPRECIACION ACUMULADA" in asiento.nombre:
			logger_saves.info("Entra cuando el campo cuenta es 0, es decir por Depreciacion")
			if "REVERSA" in asiento.nombre:
				logger_saves.info("Cambia la naturaleza por la reversa de la depreciacion, NAturaleza con la que viene el asiento: "+asiento.naturaleza)
				if asiento.naturaleza == "C":
					asiento.naturaleza="D"
				else:
					asiento.naturaleza="C"
				logger_saves.info("Naturaleza Cambiada: "+asiento.naturaleza)
			for datoscuenta in valori:
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				if datoscuenta[7] is None:
					id_maeter=''
				else:
					querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+str(datoscuenta[7])
					cursormodulocontabilidad.execute(querytercero)
					datostercero=cursormodulocontabilidad.fetchone()
					#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
					if datostercero[0]==0:
						id_maeter=''
					else:
						id_maeter=str(id_maeter)
				#--Captura el valor del auxiliar
				prueba=str(datoscuenta[6])
				#--Verifica si tiene o no auxiliar
				if prueba=="None":
					#--Ejecuta sin auxiliar
					#--Verifica si anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del asiento
						if asiento.naturaleza == "C":
							if datoscuenta[0]!=0:
								#--Inserta asiento en credito sin auxiliar
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if datoscuenta[0]!=0:
								#--Inserta asiento en debito sin auxiliar
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
				else:
					#--Ejecuta sin auxiliar
					#--Verifica si anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del asiento
						if asiento.naturaleza == "C":
							if datoscuenta[0]!=0:
								#--Inserta asiento en credito sin auxiliar
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if datoscuenta[0]!=0:
								#--Inserta asiento en debito sin auxiliar
								querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
								try:
									cursormodulocontabilidad.execute(querymovimientobancario)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
				#--20140219 - Modificacion, Sube en uno el id del movimiento contable con nueva variable paa movimiento
				idmovimientoactivo+=1
		else:
			for datoscuenta in valori:
				#20140312 - Modificacion, Se agrega consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+str(datoscuenta[7])
				try:
					cursormodulocontabilidad.execute(querytercero)
					datostercero=cursormodulocontabilidad.fetchone()
					#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
					if datostercero[0]==0:
						id_maeter=''
					else:
						id_maeter=str(id_maeter)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("No existe parametrización en Inventarios para esta entrada: ")
					logger_saves.error(querytercero)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="No existe parametrización en Inventarios para esta entrada:|"+str(datoscuenta[8])+"|"+str(datoscuenta[9])+"|"+str(datoscuenta[10])+"|"+str(querytercero)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					conceptosInventarioFaltantes.append(errorConexion)
					cache.set("error", -1)
				#--Captura de valor de Auxiliar
				prueba=str(datoscuenta[6])
				#--Revisa si la cuenta contiene o no auxiliar
				if prueba=="None":
					#--Revisa si viene anulado o no
					if anula==0:
						#--Revisa si la naturaleza es debito o credito
						if asiento.naturaleza == "C":
							if datoscuenta[0]!=0:
								#--20140219 - Modificacion, Inserta movimiento en Credito - Cambia variable de idmovimiento por la que tiene cache
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',0,datoscuenta[0],'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if datoscuenta[0]!=0:
								#--20140219 - Modificacion, Inserta movimiento en Debito - Cambia variable de idmovimiento por la que tiene cache
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',datoscuenta[0],0,'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
				else:
					#--Revisa si viene anulado o no
					if anula==0:
						#--Revisa si la naturaleza es debito o credito
						if asiento.naturaleza == "C":
							if datoscuenta[0]!=0:
								#--20140219 - Modificacion, Inserta movimiento en Credito - Cambia variable de idmovimiento por la que tiene cache
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',0,datoscuenta[0],'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if datoscuenta[0]!=0:
								#--20140219 - Modificacion, Inserta movimiento en Debito - Cambia variable de idmovimiento por la que tiene cache
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',datoscuenta[0],0,'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
				#--20140219 - Modificacion, Sube en uno el id del movimiento contable con nueva variable paa movimiento
				idmovimientoactivo+=1
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#---Fin ejecución interfaz contable inventarioTrasladoDV
#---Ejecución para interfaz contable inventarioDV
#--Ejecuta movimiento contable de inventarioDV para entradas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de entrada para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto de la entrada
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
#--20140219 - Modificacion, Se ingresa un parametro para saber por que fecha debe buscar, ya sea por la fecha de anulacion o la fecha del movimiento
def ejecutaMovimientoGrupoInventarioDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if evaluacion is None:
		#--Excepcion que maneja si debe tomar valores de la cabecera de lo contrario ejecuta JOIN para subir los valores del IN_PARAM_CONTAB
		try:
			#--Toma valores de la cabecera - 20140217 Se cambia y corrige la consulta para agregar los valores d ela llave principal compuesta a la consulta
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" and "+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD') AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP_FIN="+str(cen_op_busqueda))
			#--Almacena el valor
			valori=cursormoduloconexion.fetchone()
			cursormoduloconexion.execute("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_dv,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_dv group by id_movimientos_dv,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_DV mv on tab0.id_movimientos_dv=mv.ID_MOVIMIENTOS_DV and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.fetchone()
			if valori is None:
				valori=[0]
			logger_saves.info("Entro por la cabecera")
			logger_saves.info("Query")
			logger_saves.info("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_dv,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_dv group by id_movimientos_dv,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_DV mv on tab0.id_movimientos_dv=mv.ID_MOVIMIENTOS_DV and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info(valori)
			logger_saves.info("/************************************************************************/")
		except Exception, e:
			#--Toma valores de IN_PARAM_CONTAB - 20140113 Se agrega a la consulta el valor de los digitos para buscar si tiene o no maeter
			cursormoduloconexion.execute("select in_det_mov_dv.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			#--Captura los valores
			datosdetalle=cursormoduloconexion.fetchall()
			#--Recorre los valores
			for infodetalle in datosdetalle:
				#--Almacena el valor
				valori.append(infodetalle)
			logger_saves.info("Entro el join")
			logger_saves.info("Query")
			logger_saves.info("select in_det_mov_dv.valor_unitario,in_param_contab.naturaleza,in_param_contab.id_clase_co,in_param_contab.id_grupo_co,in_param_contab.id_cmay_co,in_param_contab.id_cata_co,in_param_contab.id_aux_co,in_param_contab.digitos from IN_DET_MOV_DV LEFT JOIN IN_MOVIMIENTOS_DV on IN_DET_MOV_DV.id_movimientos_dv=IN_MOVIMIENTOS_DV.id_movimientos_dv and IN_DET_MOV_DV.id_vigencia=IN_MOVIMIENTOS_DV.id_vigencia and IN_DET_MOV_DV.id_cen_op=IN_MOVIMIENTOS_DV.id_cen_op and in_det_mov_dv.id_tipo_movimiento=IN_MOVIMIENTOS_DV.id_tipo_movimiento LEFT JOIN IN_TIPO_ALMACENAMIENTO ON in_movimientos_dv.id_tipo_almacenamiento_fin=IN_TIPO_ALMACENAMIENTO.id_tipo_almacenamiento LEFT JOIN IN_PARAM_CONTAB ON in_tipo_almacenamiento.id_grupo_almacenamiento=in_param_contab.id_grupo and in_param_contab.id_tipo_transac=1 and IN_DET_MOV_DV.id_clase=in_param_contab.id_clase and in_det_mov_dv.id_linea=in_param_contab.id_linea where in_det_mov_dv.id_cen_op="+str(cen_op_busqueda)+" and in_det_mov_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_det_mov_dv.id_vigencia="+str(id_vigencia)+" and in_det_mov_dv.id_tipo_movimiento="+str(id_tipo_documento_entrada)+" and in_movimientos_dv."+fechabusqueda+"=to_date('"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			logger_saves.info(valori)
			logger_saves.info("/************************************************************************/")
	else:
		#--Almacena el valor
		valori.append(evaluacion)
	logger_saves.info("Valores a ingresar")
	logger_saves.info(valori)
	logger_saves.info("/************************************************************************/")
	logger_saves.info("Naturaleza del asiento")
	logger_saves.info(asiento.naturaleza)
	logger_saves.info("/************************************************************************/")
	#--Busca en la tabla de propiedades el id del asiento del detalle de la entrada DV
	id_asiento_detalle=Tabla_Propiedades.objects.get(nombre="ASIENTO_DETALLE_ENTRADA_DV")
	id_asiento_detalle=id_asiento_detalle.valor
	#--Busca las cuentas parametrizadas en el grupo
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	#--Verifica que el asiento y el id corresponda a detalle
	logger_saves.info("Id del asiento detalle")
	logger_saves.info(id_asiento_detalle)
	logger_saves.info("Id del asiento que llega")
	logger_saves.info(asiento.id_asiento)
	logger_saves.info("/************************************************************************/")
	nombreTablaReferencia=grupo.nombre
	estaReferencia=nombreTablaReferencia.find("REFERENCIA")
	if str(asiento.id_asiento)==id_asiento_detalle or estaReferencia!=-1:
		logger_saves.info("Id del asiento detalle")
		logger_saves.info(id_asiento_detalle)
		logger_saves.info("/************************************************************************/")
		#--Recorre los datos de la cuenta para ingresarlo en los movimientos
		for datoscuenta in valori:
			#--20140113 Se ingresa el codigo de busqeuda para maeter de acuerdo a lo establecido por el codigo de in_param_contab
			#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
			if datoscuenta[7] is None:
				id_maeter=''
			else:
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+str(datoscuenta[7])
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
					verificaMaeter(id_maeter)
			#--Captura el valor del auxiliar
			prueba=str(datoscuenta[6])
			#--Verifica si tiene o no auxiliar
			if prueba=="None":
				#--Ejecuta sin auxiliar
				#--Verifica si anula o no el movimiento
				if anula==0:
					#--Verifica la naturaleza del asiento
					if asiento.naturaleza == "C":
						if datoscuenta[0]!=0:
							#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
							if datoscuenta[0] < 0:
								datoscuenta[0]=datoscuenta[0]*-1
							#--Inserta asiento en credito sin auxiliar
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',0,datoscuenta[0],'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
					else:
						if datoscuenta[0]!=0:
							#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
							if datoscuenta[0] < 0:
								datoscuenta[0]=datoscuenta[0]*-1
							#--Inserta asiento en debito sin auxiliar
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,'','','','',datoscuenta[0],0,'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
				#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
				#--else:
					#--Ejecuta anulacion
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','0','"+str(datoscuenta[0])+"','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--Aumenta en uno la secuencia de ingreso
					#--idmovcontab=idmovcontab+1
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','','','','','"+str(datoscuenta[0])+"','0','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
			else:
				#--Ejecuta con auxiliar
				#--Verifica si el movimiento tiene anulacion
				if anula==0:
					#--Verifica la naturaleza del movimiento
					if asiento.naturaleza == "C":
						if datoscuenta[0]!=0:
							#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
							if datoscuenta[0] < 0:
								datoscuenta[0]=datoscuenta[0]*-1
							#--Ingresa con auxiliar en credito
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',0,datoscuenta[0],'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
					else:
						if datoscuenta[0]!=0:
							#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
							if datoscuenta[0] < 0:
								datoscuenta[0]=datoscuenta[0]*-1
							#--Ingresa con auxiliar en debito
							#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
							datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[5],datoscuenta[4],datoscuenta[3],datoscuenta[2],id_maeter,datoscuenta[6],'','','',datoscuenta[0],0,'')
							cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
							try:
								cursormodulocontabilidad.execute(None,datosMovimiento)
							except cx_Oracle.DatabaseError, ex:
								error, = ex.args
								logger_saves.error("Fallo al ingresar el movimiento contable: ")
								logger_saves.error(datosMovimiento)
								logger_saves.error('Error.code = '+str(error.code))
								logger_saves.error('str(error.message) = '+str(error.message))
								logger_saves.error('str(error.offset) = '+str(error.offset))
								errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
								erroresMovimientos.append(errorConexion)
								cache.set("error", -1)
				#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa			
				#--else:
					#--Ingresa anulacion
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','0','"+str(datoscuenta[0])+"','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
					#--Aumenta en uno la secuencia de insercion del movimiento contable
					#--idmovcontab=idmovcontab+1
					#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[5])+"','"+str(datoscuenta[4])+"','"+str(datoscuenta[3])+"','"+str(datoscuenta[2])+"','"+str(id_maeter)+"','"+str(datoscuenta[6])+"','','','','"+str(datoscuenta[0])+"','0','')"
					#--cursormodulocontabilidad.execute(querymovimientobancario)
			#--Aumenta en uno la secuencia de insercion del movimiento contable
			idmovimientoactivo+=1
	else:
		queryCuentasParametrizadas="SELECT * from IC_CAMPO_CUENTA WHERE ID_GRUPO_ID="+str(grupo.id_grupo)+" AND VALOR='"+str(id_tipo_concepto_entradaDV)+"'"
		cursormodulocontabilidad.execute(queryCuentasParametrizadas)
		datosCuentasParametrizadas=cursormodulocontabilidad.fetchone()
		logger_saves.info("/*********************************************************************************/")
		logger_saves.info("Verifica si las cuentas establecidas en las parametrizaciones estan vigentes para operar query:")
		logger_saves.info(queryCuentasParametrizadas)
		logger_saves.info("Dato cuenta en query")
		logger_saves.info(datosCuentasParametrizadas)
		if datosCuentasParametrizadas is None and estaReferencia==-1:
			try:
				index=idscuentasfaltantes.index(str(id_tipo_concepto_entradaDV)+"|"+str(grupo.nombre))
			except Exception, e:
				idscuentasfaltantes.append(str(id_tipo_concepto_entradaDV)+"|"+str(grupo.nombre))
			cache.set("error", -1)
		#--Recorre las cuentas parametrizadas
		for campoestablecido in campocuenta:
			#--Verifica que el concepto de entrada y la cuenta sean iguales
			logger_saves.info("Entro por las cuentas")
			logger_saves.info("Concepto entrada DV")
			logger_saves.info(id_tipo_concepto_entradaDV)
			logger_saves.info("Cuenta parametrizada")
			logger_saves.info(campoestablecido.valor)
			logger_saves.info("/************************************************************************/")
			if str(id_tipo_concepto_entradaDV)==campoestablecido.valor:
				logger_saves.info("Entra a ejecutar por grupos, in param contab")
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					#--20140115 Modificacion, en caso que la cuenta sea la 240101 y que tenga Tercero se pasa al proveedor
					if(campoestablecido.catalogo=='240101'):
						sqlJoinProveedor="select in_cotizacion.id_mae_ter from in_movimientos_dv join in_contrato_mov_dv on in_movimientos_dv.id_movimientos_dv = in_contrato_mov_dv.id_movimientos_dv and in_movimientos_dv.id_vigencia = in_contrato_mov_dv.id_vigencia_mov and in_movimientos_dv.id_cen_op_fin=in_contrato_mov_dv.id_cen_op_mov and in_movimientos_dv.id_tipo_movimiento=in_contrato_mov_dv.id_tipo_movimiento join in_contrato on in_contrato_mov_dv.id_contrato = in_contrato.id_contrato and in_contrato_mov_dv.id_vigencia_cont=in_contrato.id_vigencia and in_contrato_mov_dv.id_cen_op_cont= in_contrato.id_cen_op join in_cotizacion on in_contrato.id_cotizacion=in_cotizacion.id_cotizacion and in_contrato.id_vigencia=in_cotizacion.id_vigencia and in_contrato.id_cen_op=in_cotizacion.id_cen_op where in_movimientos_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_movimientos_dv.id_cen_op_fin="+str(idcenop)+" and in_movimientos_dv.id_vigencia="+str(id_vigencia)+" and in_movimientos_dv.id_tipo_movimiento=1"
						cursormoduloconexion.execute(sqlJoinProveedor)
						maeterProveedor=cursormoduloconexion.fetchone()
						#--20140217 Modificacion, en caso que no encuentre proveedor para el entrada con esta cuenta se cambia.
						try:
							id_maeter=str(maeterProveedor[0])
						except Exception, e:
							id_maeter=str(id_maeter)
					else:
						id_maeter=str(id_maeter)
					verificaMaeter(id_maeter)
				#--Captura el auxiliar del movimiento
				prueba=str(campoestablecido.auxiliar)
				#--Verifica si el movimiento contiene o no auxiliar
				if len(prueba)==0:
					#--Consulta los datos de la cuenta correspondiente
					querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
					cursormodulocontabilidad.execute(querydatanoaux)
					datoscuenta=cursormodulocontabilidad.fetchone()
					#--Revisa si se anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del movimiento
						if asiento.naturaleza == "C":
							if valori[0]!=0:
								#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
								if valori[0] < 0:
									valori[0]=valori[0]*-1
								#--Inserta asiento en credito sin auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if valori[0]!=0:
								#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
								if valori[0] < 0:
									valori[0]=valori[0]*-1
								#--Inserta asiento en debito sin auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
					#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
					#--else:
						#--Ejecuta anulacion
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','0','"+str(valori[0])+"','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--Aumenta en uno la secuencia de insercion del movimiento contable
						#--idmovcontab=idmovcontab+1
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','','','','','"+str(valori[0])+"','0','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
				else:
					#--Consulta los datos de la cuenta correspondiente
					querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
					cursormodulocontabilidad.execute(querydatanoaux)
					datoscuenta=cursormodulocontabilidad.fetchone()
					#--Revisa si se anula o no el movimiento
					if anula==0:
						#--Verifica la naturaleza del movimiento
						if asiento.naturaleza == "C":
							if valori[0]!=0:
								#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
								if valori[0] < 0:
									valori[0]=valori[0]*-1
								#--Inserta asiento en credito con auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
						else:
							if valori[0]!=0:
								#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
								if valori[0] < 0:
									valori[0]=valori[0]*-1
								#--Inserta asiento en debito con auxiliar
								#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
								datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
								cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
								try:
									cursormodulocontabilidad.execute(None,datosMovimiento)
								except cx_Oracle.DatabaseError, ex:
									error, = ex.args
									logger_saves.error("Fallo al ingresar el movimiento contable: ")
									logger_saves.error(datosMovimiento)
									logger_saves.error('Error.code = '+str(error.code))
									logger_saves.error('str(error.message) = '+str(error.message))
									logger_saves.error('str(error.offset) = '+str(error.offset))
									errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
									erroresMovimientos.append(errorConexion)
									cache.set("error", -1)
					#--20140219 - Modificacion, se invalida el codigo de anulacion ya que viene con la naturaleza correcta desde el momento que procesa
					#--else:
						#--Ejecuta anulacion
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
						#--Aumenta en uno la secuencia de insercion del movimiento contable
						#--idmovcontab=idmovcontab+1
						#--querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovimientoactivo)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+str(id_maeter)+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
						#--cursormodulocontabilidad.execute(querymovimientobancario)
			#--Aumenta en uno la secuencia de insercion del movimiento contable
			idmovimientoactivo+=1
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#---Ejecucion para interfaz contable inventarioSalidas
#--Ejecuta movimiento contable de inventarioDV para salidas, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---fechaEjecucion: Valor fecha en la que se ejecua el moviiento
#---inventario: Varibale qe contiene el valor del inventario
#---id_tipo_documento_entrada: Valor del documento de salida para el asiento
#---id_tipo_concepto_entradaDV: Valor del concepto de la salida
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
def ejecutaMovimientoNoGrupoInventarioDV(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idbusqueda,anula,valorbusqueda,fechaEjecucion,inventario,id_tipo_documento_entrada,id_tipo_concepto_entradaDV,fechabusqueda,formu,cen_op_busqueda):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	logger_saves.info("Entro por entrada sin grupo")
	logger_saves.info("Nombre del asiento a ejecutar: "+asiento.nombre)
	logger_saves.info("Nombre del concepto: "+asiento.id_concepto.nombre)
	idmovimientoactivo=cache.get("idmovcontab")
	#--Captura el objeto campo valor
	campovalor=asiento.id_campo_valor
	#--Captura el objeto tabla
	tabla=campovalor.id_tabla
	#--Nombre de la tabla a consultar-
	nombretabla=tabla.nombre
	#--Captura el objeto grupo
	grupo=asiento.id_grupo
	#--Contenedor para el valor a ejecutar
	valori=[]
	#--Valor de la naturaleza si hay cambio
	naturalezaAnterior=None
	#--Verifica si la evaluacion esta vacia para consultar o si no para ingresar
	if len(formu)==0:
		if tabla.nombre=="IN_MOVIMIENTOS_DV_V":
			logger_saves.info("Query busqueda datos: ")
			logger_saves.info("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_dv,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_dv group by id_movimientos_dv,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_DV mv on tab0.id_movimientos_dv=mv.ID_MOVIMIENTOS_DV and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.execute("SELECT nvl(tab0.total_det, 0) +nvl(mv.valor_ajuste, 0) as total_movimiento from (select nvl(sum(valor_unitario), 0 ) as total_det, id_movimientos_dv,id_vigencia,id_cen_op,id_tipo_movimiento from in_det_mov_dv group by id_movimientos_dv,id_vigencia,id_cen_op, id_tipo_movimiento) tab0 join IN_MOVIMIENTOS_DV mv on tab0.id_movimientos_dv=mv.ID_MOVIMIENTOS_DV and tab0.id_cen_op=mv.ID_CEN_OP_FIN and tab0.id_vigencia=mv.id_vigencia and tab0.id_tipo_movimiento=mv.ID_TIPO_MOVIMIENTO WHERE tab0.ID_MOVIMIENTOS_DV="+str(valorbusqueda)+" AND tab0.ID_VIGENCIA="+str(id_vigencia)+" AND tab0.ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND mv.ID_CEN_OP_FIN="+str(cen_op_busqueda)+" and mv."+fechabusqueda+"=to_date(\'"+str(fechaEjecucion)+"','YYYY-MM-DD')")
			valori=cursormoduloconexion.fetchall()
		else:
			logger_saves.info("Query busqueda datos: ")
			logger_saves.info("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
			cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+" AND ID_VIGENCIA="+str(id_vigencia)+" AND ID_TIPO_MOVIMIENTO="+str(id_tipo_documento_entrada)+" AND ID_CEN_OP="+str(cen_op_busqueda))
			valori=cursormoduloconexion.fetchall()
	else:
		quehace.append("Entra por evaluacion")
	logger_saves.info("datos:")
	logger_saves.info(valori)
	#--Asigna una variable para saber si contiene o no auxiliar
	auxasiento=str(asiento.auxiliar)
	if len(valori)!=0:
		for valor in valori:
			#--20140530 - Modificación, Si el valor es negativo se convierte en positvo
			logger_saves.info("Tipo del valor a ingresar")
			logger_saves.info(type(valor))
			logger_saves.info("Valor a ingresar: ")
			logger_saves.info(valor[0])
			if valor[0] < 0:
				ValorFinal=valor[0]*-1
				if asiento.naturaleza=="D":
					naturalezaAnterior=asiento.naturaleza
					asiento.naturaleza="C"
				else:
					naturalezaAnterior=asiento.naturaleza
					asiento.naturaleza="D"
			else:
				ValorFinal=valor[0]
			if len(asiento.auxiliar)==0:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					if(asiento.catalogo=='240101' or asiento.catalogo=='481047'):
						sqlJoinProveedor="select in_cotizacion.id_mae_ter from in_movimientos_dv join in_contrato_mov_dv on in_movimientos_dv.id_movimientos_dv = in_contrato_mov_dv.id_movimientos_dv and in_movimientos_dv.id_vigencia = in_contrato_mov_dv.id_vigencia_mov and in_movimientos_dv.id_cen_op_fin=in_contrato_mov_dv.id_cen_op_mov and in_movimientos_dv.id_tipo_movimiento=in_contrato_mov_dv.id_tipo_movimiento join in_contrato on in_contrato_mov_dv.id_contrato = in_contrato.id_contrato and in_contrato_mov_dv.id_vigencia_cont=in_contrato.id_vigencia and in_contrato_mov_dv.id_cen_op_cont= in_contrato.id_cen_op join in_cotizacion on in_contrato.id_cotizacion=in_cotizacion.id_cotizacion and in_contrato.id_vigencia=in_cotizacion.id_vigencia and in_contrato.id_cen_op=in_cotizacion.id_cen_op where in_movimientos_dv.id_movimientos_dv="+str(valorbusqueda)+" and in_movimientos_dv.id_cen_op_fin="+str(idcenop)+" and in_movimientos_dv.id_vigencia="+str(id_vigencia)+" and in_movimientos_dv.id_tipo_movimiento=1"
						cursormoduloconexion.execute(sqlJoinProveedor)
						maeterProveedor=cursormoduloconexion.fetchone()
						#--20140217 Modificacion, en caso que no encuentre proveedor para el entrada con esta cuenta se cambia.
						try:
							id_maeter=str(maeterProveedor[0])
						except Exception, e:
							id_maeter=str(id_maeter)
					else:
						id_maeter=str(id_maeter)
					verificaMaeter(id_maeter)
				#--Verifica si el ingreso es o no una anulación	
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,ValorFinal,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',ValorFinal,0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			else:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
				cursormodulocontabilidad.execute(querytercero)
				datostercero=cursormodulocontabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
					verificaMaeter(id_maeter)
				#--Verifica si el ingreso es o no una anulación
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,ValorFinal,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovimientoactivo,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',ValorFinal,0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			if naturalezaAnterior is not None:
				asiento.naturaleza=naturalezaAnterior
				naturalezaAnterior=None
			#--Aumenta en uno el número de la secuencia del movimiento contable
			idmovimientoactivo+=1 
	#--Retorna el número de secuencia del movimento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovimientoactivo))
#---Fin Ejecución para interfaz contable inventarioDV
#---Ejecucion para interfaz contable nomina
#--Ejecuta movimiento contable de nomina, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---id_concep_nomina: Id del concepto de nomina
#---id_periodo: Id del periodo
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
def ejecutaMovimientoGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovcontab=cache.get("idmovcontab")
	#--Ingresa el valor del campo valor
	campovalor=asiento.id_campo_valor
	#--Ingresa el modelo de la tabla con la que se va a trabajar
	tabla=campovalor.id_tabla
	#--Consulta el nombre de la tabla
	nombretabla=tabla.nombre
	#--Consulta el grupo correspondiente
	grupo=asiento.id_grupo
	#--Verifica si el valor de la evaluacion viene vacio para consultarlo o si lo tiene para ingresarlo en la variable
	if evaluacion is None:
		#--Consulta el valor de la evaluacion
		cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+"and ID_PERIODO="+str(id_periodo))
		#--Ingresa el valor de la consulta
		valori=cursormoduloconexion.fetchone()
	else:
		#--Construye el contenedor para el valor a operar
		valori=[]
		#--Ingresa el valor a evaluar
		valori.append(evaluacion)
	#--Busca las cuentas parametrizadas
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	#--Verifica si no esta parametrizada la cuenta en el grupo para generar el error
	logger_saves.info("/***********************************************************/")
	logger_saves.info("Campo cuenta en grupo "+grupo.nombre)
	queryCuentasParametrizadas="SELECT * from IC_CAMPO_CUENTA WHERE ID_GRUPO_ID="+str(grupo.id_grupo)+" AND VALOR='"+str(id_concep_nomina)+"'"
	cursormodulocontabilidad.execute(queryCuentasParametrizadas)
	datosCuentasParametrizadas=cursormodulocontabilidad.fetchone()
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Verifica si las cuentas establecidas en las parametrizaciones estan vigentes para operar query:")
	logger_saves.info(queryCuentasParametrizadas)
	logger_saves.info("Dato cuenta en query")
	logger_saves.info(datosCuentasParametrizadas)
	if datosCuentasParametrizadas is None:
		try:
			index=idscuentasfaltantes.index(str(id_concep_nomina)+"|"+str(grupo.nombre))
		except Exception, e:
			idscuentasfaltantes.append(str(id_concep_nomina)+"|"+str(grupo.nombre))
		cache.set("error", -1)
		cache.set("error", -1)
	#--Recorre las cuentas para generar el movimiento
	for campoestablecido in campocuenta:
		#--Verifica si la cuneta esta parametrizada contra el valor enviado al metodo
		if str(id_concep_nomina)==campoestablecido.valor:
			#--Verifica el auxilar
			prueba=str(campoestablecido.auxiliar)
			#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
			querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
			cursormodulocontabilidad.execute(querytercero)
			datostercero=cursormodulocontabilidad.fetchone()
			#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
			if datostercero[0]==0:
				id_maeter=''
			else:
				cursormoduloconexion.execute("SELECT ID_ACREEDOR FROM NO_CONCEP_NOMINA WHERE ID_CONCEP_NOMINA="+str(campoestablecido.catalogo))
				id_temp=cursormoduloconexion.fetchone()
				if id_temp is None:
					id_maeter=''
				else:
					id_maeter=str(id_temp[0])
				id_maeter=str(id_maeter)
			#--Verifica si el ingreso contiene o no auxiliar
			if len(prueba)==0:
				#--Consulta los datos de la cuenta sin auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Verifica si el movimiento contiene o no anulacion
				if anula==0:
					#--Verifica la naturaleza del movimiento
					if asiento.naturaleza == "C":
						#--Ingresa el movimiento en credito sin auxiliar
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ingresa el movimiento en debito sin auxiliar
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
			else:
				#--Consulta los datos de la cuenta con auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
				cursormodulocontabilidad.execute(querydatanoaux)
				datoscuenta=cursormodulocontabilidad.fetchone()
				#--Verifica si el movimiento es una anulacion
				if anula==0:
					#--Verifica la naturaleza del movimiento
					if asiento.naturaleza == "C":
						#--Ingresa movimiento en credito con auxiliar
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ingresa movimiento en debito con auxiliar
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
						cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursormodulocontabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
		#--Aumenta la variable de Id de ingreso de movimiento
		idmovcontab=idmovcontab+1
	#--Retorna el id del movimiento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovcontab))
#--Ejecuta movimiento contable de nomina, comparando las cuentas a fin de ir construyendo los movimientos
#--Entrada:
#---asiento:Asiento a operar
#---iddocumento: Id del movimiento contable
#---idcad: Id del CAD
#---id_vigencia: Id del periodo vigencia
#---idcenop: Id del centro de Operación
#---idcia: Id de la compañia que ejecuta
#---id_maeter: Id del maestro de terceros para la cuenta
#---idmovcontab: Id del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Id del campo de la tabla con la que se va a buscar
#---anula: Variable que controla las anulaciones
#---valorbusqueda: Valor a buscar en la consulta
#---id_concep_nomina: Id del concepto de nomina
#---id_periodo: Id del periodo
#--Salida
#---idmovcontab: Id del ingreso al movimiento contable
def ejecutaMovimientoSinGrupoNomina(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,valorbusqueda,id_concep_nomina,id_periodo):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovcontab=cache.get("idmovcontab")
	#--Ingresa el valor del campo valor
	campovalor=asiento.id_campo_valor
	#--Ingresa el modelo de la tabla con la que se va a trabajar
	tabla=campovalor.id_tabla
	#--Consulta el nombre de la tabla
	nombretabla=tabla.nombre
	#--Consulta el grupo correspondiente
	grupo=asiento.id_grupo
	#--Verifica si el valor de la evaluacion viene vacio para consultarlo o si lo tiene para ingresarlo en la variable
	if evaluacion is None:
		#--Consulta el valor de la evaluacion
		cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(valorbusqueda)+"and ID_PERIODO="+str(id_periodo))
		#--Ingresa el valor de la consulta
		valori=cursormoduloconexion.fetchone()
		#--Valida si el valor es vacio
		if valori[0] is None:
			valori=[]
			valori.append(0)
	else:
		#--Construye un contenedor para el valor
		valori=[]
		#--Ingresa el valor parametrizado
		valori.append(evaluacion)
	#--Ingresa el valor del auxiliar 
	auxasiento=str(asiento.auxiliar)
	#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
	querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
	cursormodulocontabilidad.execute(querytercero)
	datostercero=cursormodulocontabilidad.fetchone()
	#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
	if datostercero[0]==0:
		id_maeter=''
	else:
		id_maeter=str(id_maeter)
	#--Verifica si el ingreso es o no con auxiliar
	if len(asiento.auxiliar)==0:
		#--Selecciona los datos de la cuenta sin auxiliar
		querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
		cursormodulocontabilidad.execute(querydatanoaux)
		datoscuenta=cursormodulocontabilidad.fetchone()
		#--Verifica si va a anular o no
		if anula==0:
			#--Verifica la naturaleza del movimiento
			if asiento.naturaleza == "C":
				#--Ingresa el movimiento en credito sin auxiliar
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
				cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursormodulocontabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
			else:
				#--Ingresa el movimiento en debito sin auxiliar
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
				cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursormodulocontabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
	else:
		#--Busca los datos de la cuenta con auxiliar
		querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
		cursormodulocontabilidad.execute(querydatanoaux)
		datoscuenta=cursormodulocontabilidad.fetchone()
		#--Verifica si se va a anular o no
		if anula==0:
			#--Verifica la naturaleza del asiento
			if asiento.naturaleza == "C":
				#--Ingresa el movimiento en credito con auxiliar
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
				cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursormodulocontabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
			else:
				#--Ingresa el movimiento en debito con auxiliar
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
				cursormodulocontabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursormodulocontabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
	#--Sube en uno el contador del Id del movimiento contable
	idmovcontab=idmovcontab+1
	#--Retorna el id del movimiento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovcontab))
#---Fin ejecucion interfaz contable nomina

#------Ejecucion interfaces no movimientos
def ejecutaMovimientoSinGrupoOtro(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula):
	quehace.append("Ejecuta movimiento sin grupo")
	campovalor=asiento.id_campo_valor
	tabla=campovalor.id_tabla
	nombretabla=tabla.nombre
	grupo=asiento.id_grupo
	if evaluacion is None:
		quehace.append("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		cursormoduloconexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		valori=cursormoduloconexion.fetchone()
	else:
		valori=[]
		valori.append(evaluacion)
	auxasiento=str(asiento.auxiliar)
	quehace.append("Ejecuta movimiento sin grupo en cartera POS")
	if len(asiento.auxiliar)==0:
		querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
		cursormodulocontabilidad.execute(querydatanoaux)
		datoscuenta=cursormodulocontabilidad.fetchone()
		querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
		cursormodulocontabilidad.execute(querytercero)
		datostercero=cursormodulocontabilidad.fetchone()
		quehace.append("Se mira si utiliza o no tercero en la cuenta")
		quehace.append(datostercero)
		if datostercero[0]==0:
			id_maeter=''
		else:
			id_maeter=str(id_maeter)
		if anula==0:
			if asiento.naturaleza == "C":
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
				try:
					cursormodulocontabilidad.execute(querymovimientobancario)
				except Exception, e:
					quehace.append("Falla en credito sin auxiliar")
				quehace.append("Ejecuta movimiento sin auxiliar en credito")
				quehace.append(querymovimientobancario)
			else:
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
				try:
					cursormodulocontabilidad.execute(querymovimientobancario)
				except Exception, e:
					quehace.append("Falla en debito sin auxiliar")
				quehace.append("Ejecuta movimiento sin auxiliar en debito")
				quehace.append(querymovimientobancario)
		else:
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
			cursormodulocontabilidad.execute(querymovimientobancario)
			idmovcontab=idmovcontab+1
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
			cursormodulocontabilidad.execute(querymovimientobancario)
	else:
		querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
		cursormodulocontabilidad.execute(querydatanoaux)
		datoscuenta=cursormodulocontabilidad.fetchone()
		querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
		cursormodulocontabilidad.execute(querytercero)
		datostercero=cursormodulocontabilidad.fetchone()
		quehace.append("Se mira si utiliza o no tercero en la cuenta")
		quehace.append(datostercero)
		if datostercero[0]==0:
			id_maeter=''
		else:
			id_maeter=str(id_maeter)
		if anula==0:
			if asiento.naturaleza == "C":
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
				try:
					cursormodulocontabilidad.execute(querymovimientobancario)
				except Exception, e:
					quehace.append("Falla en credito con auxiliar")
				quehace.append("Ejecuta movimiento con auxiliar en debito")
				quehace.append(querymovimientobancario)
			else:
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
				try:
					cursormodulocontabilidad.execute(querymovimientobancario)
				except Exception, e:
					quehace.append("Falla en debito con auxiliar")
				quehace.append("Ejecuta movimiento con auxiliar en debito")
				quehace.append(querymovimientobancario)
		else:
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
			cursormodulocontabilidad.execute(querymovimientobancario)
			idmovcontab=idmovcontab+1
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
			cursormodulocontabilidad.execute(querymovimientobancario)
	idmovcontab=idmovcontab+1
	return idmovcontab

def ejecutaMovimientoGrupoOtro(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,idmovcontab,evaluacion,idbusqueda,anula,cursorConexion,cursorContabilidad):
	quehace.append("Ejecuta movimiento con grupo")
	campovalor=asiento.id_campo_valor
	tabla=campovalor.id_tabla
	nombretabla=tabla.nombre
	grupo=asiento.id_grupo
	if evaluacion is None:
		cursorConexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		quehace.append("Query busqueda valor")
		quehace.append("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		valori=cursormoduloconexion.fetchone()
	else:
		valori=[]
		valori.append(evaluacion)
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	for campoestablecido in campocuenta:
		quehace.append("Cuenta parametrizada")
		quehace.append(campoestablecido.valor)
		quehace.append("Busca por la cuenta parametrizada y opera")
		prueba=str(campoestablecido.auxiliar)
		quehace.append("Ejecuta movimiento con grupo en cartera POS")
		quehace.append("Tabla que esta aplicando")
		quehace.append(campoestablecido.valor_descripcion)
		"""if len(prueba)==0:
			querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
			cursormodulocontabilidad.execute(querydatanoaux)
			datoscuenta=cursormodulocontabilidad.fetchone()
			querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
			cursormodulocontabilidad.execute(querytercero)
			datostercero=cursormodulocontabilidad.fetchone()
			quehace.append("Se mira si utiliza o no tercero en la cuenta")
			quehace.append(datostercero)
			if datostercero[0]==0:
				id_maeter=''
			else:
				id_maeter=str(id_maeter)
			if anula==0:
				if asiento.naturaleza == "C":
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
					try:
						cursormodulocontabilidad.execute(querymovimientobancario)
					except Exception, e:
						quehace.append("Falla en credito sin auxiliar en grupo")
					quehace.append("Ejecuta movimiento sin auxiliar en debito")
					quehace.append(querymovimientobancario)
				else:
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
					try:
						cursormodulocontabilidad.execute(querymovimientobancario)
					except Exception, e:
						quehace.append("Falla en debito sin auxiliar en grupo")
					quehace.append("Ejecuta movimiento sin auxiliar en debito")
					quehace.append(querymovimientobancario)
			else:
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
				cursormodulocontabilidad.execute(querymovimientobancario)
				idmovcontab=idmovcontab+1
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
				cursormodulocontabilidad.execute(querymovimientobancario)
		else:
			querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
			cursormodulocontabilidad.execute(querydatanoaux)
			datoscuenta=cursormodulocontabilidad.fetchone()
			querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
			cursormodulocontabilidad.execute(querytercero)
			datostercero=cursormodulocontabilidad.fetchone()
			quehace.append("Se mira si utiliza o no tercero en la cuenta")
			quehace.append(datostercero)
			if datostercero[0]==0:
				id_maeter=''
			else:
				id_maeter=str(id_maeter)
			if anula==0:
				if asiento.naturaleza == "C":
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
					try:
						cursormodulocontabilidad.execute(querymovimientobancario)
					except Exception, e:
						quehace.append("Falla en credito con auxiliar en grupo")
					quehace.append("Ejecuta movimiento con auxiliar en credito")
					quehace.append(querymovimientobancario)
				else:
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
					try:
						cursormodulocontabilidad.execute(querymovimientobancario)
					except Exception, e:
						quehace.append("Falla en debito con auxiliar en grupo")
					quehace.append("Ejecuta movimiento con auxiliar en debito")
					quehace.append(querymovimientobancario)
			else:
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
				cursormodulocontabilidad.execute(querymovimientobancario)
				idmovcontab=idmovcontab+1
				querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
				cursormodulocontabilidad.execute(querymovimientobancario)
		idmovcontab=idmovcontab+1"""
	return idmovcontab
#------Fin Ejecucion interfaces no movimientos
#---Ejecucion normal para interfaces contables
#----Movimiento retenciones
#--Metodo que sirve para ejecutar retenciones y otros movimientos cuando la cuenta parametrizada esta contenida en la cuenta (Bancos y otros)
#--Entrada: 
#---asiento: Modelo proveniente del modelo de asientos, trae la naturaleza, el grupo, la tabla, el tipp, si maneja o no grupo, etc.
#---iddocumento: Id del documento para el movimiento
#---idcad: Id del cad asociado
#---id_vigencia: Año de vigencia del movimiento
#---idcenop: Id del centro de operacion
#---idcia: Id de la compañia
#---id_maeter: Id del maestro de terceros que opera
#---idmovcontab: Id de la secuencia del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Identificador de la busqueda en la tabla
#---anula: Valor que maneja si se debe anular o no el movimiento
#---cuenta_oper: Cuenta a operar cuando se maneja con grupo
#--Salida:
#---idmovcontab: Valor actual del movimiento para ingreso de siguientes movimientos contables
def ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorConexion,cursorContabilidad):
	#--20140421 - Modificacion, Captura el id del movimiento de la cache
	idmovcontab=cache.get("idmovcontab")
	#--Busca el campo valor para ejecución con el grupo
	campovalor=asiento.id_campo_valor
	#--Busca la tabla con la que se va a operar
	tabla=campovalor.id_tabla
	#--Variable que almacena el nombre de la tabla a operar
	nombretabla=tabla.nombre
	#--Variable que almacena el grupo con el que se va a trabajar
	grupo=asiento.id_grupo
	#--Si viene por el calculo de la sumatoria del valor, este fuerza a que entre a hacer la sumatoria en la base de datos
	if nombretabla=='TS_OBLIGACION_VAL':
		logger_saves.info("Documento con id")
		logger_saves.info(searchData)
		if len(searchData)==4:
			#--Cuadra el id de la busqueda
			idobligacion=searchData[0]
			idvigencia=searchData[1]
			idsecuencia=searchData[2]
			idaniofiscal=searchData[3]
			#--Cuadra el documento para el ingreso del movimiento
			iddocumento=searchData[0]
		else:
			#--Toma el numero de documento
			iddocumento=searchData[0]
			#--Toma el id para la busqueda
			idtspagoobl=searchData[1]
			#--Identificador para el query
			idsecuencia=None
	#--Evalua si el valor a ingresar viene vacio, si es asi lo busca enla base de dtaos de acuerdo a lo parametrizado, si no lo asigna
	if evaluacion is None:
		if nombretabla=='TS_OBLIGACION_VAL':
			if idsecuencia is not None:
				logger_saves.info("Ingreso por el calculo de la sumatoria del valor de la obligacion presupuestal")
				#--Genera sumatoria cuando viene por la obligacion en la sumatoria del valor bruto
				cursorConexion.execute("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_OBLIGACION_VAL LEFT JOIN TS_OBLIGACION ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_OBLIGACION.ID_OBLIGACION="+str(idobligacion)+" AND TS_OBLIGACION.SECUENCIA="+str(idsecuencia)+" AND TS_OBLIGACION.ID_VIGENCIA="+str(idvigencia)+" AND TS_OBLIGACION.ANO_FISCAL="+str(idaniofiscal))
				logger_saves.info("Consulta con sumatoria")
				logger_saves.info("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_OBLIGACION_VAL LEFT JOIN TS_OBLIGACION ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_OBLIGACION.ID_OBLIGACION="+str(idobligacion)+" AND TS_OBLIGACION.SECUENCIA="+str(idsecuencia)+" AND TS_OBLIGACION.ID_VIGENCIA="+str(idvigencia)+" AND TS_OBLIGACION.ANO_FISCAL="+str(idaniofiscal))
			else:
				logger_saves.info("Ingreso por el calculo de la sumatoria del valor de la obligacion pagos")
				#--Genera sumatoria cuando viene por la obligacion en la sumatoria del valor bruto
				cursorConexion.execute("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_PAGO_OBL LEFT JOIN TS_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_PAGO_OBL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_PAGO_OBL.VIGENCIA=TS_OBLIGACION.ANO_FISCAL LEFT JOIN TS_OBLIGACION_VAL ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_PAGO_OBL.ID_PAGO_OBL="+str(idtspagoobl))
				logger_saves.info("Consulta con sumatoria")
				logger_saves.info("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_PAGO_OBL LEFT JOIN TS_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_PAGO_OBL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_PAGO_OBL.VIGENCIA=TS_OBLIGACION.ANO_FISCAL LEFT JOIN TS_OBLIGACION_VAL ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_PAGO_OBL.ID_PAGO_OBL="+str(idtspagoobl))
		else:
			#--Genera la consulta del valor de acuerdo a los valores que se han parametrizado en la cuenta con anterioridad
			cursorConexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		#--Asigna el valor a la variable con la que se va a trabajar
		try:
			valori=cursorConexion.fetchone()
		except cx_Oracle.DatabaseError, ex:
			error, = ex.args
			logger_saves.error("Fallo al consultar el valor a ingresar")
			logger_saves.error("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
			logger_saves.error('Error.code = '+str(error.code))
			logger_saves.error('str(error.message) = '+str(error.message))
			logger_saves.error('str(error.offset) = '+str(error.offset))
			errorConexion="Fallo al consultar el valor a ingresar|SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
			erroresGeneral.append(errorConexion)
			cache.set("error", -1)
	else:
		#--Crea la variable con la que se va a trabajar el ingreso
		valori=[]
		#--Se asigna el valor de la evaluación para el ingreso
		valori.append(evaluacion)
	#--Se busca en el modelo DJANGO los campos parametrizados para la cuenta
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	logger_saves.info("/***********************************************************/")
	logger_saves.info("Campo cuenta en grupo "+grupo.nombre)
	queryCuentasParametrizadas="SELECT * from IC_CAMPO_CUENTA WHERE ID_GRUPO_ID="+str(grupo.id_grupo)+" AND VALOR='"+str(cuenta_oper)+"'"
	cursorContabilidad.execute(queryCuentasParametrizadas)
	datosCuentasParametrizadas=cursorContabilidad.fetchone()
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Verifica si las cuentas establecidas en las parametrizaciones estan vigentes para operar query:")
	logger_saves.info(queryCuentasParametrizadas)
	logger_saves.info("Dato cuenta en query")
	logger_saves.info(datosCuentasParametrizadas)
	if datosCuentasParametrizadas is None:
		try:
			index=idscuentasfaltantes.index(str(cuenta_oper)+"|"+str(grupo.nombre))
		except Exception, e:
			idscuentasfaltantes.append(str(cuenta_oper)+"|"+str(grupo.nombre))
		cache.set("error", -1)
		cache.set("error", -1)
	#--Recorre las cuentas establecidas en la parametrización
	for campoestablecido in campocuenta:
		logger_saves.info("/***********************************************************/")
		logger_saves.info("Nombre Campo Cuenta "+campoestablecido.valor_descripcion)
		logger_saves.info("Ingresa el siguiente MOvimiento de banco: "+str(idmovcontab))
		#--Compara si el valor enviado de la cuenta esta contenido al parametrizado en las cuentas
		if str(cuenta_oper)==campoestablecido.valor:
			#--Asigna una variable para saber si contiene o no auxiliar
			prueba=str(campoestablecido.auxiliar)
			#--Verifica si tiene o no auxiliar, si lo tiene busca en las tablas con auxiliar los datos de la cuenta, de lo contrario opera sin auxiliar
			if len(prueba)==0:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursorContabilidad.execute(querydatanoaux)
				datoscuenta=cursorContabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursorContabilidad.execute(querytercero)
				datostercero=cursorContabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				quehace.append(datostercero)
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))	
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
				else:
					#--Ejecuta movimiento en la base de datos con el movimiento contable con anulación
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
					cursorContabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
					cursorContabilidad.execute(querymovimientobancario)
			else:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
				cursorContabilidad.execute(querydatanoaux)
				datoscuenta=cursorContabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursorContabilidad.execute(querytercero)
				datostercero=cursorContabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación
				if anula==0:
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
				else:
					#--Ejecuta movimiento en la base de datos con el movimiento contable con anulación
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
					cursorContabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
					cursorContabilidad.execute(querymovimientobancario)
			#--Aumenta en uno el número de la secuencia del movimiento contable
			idmovcontab=idmovcontab+1
	#--Retorna el número de secuencia del movimento contable
	#--20140421 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovcontab))

#----Movimiento retenciones
#--Metodo que sirve para ejecutar retenciones y otros movimientos cuando la cuenta parametrizada y el valor enviado es el mismo
#--Entrada: 
#---asiento: Modelo proveniente del modelo de asientos, trae la naturaleza, el grupo, la tabla, el tipp, si maneja o no grupo, etc.
#---iddocumento: Id del documento para el movimiento
#---idcad: Id del cad asociado
#---id_vigencia: Año de vigencia del movimiento
#---idcenop: Id del centro de operacion
#---idcia: Id de la compañia
#---id_maeter: Id del maestro de terceros que opera
#---idmovcontab: Id de la secuencia del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Identificador de la busqueda en la tabla
#---anula: Valor que maneja si se debe anular o no el movimiento
#---cuenta_oper: Cuenta a operar cuando se maneja con grupo
#--Salida:
#---idmovcontab: Valor actual del movimiento para ingreso de siguientes movimientos contables
def ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorConexion,cursorContabilidad):
	#--20140421 - Modificacion, Captura el id del movimiento de la cache
	idmovcontab=cache.get("idmovcontab")
	#--Busca el campo valor para ejecución con el grupo
	campovalor=asiento.id_campo_valor
	#--Busca la tabla con la que se va a operar
	tabla=campovalor.id_tabla
	#--Variable que almacena el nombre de la tabla a operar
	nombretabla=tabla.nombre
	#--Variable que almacena el grupo con el que se va a trabajar
	grupo=asiento.id_grupo
	#--Evalua si el valor a ingresar viene vacio, si es asi lo busca enla base de dtaos de acuerdo a lo parametrizado, si no lo asigna
	if evaluacion is None:
		#--Genera la consulta del valor de acuerdo a los valores que se han parametrizado en la cuenta con anterioridad
		cursorConexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		#--Asigna el valor a la variable con la que se va a trabajar
		try:
			valori=cursorConexion.fetchone()
		except cx_Oracle.DatabaseError, ex:
			error, = ex.args
			logger_saves.error("Fallo al consultar el valor a ingresar")
			logger_saves.error("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
			logger_saves.error('Error.code = '+str(error.code))
			logger_saves.error('str(error.message) = '+str(error.message))
			logger_saves.error('str(error.offset) = '+str(error.offset))
			errorConexion="Fallo al consultar el valor a ingresar|SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
			erroresGeneral.append(errorConexion)
			cache.set("error", -1)
	else:
		#--Crea la variable con la que se va a trabajar el ingreso
		valori=[]
		#--Se asigna el valor de la evaluación para el ingreso
		valori.append(evaluacion)
	#--Se busca en el modelo DJANGO los campos parametrizados para la cuenta	
	campocuenta=Campo_Cuenta.objects.filter(id_grupo=grupo.id_grupo)
	#--Se transforma el valor de la cuenta en STRING para comparación
	cuenta_oper=str(cuenta_oper)
	queryCuentasParametrizadas="SELECT * from IC_CAMPO_CUENTA WHERE ID_GRUPO_ID="+str(grupo.id_grupo)+" AND VALOR='"+cuenta_oper+"'"
	cursorContabilidad.execute(queryCuentasParametrizadas)
	datosCuentasParametrizadas=cursorContabilidad.fetchone()
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Verifica si las cuentas establecidas en las parametrizaciones estan vigentes para operar query:")
	logger_saves.info(queryCuentasParametrizadas)
	logger_saves.info("Dato cuenta en query")
	logger_saves.info("Valor que se ingresa en la cuenta: ")
	logger_saves.info(valori)
	logger_saves.info(datosCuentasParametrizadas)
	if datosCuentasParametrizadas is None:
		try:
			index=idscuentasfaltantes.index(str(cuenta_oper)+"|"+str(grupo.nombre))
		except Exception, e:
			idscuentasfaltantes.append(str(cuenta_oper)+"|"+str(grupo.nombre))
		cache.set("error", -1)
	#--Recorre las cuentas establecidas en la parametrización
	for campoestablecido in campocuenta:
		#--Compara si el valor enviado de la cuenta es igual al parametrizado en las cuentas
		if cuenta_oper==campoestablecido.valor:
			logger_saves.info("Entra a ejecutar la interfaz")
			#--Asigna una variable para saber si contiene o no auxiliar
			prueba=str(campoestablecido.auxiliar)
			#--Verifica si tiene o no auxiliar, si lo tiene busca en las tablas con auxiliar los datos de la cuenta, de lo contrario opera sin auxiliar
			if len(prueba)==0:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursorContabilidad.execute(querydatanoaux)
				datoscuenta=cursorContabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursorContabilidad.execute(querytercero)
				datostercero=cursorContabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación	
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
						logger_saves.info("/*********************************************************************************/")
						logger_saves.info("Ingresa movimiento, maeter no aparece")
						logger_saves.info(datosMovimiento)
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
				else:
					#--Ejecuta movimiento en la base de datos con el movimiento contable con anulación
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
					cursorContabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
					cursorContabilidad.execute(querymovimientobancario)
			else:
				#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
				querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+campoestablecido.catalogo+"AND COD_AUX="+campoestablecido.auxiliar
				cursorContabilidad.execute(querydatanoaux)
				datoscuenta=cursorContabilidad.fetchone()
				#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
				querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+campoestablecido.catalogo
				cursorContabilidad.execute(querytercero)
				datostercero=cursorContabilidad.fetchone()
				#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
				if datostercero[0]==0:
					id_maeter=''
				else:
					id_maeter=str(id_maeter)
				#--Verifica si el ingreso es o no una anulación	
				if anula==0:
					#--Verifica la naturaleza del asiento para el ingreso
					if asiento.naturaleza == "C":
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
					else:
						#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
						#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
						datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
						cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
						try:
							cursorContabilidad.execute(None,datosMovimiento)
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al ingresar el movimiento contable: ")
							logger_saves.error(datosMovimiento)
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresMovimientos.append(errorConexion)
							cache.set("error", -1)
				else:
					#--Ejecuta movimiento en la base de datos con el movimiento contable con anulación
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
					cursorContabilidad.execute(querymovimientobancario)
					idmovcontab=idmovcontab+1
					querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
					cursorContabilidad.execute(querymovimientobancario)
			#--Aumenta en uno el número de la secuencia del movimiento contable
			logger_saves.info("Ingresa el siguiente MOvimiento de banco: "+str(idmovcontab))
			idmovcontab=idmovcontab+1
	#--Retorna el número de secuencia del movimento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovcontab))

#--Metodo que sirve para ejecutar movimientos sin grupo
#--Entrada: 
#---asiento: Modelo proveniente del modelo de asientos, trae la naturaleza, el grupo, la tabla, el tipp, si maneja o no grupo, etc.
#---iddocumento: Id del documento para el movimiento
#---idcad: Id del cad asociado
#---id_vigencia: Año de vigencia del movimiento
#---idcenop: Id del centro de operacion
#---idcia: Id de la compañia
#---id_maeter: Id del maestro de terceros que opera
#---idmovcontab: Id de la secuencia del movimiento contable
#---evaluacion: Valor a operar
#---idbusqueda: Identificador de la busqueda en la tabla
#---anula: Valor que maneja si se debe anular o no el movimiento
#--Salida:
#---idmovcontab: Valor actual del movimiento para ingreso de siguientes movimientos contables
def ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorConexion,cursorContabilidad):
	#--20140219 - Modificacion, Captura el id del movimiento de la cache
	idmovcontab=cache.get("idmovcontab")
	logger_saves.info("Ingresa el siguiente MOvimiento de banco: "+str(idmovcontab))
	#--Busca el campo valor para ejecución con el grupo
	campovalor=asiento.id_campo_valor
	#--Busca la tabla con la que se va a operar
	tabla=campovalor.id_tabla
	#--Variable que almacena el nombre de la tabla a operar
	nombretabla=tabla.nombre
	#--Variable que almacena el grupo con el que se va a trabajar
	grupo=asiento.id_grupo
	logger_saves.info("Nombre de la tabla que contiene el valor")
	logger_saves.info(nombretabla)
	#--Si viene por el calculo de la sumatoria del valor, este fuerza a que entre a hacer la sumatoria en la base de datos
	if nombretabla=='TS_OBLIGACION_VAL':
		evaluacion=None;
		#--Toma la llave que viene con el id del documento y el id del pago para separaralas y ejecutar
		searchData=str(iddocumento).split("|")
		logger_saves.info("Documento con id")
		logger_saves.info(searchData)
		if len(searchData)==4:
			#--Cuadra el id de la busqueda
			idobligacion=searchData[0]
			idvigencia=searchData[1]
			idsecuencia=searchData[2]
			idaniofiscal=searchData[3]
			#--Cuadra el documento para el ingreso del movimiento
			iddocumento=searchData[0]
		else:
			#--Toma el numero de documento
			iddocumento=searchData[0]
			#--Toma el id para la busqueda
			idtspagoobl=searchData[1]
			#--Identificador para el query
			idsecuencia=None
	#--Evalua si el valor a ingresar viene vacio, si es asi lo busca enla base de dtaos de acuerdo a lo parametrizado, si no lo asigna
	if evaluacion is None:
		if nombretabla=='TS_OBLIGACION_VAL':
			if idsecuencia is not None:
				logger_saves.info("Ingreso por el calculo de la sumatoria del valor de la obligacion presupuestal")
				#--Genera sumatoria cuando viene por la obligacion en la sumatoria del valor bruto
				cursorConexion.execute("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_OBLIGACION_VAL LEFT JOIN TS_OBLIGACION ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_OBLIGACION.ID_OBLIGACION="+str(idobligacion)+" AND TS_OBLIGACION.SECUENCIA="+str(idsecuencia)+" AND TS_OBLIGACION.ID_VIGENCIA="+str(idvigencia)+" AND TS_OBLIGACION.ANO_FISCAL="+str(idaniofiscal))
				logger_saves.info("Consulta con sumatoria")
				logger_saves.info("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_OBLIGACION_VAL LEFT JOIN TS_OBLIGACION ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_OBLIGACION.ID_OBLIGACION="+str(idobligacion)+" AND TS_OBLIGACION.SECUENCIA="+str(idsecuencia)+" AND TS_OBLIGACION.ID_VIGENCIA="+str(idvigencia)+" AND TS_OBLIGACION.ANO_FISCAL="+str(idaniofiscal))
			else:
				logger_saves.info("Ingreso por el calculo de la sumatoria del valor de la obligacion pagos")
				#--Genera sumatoria cuando viene por la obligacion en la sumatoria del valor bruto
				cursorConexion.execute("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_PAGO_OBL LEFT JOIN TS_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_PAGO_OBL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_PAGO_OBL.VIGENCIA=TS_OBLIGACION.ANO_FISCAL LEFT JOIN TS_OBLIGACION_VAL ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_PAGO_OBL.ID_PAGO_OBL="+str(idtspagoobl))
				logger_saves.info("Consulta con sumatoria")
				logger_saves.info("SELECT SUM(TS_OBLIGACION_VAL.VALOR_OBLIGACION) FROM TS_PAGO_OBL LEFT JOIN TS_OBLIGACION ON TS_PAGO_OBL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_PAGO_OBL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_PAGO_OBL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_PAGO_OBL.VIGENCIA=TS_OBLIGACION.ANO_FISCAL LEFT JOIN TS_OBLIGACION_VAL ON TS_OBLIGACION_VAL.ID_OBLIGACION=TS_OBLIGACION.ID_OBLIGACION AND TS_OBLIGACION_VAL.SECUENCIA=TS_OBLIGACION.SECUENCIA AND TS_OBLIGACION_VAL.ID_VIGENCIA=TS_OBLIGACION.ID_VIGENCIA AND TS_OBLIGACION_VAL.ANO_FISCAL=TS_OBLIGACION.ANO_FISCAL WHERE TS_PAGO_OBL.ID_PAGO_OBL="+str(idtspagoobl))
		else:
			logger_saves.info("Entro por llamada generica de campo")
			#--Genera la consulta del valor de acuerdo a los valores que se han parametrizado en la cuenta con anterioridad
			cursorConexion.execute("SELECT "+campovalor.nombre+" from "+tabla.nombre+" WHERE "+idbusqueda+"="+str(iddocumento))
		#--Asigna el valor a la variable con la que se va a trabajar
		valori=cursorConexion.fetchone()
	else:
		logger_saves.info("Entro a ejecutar por este lado?? else cuanod tiene valor de obligaciopn")
		#--Crea la variable con la que se va a trabajar el ingreso
		valori=[]
		#--Se asigna el valor de la evaluación para el ingreso
		valori.append(evaluacion)
	#--Asigna una variable para saber si contiene o no auxiliar
	auxasiento=str(asiento.auxiliar)
	#--Verifica si tiene o no auxiliar, si lo tiene busca en las tablas con auxiliar los datos de la cuenta, de lo contrario opera sin auxiliar
	if len(asiento.auxiliar)==0:
		#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta
		querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA FROM CN_SUBC_DIGITOS WHERE DIGITOS="+asiento.catalogo
		try:
			cursorContabilidad.execute(querydatanoaux)
			datoscuenta=cursorContabilidad.fetchone()
		except cx_Oracle.DatabaseError, ex:
			logger_saves.error("Fallo al consultar la tabla de Cuentas")
			logger_saves.error(querydatanoaux)
			logger_saves.error('Error.code = '+str(error.code))
			logger_saves.error('str(error.message) = '+str(error.message))
			logger_saves.error('str(error.offset) = '+str(error.offset))
			errorConexion="Fallo al consultar la tabla de Cuentas|"+str(querydatanoaux)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
			erroresGeneral.append(errorConexion)
			cache.set("error", -1)
		#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
		querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
		try:
			cursorContabilidad.execute(querytercero)
			datostercero=cursorContabilidad.fetchone()
		except cx_Oracle.DatabaseError, ex:
			logger_saves.error("Fallo al consultar el tercero para saber si se debe o no ingresar")
			logger_saves.error(querytercero)
			logger_saves.error('Error.code = '+str(error.code))
			logger_saves.error('str(error.message) = '+str(error.message))
			logger_saves.error('str(error.offset) = '+str(error.offset))
			errorConexion="Fallo al consultar el tercero para saber si se debe o no ingresar|"+str(querytercero)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
			erroresGeneral.append(errorConexion)
			cache.set("error", -1)
		#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
		if datostercero[0]==0:
			id_maeter=''
		else:
			id_maeter=str(id_maeter)
		#--Verifica si el ingreso es o no una anulación	
		if anula==0:
			#--Verifica la naturaleza del asiento para el ingreso
			if asiento.naturaleza == "C":
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito sin auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',0,valori[0],'')
				cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursorContabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
			else:
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito sin auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,'','','','',valori[0],0,'')
				cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursorContabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
		else:
			#--Ejecuta movimiento en la base de datos con el movimiento contable con anulación
			quehace.append("Ejecuta con anulacion")
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','0','"+str(valori[0])+"','')"
			cursorContabilidad.execute(querymovimientobancario)
			idmovcontab=idmovcontab+1
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','','','','','"+str(valori[0])+"','0','')"
			cursorContabilidad.execute(querymovimientobancario)
	else:
		#--Ejecuta busqueda en la tabla que contiene los datos de la cuenta y el auxiliar
		querydatanoaux="SELECT ID_CATALOGO, ID_CUENTA_MAYOR, ID_GRUPO_CUENTA, ID_CLASE_CUENTA, ID_AUXILIAR FROM CN_SUBC_DIGITOS_AUX WHERE DIGITOS="+asiento.catalogo+"AND COD_AUX="+asiento.auxiliar
		cursorContabilidad.execute(querydatanoaux)
		datoscuenta=cursorContabilidad.fetchone()
		#--Consulta si la cuenta utiliza o no tercero para ingresarlo en la busqueda
		querytercero="SELECT USA_TERCERO FROM CN_CATALOGO_DIGITOS WHERE DIGITOS="+asiento.catalogo
		cursorContabilidad.execute(querytercero)
		datostercero=cursorContabilidad.fetchone()
		#--Verifica si la cuenta utliza tercero, de lo contrario no lo ingresa
		if datostercero[0]==0:
			id_maeter=''
		else:
			id_maeter=str(id_maeter)
		#--Verifica si el ingreso es o no una anulación
		if anula==0:
			#--Verifica la naturaleza del asiento para el ingreso
			if asiento.naturaleza == "C":
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Crédito con auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',0,valori[0],'')
				cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursorContabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
			else:
				#--Ejecuta movimiento en la base de datos con el movimiento contable en Débito con auxiliar
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosMovimiento=(idmovcontab,iddocumento,idcad,id_vigencia,idcenop,int(idcia),datoscuenta[0],datoscuenta[1],datoscuenta[2],datoscuenta[3],id_maeter,datoscuenta[4],'','','',valori[0],0,'')
				cursorContabilidad.prepare("INSERT INTO CN_MOVIMIENTO_CONTABLE (ID_MOV_CONT,ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_CATALOGO,ID_CUENTA_MAYOR,ID_GRUPO_CUENTA,ID_CLASE_CUENTA,ID_MAE_TER,ID_AUXILIAR,ID_SUB_AUX,ID_CENTRO_COSTO,ID_SUB_CENTRO_COSTO,DEBITO,CREDITO,VALOR_BASE) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)")
				try:
					cursorContabilidad.execute(None,datosMovimiento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al ingresar el movimiento contable: ")
					logger_saves.error(datosMovimiento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al ingresar el movimiento contable|"+str(datosMovimiento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresMovimientos.append(errorConexion)
					cache.set("error", -1)
		else:
			#--Ejecuta movimiento en la base de datos con el movimiento contable con anulación
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','0','"+str(valori[0])+"','')"
			cursorContabilidad.execute(querymovimientobancario)
			idmovcontab=idmovcontab+1
			querymovimientobancario="INSERT INTO CN_MOVIMIENTO_CONTABLE VALUES(\'"+str(idmovcontab)+"','"+str(iddocumento)+"','"+str(idcad)+"','"+str(id_vigencia)+"','"+str(idcenop)+"','"+str(idcia)+"','"+str(datoscuenta[0])+"','"+str(datoscuenta[1])+"','"+str(datoscuenta[2])+"','"+str(datoscuenta[3])+"','"+id_maeter+"','"+str(datoscuenta[4])+"','','','','"+str(valori[0])+"','0','')"
			cursorContabilidad.execute(querymovimientobancario)
	#--Aumenta en uno el número de la secuencia del movimiento contable
	idmovcontab=idmovcontab+1
	#--Retorna el número de secuencia del movimento contable
	#--20140219 - Modificacion, Cuadra el valor en la cache hasta dodne va para ir ejecutando
	cache.set("idmovcontab", int(idmovcontab))
#---Fin ejecucion normal interfaces contables

#--Metodo que cuadra la ejecución del movimiento contable para Movientos de Bancos
#--Entrada: 
#----idCAD: Id del cad que va a ejecutar
#----fechaEjecucion: Fecha en la que se va a realizar el CAD, DOCUMENTOS y MOVIMIENTOS CONTABLES
#----movimientosBancos: Datos sobre los movimientos de bancos
#----tipo_comprobante: Id del tipo de comprobante con el que se va a generar
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
#--Salida: 
#----idgen: Id generado por la varibale que tiene los datos del id en que va la bd
def ejecutaMovimiento(idCAD, fechaEjecucion, movimientosBancos, tipo_comprobante,idgen):
	logger_saves.info("/*********************************************************************************/")
	logger_saves.info("Entra a setear las basicas para el movimiento de banco")
	#--Variable para pruebas donde se manejan los datos del CAD
	tsmovbanctrabajar=[]
	#--Cantidad de CADS ejecutados
	cuantosejecutados=0
	#--Id del cad a ejecutar
	id_cad=idCAD
	#--Fecha en la que se ejecuta el CAD
	now = fechaEjecucion
	#--Año de vigencia del CAD
	vigencia = now.year
	#--Mes de ejecución del CAD
	me=now.month
	#--Id del centro de operación que esta activo en el sistema
	cen_op=id_cen_op
	#--20140514 - MOdificacion, se cambia el tipo a 0, cuanod no llega centro de operacion para que termine la ejecucion
	if cen_op is None:
		cen_op=0
	#--Id de la compañia que esta activo en el sistema
	cia=id_cia
	#--Fecha de ejecución del Movimiento
	fecha=str(now)
	#--Variable que contiene movimiento de bancos
	nuevo=movimientosBancos
	#--Variable que da ejecución en la entrada al código
	entra=1
	#--Variable que en este caso maneja dato de TS_MB_DEDUCCIONES, en este caso el ID_MB_DEDUCCION
	ts_im=0
	#--Variable que maneja la ejecución
	ejecucion=-3
	#--Id de busqueda en la tabla
	idbusqueda="ID_MOV_BANC"
	#--Itera sobre los conceptos
	for concepto in conceptos:
		#--Entra a recorrer conceptos, debe verificar que existan movimientos de bancos en la fecha y con el concepto
		#--Verifica los movimientos existentes para ejecución
		movimientosBancos=verificaMovimiento(fechaEjecucion,concepto.id_concepto_generico)
		#20140314 - Modificacion, Verifica anulaciones sobre la fecha
		movimientosAnulacion=verificaMovimientoAnulacion(fechaEjecucion,concepto.id_concepto_generico)
		#--Verifica existencia de movimientos para generar ejecución
		if len(movimientosBancos)!=0:
			#--Comience a aplicar reglas para parametrizar
			#--Verifica si puede o no crear CAD de acuerdo al concepto
			if nuevo==1 and entra==1:
				#--Crea Nuevo CAD de acuerdo a los datos suministrados
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosCAD=(id_cad,vigencia,int(cen_op),int(cia),int(me),tipo_comprobante,now,0,0,'','','')
				cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(None,datosCAD)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear CAD")
					logger_saves.error(datosCAD)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresCads.append(errorConexion)
					cache.set("error", -1)
				#--Ingresa dato del CAD a los ejecutados
				idscadsejecutados.append(str(idgen)+","+str(vigencia))
				logger_saves.info("Ingresa el siguiente CAD: "+str(idgen))
				#--Aumenta la secuencia de CAD
				idgen+=1
				#--Cambia valor de a variable para que no ejecute sino una vez
				entra=2
			#--Comienza a recorrer cada uno de los movimientos de bancos
			for movimiento in movimientosBancos:
				#--20140408 - Modificacion, Se coloca validacion de usuarios, en caso que no este lo crea
				verificaMaeter(movimiento[6],cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
				#--Levanta string para captura de fecha
				fecha_doc=str(movimiento[8])
				fecha_doc=fecha_doc.split(' ')
				fecha_doc=fecha_doc[0]
				#--Cambia valor de ejecucion para reflejar que si hubo movimiento
				ejecucion=1
				#--Ingresa documento en la base de datos de contabilidad
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				desc=str(movimiento[9])
				desc=str(concepto.cod_concepto_generico)+" - "+desc
				desc=(desc[:253] + '..') if len(desc) > 256 else desc
				datosDocumento=(movimiento[0],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,movimiento[6],desc,movimiento[7],movimiento[8],0,0)
				logger_saves.info("Ingresa documento en movimiento")
				logger_saves.info(datosDocumento)
				cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(None,datosDocumento)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear Documento")
					logger_saves.error(datosDocumento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresDocumentos.append(errorConexion)
					cache.set("error", -1)
				#--Cuadra las variables para el manejo de los Movimientos Contables en la inserción
				iddocumento=movimiento[0]
				idcad=id_cad
				id_vigencia=vigencia
				idcenop=cen_op
				idcia=cia
				id_maeter=movimiento[6]
				#--Busca la cuenta para compararlo contra el parametrizado en la interfaz
				cursorModuloConexionTesoreriaMovimientoBancos.execute("SELECT NUMERO_CUENTA from TS_CB WHERE ID_CB="+str(movimiento[5]))
				cuenta_oper=cursorModuloConexionTesoreriaMovimientoBancos.fetchone()
				cuenta_oper=cuenta_oper[0]
				#--Carga los asientos correspondientes al concepto que este activo
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				#--Recorre uno a uno los asientos encontrados
				for asiento in asientosconcepto:
					#--Variable que maneja la anulación del movimiento
					anula=0
					#--Crea variables para busqueda del valor del movimiento en caso que se necesite
					campovalor=asiento.id_campo_valor
					tabla=campovalor.id_tabla
					nombretabla=tabla.nombre
					#--Busca si el asiento posee o no formula
					formu=asiento.formula
					logger_saves.info("/*************************************************/")
					logger_saves.info("Nombre del concepto "+concepto.nombre)
					#--Verifica si contiene o no Retenciones
					if nombretabla=="TS_MB_DEDUCCIONES":
						#--Consulta los datos correspondientes para la retención -20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
						cursorModuloConexionTesoreriaMovimientoBancos.execute("SELECT VALOR_IMPUESTO,ID_IM,ID_MAE_TER from TS_MB_DEDUCCIONES WHERE "+idbusqueda+"="+str(movimiento[0]))
						try:
							retencion1=cursorModuloConexionTesoreriaMovimientoBancos.fetchall()
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al consultar retenciones")
							logger_saves.error("SELECT VALOR_IMPUESTO,ID_IM,ID_MAE_TER from TS_MB_DEDUCCIONES WHERE "+idbusqueda+"="+str(movimiento[0]))
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al consultar retenciones"+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresGeneral.append(errorConexion)
							cache.set("error", -1)
						#--Verifica que si existen datos de la retención - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
						if retencion1 is not None:
							#--Recorre retenciones existentes - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
							for retencion in retencion1:
								#--Cuadra las variables para el manejo de los Movimientos Contables en la inserción
								ts_im=retencion[1]
								valor_maeter=retencion[2]
								evaluacion=retencion[0]
								id_maeter=valor_maeter
								#--Ajusta la cuenta a operar
								cuenta_oper=ts_im
								#--Verifica si el valor a ingresar es negativo
								if evaluacion<0:
									#--Cambia el valor de la evaluacion a positivo
									evaluacion=evaluacion*-1
									#--Cambia la naturaleza del asiento por ser el valor negativo
									if asiento.naturaleza == "C":
										asiento.naturaleza = "D"
									else:
										asiento.naturaleza = "C"
								#--Revise si el movimiento posee anulación
								#20140314 - Modificacion, Se Obvia el proceso de anulacion, debido a que estas se procesan en otro lote 
								#if movimiento[3] == 1:
									#--Busca la fecha de anulación 
									#cursormoduloconexion.execute("SELECT FECHA_ANUL from TS_ANU_MOV_BANC WHERE "+idbusqueda+"="+str(movimiento[0]))
									#fechaanulacion=cursormoduloconexion.fetchone()
									#--Revisa si existe la fecha de anulación
									#if len(str(fechaanulacion))!=0:
									#	#--Variable con la fecha de anulación
									#	fechaanulacion=fechaanulacion[0].date()
									#	#--Variable con el mes de la fecha
									#	mesanulacion=fechaanulacion.month
										#--Variable con el año de la anulación
									#	anioanulacion=fechaanulacion.year
									#	#--Verifica si el mes y el año esta dentro del periodo ejecutado
									#	if(mesanulacion==me and anioanulacion==vigencia):
											#--Se activa la anulación
									#		anula=1
									#	else:
											#--No se activa la anulación
									#		anula=0
									#else:
										#--No se activa la anulación
									#	anula=0
								#else:
									#--No se activa la anulación
								anula=0
								#--Ejecuta movimiento contable
								if asiento.usa_grupo==1:
									ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
								else:
									ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
					else:
						#--Entra por Ejecucion Normal
						#--Revisa si el asiento cuenta o no con evaluación
						if len(formu)!=0:
							#--Se ejecuta la evaluación de la formula
							evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
						else:
							#--Se asigna el valor del movimiento de banco
							valormovbanc=movimiento[1]
						#--Se asigna el valor en la variable para el movimiento de bancos
						evaluacion=valormovbanc
						#--Verifica si el valor a ingresar es negativo
						if evaluacion<0:
							#--Cambia el valor de la evaluacion a positivo
							evaluacion=evaluacion*-1
							#--Cambia la naturaleza del asiento por ser el valor negativo
							if asiento.naturaleza == "C":
								asiento.naturaleza = "D"
							else:
								asiento.naturaleza = "C"
						#--Revise si el movimiento posee anulación
						#20140314 - Modificacion, Se Obvia el proceso de anulacion, debido a que estas se procesan en otro lote 
						#if movimiento[3] == 1:
							#--Busca la fecha de anulación 
						#	cursormoduloconexion.execute("SELECT FECHA_ANUL from TS_ANU_MOV_BANC WHERE "+idbusqueda+"="+str(movimiento[0]))
						#	fechaanulacion=cursormoduloconexion.fetchone()
							#--Revisa si existe la fecha de anulación
							#if len(str(fechaanulacion))!=0:
								#--Variable con la fecha de anulación
							#	fechaanulacion=fechaanulacion[0].date()
								#--Variable con el mes de la fecha
							#	mesanulacion=fechaanulacion.month
								#--Variable con el año de la anulación
							#	anioanulacion=fechaanulacion.year
								#--Verifica si el mes y el año esta dentro del periodo ejecutado
							#	if(mesanulacion==me and anioanulacion==vigencia):
									#--Se activa la anulación
							#		anula=1
							#	else:
									#--No se activa la anulación
							#		anula=0
							#else:
								#--No se activa la anulación
							#anula=0
						#else:
							#--No se activa la anulación
							#anula=0
						anula=0
						#--Revisa si el asiento usa o no grupo
						if(asiento.usa_grupo==1):
							#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
							grupo=asiento.id_grupo 
							logger_saves.info("Nombre del grupo")
							logger_saves.info(grupo.nombre)
							logger_saves.info("/************************************************************************************/")
							logger_saves.info("Nombre del campo de los grupos a operar")
							logger_saves.info(grupo.campo)
							if grupo.campo=="ID_MINERAL":
								cuenta_oper=movimiento[10]
							#--Ejecuta movimiento contable
							ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
						else:
							#--Ejecuta movimiento contable
							ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
		#20140314 - Modificacion, se agrega la ejecucion del lote de anulaciones para hacer el ingreso del movimiento
		if len(movimientosAnulacion)!=0:
			#--Comience a aplicar reglas para parametrizar
			#--Verifica si puede o no crear CAD de acuerdo al concepto
			if nuevo==1 and entra==1:
				#--Crea Nuevo CAD de acuerdo a los datos suministrados 
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				datosCAD=(id_cad,vigencia,int(cen_op),int(cia),int(me),tipo_comprobante,now,0,0,'','','')
				cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("INSERT INTO CN_CONTROL_CAD (ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_PERIODO_CONTABLE,ID_TIPO_COMPROBANTE,FECHA_CAD,TOT_DEBITO,TOT_CREDITO,ID_TER_GENERO,ID_TER_REVISO,ID_TER_APROBO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(None,datosCAD)
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear CAD")
					logger_saves.error(datosCAD)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear CAD|"+str(datosCAD)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresCads.append(errorConexion)
					cache.set("error", -1)
				#--Ingresa dato del CAD a los ejecutados
				idscadsejecutados.append(str(idgen)+","+str(vigencia))
				logger_saves.info("Ingresa el siguiente CAD - ANULADO: "+str(idgen))
				#--Aumenta la secuencia de CAD
				idgen+=1
				#--Cambia valor de a variable para que no ejecute sino una vez
				entra=2
			#--Comienza a recorrer cada uno de los movimientos de bancos
			for movimiento in movimientosAnulacion:
				#--20140408 - Modificacion, Se coloca validacion de usuarios, en caso que no este lo crea
				verificaMaeter(movimiento[6],cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
				#--Levanta string para captura de fecha
				fecha_doc=str(movimiento[8])
				fecha_doc=fecha_doc.split(' ')
				fecha_doc=fecha_doc[0]
				#--Cambia valor de ejecucion para reflejar que si hubo movimiento
				ejecucion=1
				#--Ingresa documento en la base de datos de contabilidad
				#--20140319 - Modificacion, Se cambian las consultas para que manejen el prepared stament y bind de Oracle
				desc=str(movimiento[9])
				desc=str(concepto.cod_concepto_generico)+" - "+desc
				desc=(desc[:253] + '..') if len(desc) > 256 else desc
				#20140328 - Modificacion, se verifica si existe el documento para no crearlo
				queryverificadocumento="SELECT ID_DOCUMENTO from CN_DOCUMENTO where ID_CAD="+str(id_cad)+" and ID_VIGENCIA="+str(vigencia)+" and ID_CEN_OP="+str(cen_op)+" and ID_CIA="+str(cia)+" and ID_DOCUMENTO="+str(movimiento[0])
				try:
					cursorModuloContabilidadTesoreriaMovimientoBancos.execute(queryverificadocumento)
					existedocumentobancos=cursorModuloContabilidadTesoreriaMovimientoBancos.fetchone()
				except cx_Oracle.DatabaseError, ex:
					error, = ex.args
					logger_saves.error("Fallo al crear Documento")
					logger_saves.error(queryverificadocumento)
					logger_saves.error('Error.code = '+str(error.code))
					logger_saves.error('str(error.message) = '+str(error.message))
					logger_saves.error('str(error.offset) = '+str(error.offset))
					errorConexion="Fallo al crear CAD|"+str(queryverificadocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
					erroresDocumentos.append(errorConexion)
					cache.set("error", -1)
				if existedocumentobancos is None:
					datosDocumento=(movimiento[0],id_cad,vigencia,cen_op,cia,concepto.id_tipo_documento,movimiento[6],desc,movimiento[7],movimiento[8],0,0)
					logger_saves.info("Ingresa documento movimiento anulado")
					logger_saves.info(datosDocumento)
					cursorModuloContabilidadTesoreriaMovimientoBancos.prepare("INSERT INTO CN_DOCUMENTO (ID_DOCUMENTO,ID_CAD,ID_VIGENCIA,ID_CEN_OP,ID_CIA,ID_TD,ID_MAE_TER,DESCR_MTO,DOC_SOPORTE,FECHA_SOPORTE,TOT_DEBITO, TOT_CREDITO) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12)")
					try:
						cursorModuloContabilidadTesoreriaMovimientoBancos.execute(None,datosDocumento)
					except Exception, e:
						logger_saves.error("Fallo al crear Documento")
						logger_saves.error(datosDocumento)
						logger_saves.error('Error.code = '+str(error.code))
						logger_saves.error('str(error.message) = '+str(error.message))
						logger_saves.error('str(error.offset) = '+str(error.offset))
						errorConexion="Fallo al crear Documento|"+str(datosDocumento)+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
						erroresDocumentos.append(errorConexion)
						cache.set("error", -1)
				#--Cuadra las variables para el manejo de los Movimientos Contables en la inserción
				iddocumento=movimiento[0]
				idcad=id_cad
				id_vigencia=vigencia
				idcenop=cen_op
				idcia=cia
				id_maeter=movimiento[6]
				#--Busca la cuenta para compararlo contra el parametrizado en la interfaz
				cursorModuloConexionTesoreriaMovimientoBancos.execute("SELECT NUMERO_CUENTA from TS_CB WHERE ID_CB="+str(movimiento[5]))
				cuenta_oper=cursorModuloConexionTesoreriaMovimientoBancos.fetchone()
				cuenta_oper=cuenta_oper[0]
				#--Carga los asientos correspondientes al concepto que este activo
				asientosconcepto=Asiento.objects.filter(id_concepto=concepto.id_concepto)
				#--Recorre uno a uno los asientos encontrados
				for asiento in asientosconcepto:
					#--Variable que maneja la anulación del movimiento
					anula=0
					#--Crea variables para busqueda del valor del movimiento en caso que se necesite
					campovalor=asiento.id_campo_valor
					tabla=campovalor.id_tabla
					nombretabla=tabla.nombre
					#--Busca si el asiento posee o no formula
					formu=asiento.formula
					#--Verifica si contiene o no Retenciones
					if nombretabla=="TS_MB_DEDUCCIONES":
						#--Consulta los datos correspondientes para la retención -20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
						cursorModuloConexionTesoreriaMovimientoBancos.execute("SELECT VALOR_IMPUESTO,ID_IM,ID_MAE_TER from TS_MB_DEDUCCIONES WHERE "+idbusqueda+"="+str(movimiento[0]))
						try:
							retencion1=cursorModuloConexionTesoreriaMovimientoBancos.fetchall()
						except cx_Oracle.DatabaseError, ex:
							error, = ex.args
							logger_saves.error("Fallo al consultar retenciones")
							logger_saves.error("SELECT VALOR_IMPUESTO,ID_IM,ID_MAE_TER from TS_MB_DEDUCCIONES WHERE "+idbusqueda+"="+str(movimiento[0]))
							logger_saves.error('Error.code = '+str(error.code))
							logger_saves.error('str(error.message) = '+str(error.message))
							logger_saves.error('str(error.offset) = '+str(error.offset))
							errorConexion="Fallo al consultar retenciones"+"|"+str(error.code)+"|"+str(error.message)+"|"+str(error.offset)
							erroresGeneral.append(errorConexion)
							cache.set("error", -1)
						#--Verifica que si existen datos de la retención - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
						if retencion1 is not None:
							#--Recorre retenciones existentes - 20140113 Se cambia Recorrido para que ingrese todos los valores de las retenciones
							for retencion in retencion1:
								#--Cuadra las variables para el manejo de los Movimientos Contables en la inserción
								ts_im=retencion[1]
								valor_maeter=retencion[2]
								evaluacion=retencion[0]
								id_maeter=valor_maeter
								#--Ajusta la cuenta a operar
								cuenta_oper=ts_im
								#--Verifica si el valor a ingresar es negativo
								if evaluacion<0:
									#--Cambia el valor de la evaluacion a positivo
									evaluacion=evaluacion*-1
									#--Cambia la naturaleza del asiento por ser el valor negativo
									if asiento.naturaleza == "C":
										asiento.naturaleza = "D"
									else:
										asiento.naturaleza = "C"
								#--Cambia la naturaleza del movimiento dado que es una anulación
								if asiento.naturaleza == "C":
									asiento.naturaleza = "D"
								else:
									asiento.naturaleza = "C"
								anula=0
								#--Ejecuta movimiento contable
								if asiento.usa_grupo==1:
									ejecutaMovimientoRentencion(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
								else:
									ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
					else:
						#--Entra por Ejecucion Normal
						#--Revisa si el asiento cuenta o no con evaluación
						if len(formu)!=0:
							#--Se ejecuta la evaluación de la formula
							evaluacion=evaluaFuncion(formu,iddocumento,idbusqueda)
						else:
							#--Se asigna el valor del movimiento de banco
							valormovbanc=movimiento[1]
						#--Se asigna el valor en la variable para el movimiento de bancos
						evaluacion=valormovbanc
						#--Verifica si el valor a ingresar es negativo
						if evaluacion<0:
							#--Cambia el valor de la evaluacion a positivo
							evaluacion=evaluacion*-1
							#--Cambia la naturaleza del asiento por ser el valor negativo
							if asiento.naturaleza == "C":
								asiento.naturaleza = "D"
							else:
								asiento.naturaleza = "C"
						#--Revise si el movimiento posee anulación
						#--Cambia la naturaleza del movimiento dado que es una anulación
						if asiento.naturaleza == "C":
							asiento.naturaleza = "D"
						else:
							asiento.naturaleza = "C"
						anula=0
						#--Revisa si el asiento usa o no grupo
						if(asiento.usa_grupo==1):
							#--20140415 - Modificacion, se coloca el nombre dle grupo para saber si va por Minerales en Recaudo a fin de ejecutar con la cuenta establecida
							grupo=asiento.id_grupo 
							logger_saves.info("Nombre del grupo")
							logger_saves.info(grupo.nombre)
							logger_saves.info("/************************************************************************************/")
							logger_saves.info("Nombre del campo de los grupos a operar")
							logger_saves.info(grupo.campo)
							if grupo.campo=="ID_MINERAL":
								cuenta_oper=movimiento[10]
							#--Ejecuta movimiento contable
							ejecutaMovimientoGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cuenta_oper,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
						else:
							#--Ejecuta movimiento contable
							ejecutaMovimientoSinGrupo(asiento,iddocumento,idcad,id_vigencia,idcenop,idcia,id_maeter,evaluacion,idbusqueda,anula,cursorModuloConexionTesoreriaMovimientoBancos,cursorModuloContabilidadTesoreriaMovimientoBancos)
	#--Devuelve el id del cad de la serie para nuevos ingresos		
	return idgen
#--Metodo que devuelve el listado de ejecuciones cuando es solicitado por GWT cuando la ejecución excede el tiempo máximo de ejecución
#--Entrada: Un request HTTP que puede ser POST o GET
#--Salida: Devuelve un JSON con el listado de CADS ejecutados
@csrf_exempt
def batch_devuelve(request):
	#--Lista de errores en ejecución
	errores={}
	#--Contenedor de datos de los cads ejecutados
	contenedor=[]
	#--Contenedor para construir JSON de error
	contenedorerror=[]
	#--Contenedor que maneja las respuestas construidas
	response={}
	#--Variable que retorna el resultado para serializado en JSON
	rta1={}
	#--Captura rango de fechas para realizar la busqueda
	fecha_ini = request.POST.get('fecha_ini')
	fecha_fin = request.POST.get('fecha_fin')
	#--Captura el id de la transacción para buscar los modulos y las conexiones
	id_transaccion= request.POST.get('id_transaccion')
	#--Busca el modelo de transacción de acuerdo al id suministrado
	transaccion = Transaccion.objects.get(id_transaccion=id_transaccion)
	#--Variable que contiene el tipo de comprobante
	tipo_comprobante=transaccion.id_tipo_comprobante
	#--Conexión a traves de CX_ORACLE a la base de datos de contabilidad
	modulocontabilidadconexion = getattr(settings, 'RUTA_BD', 'default_value')
	modulocontabilidad = cx_Oracle.connect(modulocontabilidadconexion)
	cursormodulocontabilidad = modulocontabilidad.cursor()
	#--Llama a un procedimeinto almacenado para actualizar los ids correspondientes a los CADS y a los MOVIMIENTOS CONTABLES
	prefijoBD=getattr(settings, 'PREFIJO_BD', 'default_value')
	#--Habilita trigger para ejecutar contabilidad
	cursormodulocontabilidad.execute("ALTER TRIGGER "+str(prefijoBD)+".CN_COTROL_CAD_TOT_TRG ENABLE")
	#--Busqueda de los datos correspondientes al CAD para retorno en el JSON
	buscacad="SELECT ID_CAD, FECHA_CAD, TOT_DEBITO, TOT_CREDITO, ID_TIPO_COMPROBANTE FROM CN_CONTROL_CAD WHERE FECHA_CAD BETWEEN to_date(\'"+fecha_ini+"','YYYY-MM-DD') AND to_date('"+fecha_fin+"','YYYY-MM-DD') and ID_TIPO_COMPROBANTE="+str(tipo_comprobante)
	cursormodulocontabilidad.execute(buscacad)
	#--Recorre los cads seleccionados dentro del rango de fechas
	for cad in cursormodulocontabilidad.fetchall():
		#--Busca el tipo de comprobante que se generó
		buscadescripcion="SELECT NOM_TIPO_COMPROBANTE FROM CN_TIPO_COMPROBANTE WHERE ID_TIPO_COMPROBANTE="+str(cad[4])
		cursormodulocontabilidad.execute(buscadescripcion)
		nombrecomprobante=cursormodulocontabilidad.fetchone()
		#--Contruye La respuesta por cada CAD
		pruebacon={}
		fecha=cad[1].date()
		pruebacon['id_cad']=cad[0]
		pruebacon['fecha_cad']=fecha
		pruebacon['tot_debito']=cad[2]
		pruebacon['tot_credito']=cad[3]
		pruebacon['nom_tipo_comprobante']=nombrecomprobante[0]
		contenedor.append(pruebacon)
	#--Construye el objeto para ser serializado por JSON
	response['totalRows']=len(contenedor)
	response['data']=contenedor
	rta1['response']=response
	#--Retorna la repsuesta serializada en JSON
	return JSONResponse(rta1)