Autor Tópico: Subselect com Borda  (Lida 5191 vezes)

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Subselect com Borda
« Online: Maio 08, 2012, 10:30:15 am »
Tenho um Campo subselect no ReportPdf, funcionando, mas gostaria de formatar melhor a exibição dos dados, tal qual na sc_pdf_cell (largura, altura, "txt", borda, ln, "alinhamento", fill, link)
Na sc_pdf_print_sub_sel($cell_itens_id_servico[$NM_ind]) parece não disponibilizar essas configurações.

Tentei até combinar sc_pdf_cell com sc_pdf_print_sub_sel, mas a formatação ficou ruim. Alguma solução?

Se tiver que usar a classe fpdf alguém tem um exemplo de como dar um loop nos registros via SC (igual ao Subselect)?

Uso a ver.: 5.2.41

Obrigado!

Haroldo

  • Expert
  • *****
  • Mensagens: 6286
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Subselect com Borda
« Responder #1 Online: Maio 08, 2012, 01:08:55 pm »
usando apenas o sc para tal fica complicado fazer, mas se sair do sc e programar na unha pode desenvolver o relatório do jeito que desejar, veja:

http://iw.servehttp.com/sc/iw/app/ERP/vendasPedido_pdf/vendasPedido_pdf_teste.php
id do pedido selecione 1, pois este tem itens para preencher duas páginas.

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Re:Subselect com Borda
« Responder #2 Online: Maio 09, 2012, 09:09:57 am »
Obrigado pelo exemplo, mas não teria o código (parte dele)?
Gostaria de um exemplo de como acessar os dados via fpdf. Na internet tem muitos exemplos, mas não sei como acessar os dados se não for pelo SC.

Exemplo da Web
---------------------------------------------------------------
$pdf=new FPDF();
$pdf->Open();
//$pdf->AddPage();
$pdf->SetXY(10, 20);
$pdf->SetFont('Helvetica', 'B', 14);
$pdf->Cell(65, 5, 'Testando a biblioteca FPDF');
$pdf->SetFont('Helvetica', 'I', 14);
$pdf->Cell(0, 5, '(http://www.fpdf.org)');
$pdf->ln(); // pula 1 linha
$pdf->SetLineWidth(0.5);
$pdf->Line(10, 27, 200, 27);
$pdf->ln();
$pdf->SetFont('Courier', '', 10);
$pdf->SetLineWidth(0.2);
$pdf->MultiCell(0, 5, "Com essa biblioteca voce pode criar arquivos .PDF com facilidade permitindo dar um acabamento melhor aos seus trabalhos\nAssim você poderá ter um controle muito bom sobre a saída em texto dos seus programas.\nComo por exemplo colocar uma borda em torno dos seus textos.\nOu traçar uma linha como a que está logo acima.", 1, 1);
$pdf->ln(2);
$pdf->SetFont('Helvetica', '', 10);
$pdf->Cell(0, 5, 'Poderá variar fontes:', 0, 1);
$pdf->SetFont('Courier', '', 10);
$pdf->Cell(0, 5, 'Texto em Courier 10 padrão:', 0, 1);
$pdf->SetFont('Courier', 'B', 12);
$pdf->Cell(0, 5, 'Texto em Courier 12 negritado:', 0, 1);
$pdf->SetFont('Courier', 'BI', 14);
$pdf->Cell(0, 5, 'Texto em Courier 14 negritado e itálico:', 0, 1);
$pdf->ln(2);
$pdf->SetFont('Helvetica', '', 10);
$pdf->Cell(0, 5, 'Texto em Helvetica 10 padrão:', 0, 1);
$pdf->SetFont('Helvetica', 'B', 12);
$pdf->Cell(0, 5, 'Texto em Helvetica 12 negritado:', 0, 1);
$pdf->SetFont('Helvetica', 'BI', 14);
$pdf->Cell(0, 5, 'Texto em Helvetica 14 negritado e itálico:', 0, 1);
$pdf->ln();
$pdf->SetFont('Helvetica', '', 10);
$pdf->Cell(0, 5, 'Poderá trabalhar com alinhamentos:', 0, 1);
$pdf->Cell(0, 5, 'Alinhamento centralizado', 1, 1, 'C');
$pdf->Cell(0, 5, 'Alinhamento à esquerda', 1, 1, 'L');
$pdf->Cell(0, 5, 'Alinhamento à direita', 1, 1, 'R');
$pdf->MultiCell(60, 5, 'Ou até mesmo poderá trabalhar com alinhamento justificado.',1,1,'J');
$pdf->ln();
$pdf->Cell(70, 5, "Trabalhando com cores em RGB", 0, 0);
$pdf->SetTextColor(0, 0, 256);
$pdf->Cell(30, 5, "Azul", 0, 0);
$pdf->SetTextColor(0, 256, 0);
$pdf->Cell(30, 5, "Verde", 0, 0);
$pdf->SetTextColor(256, 0, 0);
$pdf->Cell(30, 5, "Vermelho", 0, 0);
$pdf->SetTextColor(256, 256, 0);
$pdf->Cell(30, 5, "Amarelo", 0, 1);
$pdf->ln(3);
$pdf->SetFillColor(200);
$pdf->SetTextColor(30, 30, 30);
$pdf->MultiCell(0, 10, "E para terminar esse capítulo colocamos esse texto em sombreado para você poder avaliar alguns dos recursos do FPDF.No próximo capítulo explicarei como expandir a classe para gerar relatórios .", 1, 'L', 1, 1);
sc_pdf_print({});
$pdf->Output();

