Criação de relatório em Report PDF com sucesso graças a ajuda do @InfinitusWeb.
Ele me mostrou como fazer todo o relatório no método PHP, me dando total liberdade para definir o relatório da minha maneira. Conforme a imagem os métodos utilizados para a criação:
o select da tabela utilizada está no método Codigo, juntamente com códigos de régua e linha em zebra:
regua(297,210);
$zebra=true;
$_sel="
select
A.VENDEDOR_APELIDO as Vendedor,
A.OS as OS,
A.NOME_CLIENTE as Cliente,
convert(char, A.DATA_CADASTRAMENTO, 104) as Data_Cad,
convert(char, A.DATA_PREVISAO_ENTREGA, 104) as Data_Prev,
A.QTDE_TOTAL as Qtde,
A.VALOR_TOTAL as Valor,
B.DESC_OS_TIPO as Tipo,
C.DESC_OS_STATUS as Status
from OS_CABECALHO A
inner join OS_TIPOS B ON A.ID_OS_TIPO = B.ID_OS_TIPO
INNER JOIN OS_STATUS C ON A.ID_OS_STATUS = C.ID_OS_STATUS
WHERE A.CODIGO_FILIAL = ‘[VAR_EMPRESA]’
";
sc_select(rs,$_sel);
if ({rs} === false)
{
echo "Erro de acesso. Mensagem = " . {rs_erro};
}
else
{
while (!{rs}->EOF){
if ([os]->linha==1) { Cabecalho(); }
[os]->linha++;
$arr=[{rs}->fields[0],{rs}->fields[1],{rs}->fields[2],trim({rs}->fields[3]),trim({rs}->fields[4]),{rs}->fields[5],{rs}->fields[6],{rs}->fields[7],{rs}->fields[8]];
Detalhe($arr, $zebra);
$zebra=!$zebra;
{rs}->MoveNext();
}
{rs}->Close();
}
No método cabecalho os comandos para o cabeçalho, campos, imagem(logo), fonte, linha, cor,
$img = sc_url_library(‘prj’,‘Imagens’,‘logo.png’);
$this->Pdf->SetTextColor(0,0,0);
$this->Pdf->Image($img,10,5,0,0);
$this->Pdf->SetFont(’’,’’, 10);
$this->Pdf->SetXY(245,15);
$this->Pdf->Cell(20,0,‘Emissão:’,0,0,‘L’);
$this->Pdf->Cell(20,0,Date(‘d/m/Y’),0,1,‘R’);
$this->Pdf->SetXY(245,20);
$this->Pdf->Cell(20,0,‘Hora:’,0,0,‘L’);
$this->Pdf->Cell(20,0,Date(‘H:i:s’),0,0,‘R’);
$this->Pdf->SetLineStyle(array(‘color’ => array(0,0,0)));
$this->Pdf->Line(10,27,287,27);
$this->Pdf->SetFont(‘Helvetica’,’’, 12);
$this->Pdf->SetXY(0,30);
$this->Pdf->Cell(297,0,‘ORDEM DE SERVICO POR VENDEDOR’,0,0,‘C’);
$this->Pdf->Line(5,38,292,38);
$this->Pdf->SetXY(0,42);
$this->Pdf->SetFont(‘Helvetica’,’’, 12);
$this->Pdf->SetX(5);
$this->Pdf->Cell(30,0,‘VENDEDOR’,0,0,‘C’);
$this->Pdf->Cell(10,0,‘OS’,0,0,‘C’);
$this->Pdf->Cell(60,0,‘Cliente’,0,0,‘C’);
$this->Pdf->Cell(25,0,‘Data_Cad’,0,0,‘C’);
$this->Pdf->Cell(25,0,‘Data_Prev’,0,0,‘C’);
$this->Pdf->Cell(20,0,‘Qtde’,0,0,‘C’);
$this->Pdf->Cell(30,0,‘Valor’,0,0,‘C’);
$this->Pdf->Cell(40,0,‘Tipo’,0,0,‘C’);
$this->Pdf->Cell(30,0,‘Status’,0,1,‘C’);
$this->Pdf->Line(5,47,292,47);
$this->Pdf->SetXY(0,[os]->detY);
Em Detalhe os comandos para posição de linha, células
$y=$this->Pdf->GetY();
if ($y >= 190) {
$this->Pdf->AddPage();
Cabecalho();
}
$y=$this->Pdf->GetY();
if ($zebra) {
// $this->Pdf->SetFillColor(200,220,255);
$this->Pdf->Rect(5, $y,286, 5, ‘F’, ‘’, array(211,211,211));
}else{
$this->Pdf->Rect(5, $y,286, 5, ‘F’, ‘’, array(255,255,255));
// $this->Pdf->SetFillColor(255,255,255);
}
$this->Pdf->SetFont(‘Helvetica’,’’, 10);
$this->Pdf->SetX(5);
$this->Pdf->Cell(30,0,$campos[0],0,0,‘L’,1);
$this->Pdf->Cell(10,0,$campos[1],0,0,‘R’,1);
$this->Pdf->Cell(60,0,$campos[2],0,0,‘L’,1);
$this->Pdf->Cell(25,0,$campos[3],0,0,‘C’,1);
$this->Pdf->Cell(25,0,$campos[4],0,0,‘C’,1);
$this->Pdf->Cell(20,0,$campos[5],0,0,‘R’,1);
$valor=$campos[5]*$campos[6];
$this->Pdf->Cell(30,0,$valor,0,0,‘R’,1);
$this->Pdf->Cell(40,0,$campos[7],0,0,‘L’,1);
$this->Pdf->Cell(30,0,$campos[8],0,1,‘L’,1);
$this->Pdf->Ln(1);
[os]->total+=$valor;
Em atributo foi definido parâmetros campos e zebra
No rodapé comandos para o campo Total, numeração de pagina
$this->Pdf->SetFont(‘Helvetica’,’’, 14);
$this->Pdf->SetX(175);
$this->Pdf->Cell(30,0,'TOTAL : '.[os]->total,0,0,‘R’);
$this->Pdf->SetFont(‘Courier’,’’, 9);
$this->Pdf->SetXY(0,200);
$this->Pdf->Cell(297,0,‘Pag ‘.$this->Pdf->PageNo().’/’.$this->Pdf->getNumPages(),0,0,‘C’);
Em régua o comando para régua
$this->Pdf->SetTextColor(217,121,69); //(255, 139,71);
$this->Pdf->SetLineStyle(array(‘color’ => array(237,188,119)));
$this->Pdf->SetFont(‘Courier’,’’, 6);
$this->Pdf->SetMargins(0,0,0);
$m=0; //esquerda
for ($i = 1; $i <= $a-5; $i++) {
$m++;
if ($m == 5) {
$m = 0; $t = 3;
$this->Pdf->SetXY(1,$i-2);
$this->Pdf->Cell(6,3,$i,0,0,‘R’);
if ($grade && $i>=8 && $i <= $a-6) {
$this->Pdf->SetLineStyle(array(‘width’ => 0.1));
$this->Pdf->Line(8,$i,$l-8,$i);
}
$this->Pdf->SetLineStyle(array(‘width’ => 0.3));
} else {
$t = 2;
$this->Pdf->SetLineStyle(array(‘width’ => 0.1));
}
$this->Pdf->Line(0,$i,$t,$i);
}
$m=3;//direita
for ($i = 4; $i <= $a; $i++) {
$m++;
if ($m == 5) {
$m = 0; $t = 3;
$this->Pdf->SetXY($l-6,$i-2);
if ($i > 5) $this->Pdf->Cell(4,0,$i,0,0,‘R’);
$this->Pdf->SetLineStyle(array(‘width’ => 0.3));
} else {
$t = 2;
$this->Pdf->SetLineStyle(array(‘width’ => 0.1));
}
$this->Pdf->Line($l-$t,$i,$l,$i);
}
$m=3;//superior
for ($i = 4; $i <= $l; $i++) {
$m++;
if ($m == 5 ) {
$m = 0; $t = 3;
$this->Pdf->SetXY($i-1,2);
if ($i > 5 && $i < $l) $this->Pdf->Cell(4,3,$i,0,0,‘R’);
if ($grade && $i>=8 && $i <= $l-8) {
$this->Pdf->SetLineStyle(array(‘width’ => 0.1));
$this->Pdf->Line($i,6,$i,$a-6);
}
$this->Pdf->SetLineStyle(array(‘width’ => 0.3));
} else {
$t = 2;
$this->Pdf->SetLineStyle(array(‘width’ => 0.1));
}
$this->Pdf->Line($i,0,$i,$t);
}
$m=0;//inferior
for ($i =1; $i <= $l-6; $i++) {
$m++;
if ($m == 5) {
$m = 0; $t = 3;
$this->Pdf->SetXY($i-1,$a-5);
if ($i < $l-5) $this->Pdf->Cell(4,3,$i,0,0,‘R’);
$this->Pdf->SetLineStyle(array(‘width’ => 0.3));
} else {
$t = 2;
$this->Pdf->SetLineStyle(array(‘width’ => 0.1));
}
$this->Pdf->Line($i,$a,$i,$a-$t);
}
Em atributo foi definido parâmetros de I, A e Grade
No evento onApplicationInit
[os]= new stdClass;
[os]->detY=50;
[os]->linha = 1;
[os]->total = 0;
Em onRecord
$this->Codigo();
o resultado
Muito Obrigada Haroldo e todos pela atenção e ajuda