//===================================================================================================================================================================================================================== function ObtieneSqlParaTodoLoQueNoEsChequeNiOrdenDeCompra : string; //obtiene el sql que arma agustin para todo lo que no es orden de compra ni cheque var strSql : string; begin strSql := 'declare @NumDocumento int , @TipoDocumento int ' + chr(13) + 'set @NumDocumento = ' + FmMFNConsultaDePolizas.EdNumDocto.Text + ' ' + chr(13) + 'set @TipoDocumento = ' + inttostr(FmMFNConsultaDePolizas.DBLCBTipoDocumento.keyvalue) + ' ' + chr(13) + // 2.- de los documentos origen encontrados del paso anterior busco en la tabla detalle todas las polizas que tengan esos documentos origenes 'select distinct p_clave ' + chr(13) + 'into #datos2 ' + chr(13) + 'from TpolizaDetalle with (nolock) ' + chr(13) + 'where (TpolizaDetalle.pd_FormaOrigen = @TipoDocumento and TPolizaDetalle.pd_FormaClaveOrigen = @NumDocumento) or ' + chr(13) + ' (TpolizaDetalle.pd_Forma = @TipoDocumento and TPolizaDetalle.pd_FormaClave = @NumDocumento) ' + chr(13) + //SI ES UN TRANSFERENCIA BANCARIA BUSCO LOS DOCUMENTOS QUE TIENE LAS TRANSFERENCIA Y LO BUSCO EN LAS POLIZAS 'if @TipoDocumento = 111 ' + chr(13) + // -- transferencias bancarias 'begin ' + chr(13) + ' INSERT #datos2 ' + chr(13) + ' select distinct p_clave ' + chr(13) + ' from TpolizaDetalle with (nolock) inner join TTransferenciasBancariasDet with (nolock) ' + chr(13) + ' on ( TpolizaDetalle.pd_FormaOrigen = 3 and ' + chr(13) + ' TTransferenciasBancariasDet.TraTpoSolcitud = ' + #39 + 'SolServVarios' + #39 + ' and ' + chr(13) + ' TPolizaDetalle.pd_FormaClaveOrigen = TTransferenciasBancariasDet.TraCodigoOrigen ' + chr(13) + ' ) ' + chr(13) + ' or ' + chr(13) + ' ( TpolizaDetalle.pd_FormaOrigen = 2 and ' + chr(13) + ' TTransferenciasBancariasDet.TraTpoSolcitud = ' + #39 + 'SolViatPasYTras' + #39 + ' and ' + chr(13) + ' TPolizaDetalle.pd_FormaClaveOrigen = TTransferenciasBancariasDet.TraCodigoOrigen ' + chr(13) + ' ) ' + chr(13) + ' OR ' + chr(13) + ' ( TpolizaDetalle.pd_Forma = 3 and ' + chr(13) + ' TTransferenciasBancariasDet.TraTpoSolcitud = ' + #39 + 'SolServVarios' + #39 + ' and ' + chr(13) + ' TPolizaDetalle.pd_FormaClave = TTransferenciasBancariasDet.TraCodigoOrigen ' + chr(13) + ' ) ' + chr(13) + ' or ' + chr(13) + ' ( TpolizaDetalle.pd_Forma = 2 and ' + chr(13) + ' TTransferenciasBancariasDet.TraTpoSolcitud = ' + #39 + 'SolViatPasYTras' + #39 + ' and ' + chr(13) + ' TPolizaDetalle.pd_FormaClave = TTransferenciasBancariasDet.TraCodigoOrigen ' + chr(13) + ' ) ' + chr(13) + ' where TTransferenciasBancariasDet.TraCodigoTransferencia = @NumDocumento ' + chr(13) + 'end ' + chr(13) + // 3.- de las polizas encontrados selecciono el documento inmediato que originaron esos polizas de tal forma que tengo los documentos inmediatos // y los documentos origenes //'select distinct p_forma,p_formaClave into #datos3 from TPolizas with (nolock) inner join #datos2 on #datos2.p_clave = TPolizas.p_clave ' + 'create table #datos3 ' + chr(13) + '( ' + chr(13) + ' p_forma int, ' + chr(13) + ' p_formaClave int ' + chr(13) + ') ' + chr(13) + 'insert #datos3 ' + chr(13) + 'select distinct p_forma,p_formaClave from TPolizas with (nolock) inner join #datos2 on #datos2.p_clave = TPolizas.p_clave ' + chr(13) + 'insert #datos3 ' + chr(13) + 'select distinct pd_FormaOrigen , Pd_FormaClaveOrigen from TPolizaDetalle with (nolock) where p_clave in (select p_clave from #datos2) ' + chr(13) + //-- 4.- en la busqueda anterior determine los documentos origenes e inmediato y el siguiente pado es buscar todas las polizas que tengan estos documento 'select distinct TPolizaDetalle.p_clave ' + chr(13) + ' into #datos4 ' + chr(13) + ' from TPolizaDetalle with (nolock) inner join #datos3 ' + chr(13) + ' on ' + chr(13) + ' ( #datos3.p_forma = TpolizaDetalle.pd_FormaOrigen and #datos3.p_FormaClave = TPolizaDetalle.pd_FormaClaveOrigen ) ' + chr(13) + ' or ' + chr(13) + ' ( #datos3.p_forma = TpolizaDetalle.pd_Forma and #datos3.p_FormaClave = TPolizaDetalle.pd_FormaClave ) ' + chr(13) + 'where #datos3.p_formaClave <> -1 ' + chr(13) + 'order by TPolizaDetalle.p_clave ' + chr(13) + //--------------------------------------------------------------------------------------------------------------------------------------- //-- checo que si la solicitud (servicios o pasajes ) se realizo una transferencia 'insert #datos4 ' + chr(13) + 'Select distinct TPolizas.p_clave ' + chr(13) + 'FROM TTransferenciasBancariasDet with (nolock) INNER JOIN Tpolizas with (nolock) ON TTransferenciasBancariasDet.TraCodigoTransferencia = Tpolizas.P_FormaClave ' + chr(13) + 'WHERE ( (TTransferenciasBancariasDet.TraTpoSolcitud = ' + #39 + 'SolServVarios' + #39 + ') ' + chr(13) + ' AND ' + chr(13) + ' (TTransferenciasBancariasDet.TraCodigoOrigen in ( select p_formaClave ' + chr(13) + ' from #datos3 ' + chr(13) + ' where #datos3.p_forma = 3 ' + chr(13) + ' ) ' + chr(13) + ' ) ' + chr(13) + ' and ' + chr(13) + ' (Tpolizas.P_forma = 111) ' + chr(13) + // -- transferencia bancaria ' ) ' + chr(13) + ' or ' + chr(13) + ' ( (TTransferenciasBancariasDet.TraTpoSolcitud = ' + #39 + 'SolViatPasYTras' + #39 + ') ' + chr(13) + ' AND ' + chr(13) + ' (TTransferenciasBancariasDet.TraCodigoOrigen in ( select p_formaClave ' + chr(13) + ' from #datos3 ' + chr(13) + ' where #datos3.p_forma= 2 ) ' + chr(13) + ' ) ' + chr(13) + ' and (Tpolizas.P_forma = 111) ' + chr(13) + // -- transferencia bancaria ' ' ) ' + chr(13) + //-- checo si una orden de compra se hizo una transferencia //--**nuevo** ' if 4 = ' + inttostr(FmMFNConsultaDePolizas.DBLCBTipoDocumento.keyvalue) + ' ' + chr(13) +// si es orden de compra ' begin ' + chr(13) + ' insert #datos4 ' + chr(13) + ' select TPolizas.p_clave ' + chr(13) + ' from TPolizas with (nolock)' + chr(13) + ' where p_Forma = 111 ' + chr(13) + ' and ' + chr(13) + ' p_FormaClave = ( ' + chr(13) + ' select TContrarrecibos.TransfIncremental ' + chr(13) + ' from TContrarrecibos with (nolock)' + chr(13) + ' where CrDoctoRecibido = (select top 1 IdRecepDoc ' + chr(13) + ' from TrecepDoctosMtro with (nolock)' + chr(13) + ' where TrecepDoctosMtro.TipoDoctoOrigen = ' + #39 + 'OrdCompras' + #39 + chr(13) + ' and ' + chr(13) + ' TrecepDoctosMtro.FolioDoctoOrigen = ' + FmMFNConsultaDePolizas.EdNumDocto.text + ' ' + chr(13) + ' ) ' + chr(13) + ' ) ' + chr(13) + ' end ' + chr(13) + //-------------------------------------------------------------------------------------------------------------------------------------------------- //-- checo si solicitud (servicios o pasajes) se hizo un pago en caja) //-- esta opcion se quito porque en el detalle en el documento origen viene la solicitud //para traer todas las polizas relacionadas. es decir son las relaciones de polizas manuales presupuestales y contables : //1.- pongo los incrementales de las polizas manuales encontradas en ta tabla temporal #datos agregandole un campo que me indica si ha sido procesada //2. selecciono un incremntal no procesado y busco todos los incrementales que se encuentren en la tabla TPolizasRelaciones en el campo 'ClavePolizaAfecta' // y grabo en la tabla @datos el campo TPolizasRelaciones.ClavePoliza simpre y cuando no se ecuentre en la tabla #datos //3.- el registro que estoy evaluando de la tabla #datos lo marco como que ya fue procesado //4.- repito el paso 3 siempre y cuando haiga datos sin procesar //*/ //--********************************************************************************* 'declare @PolizaActual int , ' + chr(13) + ' @HayDatos nvarchar(2) ' + chr(13) + 'select distinct #datos4.p_clave as IncPoliza , ' + #39 + 'NO' + #39 + ' as seleccionado ' + chr(13) + ' into #Datos ' + chr(13) + ' from TPolizas with (nolock) inner join #datos4 on TPolizas.p_clave = #datos4.p_clave ' + chr(13) + ' where p_forma = 0 ' + chr(13) + 'if @@RowCount > 0 ' + chr(13) + //-- si hay polizas manuales 'begin ' + chr(13) + ' select top 1 @PolizaActual = IncPoliza from #Datos ' + chr(13) + ' set @HayDatos = ' + #39 + 'SI' + #39 + chr(13) + ' while @HayDatos = ' + #39 + 'SI' + #39 + chr(13) + ' begin ' + chr(13) + ' insert #datos ' + chr(13) + ' select ClavePoliza , ' + #39 + 'NO' + #39 + chr(13) + ' from TPolizasRelaciones with (nolock) ' + chr(13) + ' where (ClavePolizaAfecta = @PolizaActual) ' + chr(13) + ' and ' + chr(13) + ' ( ClavePoliza not in (select #datos.IncPoliza from #datos) ) ' + chr(13) + ' update #datos ' + chr(13) + ' set seleccionado = ' + #39 + 'SI' + #39 + chr(13) + ' where #datos.IncPoliza = @PolizaActual ' + chr(13) + ' select top 1 @PolizaActual = IncPoliza from #datos where seleccionado = ' + #39 + 'NO' + #39 + chr(13) + ' if @@ROWCOUNT = 0 set @HayDatos = ' + #39 + 'NO' + #39 + chr(13) + ' end ' + chr(13) + 'end ' + chr(13) + 'insert #datos4 ' + chr(13) + // -- inserto las polizas que estan relacionadas ' select IncPoliza from #datos where #datos.IncPoliza not in (select p_clave from #Datos4 ) ' + chr(13) + //-- ********************************************************************************* //--*/ //-- COMO MOYITO NO QUIERE QUE TRAIGA LAS SOLICITUDES DE OTROS DOCUMENTOS AUNQUE ESTEN RELACIONADOS POR UN CHEQUE QUE ES CONSOLIDADO POR EJEMPLO //--SI ESTOY BUSCANDO EL VIATICO 534 ESTE SE ENCUENTRA EN UNA POLIZA DE CHEQUE CONSOLIDADA DONDE VIENE OTRAS SOLICITUDES DE VIATICOS . SOLO DEBO //--DE MOSTRAR LAS LAS POLIZAS DONDE SE ENCUENTRE EL VIATICO 534 ( LO MISMO APLICA PARA UNA SOLICITUD DE SERVICIOS) 'select * INTO #DATOS5 from #datos4 ' + chr(13) + 'if @TipoDocumento = 3 or @TipoDocumento = 2 ' + chr(13) +//-- servicios o viaticos 'begin ' + chr(13) + ' delete #datos5 ' + chr(13) + ' INSERT #DATOS5 ' + chr(13) + ' select DISTINCT tpolizas.p_clave ' + chr(13) + ' from #datos4 inner join TPolizaDetalle with (nolock) on #datos4.p_clave = TPolizaDetalle.p_clave ' + chr(13) + ' inner join TPolizas with (nolock) on #datos4.p_clave = tpolizas.p_clave ' + chr(13) + ' where ' + chr(13) + ' ( TpolizaDetalle.pd_FormaOrigen = @TipoDocumento and TpolizaDetalle.pd_FormaClaveOrigen = @NumDocumento ) ' + chr(13) + ' or ' + chr(13) + ' ( TpolizaDetalle.pd_Forma = @TipoDocumento and TPolizaDetalle.pd_FormaClave = @NumDocumento ) ' + chr(13) + 'end ' + chr(13) + //'select * from #datos5 ' + 'Select TListConceptos.ListDesc, TPolizas.P_Clave, TPolizas.p_numero, TPolizas.P_descripcion, TPolizas.P_Fecha ' + chr(13) + 'FROM #Datos5 ' + chr(13) + 'LEFT OUTER JOIN Tpolizas ON #Datos5.p_clave = Tpolizas.P_Clave ' + chr(13) + 'Left Join TListConceptos ON ((Tpolizas.P_TipoPoliza = TListConceptos.ListCod) and (TListConceptos.ListGpo = ' + #39 + 'PolizaTipo' + #39 + ')) ' + chr(13) + 'drop table #datos ' + chr(13) + 'drop table #datos4 ' + chr(13) + 'drop table #datos5 ' + chr(13) + 'drop table #datos3 ' + chr(13) + 'drop table #datos1 ' + chr(13) + 'drop table #datos2 '; ObtieneSqlParaTodoLoQueNoEsChequeNiOrdenDeCompra := strSql; end;