Haroldo

  • Expert
  • *****
  • Mensagens: 6286
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Subselect com Borda
« Responder #3 Online: Maio 09, 2012, 10:41:27 am »
em layout/código acesse um metodo php.

$this->m_codigo().

Crie o metodo php m_codigo e nele coloque as funções da classe fpdf:

 $this->Pdf->SetXY($x,$y);
 $this->Pdf->Cell($w,$h,$txt,0,0,$align);
« Última modificação: Junho 29, 2012, 08:16:03 pm por Haroldo »

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Re:Subselect com Borda
« Responder #4 Online: Maio 09, 2012, 10:51:13 am »
Muito Obrigado. Vou tentar.
Também experimentei do modo abaixo e funcionou:

mysql_connect("localhost", "root", "xxxx") or
        die("Não pude conectar: " . mysql_error());
    mysql_select_db("sieve");

    $result = mysql_query("SELECT descricao_servico FROM cadastro_servicos");

    while ($row = mysql_fetch_array($result, MYSQL_NUM))
    {
       
        $tx =  'Descrição: '.$row[0];
       
        sc_pdf_multi_cell('0','5',$tx,'1','L');
        sc_pdf_ln(0);
    }

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Re:Subselect com Borda
« Responder #5 Online: Maio 09, 2012, 03:55:39 pm »
em layput/código acesse um metodo php.

$this->m_codigo().

Crie o metodo php m_codigo e nele coloque as funções da classe fpdf:

 $this->Pdf->SetXY($x,$y);
 $this->Pdf->Cell($w,$h,$txt,0,0,$align);

Não consegui usar dentro do método as macros do SC (sc_select, sc_lookup). Quando chamo o método em layput/código dá erro:
Você tem um exemplo?
Lembre-se, eu não quero apenas chamar os métodos do fpdf, mas sim dar um loop nos registros de um select, daí eu posso usar tanto as macros do SC (sc_pdf_print, sc_pdf_print,sc_pdf_multi_cell, etc) quanto do Fpdf.
Quando eu uso as macros do SC (sc_select, sc_lookup) num método e chamo no código dá erro.
No exemplo que dei:
---------------
mysql_connect("localhost", "root", "xxxx") or
        die("Não pude conectar: " . mysql_error());
    mysql_select_db("sieve");

    $result = mysql_query("SELECT descricao_servico FROM cadastro_servicos");

    while ($row = mysql_fetch_array($result, MYSQL_NUM))
    {
       
        $tx =  'Descrição: '.$row[0];
       
        sc_pdf_multi_cell('0','5',$tx,'1','L');
        sc_pdf_ln(0);
    }

-----------------
Funciona, o problema é ter que acessar a base, tabela e fazer o select. Gostaria de usar a conexão do SC.

Obrigado.

Haroldo

  • Expert
  • *****
  • Mensagens: 6286
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Subselect com Borda
« Responder #6 Online: Maio 09, 2012, 07:26:23 pm »
As macros do sc são apenas uma tradução das macros do fpdf,  sc_pdf_cell= $this->Pdf->Cell

