<?php
//
$sNomeIdJan1 = 'iJan_RelCli_Princ';
$sNomeIdJan2 = 'iJan_RelCli_TxtVs';
$sCorBarraInf = '#E8E3CE';
$sData_Trabalho = SQLVarConfig('DATA_DE_TRABALHO');
$sPulaLinha     = CHR(13).CHR(10);
//
// Carrega sessão para á variável
$aSessaoLocal = @$aSessao[$sNomeAcesso.'_S'];
//
//  ** TELA INICIAL **
If ( EMPTY( $sSubModulo ) ) {
   //
   $s_Formulario = "fmPRelCP";     // Nome principal dos formulários HTML
   // Criar objeto Janela
   $oJanelaPrinc = New R_Janela();
   $oJanelaPrinc->sIdObj  = $sNomeIdJan1; 
   $oJanelaPrinc->nTop    = 100;
   $oJanelaPrinc->nLeft   = 5;
   $oJanelaPrinc->nWidth  = 400;   // Largura
   $oJanelaPrinc->nHeight = 0;     // Altura
   $oJanelaPrinc->nLeft   += ($nTela_W/2)-($oJanelaPrinc->nWidth/2);
   $oJanelaPrinc->sTitulo = 'Relatório de curva ABC de clientes';
   $sJavaTravarJ =
     "parent.Disabled_In_Elems('".$oJanelaPrinc->sIdObj."',true);".
     "parent.document.getElementById('".$oJanelaPrinc->sIdObj."_Travar').style.visibility='visible';";
   $oJanelaPrinc->sJavOnClickF =
     "parent.document.forms.".$s_Formulario.".acao.value='FECHAR';".
     "parent.document.forms.".$s_Formulario.".submit();".
     $sJavaTravarJ;
   $oJanelaPrinc->sJavKeyDown = "return Car_".$sNomeAcesso."1.Teclas_F(this,event);";
   $oJanelaPrinc->aIdsObjList =
      ARRAY(
   	    'in_RelCli_DatIni', 'in_RelCli_DatFim', 'sl_RelCli_TipVen'
   	  );
   //
   // >> Janela Principal
   If ( EMPTY($sAcao) ) {
       //
	   //
       // Tela HTML
       $sRet_TelaJ_HTML =
          $oJanelaPrinc->MontaJanHTML(True).
          '<form name="'.$s_Formulario.'" accept-charset="utf-8" method="post" action="./car_js.php" target="car_'.$sNomeAcesso.'2">'.
           '<input name="mod" type="hidden" value="'.$sModulo.'">'.
           '<input name="submod" type="hidden" value="'.$sSubModulo.'">'.
           '<input name="acao" type="hidden" value="">'.
           '<input name="nomeacs" type="hidden" value="'.$sNomeAcesso.'">'.
          // 1º linha
          '<table width="100%" border="0">'.
           '<tr>'.
            '<td width="4px" height="20px">&nbsp;</td>'.
            '<td width="80px" align="right">'.
             'Período:'.
            '</td>'.
            '<td align="left">'.
             '<table border="0" cellspacing="0" cellpadding="0"><tr>'.
              '<td width="28px" align="center"><img onclick="'."sIdHasFocus='in_RelCli_DatIni';".'" src="images/bimg_calendario.png" border="0" id="bt_RelCli_DatIni" style="cursor:pointer;"></td>'.
              '<td width="77px">'.
               '<input id="in_RelCli_DatIni" name="Fil_DataIni" type="text" maxlength="10" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();" value="" style="font-size:12px; width:99%; text-align:center;">'.
              '</td>'.
              '<td align="center" width="10px">'.
               '-'.
              '</td>'.
              '<td width="28px" align="center"><img onclick="'."sIdHasFocus='in_RelCli_DatFim';".'" src="images/bimg_calendario.png" border="0" id="bt_RelCli_DatFim" style="cursor:pointer;"></td>'.
              '<td width="77px">'.
               '<input id="in_RelCli_DatFim" name="Fil_DataFim" type="text" maxlength="10" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();" style="font-size:12px; width:99%; text-align:center;">'.
              '</td>'.
              '<td align="left" style="color:#FF0000;">'.
              '</td>'.
             '</tr></table>'.
            '</td>'.
            '<td width="4px" height="20px">&nbsp;</td>'.
           '</tr>'.
          '</table>'.
		  // 2º linha
		  '<table width="100%" border="0">'.
           '<tr>'.
            '<td width="4px" height="20px">&nbsp;</td>'.
            '<td width="80px" align="right" valign="middle">'.
             'Tipo de venda:'.
            '</td>'.
            '<td width="223px" align="left" valign="middle">'.
		   	 '<select id="sl_RelCli_TipVen" name="Fil_TipoVen" style="width:99%;" onchange="Car_'.$sNomeAcesso.'1.Atualiza();">'.
		   	  '<option value="2">Delivery</option>'.
		   	  '<option value="4">Encomenda</option>'.
		   	  '<option value="-1">Todos os tipos</option>'.
		   	 '</select>'.
			'</td>'.
            '<td>&nbsp;</td>'.
		   '</tr>'.
		  '</table>'.
		  //
          '</form>'.
          // 2º linha (ultima dos botões)
          '<table width="100%" style="background-color:'.$sCorBarraInf.';">'.
           '</tr>'.
            '<td width="4px" height="40px">&nbsp;</td>'.
            '<td align="left">'.
             HTML_Botao( 3, 'objRelCli_BT_Abr', 'Car_'.$sNomeAcesso.'1.Relatorio();'
                          , 'Visualizar (F8)' ,'images/btimg_docs.png',120).		    
            '</td>'.
            '<td align="right">'.
             HTML_Botao( 3, 'objRelCli_BT_Fch', $oJanelaPrinc->sJavOnClickF
                          , 'Sair (ESC)' ,'images/btimg_fechar.png').		    
            '</td>'.
            '<td width="4px">&nbsp;</td>'.
           '</tr>'.
          '</table>'.		   
          $oJanelaPrinc->MontaJanHTML(False);
	   //
	   // Java anterior
       $sRet_Javs .=
	     'parent.document.getElementById("dv_MenuL_Barra").style.visibility="hidden";'.
	     //
	     "function Atualiza() {".
	        //"var vFm = parent.document.forms.".$s_Formulario.";".
	        //"sAntTarget = vFm.target;".
	        //"vFm.target='car_".$sNomeAcesso."3';".
	        //"vFm.acao.value='ATUALIZAR'; ".
            //"vFm.submit(); ".
	        //"vFm.target = sAntTarget;".
	     "}".
         //
         "function Relatorio() {".
            "var vFm = parent.document.forms.".$s_Formulario.";".
            "sAntTarget = vFm.target;".
            "vFm.target='car_".$sNomeAcesso."5';".
            "vFm.acao.value=''; ".
            "vFm.submod.value='RELATORIO'; ".
            "vFm.submit(); ".
            "vFm.submod.value='".$sSubModulo."'; ".
            "vFm.target = sAntTarget;".
            $sJavaTravarJ.
         "}".
         //
         "function Teclas_F( Objeto, Evento ) { ".
           "vNumTecla = parent.Tecla_Apertada(Evento); ".
           "sAntFocus = parent.sIdHasFocus;".
           "if ( vNumTecla==119) { ".         // ** [F8] **
               "if (parent.document.getElementById('objRelCli_BT_Abr').style.display!='none') {".           // (Visualizar)
                  "setTimeout( parent.document.getElementById('objRelCli_BT_Abr').onclick , 10);".
               "}".
           "} else if ( vNumTecla==116) { ".  // ** [F5] **     Não atualizar
               //
           "} else if ( vNumTecla==27 ) { ".  // ** [ESC] **    Fechar da janela
               "setTimeout( parent.document.getElementById('objRelCli_BT_Fch').onclick , 10);".
           "} else if ( vNumTecla==13) { ".   // ** [ENTER] **
              "while (true) {".
           	     "sTempId = parent.Proximo_TabObj(parent.document.getElementById('".$oJanelaPrinc->sIdObj."'),sAntFocus);".
           	     "if ( sTempId.length>0 ) {".
           	         "parent.document.getElementById(sTempId).focus();".
           	         "if (sTempId == parent.sIdHasFocus ) {".
           	             'parent.document.getElementById(sTempId).select();'.
           	      	     "break;".
           	         "}".
           	         "sAntFocus=sTempId;".
           	     "} else {".
                     "parent.document.getElementById('in_RelCli_DatIni').focus();".
                     'break;'.
           	     "}".
           	  "}".
           "} else {".
              "return true;".
           "} ".
           "return false;".
         "}".
         "";
       //
       // Java posterior
       $sRet_JavsPos .=
         "parent.document.getElementById('in_RelCli_DatIni').focus();".
         "Atualiza();".
         //
         'parent.Calendar.setup({ '.
           'inputField : "in_RelCli_DatIni", '.
           'trigger    : "bt_RelCli_DatIni", '.
           'onSelect   : function() { this.hide(); parent.sIdHasFocus=""; Atualiza(); }, '.
           'showTime   : 0, '.
           'dateFormat : "%d/%m/%Y" '.
         '});'.
         'parent.Calendar.setup({ '.
           'inputField : "in_RelCli_DatFim", '.
           'trigger    : "bt_RelCli_DatFim", '.
           'onSelect   : function() { this.hide(); parent.sIdHasFocus=""; Atualiza(); }, '.
           'showTime   : 0, '.
           'dateFormat : "%d/%m/%Y" '.
         '});'.
         "";
      //
   //
   // >> Fechar janela
   } ElseIf ( $sAcao=="FECHAR" ) {
      $sRet_Javs .=
        'parent.document.getElementById("dv_MenuL_Barra").style.visibility="visible";'.
        "parent.RmElem('".$oJanelaPrinc->sIdObj."');".
        "parent.Car_".$sNomeAcesso."2.location.href='about:blank';".
        "parent.Car_".$sNomeAcesso."1.location.href='about:blank';".
   	    "";
      UNSET( $aSessaoLocal );
      //
   }
   //
//
//  ** TELA QUE MONTA O RELATÓRIO **
} ElseIf ( $sSubModulo=="RELATORIO" ) {
   $s_Formulario = "fmPRelCP_I";     // Nome principal dos formulários HTML
   // Criar objeto Janela
   $oJanelaPrinc = New R_Janela();
   $oJanelaPrinc->sIdObj  = $sNomeIdJan2; 
   $oJanelaPrinc->nTop    = 5;     // Inicio vertical
   $oJanelaPrinc->nLeft   = 0;     // Inicio horizontal
   $oJanelaPrinc->nWidth  = 1005;  // Largura
   $oJanelaPrinc->nHeight = 0;     // Altura
   $oJanelaPrinc->nLeft   += ($nTela_W/2)-($oJanelaPrinc->nWidth/2);
   $oJanelaPrinc->sTitulo = 'Relatório';
   $oJanelaPrinc->sJavOnClick  = "parent.document.getElementById('in_RelCliV_Tecla').focus();";
   //
   $sJavaTravarJ = "parent.document.getElementById('".$oJanelaPrinc->sIdObj."_Travar').style.visibility='visible';";
   $oJanelaPrinc->sJavOnClickF =
       $sJavaTravarJ.
       "parent.document.forms.".$s_Formulario.".acao.value='FECHAR'; ".
       "parent.document.forms.".$s_Formulario.".submit();";
   $oJanelaPrinc->sJavKeyDown = "return Car_".$sNomeAcesso."5.Teclas_F(this,event);";
   //
   // >> Janela Principal
   If ( EMPTY($sAcao) ) {
      $aSessaoLocal['Fil_DataIni'] = @$_POST['Fil_DataIni'];      // Data inicial
      $aSessaoLocal['Fil_DataFim'] = @$_POST['Fil_DataFim'];      // Data final
      $aSessaoLocal['Fil_TipoVen'] = @$_POST['Fil_TipoVen'];      // Tipo de venda
      // Tela HTML
      $sRet_TelaJ_HTML =
        $oJanelaPrinc->MontaJanHTML(True).
        // Teclas
        '<input id="in_RelCliV_Tecla" style="position:absolute; top:-600; left:-600; width:1px; height:1px;">'.
        //
        '<iframe name="VisCliR_Print"></iframe>'.
        '<form name="'.$s_Formulario.'" accept-charset="utf-8" method="post" action="./car_js.php" target="car_'.$sNomeAcesso.'6">'.
         '<input name="mod" type="hidden" value="'.$sModulo.'">'.
         '<input name="submod" type="hidden" value="'.$sSubModulo.'">'.
         '<input name="acao" type="hidden" value="">'.
         '<input name="nomeacs" type="hidden" value="'.$sNomeAcesso.'">'.
        '</form>'.
        '<div id="dv_RelCliR_Txt" style="width:100%; height:480px; background:#FFFFFF; overflow:auto;">'.
         '<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">'.
          '<tr><td align="center" valign="middle" style="color:#555555;">'.
          'Aguarde um momento...<br>'.
          '<img src="images/img_load1.gif" border="0">'.
          '</td></tr>'.
         '</table>'.
        '</div>'.
        //
        '<table width="100%" style="background-color:'.$sCorBarraInf.';"></tr>'.
         '<td width="4px" height="40px">&nbsp;</td>'.
         '<td width="150px" align="left">'.
           HTML_Botao( 3, 'objRelCliR_BT_Imp',  'Car_'.$sNomeAcesso.'5.processPrint();'
                        , 'Imprimir (F2)'    , 'images/btimg_imp.png',130).
         '</td>'.
		 '<td width="110px" align="left">'.
           HTML_Botao( 3, 'objRelCliR_BT_Csv',  'Car_'.$sNomeAcesso.'5.SalvarCSV();'
                        , 'Excel (F10)'   ,'images/btimg_exportar_excel.png',100).		    
		 '</td>'.
         '<td align="left">'.
           HTML_Botao( 3, 'objRelCliR_BT_Dwn',  'Car_'.$sNomeAcesso.'5.SalvarTexto();'
                        , 'Salvar (F9)'      , 'images/btimg_baixar_texto.png',100).
         '</td>'.
         '<td align="right">'.
           HTML_Botao( 3, 'objRelCliR_BT_Fch',  $oJanelaPrinc->sJavOnClickF
                        , 'Sair (ESC)'       , 'images/btimg_fechar.png').
         '</td>'.
         '<td width="4px">&nbsp;</td>'.
        '</tr></table>'.
        //
        $oJanelaPrinc->MontaJanHTML(False);
      //
      // Java anterior
      $sRet_Javs .=
        "function processPrint() {".
          "var sdivElements = parent.document.getElementById('dv_RelCliR_Txt').innerHTML;".
          "var Quadro = parent.frames['VisCliR_Print'];".
          "Quadro.window.location='about:blank';". 
          "Quadro.document.write('<html><head><title>Relatório de curva ABC de clientes</title></head><body>');".
          "Quadro.document.write(sdivElements);".
          "Quadro.document.write('</body></html>');".
          "Quadro.window.print();".
        "}".
        //
        "function SalvarTexto() {".
          "parent.document.forms.".$s_Formulario.".acao.value='GERAR_TEXTO';".
          "parent.document.forms.".$s_Formulario.".submit();".
        "}".
        "function SalvarCSV() {".
          "parent.document.forms.".$s_Formulario.".acao.value='GERAR_CSV';".
          "parent.document.forms.".$s_Formulario.".submit();".
        "}".
        //
        "function Teclas_F( Objeto, Evento ) {".
          "vNumTecla = parent.Tecla_Apertada(Evento);".
          "if ( vNumTecla==120) { ".        //  ** [F9] **          // (Salvar em arquivo texto)
              "setTimeout( parent.document.getElementById('objRelCliR_BT_Dwn').onclick , 50);".
          "} else if ( vNumTecla==116) { ". //  ** [F5] **          Não atualizar
              //
          "} else if ( vNumTecla==113) { ". //  ** [F2] **          // (Imprimir)
              "setTimeout( parent.document.getElementById('objRelCliR_BT_Imp').onclick , 50);".
              //
          "} else if ( vNumTecla==27) { ".  //  ** [ESC] **         // (SAIR)
              "setTimeout( parent.document.getElementById('objRelCliR_BT_Fch').onclick , 50);".
          "} else {".
              "return true;".
          "}".
          "return false;".
        '}'.
        //
        "";
       // Java posterior
       $sRet_JavsPos .=
	     "parent.document.getElementById('in_RelCliV_Tecla').focus(); ".
	     "setTimeout( function () { ".
	        "parent.document.forms.".$s_Formulario.".acao.value='MONTAR';".
            "parent.document.forms.".$s_Formulario.".submit();".
		 "} , 300); ".
         "";
	   //
   //
   // >> Montar o relatório
   } ElseIf ( $sAcao=="MONTAR" ) {
      $s_Fil_DataIni = $aSessaoLocal['Fil_DataIni'];
      $s_Fil_DataFim = $aSessaoLocal['Fil_DataFim'];
      $n_Fil_TipoVen = $aSessaoLocal['Fil_TipoVen']+0;
      //
      $a_Relatorio = Montar_Relatorio_Cli();
      $sTxt_Rel = $a_Relatorio[0];
      $sCsv_Rel = $a_Relatorio[1];
      UNSET( $a_Relatorio );
      //
      //$sTxt_Rel = RemoveAcentos($sTxt_Rel);
      $aSessaoLocal['TXT_REL'] = $sTxt_Rel;
      $aSessaoLocal['CSV_REL'] = $sCsv_Rel;
      $sHTML_Rel = $sTxt_Rel;
      $sHTML_Rel = STR_REPLACE(CHR(10),"",$sHTML_Rel);
      $sHTML_Rel = STR_REPLACE(CHR(13),"<br>",$sHTML_Rel);
      $sHTML_Rel = STR_REPLACE(CHR(32),"&nbsp;",$sHTML_Rel);
      $sHTML_Rel =
        '<div align="center" style="-moz-user-select:text; -khtml-user-select:text; -webkit-user-select:text; -ms-user-select:text; user-select: text; cursor:auto;">'.
         '<table border="0" cellspacing="0" cellpadding="0"><tr><td align="left" style="font-size:13px; font-family:Courier New,Courier,mono;">'.
          $sHTML_Rel.
         '</td></tr></table>'.
        '</div>';
      //
      $sRet_Javs .= 
        "parent.document.getElementById('dv_RelCliR_Txt').innerHTML = ".JAVA_CharCode($sHTML_Rel).";".
        "";
   //
   // IMPRIMIR Relatório pronto
   } ElseIf ( $sAcao=="IMP" ) {
      $sRet_Javs .= "parent.JanEspera(false); ";
      $sCfg_ClpExp2 = SQLVarConfig('GARCOM_CLIPPER_ARQ_EXPORTA2');
      If ( STRLEN($sCfg_ClpExp2)>3 ) {
         $sTxt_Cupom = @$aSessaoLocal['TXT_REL'];
         If (STRLEN($sTxt_Cupom)>0) {
            // Gravar o relatório Texto
            $sNomArqExpT = $sCfg_ClpExp2.$R_CadFuncionario->FUN_CODIGO.'_'.DATE("d-m-Y_h-i-s").'_RCP.TMP';
            $sIP_NomeArq = STR_REPLACE(".","_",ObterIPdoCliente());
            $sNomArqExpR = $sCfg_ClpExp2.$R_CadFuncionario->FUN_CODIGO.'_'.DATE("d-m-Y_h-i-s").'_RCP_'.$sIP_NomeArq.'.REL';
            //
            ERROR_REPORTING(0);      // Bloqueio o relatório de erro
            If ( $hArqExp = FOPEN( $sNomArqExpT, "a" ) ) {
               FWRITE($hArqExp, $sTxt_Cupom );
               FCLOSE( $hArqExp );
               If ( FILE_EXISTS($sNomArqExpR) ) { UNLINK($sNomArqExpR); }
               RENAME( $sNomArqExpT, $sNomArqExpR );
               //
            } Else {
               $sRet_Javs .= Info_Evento('Erro ao gerar arquivo do relatório para impressão.',1,"Impressão de relatório");
            }
            ERROR_REPORTING(E_ALL); // Desbloqueio o relatório de erro
            //
         } Else {    // Sem conteudo para imprimir
            $sRet_Javs .=
                Info_Evento('Não há conteúdo para imprimir.').
                '';
         }
      } Else {       // Sem caminho para impressão
         $sRet_Javs .=
            Info_Evento('Parametros do caminho inválido.').
            $sJavaFechaEr;
      }
   //
   // >> Gerar texto para download
   } ElseIf ( $sAcao=="GERAR_TEXTO" ) {
      OB_CLEAN();
      $sArquivo = "Relatorio_Curva_ABC_Clientes_".DATE("d-m-Y_H-i-s").".txt";
      $sConteudo = @$aSessaoLocal['TXT_REL'];
      HEADER("Content-Type: text/plain");
      HEADER("Content-Length: ".STRLEN($sConteudo));
      HEADER("Content-Disposition: attachment; filename=".$sArquivo);
      ECHO $sConteudo;
      EXIT;
   //
   // >> Gerar CSV para download
   } ElseIf ( $sAcao=="GERAR_CSV" ) {
      OB_CLEAN();
      $sArquivo = "Relatorio_Curva_ABC_Clientes_".DATE("d-m-Y_H-i-s").".csv";
      $sConteudo = @$aSessaoLocal['CSV_REL'];
      HEADER("Content-Type: text/csv");
      HEADER("Content-Length: ".STRLEN($sConteudo));
      HEADER("Content-Disposition: attachment; filename=".$sArquivo);
      ECHO $sConteudo;
      EXIT;
   //
   // >> FECHAR Janela
   } ElseIf ( $sAcao=="FECHAR" ) {
      $sRet_Javs .=
        "if (parent.document.getElementById('".$oJanelaPrinc->sIdObj."') != null) { parent.RmElem('".$oJanelaPrinc->sIdObj."'); }".
        "parent.document.getElementById('".$sNomeIdJan1."_Travar').style.visibility='hidden';".
        "parent.Disabled_In_Elems('".$sNomeIdJan1."',false);".
        "parent.document.getElementById('in_RelCli_DatIni').focus();".
        "parent.Car_".$sNomeAcesso."1.Atualiza();".
        "";
      //
   }
   //
}
//
// Tratamento da variável de sessão
If ( ISSET($aSessaoLocal) ) {
   $aSessao[$sNomeAcesso.'_S'] = $aSessaoLocal;
} Else {
   UNSET( $aSessao[$sNomeAcesso.'_S'] );
}
//
//
// *************************************
// ** Procedure para montar relatório **
// *************************************
Function Montar_Relatorio_Cli() {
   Global $Dados_Empresa, $sData_Trabalho, $sPulaLinha, $R_CadFuncionario;
   Global $s_Fil_DataIni, $s_Fil_DataFim, $n_Fil_TipoVen;
   $sTxt_Rel = "";
   $sCsv_Rel = "";
   $sSQL_Where = "FAT_CLIENTE>0 AND FAT_CANCELA=0";
   //
   $n_Fil_DataIni = ConvertDataSTR(ConvertDataBRUS($s_Fil_DataIni));
   If ( $n_Fil_DataIni > MKTIME(12,0,0, 1, 1 ,2000) ) {
      $sSQL_Where .= ' AND FAT_DATAINI>="'.DATE("Y-m-d",$n_Fil_DataIni).'"';
   }
   $n_Fil_DataFim = ConvertDataSTR(ConvertDataBRUS($s_Fil_DataFim));
   If ( $n_Fil_DataFim > MKTIME(12,0,0, 1, 1 ,2000) ) {
      $sSQL_Where .= ' AND FAT_DATAINI<="'.DATE("Y-m-d",$n_Fil_DataFim).'"';
   }
   If ( $n_Fil_TipoVen>=0 ) {
      $sSQL_Where .= ' AND FAT_TIP_LOC='.$n_Fil_TipoVen;
   }
   //
   $sSQLQuery =
     "SELECT ".
       "FAT_CLIENTE".           " AS CLI_CODIGOI,".
       "COUNT(*)".              " AS FAT_TOTAL_Q,".
       "SUM(FAT_TAXASVR)".      " AS FAT_TOTAL_T,".
       "SUM(FAT_VALDESC)".      " AS FAT_TOTAL_D,".
       "SUM(FAT_TOT_REC)".      " AS FAT_TOTAL_V,".
       "GROUP_CONCAT(FAT_CODIGOI) AS FAT_CODIGOS ".
     "FROM fat_geral ".
     "WHERE ".$sSQL_Where." ".
     "GROUP BY FAT_CLIENTE ".
     "ORDER BY SUM(FAT_TOT_VAL) DESC ".
     ";";
   $RowsT = MYSQL_QUERY($sSQLQuery) Or Die($sSQLQuery.'<br>'.MYSQL_ERROR());
   $aOrdem_Clis = ARRAY();
   $sLista_Clis = "";
   While ($RowT = MYSQL_FETCH_ARRAY($RowsT, MYSQL_ASSOC)) {
      $sLista_Clis .= ( EMPTY($sLista_Clis) ? "" : "," ).$RowT['CLI_CODIGOI'];
      $aOrdem_Clis[] = $RowT;
   }
   //
   $aCad_Clientes = ARRAY();
   If ( ! EMPTY($sLista_Clis) ) {
      $sSQLQuery =
        "SELECT ".
          "cli.CLI_CODIGOI,".
          "cli.CLI_NOMECP,".
          "tel.TEL_NUMERO ".
        "FROM      cad_cliente   AS cli ".
        "LEFT JOIN cad_telefones AS tel  ON  tel.TEL_CODCAD = cli.CLI_CODIGOI ".
        "WHERE cli.CLI_CODIGOI IN (".$sLista_Clis.")".
        ";";
      $RowsT = MYSQL_QUERY($sSQLQuery) Or Die($sSQLQuery.'<br>'.MYSQL_ERROR());
      While ($RowT = MYSQL_FETCH_ARRAY($RowsT, MYSQL_ASSOC)) {
         $aCad_Clientes[$RowT['CLI_CODIGOI']] = $RowT;
      }
   }
   //
   $sTxt_Rel .=    // Cabeçalho do relatório
     $sPulaLinha.
     AlinhaStr('Empresa.....: '.$Dados_Empresa['EMP_FANTAS'],0,80).$sPulaLinha.
     AlinhaStr('Relatorio...: CURVA ABC DE CLIENTES (ABERTAS/RECEBIDAS)',0,80).$sPulaLinha.
     AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,40).
     AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,80).$sPulaLinha.
     ( ($n_Fil_DataIni==0 && $n_Fil_DataFim==0) ? "" :
     'Período.....: '.
       ( $n_Fil_DataIni>0 ?
        DATE("d/m/Y",$n_Fil_DataIni).' '
       :
        "Até "
       ).
       ( $n_Fil_DataFim>0 ?
        DATE("d/m/Y",$n_Fil_DataFim)
       :
        ""
       ).
     $sPulaLinha).
     'Tipo venda..: '.
     ( $n_Fil_TipoVen <  0 ? "Todos as vendas" : "").
     ( $n_Fil_TipoVen == 2 ? "Deliverys"       : "").
     ( $n_Fil_TipoVen == 4 ? "Encomendas"      : "").
     $sPulaLinha.
     STR_REPEAT("=",120).
     $sPulaLinha;
   //
   $sCsv_Rel .=    // Cabeçalho do relatório CSV
     ';CURVA ABC DE CLIENTES (ABERTAS/RECEBIDAS);'.
     ( $n_Fil_DataIni>0 ?
      DATE("d/m/Y",$n_Fil_DataIni).' '
     :
      "Até "
     ).
     ( $n_Fil_DataFim>0 ?
      DATE("d/m/Y",$n_Fil_DataFim)
     :
      ""
     ).
     ";".
     $sPulaLinha;
   //
   If ( COUNT($aOrdem_Clis)==0 ) {
      $sTxt_Rel .=
         $sPulaLinha.
         $sPulaLinha.
         AlinhaStr("** NÃO HÁ MOVIMENTO **",1,120).
         $sPulaLinha.
         "";
   } Else {
      $sTxt_Rel .=
        //         1         2         3         4         5         6         7         8         9        10         1         2
        //123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
         "| Cliente                                 |    Telefone   | Vendas | Total de taxas | Total Descontos |    Valor total |".
         $sPulaLinha.
         "";
      //
      $sCsv_Rel .=
         'Cliente;Telefone;Quantidade de vendas;Total de taxas;Total de Descontos;Valor Total;'.
         $sPulaLinha;
      //
      $nFat_Total_Q = 0;
      $nFat_Total_T = 0;
      $nFat_Total_D = 0;
      $nFat_Total_V = 0;
      ForEach( $aOrdem_Clis As $aOrdem_Cli ) {
         //
         $aCad_Cliente = @$aCad_Clientes[$aOrdem_Cli['CLI_CODIGOI']];
         //
         $sTxt_Rel .=
           STR_REPEAT("-",120).$sPulaLinha.
           "| ".
           AlinhaStr( Str_Zero($aCad_Cliente['CLI_CODIGOI'],8)." - ".$aCad_Cliente['CLI_NOMECP'] , 0, 39)." ".
           "| ".
           AlinhaStr( FormataTelefone(@$aCad_Cliente['TEL_NUMERO']) , 3, 13)." ".
           "|".
           AlinhaStr( $aOrdem_Cli['FAT_TOTAL_Q'] , 3, 8).
           "| ".
           "R$".AlinhaStr( ( $aOrdem_Cli['FAT_TOTAL_T']>0 ? FormatoMoeda($aOrdem_Cli['FAT_TOTAL_T']) : "") , 2, 12)." ".
           "| ".
           "R$".AlinhaStr( ( $aOrdem_Cli['FAT_TOTAL_D']>0 ? FormatoMoeda($aOrdem_Cli['FAT_TOTAL_D']) : "") , 2, 13)." ".
           "| ".
           "R$".AlinhaStr( FormatoMoeda($aOrdem_Cli['FAT_TOTAL_V']) , 2, 12)." ".
           "|".
           $sPulaLinha.
           "";
         //
         $sCsv_Rel .=
           Str_Zero($aCad_Cliente['CLI_CODIGOI'],8)." - ".$aCad_Cliente['CLI_NOMECP'].';'.
           FormataTelefone(@$aCad_Cliente['TEL_NUMERO']).";".
           $aOrdem_Cli['FAT_TOTAL_Q'].";".
           "R$ ".FormatoMoeda($aOrdem_Cli['FAT_TOTAL_T']).";".
           "R$ ".FormatoMoeda($aOrdem_Cli['FAT_TOTAL_D']).";".
           "R$ ".FormatoMoeda($aOrdem_Cli['FAT_TOTAL_V']).";".
           $sPulaLinha;
         //
         $nFat_Total_Q += $aOrdem_Cli['FAT_TOTAL_Q'];
         $nFat_Total_T += $aOrdem_Cli['FAT_TOTAL_T'];
         $nFat_Total_D += $aOrdem_Cli['FAT_TOTAL_D'];
         $nFat_Total_V += $aOrdem_Cli['FAT_TOTAL_V'];
         //$sSQLQuery =
         //  "SELECT ".
         //    "ftg.FAT_DATAINI,".
         //    "ftg.FAT_TOT_VAL,".
         //    "fti.FAT_CODITE1 ".
         //  "FROM      fat_geral  AS  ftg ".
         //  "LEFT JOIN fat_item   AS  fti  ON  fti.FAT_CFATGER = ftg.FAT_CODIGOI ".
         //  "WHERE ftg.FAT_CODIGOI IN (".$aOrdem_Cli['FAT_CODIGOS'].") ".
         //  "ORDER BY ftg.FAT_DATAINI ASC, ftg.FAT_CODIGOI ASC ".
         //  ";";
         //$RowsT = MYSQL_QUERY($sSQLQuery) Or Die($sSQLQuery.'<br>'.MYSQL_ERROR());
         //While ($RowT = MYSQL_FETCH_ARRAY($RowsT, MYSQL_ASSOC)) {
         //  $sTxt_Rel .= PRINT_R($RowT,True).CHR(13);
         //}
         //
      }
      $sTxt_Rel .=
        STR_REPEAT("=",120).
        $sPulaLinha.
        $sPulaLinha.
        $sPulaLinha.
        AlinhaStr("** TOTAIS GERAIS **",1,120).
        $sPulaLinha.
        STR_REPEAT(" ",2).STR_REPEAT("-",115).
        $sPulaLinha.
        STR_REPEAT(" ",2).
        "|  Clientes  |   Vendas   |    Valor total bruto |  Total de taxas (+)| Total Descontos (-)|  Valor total liquido |".
        $sPulaLinha.
        STR_REPEAT(" ",2).STR_REPEAT("-",115).
        $sPulaLinha.
        STR_REPEAT(" ",2).
        "|".
        AlinhaStr( COUNT($aOrdem_Clis), 3, 12).
        "|".
        AlinhaStr( $nFat_Total_Q , 3, 12).
        "| ".
        "R$".AlinhaStr( FormatoMoeda( ($nFat_Total_V+$nFat_Total_D)-$nFat_Total_T ) , 2, 18)." ".
        "| ".
        "R$".AlinhaStr( FormatoMoeda($nFat_Total_T) , 2, 16)." ".
        "| ".
        "R$".AlinhaStr( FormatoMoeda($nFat_Total_D) , 2, 16)." ".
        "| ".
        "R$".AlinhaStr( FormatoMoeda($nFat_Total_V) , 2, 18)." ".
        "|".
        $sPulaLinha.
        STR_REPEAT(" ",2).STR_REPEAT("-",115).
        $sPulaLinha.
        $sPulaLinha.
        $sPulaLinha.
        $sPulaLinha.
        $sPulaLinha;
      //
      $sCsv_Rel .=
        $sPulaLinha.
        ';** TOTAIS GERAIS **;'.
        $sPulaLinha.
        'Quantidade de cliente;Quantidade de vendas;Valor total bruto;Total de taxas;Valor total de descontos;Valor total líquido;'.
        $sPulaLinha.
        COUNT($aOrdem_Clis).";".
        $nFat_Total_Q.";".
        "R$ ".FormatoMoeda( ($nFat_Total_V+$nFat_Total_D)-$nFat_Total_T ).";".
        "R$ ".FormatoMoeda( $nFat_Total_T ).";".
        "-R$ ".FormatoMoeda( $nFat_Total_D ).";".
        ($nFat_Total_V<0 ? "-" : "")."R$ ".FormatoMoeda( $nFat_Total_V ).";".
        $sPulaLinha;
      //
   }
   //
   //
   Return ARRAY( $sTxt_Rel, $sCsv_Rel );
}
//
//
?>