<?php
REQUIRE_ONCE "./global/est_funcoes.inc";
INCLUDE "./global/imp_pdf.inc";
//
$sNomeIdJan1 = 'iJan_RelEst_Princ';
$sNomeIdJan2 = 'iJan_RelEst_TxtVs';
$sCorBarraInf = '#E8E3CE';
//
$sPulaLinha = CHR(13).CHR(10);

$sData_Trabalho = SQLVarConfig('DATA_DE_TRABALHO');
$sEmpresaFan = SQLVarConfig('EMPRESA_NOME_FANTASIA');
//
//  ** TELA PRINCIPAL DE RELATORIO DE ESTOQUE **
If ( EMPTY($sSubModulo) ) {
    // Criar objeto Janela
    $oJanelaPrinc = New R_Janela();
    $oJanelaPrinc->sIdObj  = $sNomeIdJan1; 
    $oJanelaPrinc->nTop    = 40;
    $oJanelaPrinc->nLeft   = 5;
    $oJanelaPrinc->nWidth  = 550;   // Largura
    $oJanelaPrinc->nHeight = 0;     // Altura
	$oJanelaPrinc->nLeft  += ($nTela_W/2)-($oJanelaPrinc->nWidth/2);
    $oJanelaPrinc->sTitulo = 'Relatório de estoque';
    //    
	$sJavaTravarJ = "document.getElementById('".$oJanelaPrinc->sIdObj."_Travar').style.visibility='visible'; parent.Disabled_In_Elems('".$oJanelaPrinc->sIdObj."',true);";
 	$oJanelaPrinc->sJavOnClickF =
         $sJavaTravarJ.
		 "document.forms.fmPRelEst.acao.value='FECHAR'; ".
         "document.forms.fmPRelEst.submod.value=''; ".
         "document.forms.fmPRelEst.submit();";
    $oJanelaPrinc->sJavKeyDown = "return Car_".$sNomeAcesso."1.Teclas_F(this,event);";
    //
    // JANELA TELA PRINCIPAL
	If ( EMPTY($sAcao) ) {
	   //
	   $oJanelaPrinc->aIdsObjList =
	      ARRAY( 'sl_RelEst_TipLst', 'in_RelEst_DatIni', 'in_RelEst_DatFim' ,
			     'sl_RelEst_CodFun', 'sl_RelEst_CodPro', 'sl_RelEst_CodFor',
			     'sl_RelEst_Efetiv', 'sl_RelEst_CodGru', 'sl_RelEst_CodEmp',
			     'in_RelEst_Unidad', 'sl_RelEst_SalTip', 'sl_RelEst_Ordena',
		         'sl_RelEst_Situac',
                 'sl_RelEst_CCusto'
		  );
	   //
	   // Combo de fornecedores
	   $sSQLRequest = 'SELECT * FROM cad_fornecedor WHERE FOR_ATIVO_ ORDER BY FOR_RAZAOS ASC;';
	   $RowsT = MYSQL_QUERY($sSQLRequest) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $sLstForHtml = '<option value="0">** Todos os fornecedores **</option>';
	   While ( $RowT = MYSQL_FETCH_OBJECT($RowsT) ) {
	      $sLstForHtml .=
			 '<option value="'.$RowT->FOR_CODIGO.'">'.
			  Str_Zero($RowT->FOR_CODIGO,8).' - '.$RowT->FOR_FANTAS.
			 '</option>';
       }
	   //
	   // Combo de grupo de produtos
	   $sSQLRequest = 'SELECT * FROM cad_grupo_produtos WHERE GRU_TRAREG=0 ORDER BY GRU_DESCRI ASC;';
	   $RowsT = MYSQL_QUERY($sSQLRequest) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $sLstGruHtml = '<option value="0">** Todos **</option>';
	   While ( $RowT = MYSQL_FETCH_OBJECT($RowsT) ) {
	      $sLstGruHtml .=
			 '<option value="'.$RowT->GRU_CODIGO.'">'.
			  Str_Zero($RowT->GRU_CODIGO,3).' - '.$RowT->GRU_DESCRI.
			 '</option>';
       }
	   //
	   // Combo de empresas
	   $sSQLRequest = 'SELECT * FROM cad_empresa ORDER BY EMP_RAZAOS ASC;';
	   $RowsT = MYSQL_QUERY($sSQLRequest) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $sLstEmpHtml = '';
	   While ( $RowT = MYSQL_FETCH_OBJECT($RowsT) ) {
	      $sLstEmpHtml .=
		     '<option value="'.$RowT->EMP_CODIGOI.'" '.($RowT->EMP_CODIGOI==$aSessao['CODIGO_EMPRESA'] ? 'selected' : '').'>'.
		      Str_Zero($RowT->EMP_CODIGO+0,8).' - '.$RowT->EMP_RAZAOS.
		     '</option>';
       }
	   //
       // Tela HTML
       $sRet_TelaJ_HTML =
    	  $oJanelaPrinc->MontaJanHTML(True).
          '<form name="fmPRelEst" 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="">'.
           '<input name="acao" type="hidden" value="">'.
    	   '<input name="nomeacs" type="hidden" value="'.$sNomeAcesso.'">'.
		   '&nbsp;'.
		  '<table width="100%" border="0">'.
           '<tr>'.
            '<td width="4px" height="20px">&nbsp;</td>'.
            '<td width="100px" align="right">'.
             'Tipo de listagem:'.
            '</td>'.
            '<td align="left">'.
			 '<select id="sl_RelEst_TipLst" name="TipLst" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();" style="width:360px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			  '<option value="0">Posição de estoque</option>'.
			  '<option value="4">Contagem de estoque</option>'.
			  '<option value="1">Entrada de estoque</option>'.
			  '<option value="5">Ajuste de estoque</option>'.
			  '<option value="6">Balanço</option>'.
			  '<option value="2">Ficha Kardex</option>'.
			  '<option value="3">Ficha técnica de produção</option>'.
			 '</select>'.
            '</td>'.
            '<td width="4px" height="20px">&nbsp;</td>'.
		   '</tr>'.
		  '</table>'.
		  //'<div id="dv_EntEst" style="display:none;">'.
		  '<div id="dv_Rel_Linha1" style="display:none;">'.     // Linha 1
		   '<table width="100%" border="0">'.
             '<tr>'.
                '<td width="80px" align="right">'.
                   'Período Data Entrada:'.
                '</td>'.
			    '<td width="28px" align="center"><img onclick="'."sIdHasFocus='in_RelEst_DatIni';".'" src="images/bimg_calendario.png" border="0" id="bt_RelEst_DatIni" style="cursor:pointer;"></td>'.
			    '<td width="77px">'.
			       '<input id="in_RelEst_DatIni" name="Fil_DataIni" type="text" maxlength="10" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();" value="'.ConvertDataUSBR($sData_Trabalho).'" style="font-size:12px; width:99%;">'.
			    '</td>'.
			    '<td align="center" width="10px">'.
			       '-'.
			    '</td>'.
			    '<td width="28px" align="center"><img onclick="'."sIdHasFocus='in_RelEst_DatFim';".'" src="images/bimg_calendario.png" border="0" id="bt_RelEst_DatFim" style="cursor:pointer;"></td>'.
			    '<td width="77px">'.
			       '<input id="in_RelEst_DatFim" name="Fil_DataFim" type="text" maxlength="10" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();" value="'.ConvertDataUSBR($sData_Trabalho).'" style="font-size:12px; width:99%;">'.
			    '</td>'.
                '<td width="80px" height="20px">&nbsp;</td>'.
		     '</tr>'.
		   '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha2" style="display:none;">'.     // Linha 2
		   '<table width="100%" border="0">'.
             '<tr>'.
                //'<td width="4px" height="20px">&nbsp;</td>'.
                '<td width="108px" align="right">'.
                   'Recebido por:'.
                '</td>'.
                '<td align="left">'.
			       '<select id="sl_RelEst_CodFun" name="Cod_Fun" style="width:98%; font-size:11px; font-family:Courier New,Courier,mono;"></select>'.
                '</td>'.
                '<td width="52px">&nbsp;</td>'.
		     '</tr>'.
		   '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha3" style="display:none;">'.     // Linha 3
		    '<table width="100%" border="0">'.
               '<tr>'.
                  '<td width="4px" height="20px">&nbsp;</td>'.
                  '<td width="100px" align="right">'.
                     'Grupo de produtos:'.
                  '</td>'.
                  '<td align="left">'.
			         '<select id="sl_RelEst_CodGru" name="CodGru" style="width:360px; font-size:11px; font-family:Courier New,Courier,mono;" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();">'.
			            $sLstGruHtml.
			         '</select>'.
                  '</td>'.
                  '<td width="4px" height="20px">&nbsp;</td>'.
		       '</tr>'.
		    '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha4" style="display:none;">'.     // Linha 4
		   '<table width="100%" border="0">'.
             '<tr>'.
                '<td width="4px" height="20px">&nbsp;</td>'.
                   '<td width="100px" align="right">'.
                      'Produto:'.
                   '</td>'.
                   '<td align="left">'.
			          '<select id="sl_RelEst_CodPro" name="Cod_Pro" style="width:98%; font-size:11px; font-family:Courier New,Courier,mono;">'.
   	                  '</select>'.
			       '</td>'.
                   '<td width="52px">&nbsp;</td>'.
		     '</tr>'.
		   '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha5" style="display:none;">'.     // Linha 5
		   '<table width="100%" border="0">'.
             '<tr>'.
                '<td width="4px" height="20px">&nbsp;</td>'.
                   '<td width="100px" align="right">'.
                      'Opção...: '.
                   '</td>'.
                   '<td align="left">'.
			          '<select id="sl_RelEst_Efetiv" name="Efetiva" onchange="return Car_'.$sNomeAcesso.'1.Atualiza();" style="width:360px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			             '<option value="1">Efetivados</option>'.
			             '<option value="0">Não Efetivados</option>'.
						 '<option value="3">Todos</option>'.
			          '</select>'.
                   '</td>'.
                   '<td width="52px">&nbsp;</td>'.
		     '</tr>'.
		   '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha6" style="display:none;">'.     // Linha 6
		   '<table width="100%" border="0">'.
             '<tr>'.
                '<td width="4px" height="20px">&nbsp;</td>'.
                '<td width="100px" align="right">'.
                   'Fornecedor:'.
                '</td>'.
                '<td align="left">'.
			       '<select id="sl_RelEst_CodFor" name="CodFor" style="width:360px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			          $sLstForHtml.
			       '</select>'.
                '</td>'.
                '<td width="4px" height="20px">&nbsp;</td>'.
		     '</tr>'.
		   '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha7" style="display:none;">'.     // Linha 7
		    '<table width="100%" border="0">'.
               '<tr>'.
                  '<td width="4px" height="20px">&nbsp;</td>'.
                  '<td width="100px" align="right">'.
                     'Loja:'.
                  '</td>'.
                  '<td align="left">'.
			         '<select id="sl_RelEst_CodEmp" name="CodEmp" style="width:360px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			            $sLstEmpHtml.
			         '</select>'.
                  '</td>'.
                  '<td width="4px" height="20px">&nbsp;</td>'.
		       '</tr>'.
		    '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha8" style="display:none;">'.     // Linha 8
		    '<table width="100%" border="0">'.
               '<tr>'.
                  '<td width="4px" height="20px">&nbsp;</td>'.
                  '<td width="100px" align="right">'.
                     'Unidade:'.
                  '</td>'.
                  '<td align="left" width="40px">'.
			         '<input id="in_RelEst_Unidad" name="Unidad" type="text" maxlength="2" value="" style="font-size:11px; width:30px;">'.
                  '</td>'.
                  '<td width="172px" align="right">'.
                     'Saldo de estoque:'.
                  '</td>'.
                  '<td align="left">'.
			         '<select id="sl_RelEst_SalTip" name="SalTip" style="width:140px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			            '<option value="1">Positivo</option>'.
			            '<option value="2">Negativo</option>'.
			            '<option value="3">Mínimo</option>'.
			            '<option value="0">Todos</option>'.
			         '</select>'.
                  '</td>'.
                  '<td width="4px" height="20px">&nbsp;</td>'.
		       '</tr>'.
		    '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha9" style="display:none;">'.     // Linha 9
		    '<table width="100%" border="0">'.
               '<tr>'.
                   '<td width="4px" height="20px">&nbsp;</td>'.
                   '<td width="100px" align="right">'.
                      'Ordenação:'.
                   '</td>'.
                   '<td align="left" width="145px;">'.
			          '<select id="sl_RelEst_Ordena" name="Ordena" style="width:140px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			             '<option value="0">Descrição</option>'.
			             '<option value="1">Saldo</option>'.
			          '</select>'.
                   '</td>'.
                   '<td width="67px" align="right">'.
                      'Situação:'.
                   '</td>'.
                   '<td align="left">'.
			          '<select id="sl_RelEst_Situac" name="Situac" style="width:140px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			             '<option value="1">Ativo</option>'.
			             '<option value="0">Inativos</option>'.
			          '</select>'.
                   '</td>'.
                   '<td width="4px" height="20px">&nbsp;</td>'.
		       '</tr>'.
		    '</table>'.
		  '</div>'.
		  '<div id="dv_Rel_Linha10" style="display:none;">'.    // Linha 10
		    '<table width="100%" border="0">'.
               '<tr>'.
                   '<td width="4px" height="20px">&nbsp;</td>'.
                   '<td width="100px" align="right">'.
                      'Calculo de custo:'.
                   '</td>'.
                   '<td align="left" width="145px;">'.
			          '<select id="sl_RelEst_CCusto" name="CCusto" style="width:140px; font-size:11px; font-family:Courier New,Courier,mono;">'.
			             '<option value="0">Custo</option>'.
			             '<option value="1">Custo médio</option>'.
			          '</select>'.
                   '</td>'.
                   '<td></td>'.
                   '<td width="4px" height="20px">&nbsp;</td>'.
		       '</tr>'.
		    '</table>'.
		  '</div>'.
		  '</form>'.
		  //
          '<table width="100%" style="background-color:'.$sCorBarraInf.';"></tr>'.
           '<td width="4px" height="40px">&nbsp;</td>'.
           '<td align="left">'.
            HTML_Botao( 3, 'objRelEst_BT_Abr',
			                                 "var vff = document.forms.fmPRelEst;".
		                                     "vff.acao.value=''; ".
                                             "vff.submod.value='RELATORIO'; ".
                                             "vff.submit();".
											 $sJavaTravarJ
                         , 'Visualizar (F8)' ,'images/btimg_docs.png',120).		    
		   '</td>'.
           '<td align="right">'.
            HTML_Botao( 3, 'objRelEst_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 Teclas_F( Objeto, Evento ) {".
           "vNumTecla = parent.Tecla_Apertada(Evento);".
           "if ( vNumTecla==119) {".         // ** [F8] **
               "if (parent.document.getElementById('objRelEst_BT_Abr').style.display!='none') {".           // (Visualizar)
                  "parent.".$sJava_Desfoca_Input.
                  "setTimeout( parent.document.getElementById('objRelEst_BT_Abr').onclick , 10);".
         	   "}".
		   "} else if ( vNumTecla==116) { ".  // ** [F5] **     Não atualizar
               //
           "} else if ( vNumTecla==27 ) { ".  // [ESC]
               "parent.".$sJava_Desfoca_Input.
               "setTimeout( parent.document.getElementById('objRelEst_BT_Fch').onclick , 10);".
		   "} else {".
		       "return true;".
		   "} ".
	       "return false;".
		 '}'.
	     "";
       // Java posterior
       $sRet_JavsPos .=
	      "parent.document.getElementById('in_RelEst_DatIni').focus();".
	      "function Atualiza() {".
		     "var vff = parent.document.forms.fmPRelEst;".
			 "stmp = vff.target;".
			 "vff.target='car_".$sNomeAcesso."5';".
	         "vff.acao.value='ATUALIZA'; ".
	         "vff.submod.value=''; ".
             "vff.submit(); ".
			 "vff.target = stmp;".
   	      "}".
		  "Atualiza(); ".
		  //
          'parent.Calendar.setup({'.
             'inputField : "in_RelEst_DatIni", '.
             'trigger    : "bt_RelEst_DatIni", '.
             'onSelect   : function() { this.hide(); parent.sIdHasFocus=""; Atualiza(); }, '.
             'showTime   : 0, '.
             'dateFormat : "%d/%m/%Y" '.
          '});'.
          'parent.Calendar.setup({'.
             'inputField : "in_RelEst_DatFim", '.
             'trigger    : "bt_RelEst_DatFim", '.
             'onSelect   : function() { this.hide(); parent.sIdHasFocus=""; Atualiza(); }, '.
             'showTime   : 0, '.
             'dateFormat : "%d/%m/%Y" '.
          '});'.
          "";
    //
	// ATUALIZA TELA: Sequencia de Caixa
    } ElseIf ( $sAcao=="ATUALIZA" ) {
	   //
	   $sFil_DataIni = @$_REQUEST['Fil_DataIni'];          // Data inicial
	   $sFil_DataFim = @$_REQUEST['Fil_DataFim'];          // Data Final
	   $nP_Cod_Fun   = @$_REQUEST['Cod_Fun']+0;            // Código do Funcionário
	   $nP_Cod_Gru   = (@$_POST['CodGru']+0);              // Codigo do grupo de produto
	   $nP_Cod_Pro   = @$_REQUEST['Cod_Pro']+0;            // Código do Produto
	   $nFil_TipLst  =(@$_REQUEST['TipLst']+0);            // Tipo (0=Posição de estoque, 1=Entrada de estoque, 2=Ficha Kardex 3=Ficha técnica de produção 4=Contagem de estoque 5=Ajuste de estoque 6=Balanço)
	   $nFil_Efetiv  = @$_REQUEST['Efetiva']+0;            // 0-Nao Efetivados 1-Efetivados                                           
	   $sSQLParm = '';                                                                                                                
	   $aLst_FatFuns = ARRAY();                                                                                                       
	   $aLst_FatPros = ARRAY();                                                                                                       
	   //                                                                                                                             
	   $d_Fil_DataIni = ConvertDataSTR( ConvertDataBRUS($sFil_DataIni) );
	   $d_Fil_DataFim = ConvertDataSTR( ConvertDataBRUS($sFil_DataFim) );
	   // Filtro de data
       If ($d_Fil_DataIni>0) {
		  // Comparando (Inicial)
		  If ( $nFil_TipLst==1 ) {  // Entrada de estoque
	         If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
	         $sSQLParm .= '(ETG_DATAENT>="'.DATE('Y-m-d',$d_Fil_DataIni).'")';
		  }
	   }
	   If ($d_Fil_DataFim>0) {
		  // Comparando (Final)
		  If ( $nFil_TipLst==1 ) {  // Entrada de estoque
	         If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
	         $sSQLParm .= '(ETG_DATAENT<="'.DATE('Y-m-d',$d_Fil_DataFim).' 23:59:59'.'")';
		  }
       }
	   // Filtro documento efetivado
	   If ( $nFil_TipLst==1 ) {    // Entrada de estoque
	      If ( $nFil_Efetiv==1 Or $nFil_Efetiv==0 ) {
	         If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
	            $sSQLParm .= 'ETG_EFETIVA="'.$nFil_Efetiv.'"';
	      }
	   }
	   // Montagem da matriz de produtos
	   $aCad_Produtos = ARRAY();
	   $sSQLRequest = "SELECT ITE_CODIGOL, ITE_CODIGOI, ITE_DESCRIC, ITE_COD_GRU FROM cad_produto;";
	   $Rows_Temp = MYSQL_QUERY($sSQLRequest) Or Die($sSQLRequest."<br>".MYSQL_ERROR());
	   While ( $Row_Temp = MYSQL_FETCH_ARRAY($Rows_Temp) ) {
	       $aCad_Produtos[ $Row_Temp['ITE_CODIGOI'] ] = $Row_Temp;
	   }
	   // Consulta geral SQL
	   $sSQLRequest = '';
	   If ( $nFil_TipLst==1 ) {        // Entrada de estoque
	      $sSQLRequest =
	         "SELECT fun.FUN_CODIGO,".
		            "fun.FUN_NOMECP,".
                    "etd.ETD_COD_ITE AS ITE_CODIGOI ".
             "FROM est_entrada_itens AS etd ".
             "LEFT JOIN est_entrada_geral AS etg ON etg.ETG_IDN_ETG = etd.ETD_IDN_ETG ".
             "LEFT JOIN cad_funcionario AS fun ON fun.FUN_CODIGO = etg.ETG_RCODOPE ".
		     "WHERE ".
		     (STRLEN($sSQLParm)>0 ? $sSQLParm.' AND ' : '').
		     "etg.ETG_CAN_OPE = 0 ".
		     "ORDER BY etg.ETG_RCODOPE ASC;";
	      //
	   } ElseIf ( $nFil_TipLst==2 || $nFil_TipLst==5  || $nFil_TipLst==6) {  // Ficha Kardex ou Ajuste de Estoque
	      $sSQLRequest =
             "SELECT ETM_CODITE AS ITE_CODIGOI ".
             "FROM est_movimento ".
             "WHERE ETM_SEQUEN>0 ".
		     ( ($d_Fil_DataIni>0 OR $d_Fil_DataFim>0) ?
			    "AND ".
             //      Documento de entrada    ou   Ajuste de estoque    : Data real
                "((( ETM_IDNETD>0          ) OR (ETM_IDNETD=0 AND ETM_FATITM=0) ) AND ".
				( $d_Fil_DataIni>0 ? "ETM_DTAMOV>='".DATE('Y-m-d',$d_Fil_DataIni)."'"          : "" ).
				( $d_Fil_DataIni>0 && $d_Fil_DataFim>0 ? " AND " : "").
				( $d_Fil_DataFim>0 ? "ETM_DTAMOV<='".DATE('Y-m-d',$d_Fil_DataFim)." 23:59:59'" : "" ).
				") OR ".
             //    Vendas                                                    : Data ficticia
                "(ETM_FATITM>0 AND ".
				( $d_Fil_DataIni>0 ? "ETM_DTAFIC>='".DATE('Y-m-d',$d_Fil_DataIni)."'"          : "" ).
				( $d_Fil_DataIni>0 && $d_Fil_DataFim>0 ? " AND " : "").
				( $d_Fil_DataFim>0 ? "ETM_DTAFIC<='".DATE('Y-m-d',$d_Fil_DataFim)."'"          : "" ).
				") "
			 : "").
             "GROUP BY ITE_CODIGOI".
			 ";";
	      //
	   } ElseIf ( $nFil_TipLst==3 ) {  // Ficha técnica de produção
	      $sSQLRequest =
	         "SELECT FPG_COD_ITE AS ITE_CODIGOI ".
             "FROM cad_ficha_producao_geral ".
		     "ORDER BY FPG_COD_ITE ASC;";
	   }
	   // Execução SQL
	   If ( STRLEN($sSQLRequest)>5 ) {
	      $Rows_Temp = MYSQL_QUERY($sSQLRequest) Or Die($sSQLRequest."<br>".MYSQL_ERROR());
	      // Montar uma lista de funcionario e produtos ( $aLst_FatFuns, $aLst_FatPros )
	      $sLst_Temp  = '';
	      $sLst_Temp2 = '';
	      While ( $Row_Temp = MYSQL_FETCH_ARRAY($Rows_Temp) ) {
	        // Funcionarios
	        If ( (@$Row_Temp['FUN_CODIGO']+0)>0 && STRPOS(" ;".$sLst_Temp, ";".$Row_Temp['FUN_CODIGO'].";" )==0 ) {
	           $sLst_Temp .= $Row_Temp['FUN_CODIGO'].";";
	           $aReg_Temp = ARRAY();
	           $aReg_Temp[0] = $Row_Temp['FUN_CODIGO'];
	           $aReg_Temp[1] = $Row_Temp['FUN_NOMECP'];
	           $aLst_FatFuns[] = $aReg_Temp;
	        }
	        $aReg_Temp = ARRAY();
	        $n_CodPro = $Row_Temp['ITE_CODIGOI'];
	        If ( STRPOS(" ;".$sLst_Temp2, ";".$n_CodPro.";" )==0 ) {
	      	   $aReg_Temp[0] = $n_CodPro;                                    // Codigo Interno
	      	   $aReg_Temp[1] = '(Não cadastrado)';                           // Descrição
	      	   $aReg_Temp[2] = 0;                                            // Código livre
	      	   $aReg_Temp[3] = 0;                                            // Código do grupo
	      	   If ( ISSET( $aCad_Produtos[$n_CodPro] ) ) {
	      	      $aReg_Temp[0] = $aCad_Produtos[$n_CodPro]['ITE_CODIGOI'];  // Código Interno
	      	      $aReg_Temp[1] = $aCad_Produtos[$n_CodPro]['ITE_DESCRIC'];  // Descrição
	      	      $aReg_Temp[2] = $aCad_Produtos[$n_CodPro]['ITE_CODIGOL'];  // Código livre
	      	      $aReg_Temp[3] = $aCad_Produtos[$n_CodPro]['ITE_COD_GRU'];  // Código do grupo
	      	   }
	      	   $aLst_FatPros[] = $aReg_Temp;
	      	   $sLst_Temp2 .= $aReg_Temp[0].';';
	        }
	      }
	   }
	   //
	   // Combo de funcionários
	   $sLstFunHtml = '<option value="0">** Todos os funcionários **</option>';
	   ForEach ( $aLst_FatFuns As $aReg_Temp ) {
	      $sLstFunHtml .=
		    '<option value="'.$aReg_Temp[0].'" '.($nP_Cod_Fun==$aReg_Temp[0] ? 'selected' : '').'>'.
			 Str_Zero($aReg_Temp[0],4).' - '.
			 $aReg_Temp[1].
	        '</option>';
	   }
	   //
	   // Combo de produtos
	   $sLstProHtml = '<option value="0">** Todos os produtos **</option>';
	   ForEach ( $aLst_FatPros As $aReg_Temp ) {
	      If ( $nP_Cod_Gru>0 && $nP_Cod_Gru<>$aReg_Temp[3]) {
		     CONTINUE;
		  }
	      $sLstProHtml .=
	         '<option value="'.$aReg_Temp[0].'" '.($nP_Cod_Pro==$aReg_Temp[0] ? 'selected' : '').'>'.
	   	      Str_Zero($aReg_Temp[2],4).' - '.
	   	      $aReg_Temp[1].
	        '</option>';
	   }
       //
       $sRet_Javs .=
	      'parent.document.getElementById("sl_RelEst_CodFun").innerHTML = '.JAVA_CharCode_Mini($sLstFunHtml).';'.
	      'parent.document.getElementById("sl_RelEst_CodPro").innerHTML = '.JAVA_CharCode_Mini($sLstProHtml).';'.
		  'parent.document.getElementById("in_RelEst_DatIni").value="'.$sFil_DataIni.'";'.
		  'parent.document.getElementById("in_RelEst_DatFim").value="'.$sFil_DataFim.'";'.
		  'var dv_L1  = parent.document.getElementById("dv_Rel_Linha1");'.  // Data inicial e final
		  'var dv_L2  = parent.document.getElementById("dv_Rel_Linha2");'.  // Recebido por: (Funcionario)
		  'var dv_L3  = parent.document.getElementById("dv_Rel_Linha3");'.  // Grupo de produtos
		  'var dv_L4  = parent.document.getElementById("dv_Rel_Linha4");'.  // Produto
		  'var dv_L5  = parent.document.getElementById("dv_Rel_Linha5");'.  // Opção: Efetivados ou não efetivados (EST_ENTRADA_GERAL)
		  'var dv_L6  = parent.document.getElementById("dv_Rel_Linha6");'.  // Fornecedor
		  'var dv_L7  = parent.document.getElementById("dv_Rel_Linha7");'.  // Loja
		  'var dv_L8  = parent.document.getElementById("dv_Rel_Linha8");'.  // Unidade, Saldo em estoque
		  'var dv_L9  = parent.document.getElementById("dv_Rel_Linha9");'.  // Ordenação, Situação
		  'var dv_L10 = parent.document.getElementById("dv_Rel_Linha10");'. // Calculo do custo
		  ( $nFil_TipLst == 0 ?   // Posição de estoque
            'dv_L1.style.display="none";'.
            'dv_L2.style.display="none";'.
            'dv_L3.style.display="";'.
            'dv_L4.style.display="none";'.
            'dv_L5.style.display="none";'.
            'dv_L6.style.display="none";'.
            'dv_L7.style.display="";'.
            'dv_L8.style.display="";'.
            'dv_L9.style.display="";'.
            'dv_L10.style.display="";'
		  : '').
		  ( $nFil_TipLst == 1 ?   // Entrada de estoque
            'dv_L1.style.display="";'.
            'dv_L2.style.display="";'.
            'dv_L3.style.display="none";'.
            'dv_L4.style.display="";'.
            'dv_L5.style.display="";'.
            'dv_L6.style.display="none";'.
            'dv_L7.style.display="none";'.
            'dv_L8.style.display="none";'.
            'dv_L9.style.display="none";'.
            'dv_L10.style.display="none";'
		  : '').
		  ( $nFil_TipLst == 2 || $nFil_TipLst ==5 || $nFil_TipLst ==6 ?   // Ficha Kardex ou Ajuste ou Balanço
            'dv_L1.style.display="";'.
            'dv_L2.style.display="none";'.
            'dv_L3.style.display="";'.
            'dv_L4.style.display="";'.
            'dv_L5.style.display="none";'.
            'dv_L6.style.display="none";'.
            'dv_L7.style.display="";'.
            'dv_L8.style.display="none";'.
            'dv_L9.style.display="none";'.
            'dv_L10.style.display="none";'
		  : '').
		  ( $nFil_TipLst == 3 ?   // Ficha técnica de produção
            'dv_L1.style.display="none";'.
            'dv_L2.style.display="none";'.
            'dv_L3.style.display="none";'.
            'dv_L4.style.display="";'.
            'dv_L5.style.display="none";'.
            'dv_L6.style.display="none";'.
            'dv_L7.style.display="none";'.
            'dv_L8.style.display="none";'.
            'dv_L9.style.display="none";'.
            'dv_L10.style.display="none";'
		  : '').
		  ( $nFil_TipLst == 4 ?   // Contagem de estoque
            'dv_L1.style.display="none";'.
            'dv_L2.style.display="none";'.
            'dv_L3.style.display="";'.
            'dv_L4.style.display="none";'.
            'dv_L5.style.display="none";'.
            'dv_L6.style.display="none";'.
            'dv_L7.style.display="";'.
            'dv_L8.style.display="";'.
            'dv_L9.style.display="";'.
            'dv_L10.style.display="none";'
		  : '').
          '';
    //
    // FECHAR
    } 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';".
        "";
	}
//
//  ** TELA QUE MONTA O RELATÓRIO **
} ElseIf ( $sSubModulo=="RELATORIO" ) {
    // Criar objeto Janela
    $oJanelaPrinc = New R_Janela();
    $oJanelaPrinc->sIdObj  = $sNomeIdJan2; 
    $oJanelaPrinc->nTop    = 2;
    $oJanelaPrinc->nLeft   = 5;
    $oJanelaPrinc->nWidth  = 910;   // Largura
    $oJanelaPrinc->nHeight = 0;     // Altura
	$oJanelaPrinc->nLeft   += ($nTela_W/2)-($oJanelaPrinc->nWidth/2);
    $oJanelaPrinc->sTitulo = 'Relatório';
	$oJanelaPrinc->sJavOnClick  = "document.getElementById('in_RelEstV_Tecla').focus();";
	//
	$sJavaTravarJ = "document.getElementById('".$oJanelaPrinc->sIdObj."_Travar').style.visibility='visible'; ";
	$oJanelaPrinc->sJavOnClickF =
        $sJavaTravarJ.
	    "document.forms.fmPRelEst_R.acao.value='FECHAR'; ".
        "document.forms.fmPRelEst_R.submit();";
	//
	$aV_Sessao = @$aSessao[$sNomeAcesso.'_S'];
    //
    // Montar o relatório
    If ( $sAcao=="MONTAR" ) {
	   //
	   $sTxt_Rel     = '';
	   $sTxt_Cab     = '';
	   $nFil_TipLst  = $aV_Sessao['Fil_TipLst'];
	   $nFil_CodFor  = $aV_Sessao['Fil_CodFor'];
	   $nFil_CodGru  = $aV_Sessao['Fil_CodGru'];
	   $nFil_CodEmp  = $aV_Sessao['Fil_CodEmp'];
	   $sFil_Unidad  = $aV_Sessao['Fil_Unidad'];
	   $nFil_SalTip  = $aV_Sessao['Fil_SalTip'];
	   $nFil_Ordena  = $aV_Sessao['Fil_Ordena'];
	   $bFil_Situac  = $aV_Sessao['Fil_Situac'];
	   $nFil_CCusto  = $aV_Sessao['Fil_CCusto'];
	   $sFil_DataIni = $aV_Sessao['Fil_DataIni'];          // Data inicial
	   $sFil_DataFim = $aV_Sessao['Fil_DataFim'];          // Data Final
	   $nFil_Cod_Fun = $aV_Sessao['Fil_Cod_Fun'];          // Código do Funcionário
	   $nFil_Cod_Pro = $aV_Sessao['Fil_Cod_Pro'];          // Código do Produto
	   $nFil_Efetiva = $aV_Sessao['Fil_Efetiva'];          // (0=Pendente, 1=Efetivado)
 	   // Periodo
	   $d_Fil_DataIni = ConvertDataSTR( ConvertDataBRUS($sFil_DataIni) );
	   $d_Fil_DataFim = ConvertDataSTR( ConvertDataBRUS($sFil_DataFim) );
	   $sPeriodo = '';
	   If ($d_Fil_DataIni==0 && $d_Fil_DataFim==0) {
	      $sPeriodo = '** TODOS **';
	   } ElseIf ($d_Fil_DataIni>0 && $d_Fil_DataFim==0) {
	      $sPeriodo = 'Apartir de '.$sFil_DataIni;
	   } ElseIf ($d_Fil_DataIni==0 && $d_Fil_DataFim>0) {
	      $sPeriodo = 'Ate '.$sFil_DataFim;
	   } Else {
	      $sPeriodo = $sFil_DataIni.' ate '.$sFil_DataFim;
	   }
       $n_Reg_Qtd = 0;                                                       // Quantidade de itens no relatório
	   $s_FontRel = "font-size:13px; font-family:Courier New,Courier,mono;"; // Configuração da fonte de letra do relatório
	   //
	   // Montar matriz de cadastro de empresa
	   $sSQLQuery = 'SELECT * FROM cad_empresa ORDER BY EMP_RAZAOS ASC;';
	   $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $aCad_EmpresaC = ARRAY();
	   While ( $RowT = MYSQL_FETCH_ARRAY($RowsT) ) {
	     $aCad_EmpresaC[ $RowT['EMP_CODIGOI'] ] = $RowT;
	   }
	   // Montar matriz de produtos
	   $sSQLQuery = 'SELECT * FROM cad_produto ORDER BY ITE_DESCRIC ASC;';
	   $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $aCad_ProdutoC = ARRAY();
	   While ( $RowT = MYSQL_FETCH_ARRAY($RowsT) ) {
	       $aCad_ProdutoC[ $RowT['ITE_CODIGOI'] ] = $RowT;
	   }
	   // Montar matriz de grupo de produtos
	   $sSQLQuery = 'SELECT * FROM cad_grupo_produtos;';
	   $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $aCad_PrGrupoC = ARRAY();
	   While ( $RowT = MYSQL_FETCH_ARRAY($RowsT) ) {
	       $aCad_PrGrupoC[ $RowT['GRU_CODIGO'] ] = $RowT;
	   }
	   // Montar matriz de fornecedores
	   $sSQLQuery = 'SELECT * FROM cad_fornecedor WHERE FOR_ATIVO_;';
	   $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	   $aCad_FornecedorC = ARRAY();
	   While ( $RowT = MYSQL_FETCH_ARRAY($RowsT) ) {
	       $aCad_FornecedorC[ $RowT['FOR_CODIGO'] ] = $RowT;
	   }
	   //
	   // ** Contagem de estoque
	   If (($nFil_TipLst==0) || ($nFil_TipLst==4)) {
	      // Montar matriz do estoque
	      $sSQLQuery = 'SELECT * FROM cad_produto_estoque WHERE EST_CODEMP='.$nFil_CodEmp.' ORDER BY EST_SALDOS DESC;';
	      $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	      $aCad_EstoqueC = ARRAY();
	      While ( $RowT = MYSQL_FETCH_ARRAY($RowsT) ) {
	          $aCad_EstoqueC[ $RowT['EST_CODITE'] ] = $RowT;
	      }
	      // Montar matriz de produtos com fornecedores
	      $sSQLQuery = 'SELECT * FROM cad_produto_fornecedor WHERE PFO_TRAREG=0;';
	      $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	      $aCad_ProdForC = ARRAY();
	      While ( $RowT = MYSQL_FETCH_ARRAY($RowsT) ) {
	          $aCad_ProdForC[ $RowT['PFO_CODFOR'].'.'.$RowT['PFO_CODITE'] ] = $RowT;
	      }
	      $sTxt_NOME = '';
		  If ($nFil_TipLst==0) {
	         $sTxt_NOME .= "POSICAO DE ESTOQUE";
	      } Elseif ($nFil_TipLst==4){
			$sTxt_NOME .= "CONTAGEM DE ESTOQUE";
		  }
		  //
	      $sTxt_Rel .=
             //AlinhaStr("** RELATORIO DE ESTOQUE **",1,80).$sPulaLinha.
             //AlinhaStr('Empresa.....: '.$aCad_EmpresaC[$nFil_CodEmp]['EMP_RAZAOS'],0,80).$sPulaLinha.
		     //AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,40).
		     //AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,40).$sPulaLinha.
		     AlinhaStr('Empresa.....: '.$Dados_Empresa['EMP_FANTAS'],0,80).$sPulaLinha.
		     AlinhaStr('Relatorio...: '.$sTxt_NOME,0,80).$sPulaLinha.
		     AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,70).
		     AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,40).$sPulaLinha.
			 "";
	      //
	      If ( $nFil_CodFor>0 ) {
	         $sTxt_Rel .= "Fornecedor..: ".Str_Zero($nFil_CodFor,8).' - '.$aCad_FornecedorC[$nFil_CodFor]['FOR_FANTAS'].$sPulaLinha;
	      }
	      If ( $nFil_CodGru>0 ) {
	         $sTxt_Rel .= "Grupo.......: ".Str_Zero($nFil_CodGru,3).' - '.$aCad_PrGrupoC[$nFil_CodGru]['GRU_DESCRI'].$sPulaLinha;
	      }
	      If ( STRLEN($sFil_Unidad)>0 ) {
	         $sTxt_Rel .= "Unidade.....: ".$sFil_Unidad.$sPulaLinha;
	      }
	      $sTxt_Rel .= "Saldo Estoq.: ";
	      If ( $nFil_SalTip==1 ) {
	         $sTxt_Rel .= "Positivo".$sPulaLinha;
	      } ElseIf ( $nFil_SalTip==2 ) {
	         $sTxt_Rel .= "Negativo".$sPulaLinha;
	      } ElseIf ( $nFil_SalTip==3 ) {
	         $sTxt_Rel .= "Mínimo".$sPulaLinha;
	      } Else {
	         $sTxt_Rel .= "Todos".$sPulaLinha;
	      }
	      $sTxt_Rel .= "Ordenacao...: ";
	      If ( $nFil_Ordena==0 ) {
	         $sTxt_Rel .= "Descrição".$sPulaLinha;
	      } ElseIf ( $nFil_Ordena==1 ) {
	         $sTxt_Rel .= "Saldo".$sPulaLinha;
	      }
	      $sTxt_Rel .= "Situacao....: ";
	      If ( $bFil_Situac ) {
	         $sTxt_Rel .= "Ativo".$sPulaLinha;
	      } Else {
	         $sTxt_Rel .= "Inativo".$sPulaLinha;
	      }
	     // If ($nFil_TipLst==0) {
	     //    $sTxt_Rel .= "  ** Posição de Estoque **".$sPulaLinha;
	     // } Elseif ($nFil_TipLst==4){
		//	$sTxt_Rel .= "  ** Contagem de Estoque**".$sPulaLinha;
		 // }
	      //
	      $sTxt_Rel .=
             STR_REPEAT("=", 117).$sPulaLinha.
             "";
	      //
	      // ** Listagem por contagem de estoque **
	      If (($nFil_TipLst==0 ) || ($nFil_TipLst==4) ) {
	         //
			 $sTxt_Rel .=
		        ( (($nFil_SalTip==3 OR $nFil_SalTip==2) && $nFil_TipLst==0) ?
				'| CODIGO  '.
		        '| DESCRICAO               '.
		        '|UN'.
				'|  SALDO ATUAL '.
				'|'
				:
				'|CODIGO'.
		        '| DESCRICAO                                                   '.
				'|UN'.
				'| SALDO ATUAL '.
                '| x     CUSTO '.
                '| =       TOTAL '.
				'|'
				).
				( ( ($nFil_SalTip==3 OR $nFil_SalTip==2) && $nFil_TipLst==0) ?
				'SALDO MINIMO'.
				'|'.
				'SALDO FALT.'.
				'|'
				:
				""
				).
		        $sPulaLinha.
		        STR_REPEAT("-", 117).$sPulaLinha.
		        '';
		     //
		     // Ordenação dos produtos
		     $aCad_Produtos = ARRAY();
	         If ( $nFil_Ordena==0 ) {        // Descrição
		        $aCad_Produtos = $aCad_ProdutoC;
		        //
		     } ElseIf ( $nFil_Ordena==1 ) {  // Saldo
	            ForEach ( $aCad_ProdutoC as $nIte_Codigo => $aProduto ) {
			      If ( !ISSET($aCad_EstoqueC[$nIte_Codigo]['EST_SALDOS']) ) {
				     $aCad_EstoqueC[$nIte_Codigo]['EST_SALDOS']=0;
				     $aCad_EstoqueC[$nIte_Codigo]['EST_CODITE']=$nIte_Codigo;
				  }
			    }
	            ForEach ( $aCad_EstoqueC as $nIte_Codigo => $aEstoque ) {
			       $aCad_Produtos[$nIte_Codigo] = $aCad_ProdutoC[$nIte_Codigo];
			    }
		        //
		     }
		     //
             $nGTot_Custo = 0;
             $nGTot_Quant = 0;
             //
		     // Montagem do texto
	         ForEach ( $aCad_Produtos as $nIte_Codigo => $aProduto ) {
		       //
		       $nEst_Saldo = (@$aCad_EstoqueC[$nIte_Codigo]['EST_SALDOS']+0);
			   $nEst_Min   = (@$aCad_EstoqueC[$nIte_Codigo]['EST_ESTMIN']+0);
		       $nEst_Fal   = ($nEst_Min-$nEst_Saldo );
               If ( $nFil_CCusto==0 ) {
                  $nIte_Custo = ($aProduto['ITE_PRE_CUSTO_N']+0)+$aProduto['ITE_PRE_CUS_001'];
               } Else {
                  $nIte_Custo = ($aProduto['ITE_PRE_CUSTO_E']+0);
               }
               $nTot_Custo = $nIte_Custo * $nEst_Saldo;
			   //
			   // Verifica se há saldo em estoque
		       $bIncluiRel = $bFil_Situac==(@$aCad_ProdutoC[$nIte_Codigo]['ITE_ITEM_ATIVO_']+0);
		       If ($bIncluiRel) {
		          If ( $nFil_SalTip==1 ) {        // Positivo
		             $bIncluiRel = $nEst_Saldo>0;
		          } ElseIf ( $nFil_SalTip==2 ) {  // Negativo
		             $bIncluiRel = $nEst_Saldo<0;
		          } ElseIf ( $nFil_SalTip==3 ) {  // Mínimo
                     If ( $nEst_Min==0 ) {
                        $bIncluiRel = False;
                     } Else {
		                $bIncluiRel = $nEst_Saldo<=$nEst_Min;
                     }
		          }
		       }
		       // Verifica se é do mesmo grupo especificado
		       If ( $bIncluiRel && $nFil_CodGru>0 ) {
		          $bIncluiRel = ($aProduto['ITE_COD_GRU']==$nFil_CodGru);
		       }
		       // Verifica se faz parte do fornecedor especificado
		       If ( $bIncluiRel && $nFil_CodFor>0 ) {
		          $bIncluiRel = ( (@$aCad_ProdForC[ $nFil_CodFor.'.'.$nIte_Codigo ]['PFO_CODITE']+0) == $nIte_Codigo );
		       }
		       If ( $bIncluiRel && STRLEN($sFil_Unidad)>0 ) {
		          $bIncluiRel = ( STRTOUPPER($sFil_Unidad)==STRTOUPPER($aProduto['ITE_SIG_UNIDADE']) );
		       }
		       //
               If ($bIncluiRel) {
                  $sEst_Saldo = NUMBER_FORMAT($nEst_Saldo, 3, ',','');
				  $sEst_Min   = NUMBER_FORMAT($nEst_Min, 3, ',','');
				  $sEst_Fal   = NUMBER_FORMAT($nEst_Fal, 3, ',','');
                  $nGTot_Custo += $nTot_Custo;
                  $nGTot_Quant += $sEst_Saldo;
                  //
				  $sTxt_Rel .=
                     '| '.
					 ( ( ($nFil_SalTip==3 OR $nFil_SalTip==2) && $nFil_TipLst==0 ) ?
                        AlinhaStr( $aProduto['ITE_CODIGOL']     ,0 , 7)
                     :
					    AlinhaStr( $aProduto['ITE_CODIGOL']     ,0 , 5)
					 ).
					 '| '.
					 ( ( ($nFil_SalTip==3 OR $nFil_SalTip==2) && $nFil_TipLst==0 ) ?
                         AlinhaStr( $aProduto['ITE_DESCRIC']     ,0 , 23).
						 ' |'.
						 AlinhaStr( $aProduto['ITE_SIG_UNIDADE'] ,0 ,  2).
               	         '| '
					 :	 
						 AlinhaStr( $aProduto['ITE_DESCRIC']     ,0 , 60).
                         '|'.
                         AlinhaStr( $aProduto['ITE_SIG_UNIDADE'] ,0 ,  2).
               	         '| '					
					 ).	 
               	     ( $nFil_TipLst==0 ?
						( ( ($nFil_SalTip==3 OR $nFil_SalTip==2) && $nFil_TipLst==0 ) ?
					       AlinhaStr( $sEst_Saldo,2 , 12).
						   ' | '.
                           AlinhaStr( $sEst_Min,2 ,  11).
               	           '|'.
                           AlinhaStr( $sEst_Fal,2 ,  10)
						:
					       AlinhaStr( $sEst_Saldo,2 , 11).
                           ' |'.
					       AlinhaStr( FormatoMoeda($nIte_Custo),2 , 12).
                           ' |'.
					       AlinhaStr( FormatoMoeda($nTot_Custo),2 , 14).
						""
						)
                     :
					    AlinhaStr( STR_REPEAT('_',12)          ,2 , 12)
					 ).
					 ' |'.
                     $sPulaLinha.
                     '';
               	   $n_Reg_Qtd++;
               }
			  //
		     }
		     //
	      }
          $sTxt_Rel .=
            STR_REPEAT("-", 117).
            $sPulaLinha.
            "|".
            AlinhaStr( "Total geral " ,2 , 71).
            "|".
            AlinhaStr( NUMBER_FORMAT($nGTot_Quant,3,',','') ,2 , 12).
            " |".
            AlinhaStr( "R$ ".FormatoMoeda($nGTot_Custo) ,2 , 28).
            " |".
            $sPulaLinha.
            STR_REPEAT("=", 117).
            $sPulaLinha;
	   //
	   // ** Entrada de estoque
	   } ElseIf ($nFil_TipLst==1) {
	      $sSQLParm = '';
		  // data inicial e final
	      If ($d_Fil_DataIni>0) {
	         If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
			 $sSQLParm .= '(ETG_DATAENT>="'.DATE('Y-m-d',$d_Fil_DataIni).'")';                  // Comparando (Inicial)
	      }
	      If ($d_Fil_DataFim>0) {
	         If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
	      	 $sSQLParm .= '(ETG_DATAENT<="'.DATE('Y-m-d',$d_Fil_DataFim).' 23:59:59'.'")';      // Comparando (Final)
	      }
	      // Filtro por Funcionario
	      If ( $aV_Sessao['Fil_Cod_Fun']>0 ) {
	          If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
	          $sSQLParm .= '(FUN_CODIGO="'.$aV_Sessao['Fil_Cod_Fun'].'")';
		  }
		  // Filtro por Efetivado
		  If ( $aV_Sessao['Fil_Efetiva']==1 || $aV_Sessao['Fil_Efetiva']==0 ) {
	          If (STRLEN($sSQLParm)>0) { $sSQLParm .= ' AND '; }
	          $sSQLParm .= '(ETG_EFETIVA="'.$aV_Sessao['Fil_Efetiva'].'")';
		  }
          // Montar matriz de produtos com fornecedores
	      $sSQLQuery = 'SELECT * FROM cad_produto_fornecedor WHERE PFO_TRAREG=0;';
	      $RowsT = MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	      $aCad_ProdForC = ARRAY();
	      While ( $RowT = MYSQL_FETCH_ARRAY($RowsT,MYSQL_ASSOC) ) {
	         $aCad_ProdForC[ $RowT['PFO_CODFOR'].'.'.$RowT['PFO_CODITE'] ] = $RowT;
	      }
		  //
	      $sSQLRequest =
	         "SELECT fun.FUN_CODIGO , fun.FUN_NOMECP,".
                    "etd.ETD_COD_ITE, etd.ETD_QTD_ITE, etd.ETD_UNI_ITE,".
					"(etd.ETD_QTD_ITE*etd.ETD_UNI_ITE) AS  ____PRE_TOT,".
					"etd.ETD_IDN_ETG, etg.ETG_IDN_ETG, etg.ETG_NFISCAL,".
					"etg.ETG_COD_FOR, etg.ETG_DATAENT, etg.ETG_NFSERIE,".
					"etg.ETG_DATAEMS, etg.ETG_I_TOTAL, etg.ETG_VAL_DES,".
					"etg.ETG_D_TOTAL, etg.ETG_NFCHAVE, etg.ETG_OBSERVA,".
					"etg.ETG_I_TOTAL, etg.ETG_EFETIVA,".
					"fnc.FOR_CODIGO , fnc.FOR_FANTAS ,".
					"esp.ESP_DESCRIC, ".
                    "ite.ITE_CODIGOL, ite.ITE_DESCRIC, ite.ITE_SIG_UNIDADE,".
					"ite.ITE_CODIGOL ". 	
                    //"ite.ITE_COD_NCM  ".	   
             "FROM est_entrada_itens AS etd ".
             "LEFT JOIN est_entrada_geral AS etg ON etg.ETG_IDN_ETG = etd.ETD_IDN_ETG ".
             "LEFT JOIN cad_funcionario AS fun ON fun.FUN_CODIGO = etg.ETG_RCODOPE  ".
		     "LEFT JOIN cad_produto AS ite ON ite.ITE_CODIGOI = etd.ETD_COD_ITE ".
			 "LEFT JOIN cad_fornecedor AS fnc ON fnc.FOR_CODIGO = etg.ETG_COD_FOR  ".
			 "LEFT JOIN cad_especie_doc AS esp ON esp.ESP_IDN_ESP = etg.ETG_ESP_DOC  ".
			 "WHERE ".(STRLEN($sSQLParm)>0 ? $sSQLParm.' AND ' : '').
			   //"etg.ETG_CAN_OPE =0 AND etg.ETG_EFETIVA ".
			   "etg.ETG_CAN_OPE =0 ".
			 "ORDER BY etd.ETD_IDN_ETG,ite.ITE_DESCRIC ASC;";
	      //
		  $RowsT = MYSQL_QUERY( $sSQLRequest ) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	      $aCad_Entrada_Itens = ARRAY();
	      While ( $RowT = MYSQL_FETCH_ARRAY($RowsT,MYSQL_ASSOC) ) {
	         $aCad_Entrada_Itens[ ] = $RowT;
	      }
		  //
	      $sTxt_Rel .=
             //AlinhaStr($sEmpresaFan,1,80).$sPulaLinha.
			 //AlinhaStr("** RELATORIO DE ENTRADA DE ESTOQUE **",1,80).$sPulaLinha.
             //AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,40).
		     //AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,40).$sPulaLinha.
			 //'Periodo.....: '.$sPeriodo.$sPulaLinha.
			 AlinhaStr('Empresa.....: '.$Dados_Empresa['EMP_FANTAS'],0,80).$sPulaLinha.
			 AlinhaStr('Relatorio...: ENTRADA DE ESTOQUE',0,80).$sPulaLinha.
			 AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,40).
		     AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,40).$sPulaLinha.
			 'Periodo.....: '.$sPeriodo.$sPulaLinha.
			 
			 ($aV_Sessao['Fil_Cod_Fun']>0 ? 'Somente funcionario.: '.Str_Zero($aV_Sessao['Fil_Cod_Fun'],3).' - '.$aCad_Funcionario[$nFil_Cod_Fun]['FUN_NOMECP'].$sPulaLinha : '').
		     "";
	      //
	      If ( $nFil_CodFor>0 ) {
	         $sTxt_Rel .= "Fornecedor..: ".Str_Zero($nFil_CodFor,8).' - '.$aCad_FornecedorC[$nFil_CodFor]['FOR_FANTAS'].$sPulaLinha;
	      }
	      If ( $nFil_Cod_Pro>0 ) {
	         $sTxt_Rel .= "Produto.....: ".Str_Zero($nFil_Cod_Pro,6).' - '.$aCad_ProdutoC[$nFil_Cod_Pro]['ITE_DESCRIC'].$sPulaLinha;
	      }
	      If ( $nFil_Efetiva == 1) {
	         $sTxt_Rel .= "Opcao.......: "."Efetivados".$sPulaLinha;
	      } ElseIf ($nFil_Efetiva == 0) {
	         $sTxt_Rel .= "Opcao.......: "."Nao Efetivados".$sPulaLinha;
	      } Else {
	         $sTxt_Rel .= "Opcao.......: "."Efetivados e Nao Efetivados".$sPulaLinha;
	      }
	      //
	      $sTxt_Rel .=
	        STR_REPEAT("=", 80).$sPulaLinha.
	        "";
	      //
	      // Ordenação dos produtos
	      //$aCad_Produtos = ARRAY();
	       //$aCad_Produtos = $aCad_ProdutoC;
	      //
	      $n_UltCodPro = 0;
		  $sTxt_Rel .=
		   //         1         2         3         4         5         6         7         8         9
		   //123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
		     '| CODIGO | DESCRICAO                          | UN | QTDE     | UNITARIO |       TOTAL   |'.$sPulaLinha.
		     STR_REPEAT("=", 80).$sPulaLinha.
		     ''.
		     '';
		  $n_UltCont = 0;
		  $n_UltCPro = 0;
		  $n_UltPro  = 0;
		  //
		  $n_Tot_Ite = 0;
		  $n_Tot_Des = 0;
		  //
		  $n_Ger_Ite = 0;
		  $n_Ger_Des = 0;
		  //
		  $n_Tot_Ger = 0;
          $n_Ger_Tot = 0;
		  //
		  ForEach ( $aCad_Entrada_Itens as $nIndice=>$aEntrada ) {
		    $bIncluiRel = True;
			// Verifica se é o mesmo item especificado
			If ( $bIncluiRel && $nFil_Cod_Pro>0 ) {
			  $bIncluiRel = ($aEntrada['ETD_COD_ITE']==$nFil_Cod_Pro);
			}
			// Verifica se faz parte do fornecedor especificado
			If ( $bIncluiRel && $nFil_CodFor>0 ) {
			   $bIncluiRel = ( $aEntrada[ 'ETG_COD_FOR']==$nFil_CodFor);  		  
			}
			//
			If ($bIncluiRel) {
               If ($n_UltCont<>$aEntrada['ETG_IDN_ETG']) {
                  $n_Tot_Ite = 0;
				  $n_Tot_Des = 0;
				  $n_Tot_Ger = 0;
				  //
				  $sTxt_Rel .=
				     //STR_REPEAT(" ", 80).
					 $sPulaLinha.
                     '';
			      $n_UltCont = $aEntrada['ETG_IDN_ETG'];
			      $sTxt_Rel .=
			         '| '.
					 AlinhaStr( 'No. Cont.: '.Str_Zero($aEntrada['ETG_IDN_ETG'], 7),0 , 22).
			         '   '.
					 AlinhaStr( 'Rec.por.: '.$aEntrada['FUN_NOMECP'],0 , 22).
					 '   '.
				     AlinhaStr( 'Fornec.: '.$aEntrada['FOR_FANTAS'],0 , 26).
					 ' |'.
					 $sPulaLinha.
					 '| '.
					 AlinhaStr( 'Especie..: '.$aEntrada['ESP_DESCRIC'],0 , 22).
					 '   '.
				     AlinhaStr( 'Emissao.: '.DATE("d/m/Y",ConvertDtHrSTR($aEntrada['ETG_DATAEMS'])),0,20).
				     '   '.
					 AlinhaStr( '  Entrada: '.DATE("d/m/Y",ConvertDtHrSTR($aEntrada['ETG_DATAENT'])),0,26).
				     '   |'.
				     $sPulaLinha.
					 '| '.
					 AlinhaStr( 'Doc.Serie: '.$aEntrada['ETG_NFISCAL'].'-'.$aEntrada['ETG_NFSERIE'],0 , 21).
			         '   '.
				     AlinhaStr( ' Chave...: '.$aEntrada['ETG_NFCHAVE'],0,46).
				     '       |'.
					 $sPulaLinha.
			         '';
				  If (STRLEN( $aEntrada['ETG_OBSERVA'])>0) {
				     $sTxt_Rel .=	
					    '| '.
					    AlinhaStr( 'Observacao: '.$aEntrada['ETG_OBSERVA'],0 , 76).
			            ' |'.
					    $sPulaLinha.
			            '';
				  }
				  If ( $aEntrada['ETG_EFETIVA']==0) {
				     $sTxt_Rel .=	
					    '| '.
					    AlinhaStr( '*** Nao Efetivado *** ',0 , 76).
			            ' |'.
					    $sPulaLinha.
			            '';
				  }
				  $n_Reg_Qtd++;
				  // 
			   }
  			   $sTxt_Rel .=
			      '|   '.
			      AlinhaStr( Str_Zero($aEntrada['ITE_CODIGOL'], 4),0 , 04).
			      ' | '.
			      AlinhaStr($aEntrada['ITE_DESCRIC']     ,0 , 24).
			      ' | '.
			      AlinhaStr( $aEntrada['ITE_SIG_UNIDADE'] ,0 ,  2).
			      ' | '.
			      AlinhaStr( $aEntrada['ETD_QTD_ITE'] ,2 ,  8).
                  ' | '.
			      AlinhaStr( $aEntrada['ETD_UNI_ITE'] ,2 ,  8).
			      ' | '.
			      AlinhaStr( '   '.FormatoMoeda($aEntrada['____PRE_TOT']),2 ,  13).
			      ' | '.
			      $sPulaLinha.
			      '';
			   //If ($n_UltCPro<>$aEntrada['ETD_IDN_ETG'] ) {
			   $aEntradaP = @$aCad_Entrada_Itens[$nIndice+1];
			   If ( (! ISSET($aEntradaP['ETG_IDN_ETG'])) OR $n_UltCont<>$aEntradaP['ETG_IDN_ETG'] ) {
			      $n_UltCPro = $aEntrada['ETD_IDN_ETG'];
				  //
			      $n_Tot_Ite = $aEntrada['ETG_I_TOTAL'];
			      $n_Tot_Des = $aEntrada['ETG_VAL_DES'];
			      $n_Tot_Ger = $aEntrada['ETG_D_TOTAL']; 
			      //
			      $n_Ger_Ite += $n_Tot_Ite;	
			      $n_Ger_Des += $n_Tot_Des;
			      $n_Ger_Tot += $n_Tot_Ger;
				  //
				  $sTxt_Rel .=
				     $sPulaLinha.
				     '| '.
				     AlinhaStr( "Valor Total Itens..: ".
				     AlinhaStr( 'R$ '. FormatoMoeda($n_Tot_Ite),2,11),2,76).
				     ' |'.
				     $sPulaLinha.
					 '| '.
				     AlinhaStr( " Desconto ..: ".
					 AlinhaStr( 'R$ '.FormatoMoeda($n_Tot_Des),2,11),2,76).
					 ' |'.
					 $sPulaLinha.
					 "";
					 '| '.
					 AlinhaStr( 'Valor Total.: '.
					 AlinhaStr( 'R$ '.FormatoMoeda($n_Tot_Ger),2,11),2,76 ).
					 ' |'.
					 $sPulaLinha.
				     '';
				  //
			   }
			}
		  }
		  //
		  If ($n_Ger_Ite>0 ) {
		  	 $sTxt_Rel .=
		  	    $sPulaLinha.
		  	    '| '.
		  	    AlinhaStr( "Valor Geral Itens..: ".
		  	    AlinhaStr( 'R$ '. FormatoMoeda($n_Ger_Ite),2,11),2,76).
		  	    ' |'.
		  	    $sPulaLinha.
		  	    '| '.
		  	    AlinhaStr( " Desconto ..: ".
		  	    AlinhaStr( 'R$ '.FormatoMoeda($n_Ger_Des),2,11),2,76).
		  	    ' |'.
		  	    $sPulaLinha.
		  	    '| '.
		  	    AlinhaStr( 'Valor Geral.: '.
		  	    AlinhaStr( 'R$ '.FormatoMoeda($n_Ger_Ite-$n_Ger_Des),2,11),2,76 ).
		  	    ' |'.
		  	    $sPulaLinha.
		  	    '';
		  }
          $sTxt_Rel .= STR_REPEAT("=", 80).$sPulaLinha;
	   //
	   // ** Ficha Kardex **
	   } ElseIf ($nFil_TipLst==2 || $nFil_TipLst == 5 || $nFil_TipLst==6 ) {
		  //
	      $sSQLRequest = // Script SQL
             "SELECT est.*, ".
			        "etg.ETG_IDN_ETG, etg.ETG_NFISCAL, etg.ETG_NFSERIE, etg.ETG_COD_FOR, etg.ETG_IDN_SUC, etg.ETG_IDN_ANT, ".
					"ftg.FAT_TIP_LOC, ftg.FAT_SQCOMAN, ftg.FAT_NUM_MES, ftg.FAT_CLIENTE, ftg.FAT_NOMCLIE, ".
			        "fnc.FUN_APELID, fnc.FUN_NOMECP ".
             "FROM est_movimento AS est ".
		     "LEFT JOIN cad_produto        AS ite ON ite.ITE_CODIGOI = est.ETM_CODITE  ".
		     "LEFT JOIN cad_grupo_produtos AS grp ON grp.GRU_CODIGO  = ite.ITE_COD_GRU ".
             "LEFT JOIN cad_funcionario    AS fnc ON fnc.FUN_CODIGO  = est.ETM_FUNINC  ".
             "LEFT JOIN fat_item           AS fti ON fti.FAT_CODIGOI = est.ETM_FATITM  ".
             "LEFT JOIN fat_geral          AS ftg ON ftg.FAT_CODIGOI = fti.FAT_CFATGER ".
             "LEFT JOIN est_entrada_itens  AS eti ON eti.ETD_IDN_ETD = est.ETM_IDNETD  ".
             "LEFT JOIN est_entrada_geral  AS etg ON etg.ETG_IDN_ETG = eti.ETD_IDN_ETG ".
             "WHERE ETM_CODEMP=".$nFil_CodEmp.
			 ( $nFil_CodGru>0  ? " AND ITE_COD_GRU=".$nFil_CodGru : "").
			 ( $nFil_Cod_Pro>0 ? " AND ETM_CODITE=".$nFil_Cod_Pro : "").
			 ( ( $nFil_TipLst == 5 ) || ( $nFil_TipLst == 6 ) ? " AND ETM_FATITM<=0" : "").
		     ( ($d_Fil_DataIni>0 OR $d_Fil_DataFim>0) ?
			    " AND (".
             //      Documento de entrada    ou   Ajuste de estoque    : Data real
                "((( ETM_IDNETD>0          ) OR (ETM_IDNETD=0 AND ETM_FATITM=0) ) AND ".
				( $d_Fil_DataIni>0 ? "ETM_DTAMOV>='".DATE('Y-m-d',$d_Fil_DataIni)."'"          : "" ).
				( $d_Fil_DataIni>0 && $d_Fil_DataFim>0 ? " AND " : "").
				( $d_Fil_DataFim>0 ? "ETM_DTAMOV<='".DATE('Y-m-d',$d_Fil_DataFim)." 23:59:59'" : "" ).
				") OR ".
             //    Vendas                                                    : Data ficticia
                "(ETM_FATITM>0 AND ".
				( $d_Fil_DataIni>0 ? "ETM_DTAFIC>='".DATE('Y-m-d',$d_Fil_DataIni)."'"          : "" ).
				( $d_Fil_DataIni>0 && $d_Fil_DataFim>0 ? " AND " : "").
				( $d_Fil_DataFim>0 ? "ETM_DTAFIC<='".DATE('Y-m-d',$d_Fil_DataFim)."'"          : "" ).
				")) "
			 : "").
             " ORDER BY ITE_COD_GRU, ITE_CODIGOI, ETM_DTAMOV".
			 ";";
	      //
		  $RowsT = MYSQL_QUERY( $sSQLRequest ) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	      $aMovimentos = ARRAY();
	      While ( $RowT = MYSQL_FETCH_ARRAY($RowsT, MYSQL_ASSOC) ) {
	         $aMovimentos[] = $RowT;
	      }
          $aMovimentos[] = [];
		  // Mudar configuração da fonte de letra do relatório
	      $s_FontRel = "font-size:11px; font-family:Courier New,Courier,mono;";
		  // Cabeçalho
	      $sTxt_Rel .=
             //AlinhaStr($sEmpresaFan,1,120).$sPulaLinha.
			 //AlinhaStr("** FICHA KARDEX **",1,120).$sPulaLinha.
             //AlinhaStr('Empresa.....: '.$aCad_EmpresaC[$nFil_CodEmp]['EMP_RAZAOS'],0,80).$sPulaLinha.
             //AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,60).
		     //AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,60).$sPulaLinha.
			 AlinhaStr('Empresa.....: '.$Dados_Empresa['EMP_FANTAS'],0,80).$sPulaLinha.
			 ( ($nFil_TipLst == 5) || ($nFil_TipLst == 6) ?
			    ( $nFil_TipLst == 5 ?
				AlinhaStr('Relatorio...: AJUSTE DE ESTOQUE',0,80).$sPulaLinha
				:
				AlinhaStr('Relatorio...: BALANÇO',0,80).$sPulaLinha
				)
			 :
			    AlinhaStr('Relatorio...: FICHA KARDEX',0,80).$sPulaLinha
			 ).
			 AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,40).
		     AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,80).$sPulaLinha.
			 'Periodo.....: '.$sPeriodo.$sPulaLinha.
			 ( $nFil_CodFor>0 ?
	         "Fornecedor..: ".Str_Zero($nFil_CodFor,8).' - '.$aCad_FornecedorC[$nFil_CodFor]['FOR_FANTAS'].$sPulaLinha : "").
			 ( $nFil_Cod_Pro>0 ?
	         "Produto.....: ".Str_Zero($aCad_ProdutoC[$nFil_Cod_Pro]['ITE_CODIGOL'],4).' - '.$aCad_ProdutoC[$nFil_Cod_Pro]['ITE_DESCRIC'].$sPulaLinha : "").
			 ( $nFil_CodGru>0 ?
	         "Grupo.......: ".Str_Zero($nFil_CodGru,3).' - '.$aCad_PrGrupoC[$nFil_CodGru]['GRU_DESCRI'].$sPulaLinha : "").
		     STR_REPEAT("=", 120).$sPulaLinha.
			 "";
		  // Itens do relatório
		  $nAtual_Grupo   = 0;
		  $nAtual_Produto = 0;
          //
          $aTotal_Produto = [];
          //
		  ForEach ( $aMovimentos as $nIndice=>$aMovimento ) {
			 $aProduto    = @$aCad_ProdutoC[$aMovimento['ETM_CODITE']];
			 $aGrupo      = @$aCad_PrGrupoC[@$aProduto['ITE_COD_GRU']];
			 $aFornecedor = @$aCad_FornecedorC[$aMovimento['ETG_COD_FOR']];
			 $bHist = True;
			 //
			 $bMudouGru = $nAtual_Grupo<>$aGrupo['GRU_CODIGO'];
			 $bMudouPro = $nAtual_Produto<>$aProduto['ITE_CODIGOI'];
             //
             If ( ($bMudouGru || $bMudouPro) && (!EMPTY($aTotal_Produto)) ) {
                $sTxt_Rel .=
				  STR_REPEAT("-", 120).$sPulaLinha.
                  '|'.
                  AlinhaStr( 'TOTAIS DO PRODUTO:',2,83).' '.
                  '|'.
                  AlinhaStr( number_format(@$aTotal_Produto['ENTRADA']+0,3,',',''),2,10).
                  '|'.
                  AlinhaStr( number_format(@$aTotal_Produto['SAIDA'  ]+0,3,',',''),2,10).
                  '|'.
                  AlinhaStr( number_format(@$aTotal_Produto['SALDO'  ]+0,3,',',''),2,11).
                  '|'.
                  $sPulaLinha.
				  STR_REPEAT("=", 120).$sPulaLinha.
                  $sPulaLinha.
                  '';
                $aTotal_Produto = [];
                //
             } Else {
                If ( @$aMovimento['ETM_ENTSAI']+0 ) {    // (-) Saída
                  @$aTotal_Produto['SAIDA'  ] += @$aMovimento['ETM_QTDMOV']+0;
                } Else {                                 // (+) Entrada
                  @$aTotal_Produto['ENTRADA'] += @$aMovimento['ETM_QTDMOV']+0;
                }
                $aTotal_Produto['SALDO'] = @$aMovimento['ETM_SALDOC']+0;
                //
             }
			 //
			 If ( (0+@$aGrupo['GRU_CODIGO'])==0 Or (0+@$aProduto['ITE_CODIGOI'])==0 ) {
			    CONTINUE;
			 }
             // filtro só balanço
			 If ( ($nFil_TipLst==6) || ($nFil_TipLst==5) ) {
                If ( $nFil_TipLst==6) {
             	  If ( ! ($aMovimento['ETM_BALEFE']) ) { 
				      CONTINUE;
				   }
			    } Else {
				   If (  $aMovimento['ETM_BALEFE'] ) { 
				      CONTINUE;
				   }
				}
			}
			 // Grupo
			 If ( $bMudouGru ) {        // Próximo grupo
			    If ( $nFil_CodGru==0 ) {
	               $sTxt_Rel .=
				      ( $nAtual_Grupo>0 ? STR_REPEAT("=", 120).$sPulaLinha : "").
                      $sPulaLinha.
				      " ** Grupo: ".Str_Zero($aGrupo['GRU_CODIGO'],3)." - ".$aGrupo['GRU_DESCRI'].
                      $sPulaLinha.
                      $sPulaLinha;
				}
				//
			    $nAtual_Grupo = $aGrupo['GRU_CODIGO'];
		     }
			 // Produto
			 If ( $bMudouPro ) {   // Próximo produto
			    $nEst_Saldo_Ini = $aMovimento['ETM_SALDOC'];
				If ( $aMovimento['ETM_ENTSAI'] ) { // Saida
			       $nEst_Saldo_Ini += $aMovimento['ETM_QTDMOV'];
				} Else {                           // Entrada
			       $nEst_Saldo_Ini -= $aMovimento['ETM_QTDMOV'];
				}
				//
                $sTxt_Rel .=
				   ( ($nAtual_Produto>0 && !$bMudouGru) ? $sPulaLinha.STR_REPEAT("=", 120).$sPulaLinha : "").
                   "|   ".Str_Zero($aProduto['ITE_CODIGOL'],4)." - ".AlinhaStr($aProduto['ITE_DESCRIC'],0,69)."| ".  // Descrição do produto
                   $aProduto['ITE_SIG_UNIDADE']." | ".                                                               // Unidade
                   "Saldo Inicial: ".AlinhaStr(NUMBER_FORMAT($nEst_Saldo_Ini, 3, ',',''),2,17). "|".                 // Saldo inicial
				   $sPulaLinha.
				   STR_REPEAT("-", 120).$sPulaLinha.
		         //          1         2         3         4         5         6         7         8         9        10        11        12
		         //0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
		           "|Cod.Mov.|   Data   |    Tipo    | Historico                             | Operador  | Entrada  |  Saida   |   Saldo   |".$sPulaLinha.
				   STR_REPEAT(".", 120).
                   $sPulaLinha.
				   "";
				//
                $nAtual_Produto = $aProduto['ITE_CODIGOI'];
		     }
			 // Tipo do movimento
			 $sTipo_Movimento = '';
			 $bMostrarHistori = True;
			 
			 If ($nFil_TipLst == 2) {
			 
				 If ( $aMovimento['ETM_FATITM']>0 ) {       // Faturamento
		            $bMostrarHistori = False;
				    If ( $aMovimento['ETM_ENTSAI'] ) {          // Venda
					   $sTipo_Movimento = 'Venda';
					} Else {                                    // Cancelamento (Estorno)
					   $sTipo_Movimento = 'Can. Venda';
					}
				 } ElseIf ( $aMovimento['ETM_IDNETD']>0 ) { // Documento de entrada
		            $bMostrarHistori = False;
				    If ( $aMovimento['ETM_ENTSAI'] ) {          // Estorno
					   If ( $aMovimento['ETG_IDN_SUC']>0 ) {    // Alteração de documento
					      $sTipo_Movimento = 'Doc Alterado';
					   } Else {                                 // Cancelamento
					      $sTipo_Movimento = 'Can. Entrada';
					   }
					} Else {                                    // Entrada no estoque
					   If ( $aMovimento['ETG_IDN_SUC']>0 ) {    // Alteração de documento
					      $sTipo_Movimento = 'Doc Alterado';
					   } Else {                                 // Entrada
					      $sTipo_Movimento = 'Entrada';
					   }
					}
				 } ElseIf ( $aMovimento['ETM_BALEFE'] ) {   // Balanço de estoque
					$sTipo_Movimento = 'Balanco';
				 } Else {                                   // Ajuste de estoque
				    If ( $aMovimento['ETM_ENTSAI'] ) {          // Saida
					   $sTipo_Movimento = 'Ajuste sai.';
					} Else {                                    // Entrada
					   $bHist = False;				      
					   
					   $sTipo_Movimento = 'Ajuste ent.';
					   //$sTipo_Movimento = 'Bal.Efetivar';
					}
				 }
			 //ajuste de estoque
			 } Else {
               

			   If ( $aMovimento['ETM_BALEFE'] ) {   // Balanço de estoque
				   $sTipo_Movimento = 'Balanco';
				} Else {
				   If ( $aMovimento['ETM_ENTSAI'] ) {          // Saida
		              $sTipo_Movimento = 'Ajuste sai.';
			       } Else {                                    // Entrada
                      
					  $sTipo_Movimento = 'Ajuste ent.';
					  //$sTipo_Movimento = 'Bal.Efetivar';
			       }
				}
			 }	 
		     // Relatório
             $sTxt_Rel .=
			  ( $nFil_TipLst == 2 ?
                "|".Str_Zero($aMovimento['ETM_SEQUEN'],8).                                                     // Sequencia interna
				( $aMovimento['ETM_FATITM']>0 ?
                  "|".ConvertDataUSBR($aMovimento['ETM_DTAFIC'])                                               // Data Ficticia
				:
                  "|".ConvertDataUSBR($aMovimento['ETM_DTAMOV'])                                               // Data Real
				).  
				"|".AlinhaStr($sTipo_Movimento,0,12).                                                          // Tipo do movimento
				"|".
				// Caso somente ajuste e balanço
				( ($bMostrarHistori && !EMPTY($aMovimento['ETM_HISTOR'])) ?
				AlinhaStr($aMovimento['ETM_HISTOR'],0,39).                                                     // Histórico
				"|"
				: 
				   (  $aMovimento['ETM_BALEFE'] ? 
				      AlinhaStr('                                       ',0,39).                                                     // Histórico
				      "|"
					:
                    	(  ! $bHist ?
						   AlinhaStr('                                       ',0,39).                                                     // Histórico
				           "|"
						 :
                         "")						 
				   )
				).
				// Caso de documento de entrada
				( $aMovimento['ETM_IDNETD']>0 ?
				//"| Ctr:".Str_Zero($aMovimento['ETG_IDN_ETG'],7)." ".                                         // Numero de controle
				"Doc.:".AlinhaStr($aMovimento['ETG_NFISCAL']."-".$aMovimento['ETG_NFSERIE'],0,9).",".          // Numero e série da nota fiscal
				"For.:".Str_Zero($aMovimento['ETG_COD_FOR'],4)."-".                                            // Fornecedor
				        AlinhaStr($aFornecedor['FOR_FANTAS'],0,14).
				"|" : "").
				// Caso de faturamento
				( $aMovimento['ETM_FATITM']>0 ?
				     AlinhaStr(
				        ($aMovimento['FAT_TIP_LOC']==0 ?    // Tipo: Local (Mesa)
						  "Mesa ".Str_Zero($aMovimento['FAT_NUM_MES'],4).
						  ", Comanda ".Str_Zero($aMovimento['FAT_SQCOMAN'],6)
						: "").
				        ($aMovimento['FAT_TIP_LOC']==1 ?    // Tipo: Balcão
						  "Balcão, Nr ".Str_Zero($aMovimento['FAT_SQCOMAN'],6)
						: "").
				        ($aMovimento['FAT_TIP_LOC']==2 ?    // Tipo: Disk entrega
						  "Disk entrega, Nr ".Str_Zero($aMovimento['FAT_SQCOMAN'],6)
						: "").
				        ($aMovimento['FAT_TIP_LOC']==3 ?    // Tipo: Comanda
						  "Commanda ".Str_Zero($aMovimento['FAT_SQCOMAN'],6)
						: "")
				    ,0,39).
				"|" : "").
				AlinhaStr($aMovimento['FUN_APELID'].'-'.$aMovimento['FUN_NOMECP'],0,11).                       // Operador
				//
				"|".AlinhaStr((!$aMovimento['ETM_ENTSAI'] ? NUMBER_FORMAT($aMovimento['ETM_QTDMOV'], 3, ',','') : ""),2,10).        // Entrada
				"|".AlinhaStr(( $aMovimento['ETM_ENTSAI'] ? NUMBER_FORMAT($aMovimento['ETM_QTDMOV'], 3, ',','') : ""),2,10).        // Saida
				"|".AlinhaStr( NUMBER_FORMAT($aMovimento['ETM_SALDOC'], 3, ',',''),2,11).                                           // Saldo calculado
				"|"
			  :
				 "|".Str_Zero($aMovimento['ETM_SEQUEN'],8).                                                     // Sequencia interna
				 ( $aMovimento['ETM_FATITM']>0 ?
                    "|".ConvertDataUSBR($aMovimento['ETM_DTAFIC'])                                               // Data Ficticia
				 :
                    "|".ConvertDataUSBR($aMovimento['ETM_DTAMOV'])                                               // Data Real
				  ).  
				  "|".AlinhaStr($sTipo_Movimento,0,12).                                                          // Tipo do movimento
				  "|".
				// Caso somente ajuste 
				( ($bMostrarHistori && !EMPTY($aMovimento['ETM_HISTOR'])) ?
				   AlinhaStr($aMovimento['ETM_HISTOR'],0,39).                                                     // Histórico
				   "|"
				   : 
				   AlinhaStr('                                       ',0,39).                                                     // Histórico
				   "|"
				   ).
				   
				   AlinhaStr($aMovimento['FUN_APELID'].'-'.$aMovimento['FUN_NOMECP'],0,11).                       // Operador
				   //
				   "|".AlinhaStr((!$aMovimento['ETM_ENTSAI'] ? NUMBER_FORMAT($aMovimento['ETM_QTDMOV'], 3, ',','') : ""),2,10).        // Entrada
				   "|".AlinhaStr(( $aMovimento['ETM_ENTSAI'] ? NUMBER_FORMAT($aMovimento['ETM_QTDMOV'], 3, ',','') : ""),2,10).        // Saida
				   "|".AlinhaStr( NUMBER_FORMAT($aMovimento['ETM_SALDOC'], 3, ',',''),2,11).                                           // Saldo calculado
				   "|"
			  ).
			  $sPulaLinha;
			 //
		     $n_Reg_Qtd++;
		  }
          $sTxt_Rel .= STR_REPEAT("=", 120).$sPulaLinha;
		  //
          //
          /*
          Alteração 7739 - 22/11/2019
          Detalhar as entradas e saídas que tipo ela é (unidade,grama,litro,ml ou o que for) e no fim do relatório mostrar o
          total de Entradas e Saídas junto a posição atual do estoque de cada produto
          Anotações de desenvolvimento:
            Criar matriz somando os totais dos produtos coloca o codigo do produto como indice
              Ex: $aTotais[$nIte_Codigo]['Entrada'] , $aTotais[$nIte_Codigo]['Saida'] , ....
          */
          //
          //
	   //
	   // ** Ficha técnica de produção
	   } ElseIf ($nFil_TipLst==3) {
		  //
	      $sSQLRequest = // Script SQL
		     "SELECT fpg.*, fpi.*,".
			        "pr1.ITE_CODIGOI     AS ITE1_CODIGOI,".
			        "pr1.ITE_CODIGOL     AS ITE1_CODIGOL,".
			        "pr1.ITE_DESCRIC     AS ITE1_DESCRIC,".
					"gr1.GRU_ACTSAB      AS GRU1_ACT_SAB,".
			        "pr2.ITE_CODIGOI     AS ITE2_CODIGOI,".
			        "pr2.ITE_CODIGOL     AS ITE2_CODIGOL,".
			        "pr2.ITE_DESCRIC     AS ITE2_DESCRIC,".
					"pr2.ITE_SIG_UNIDADE AS ITE2_UNIDADE,".
					"pr2.ITE_PRE_CUSTO_N AS ITE2_PRE_CUS ". //Murilo Augusto Hanisch trocado campo ITE_PRE_CUSTO_E para ITE_PRE_CUSTO_N 12/08/2019
			 "FROM cad_ficha_producao_geral      AS fpg ".
			 "LEFT JOIN cad_ficha_producao_itens AS fpi ON fpi.FPI_COD_FPG=fpg.FPG_COD_ITE ".
			 "LEFT JOIN cad_produto              AS pr1 ON pr1.ITE_CODIGOI=fpg.FPG_COD_ITE ".
			 "LEFT JOIN cad_grupo_produtos       AS gr1 ON gr1.GRU_CODIGO =pr1.ITE_COD_GRU ".
			 "LEFT JOIN cad_produto              AS pr2 ON pr2.ITE_CODIGOI=fpi.FPI_COD_ITE ".
			 ( $nFil_Cod_Pro>0 ? " WHERE fpg.FPG_COD_ITE=".$nFil_Cod_Pro." " : "").
		     "ORDER BY fpg.FPG_COD_ITE ASC";
	      //
		  $RowsT = MYSQL_QUERY( $sSQLRequest ) or die(MYSQL_ERROR().'<br>'.$sSQLRequest);
	      $aRegs = ARRAY();
	      While ( $RowT = MYSQL_FETCH_ARRAY($RowsT, MYSQL_ASSOC) ) {
	         $aRegs[] = $RowT;
	      }
		  // Mudar configuração da fonte de letra do relatório
	      $s_FontRel = "font-size:11px; font-family:Courier New,Courier,mono;";
		  // Cabeçalho
	      $sTxt_Rel .=
             //AlinhaStr($sEmpresaFan,1,120).$sPulaLinha.
			 //AlinhaStr("** FICHA TECNICA DE PRODUCAO **",1,120).$sPulaLinha.
             //AlinhaStr('Empresa.....: '.$aCad_EmpresaC[$nFil_CodEmp]['EMP_RAZAOS'],0,80).$sPulaLinha.
             //AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,60).
		     //AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,60).$sPulaLinha.
			 AlinhaStr('Empresa.....: '.$Dados_Empresa['EMP_FANTAS'],0,80).$sPulaLinha.
		     AlinhaStr('Relatorio...: FICHA TECNICA DE PRODUCAO',0,80).$sPulaLinha.
		     AlinhaStr('Emissao.....: '.DATE('d/m/Y H:i:s'),0,40).
		     AlinhaStr('Operador....: '.$R_CadFuncionario->FUN_NOMECP,2,40).$sPulaLinha.
		  
			 
			 
			 
			 ( $nFil_Cod_Pro>0 ?
	         "Produto.....: ".Str_Zero($aCad_ProdutoC[$nFil_Cod_Pro]['ITE_CODIGOL'],4).' - '.$aCad_ProdutoC[$nFil_Cod_Pro]['ITE_DESCRIC'].$sPulaLinha : "").
		     STR_REPEAT("=", 120).$sPulaLinha.
			 "";
		  // Processamento dos dados
		  $nAtual_Produto1 = 0;
		  ForEach ( $aRegs as $nIndice=>$aReg ) {
		     // imprimir produto de produção interna
		     If ( $nAtual_Produto1<>$aReg['ITE1_CODIGOI'] ) {
	            $sTxt_Rel .=
				   ( $nFil_Cod_Pro==0 ?
				     ( $nAtual_Produto1>0 ? STR_REPEAT("=", 120).$sPulaLinha : "").
                     $sPulaLinha.
				     " ** Produto: ".$aReg['ITE1_CODIGOL']." - ".$aReg['ITE1_DESCRIC'].
                     $sPulaLinha.
                     $sPulaLinha
				   : '').
				   STR_REPEAT("-", 120).$sPulaLinha.
		           //          1         2         3         4         5         6         7         8         9        10        11        12
		           //0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
				   ( $aReg['GRU1_ACT_SAB'] ?
		             "| Codigo |   Descrição                           |Un|   Custo  |_____PRE1____|_____PRE2____|_____PRE3____|_____PRE4____|"
				   :
		             "| Código |   Descrição                                                       |Un|   Custo  |_____PREN____|_____PREM____|"
				   ).$sPulaLinha.
				   STR_REPEAT(".", 120).
                   $sPulaLinha.
				   "";
				$sTxt_Rel = STR_REPLACE('_____PRE1____', AlinhaStr('Qtd '.SQLVarConfig('DESCRI_PROPRECO1'),3,13),$sTxt_Rel);
				$sTxt_Rel = STR_REPLACE('_____PRE2____', AlinhaStr('Qtd '.SQLVarConfig('DESCRI_PROPRECO2'),3,13),$sTxt_Rel);
				$sTxt_Rel = STR_REPLACE('_____PRE3____', AlinhaStr('Qtd '.SQLVarConfig('DESCRI_PROPRECO3'),3,13),$sTxt_Rel);
				$sTxt_Rel = STR_REPLACE('_____PRE4____', AlinhaStr('Qtd '.SQLVarConfig('DESCRI_PROPRECO4'),3,13),$sTxt_Rel);
				$sTxt_Rel = STR_REPLACE('_____PREN____', AlinhaStr('Qtd '.SQLVarConfig('DESCRI_PROPRECON'),3,13),$sTxt_Rel);
				$sTxt_Rel = STR_REPLACE('_____PREM____', AlinhaStr('Qtd '.SQLVarConfig('DESCRI_PROPRECOM'),3,13),$sTxt_Rel);
				// Limpar variáveis de totais de custo
				$nTotal_Custo_1 = 0;
				$nTotal_Custo_2 = 0;
				$nTotal_Custo_3 = 0;
				$nTotal_Custo_4 = 0;
				$nTotal_Custo_N = 0;
				$nTotal_Custo_M = 0;
				//
			 }
		     $nAtual_Produto1 = $aReg['ITE1_CODIGOI'];
			 // Matéria prima da ficha
			 If ( $aReg['GRU1_ACT_SAB'] ) {  // Vários sabores
                $sTxt_Rel .=
			       "|". AlinhaStr($aReg['ITE2_CODIGOL'],3,8).
                   "| ".AlinhaStr($aReg['ITE2_DESCRIC'],0,38).
                   "|" .AlinhaStr($aReg['ITE2_UNIDADE'],0,2).
                   "|" .AlinhaStr( FormatoMoeda( $aReg['ITE2_PRE_CUS']),2,9)." ".
                   "|" .AlinhaStr( NUMBER_FORMAT($aReg['FPI_QUANT_1'],3,',','') ,2,12 )." ".
                   "|" .AlinhaStr( NUMBER_FORMAT($aReg['FPI_QUANT_2'],3,',','') ,2,12 )." ".
                   "|" .AlinhaStr( NUMBER_FORMAT($aReg['FPI_QUANT_3'],3,',','') ,2,12 )." ".
                   "|" .AlinhaStr( NUMBER_FORMAT($aReg['FPI_QUANT_4'],3,',','') ,2,12 )." ".
                   "|" .
			       $sPulaLinha;
			 } Else {                        // Item de meia e inteira
                $sTxt_Rel .=
			       "|". AlinhaStr($aReg['ITE2_CODIGOL'],3,8).
                   "| ".AlinhaStr($aReg['ITE2_DESCRIC'],0,66).
                   "|" .AlinhaStr($aReg['ITE2_UNIDADE'],0,2).
                   "|" .AlinhaStr( FormatoMoeda( $aReg['ITE2_PRE_CUS']),2,9)." ".
                   "|" .AlinhaStr( NUMBER_FORMAT($aReg['FPI_QUANT_N'],3,',','') ,2,12 )." ".
                   "|" .AlinhaStr( NUMBER_FORMAT($aReg['FPI_QUANT_M'],3,',','') ,2,12 )." ".
                   "|" .
			       $sPulaLinha;
			 }
			 // Calculo dos custos
			 $nTotal_Custo_1 += $aReg['ITE2_PRE_CUS'] * $aReg['FPI_QUANT_1'];
			 $nTotal_Custo_2 += $aReg['ITE2_PRE_CUS'] * $aReg['FPI_QUANT_2'];
			 $nTotal_Custo_3 += $aReg['ITE2_PRE_CUS'] * $aReg['FPI_QUANT_3'];
			 $nTotal_Custo_4 += $aReg['ITE2_PRE_CUS'] * $aReg['FPI_QUANT_4'];
			 $nTotal_Custo_N += $aReg['ITE2_PRE_CUS'] * $aReg['FPI_QUANT_N'];
			 $nTotal_Custo_M += $aReg['ITE2_PRE_CUS'] * $aReg['FPI_QUANT_M'];
			 // Final da ficha do produto
			 If ( (!ISSET($aRegs[$nIndice+1])) Or $aReg['ITE1_CODIGOI']<>$aRegs[$nIndice+1]['ITE1_CODIGOI'] ) {
                $sTxt_Rel .= 
				   STR_REPEAT(".", 120).
				   $sPulaLinha.
				   ( $aReg['GRU1_ACT_SAB'] ?
				       "Totais de custo................................................".
					    ":".AlinhaStr("R$ ".FormatoMoeda($nTotal_Custo_1),2,12).
				       " |".AlinhaStr("R$ ".FormatoMoeda($nTotal_Custo_2),2,12).
				       " |".AlinhaStr("R$ ".FormatoMoeda($nTotal_Custo_3),2,12).
				       " |".AlinhaStr("R$ ".FormatoMoeda($nTotal_Custo_4),2,12)." |"
				   :
				       "Totais de custo............................................................................".
					    ":".AlinhaStr("R$ ".FormatoMoeda($nTotal_Custo_N),2,12).
				       " |".AlinhaStr("R$ ".FormatoMoeda($nTotal_Custo_M),2,12)." |"
				   ).
				   $sPulaLinha.
				   ( EMPTY($aReg['FPG_INSTRUC']) ? '' :
				     "Instruções de produção: ".$sPulaLinha.
				     $aReg['FPG_INSTRUC'].$sPulaLinha
				   ).
				   $sPulaLinha;
			 }
			 //
		     $n_Reg_Qtd++;
		  }
		  //
       }
	   //
	   // Rodapé do relatório
	   If ( $n_Reg_Qtd>0 ) {
          $sTxt_Rel .=
		     AlinhaStr('Registros impressos: '.Str_Zero($n_Reg_Qtd,6),0).
			 $sPulaLinha.
             $sPulaLinha.
             $sPulaLinha;
	   } Else {
	      $aV_Sessao['TXT_REL'] = '';
          $sRet_Javs .= 
		     "parent.sIdHasFocus='in_RelEst_DatIni';".
             Info_Evento('Não há movimento para gerar este relatório.',0).
             "setTimeout( function () { ".
	            "parent.document.forms.fmPRelEst_R.acao.value='FECHAR'; ".
                "parent.document.forms.fmPRelEst_R.submit();".
			 "}, 500);".
			 "";
       }	
	   //
	   $sTxt_Rel = RemoveAcentos($sTxt_Rel);
	   $aV_Sessao['TXT_REL'] = $sTxt_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_Pdf = $sHTML_Rel;
	  
      
	   $sHTML_Pdf = 
	      '<div id="divSD_Impressao" style="width:854px;">'.
	         "<table cellspacing='0' cellpadding='0'>".
                "<tr><td align='left' style=".$s_FontRel.">".
			       $sHTML_Pdf.
			    "</td></tr>".
		     "</table>".
		  '</div>'.
		  "";
	  
       $aSessao['TXT_PDF'] = $sHTML_Pdf;
	  
       $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="'.$s_FontRel.'">'.
            $sHTML_Rel.
           '</td></tr></table>'.
          '</div>';
	   //
	   
       $sRet_Javs .= 
          
		  "parent.document.getElementById('dv_RelEstR_Txt').innerHTML = ".JAVA_CharCode($sHTML_Rel).";".
          "";
	   //
	   $aSessao[$sNomeAcesso.'_S'] = $aV_Sessao;
	   //
	//
    // IMPRIMIR Relatório pronto
    } ElseIf ( $sAcao=="IMP" ) {
       $sRet_Javs .= "parent.JanEspera(false); ";
	   $aV_Sessao = @$aSessao[$sNomeAcesso.'_S'];
       $sCfg_ClpExp2 = SQLVarConfig('GARCOM_CLIPPER_ARQ_EXPORTA2');
       If ( STRLEN($sCfg_ClpExp2)>3 ) {
	      $sTxt_Cupom = @$aV_Sessao['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").'_EST.TMP';
             $sIP_NomeArq = STR_REPLACE(".","_",ObterIPdoCliente());
             $sNomArqExpR = $sCfg_ClpExp2.$R_CadFuncionario->FUN_CODIGO.'_'.DATE("d-m-Y_h-i-s").'_EST_'.$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;
       }
    
	} ElseIf ( $sAcao=="PDF" ) {
	  $sRet_Javs .= "parent.JanEspera(false); ";
	 
	  $sTxt_RelPdf = @$aSessao['TXT_PDF'];
	  $sIP_NomeArq = STR_REPLACE(".","_",ObterIPdoCliente());
	  If (STRLEN($sTxt_RelPdf)>0) {
	     
		 /*ini_set('magic_quotes_runtime', 0); 
         
         //
         
         //
         $Gera_PDF = new DOMPDF();
         $base_path = $_SERVER['DOCUMENT_ROOT'];
         $Gera_PDF->load_html($sTxt_RelPdf);
         
      	if ( isset($base_path) ) {
		    $Gera_PDF->set_base_path($base_path);
         }
         //$papel = array(0,0,595.28,841.89);  //A4
         //$papel = array(0,0,792.00, 1224.00);
         
		 //$Gera_PDF->set_paper( 'a4', 'portrait') // RETRATO
         $Gera_PDF->set_paper( 'a4', 'landscape');  //PAISAGEM
		 
         $Gera_PDF->render();
         $sRetornoPDF = $Gera_PDF->output();
         //
         HEADER("Content-Type: application/pdf");
         HEADER("Content-Length: ".STRLEN($sRetornoPDF));
         HEADER("Content-Disposition: attachment; filename=".$R_CadFuncionario->FUN_CODIGO.'_'.DATE("d-m-Y_h-i-s").'_EST_'.$sIP_NomeArq.".pdf");
         */
         //ECHO $sRetornoPDF;  
          //ECHO $sTxt_RelPdf;    
         //EXIT;
	  
	  } Else {    // Sem conteudo para imprimir
         $sRet_Javs .=
            Info_Evento('Não há conteúdo para salvar o PDF').
            '';
      }
    //
	// >> Gerar texto para download
    } ElseIf ( $sAcao=="GERAR_TEXTO" ) {
	   $sArquivo = "Relatorio_Estoque_".DATE("d-m-Y_H-i-s").".txt";
       $sTxt_Cupom = @$aV_Sessao['TXT_REL'];
	   HEADER("Content-Type: text/plain");
	   HEADER("Content-Length: ".STRLEN($sTxt_Cupom));
	   HEADER("Content-Disposition: attachment; filename=".$sArquivo);
	   ECHO $sTxt_Cupom;
	   EXIT;
	   //
	//
    // FECHAR Janela
    } ElseIf ( $sAcao=="FECHAR" ) {
	   UNSET( $aSessao[$sNomeAcesso.'_S'] );
	   UNSET( $aSessao['TXT_PDF']);
       $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_RelEst_DatIni').focus();".
		   "";
    //
    // Janela
	} Else {
	   $aV_Sessao = ARRAY();
	   $aV_Sessao['Fil_TipLst'] = (@$_POST['TipLst']+0);      // Tipo de listagem: 0=Contagem de estoque 1=Entrada no estoque
	   $aV_Sessao['Fil_CodFor'] = (@$_POST['CodFor']+0);      // Codigo do fornecedor
	   $aV_Sessao['Fil_CodGru'] = (@$_POST['CodGru']+0);      // Codigo do grupo
	   $aV_Sessao['Fil_CodEmp'] = (@$_POST['CodEmp']+0);      // Codigo da empresa
	   $aV_Sessao['Fil_Unidad'] = (@$_POST['Unidad'])  ;      // Sigla unitária
	   $aV_Sessao['Fil_SalTip'] = (@$_POST['SalTip']+0);      // Tipo do saldo 0=Todos, 1=Positivo, 2=Negativo
	   $aV_Sessao['Fil_Ordena'] = (@$_POST['Ordena']+0);      // Ordena: 0=Descrição,   1=Saldo
	   $aV_Sessao['Fil_Situac'] = (@$_POST['Situac']+0);      // Situação: 1=Ativo,  0=Inativo
	   $aV_Sessao['Fil_CCusto'] = (@$_POST['CCusto']+0);      // Calculo de custo: 0=Custo cadastrado, 1=Custo médio
	   // entrada no estoque
	   $aV_Sessao['Fil_DataIni'] = @$_REQUEST['Fil_DataIni'];          // Data inicial
	   $aV_Sessao['Fil_DataFim'] = @$_REQUEST['Fil_DataFim'];          // Data Final
	   $aV_Sessao['Fil_Cod_Fun'] = (@$_REQUEST['Cod_Fun']+0);          // Codigo do funcionário
	   $aV_Sessao['Fil_Cod_Pro'] = (@$_REQUEST['Cod_Pro']+0);          // Codigo do produto
	   $aV_Sessao['Fil_Efetiva'] = (@$_REQUEST['Efetiva']+0);          // 0-Nao Efetivados 1-Efetivados
	   $aSessao[$sNomeAcesso.'_S'] = $aV_Sessao;
	   //
	   $oJanelaPrinc->sJavKeyDown = "return Car_".$sNomeAcesso."2.Teclas_F(this,event);";
	   //
       // Tela HTML
       $sRet_TelaJ_HTML =
    	  $oJanelaPrinc->MontaJanHTML(True).
		  // Teclas
		  '<input id="in_RelEstV_Tecla" style="position:absolute; top:-600; left:-600; width:1px; height:1px;">'.
		  //
		  '<iframe name="VisEstR_Print"></iframe>'.
          '<form name="fmPRelEst_R" accept-charset="utf-8" method="post" action="./car_js.php" target="car_'.$sNomeAcesso.'3">'.
           '<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_RelEstR_Txt" style="width:100%; height:400px; 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 align="left">'.
           // HTML_Botao( 3, 'objRelEstR_BT_Abr',
			//   "parent.JanEspera(true, 'Imprimindo relatório... aguarde...');".
			//   "setTimeout( function () { ".
		   //      "document.forms.fmPRelEst_R.acao.value='IMP'; ".
           //      "document.forms.fmPRelEst_R.submit();".
		   //    "}, 500);"
           //    , 'Atalho (F9)','images/btimg_imp.png',130).		    
		   //'</td>'.
		   '<td width="170px" align="left">'.
               HTML_Botao( 3, 'objRelEstR_BT_Imp',  'Car_'.$sNomeAcesso.'2.processPrint();'
                            , 'Imprimir (F2)'   ,'images/btimg_imp.png',130).		    
		   '</td>'.
           //
		   '<td align="left">'.
              HTML_Botao( 3, 'objRelEstR_BT_Dwn',  'Car_'.$sNomeAcesso.'2.SalvarTexto();'
                           , 'Salvar (F9)'   ,'images/btimg_baixar_texto.png',100).		    
		   '</td>'.
           //
           '<td align="right">'.
            HTML_Botao( 3, 'objRelEstR_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_RelEstR_Txt').innerHTML;".
            "var Quadro = parent.frames['VisEstR_Print'];".
            "Quadro.window.location='about:blank';". 
			"Quadro.document.write('<html><head><title>Estoque</title></head><body>');".
			"Quadro.document.write(sdivElements);".
			"Quadro.document.write('</body></html>');".
			"Quadro.window.print();".
		  "}".
		  //
		  "function SalvarTexto() {".
	        "parent.document.forms.fmPRelEst_R.acao.value='GERAR_TEXTO';".
            "parent.document.forms.fmPRelEst_R.submit();".
		  "}".
		  //
	      "function Teclas_F( Objeto, Evento ) {".
             "vNumTecla = parent.Tecla_Apertada(Evento);".
             "if ( vNumTecla==120) { ".        //  ** [F9] **          // (Salvar em texto)
                 "setTimeout( parent.document.getElementById('objRelEstR_BT_Dwn').onclick , 50);".
			 "} else if ( vNumTecla==113) { ". //  ** [F2] **          // (Imprimir)
                 "setTimeout( parent.document.getElementById('objRelEstR_BT_Imp').onclick , 50);".
		     "} else if ( vNumTecla==116) { ". //  ** [F5] **     Não atualizar
			     //
		     "} else if ( vNumTecla==27) { ".  //  ** [ESC] **         // (SAIR)
                 "setTimeout( parent.document.getElementById('objRelEstR_BT_Fch').onclick , 50);".
			 "} else {".
			     "return true;".
			 "}".
			 "return false;".
          '}'.
		  //
	      "";
       // Java posterior
       $sRet_JavsPos .=
	     "parent.document.getElementById('in_RelEstV_Tecla').focus(); ".
	     "setTimeout( function () { ".
	        "parent.document.forms.fmPRelEst_R.acao.value='MONTAR';".
            "parent.document.forms.fmPRelEst_R.submit();".
		 "} , 300); ".
		 "";
	   //
	   //
	}
   //
}
//
?>