Método: Codigo():
Código: [Selecionar]
$this->Pdf->AliasNbPages("@TotPag");
[maxlines]=28;
$PAGINA=1;
$LINHA=0;
$ITENS=0;
$PEDIDOID=[Pedido__Id];
sc_select(ds,
"SELECT ProdutoCodigo,Descricao,Quantidade,Unidade,PrecoUnitario"
        .",ROUND((1-(ValorItem/(Quantidade*PrecoUnitario)))*100.00,2),ValorItem"
." FROM pedido_itens"
." WHERE PedidoId = '$PEDIDOID'");
If (!Empty($ds)){
  while (!$ds->EOF){
     $LINHA++;
     $ITENS++;
     IF ($LINHA==1) {
       MontaPreImpresso($PAGINA);
       MontaCabecalho();
     }
     $LINHA=$LINHA+(MontaItem($ds->fields[0],$ds->fields[1],$ds->fields[2],$ds->fields[3],$ds->fields[4],$ds->fields[5],$ds->fields[6],$LINHA)); 
     IF ($LINHA>=[maxlines]) {
       IF ($PAGINA==1) MontaTotais();
       $PAGINA++;
       [maxlines]=38;
       PrintCell(05,290,'Pag '.$this->Pdf->PageNo().'/@TotPag',200,2,'C',"Arial,I,8");
       PrintCell(05,290,"Continua na proxima página-->",205,2,"R","Arial,I,7,90");
       IF ($ITENS<{total_itens}) $this->Pdf->AddPage();
       $LINHA=0;
     }
     $ds->MoveNext();
  }
  $ds->Close();
}
IF ($PAGINA==1 && $LINHA<[maxlines] ) MontaTotais();
PrintCell(05,290,'Pag '.$this->Pdf->PageNo().'/@TotPag',205,2,'C',"Arial,I,8");
     

Método:  PrintCell($x, $y, $txt, $w, $h, $align='L', $font='', $multcell='N')
Código: [Selecionar]
$align=($align=='0')?"L":$align;
$x=$x==0?$this->Pdf->GetX():$x;
$y=$y==0?$this->Pdf->GetY():$y;
$h=$h=='0'?1:$h;
If (!Empty($font)) {
  $font=explode(",",$font);
  $this->Pdf->SetFont($font[0],$font[1],$font[2]);
  IF (ISSET($font[3])) {
     $font[3]=explode(";",$font[3]);
     IF (!ISSET($font[3][1])) $font[3][1]=$font[3][0];
     IF (!ISSET($font[3][2])) $font[3][2]=$font[3][0];
     $this->Pdf->SetTextColor($font[3][0],$font[3][1],$font[3][2]);
  }
}

If ($multcell!='S') {
      $this->Pdf->SetXY($x,$y);
      $this->Pdf->Cell($w,$h,$txt,0,0,$align);
}Else{
      $this->Pdf->SetXY($x,$y-($h/2));
      $this->Pdf->MultiCell($w,$h,$txt,0,$align);
}
« Última modificação: Maio 09, 2012, 07:33:39 pm por Haroldo »

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Re:Subselect com Borda
« Responder #7 Online: Maio 09, 2012, 09:31:46 pm »
Obrigado mais uma vez, vou estudar o código e adaptar.
Valeu!

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Re:Subselect com Borda
« Responder #8 Online: Maio 10, 2012, 10:33:01 am »
Consegui gerar o relatório, mas estou tendo dificuldades com os campos em que a linha varia de tamanho.
Tenho 5 colunas no relatório que devem acompanhar um mesmo tamanho como no exemplo que você disponibilizou.


Dá pra dizer o caminho das pedras?

Obrigado.

Haroldo

  • Expert
  • *****
  • Mensagens: 6286
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Subselect com Borda
« Responder #9 Online: Maio 10, 2012, 11:43:55 am »
Acho que utilizo a função wordwrap do php que quebra a linha.
Mas como eu desenho todo o formulário na unha, tem toda preocupação quando o campo estoura em posicionar a linha divisória mais a baixo,  em posicionar os valores das próximas colunas centralizado na altura e tudo mais, isso vai do seu grau de perfeccionismo e conhecimento de lógica.

JulioOliveira

  • Intermediário
  • ***
  • Mensagens: 131
    • Email
Re:Subselect com Borda
« Responder #10 Online: Maio 10, 2012, 10:16:35 pm »
Consegui colocar as colunas e linhas alinhadas, adaptei do exemplo do site fpdf.org, link:
http://www.fpdf.org/en/script/script20.php

Fica muito bom e bem parecido com o exemplo que você forneceu.

Espero que ajude outros colegas.

Obrigado.
« Última modificação: Maio 11, 2012, 09:58:27 pm por JulioOliveira »