Quick Report ile yazdırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Quick Report ile yazdırma

Mesaj gönderen bobasturk »

Merhabalar arkadaşlar hayırlı çalışmalar;

Sorunum aslında ne kadar gerekli bilmiyorum ama, neyse yaptığım bi çalışma var dbaseIV ve delphi7 ile oluşturuldu. Raporlama olarak QReport kullanıyorum diğerleri beni zorlayınca buna devam ettim.

şimdi; tablomda bulunan verileri qreporta dökebiliyorum bunda sorun yok fakat preview kodu kullanarak yazdırma işlemine geçiyorum çünkü direkt yazdırılacak olursa tüm verileri yazıyor buda bi ton sayfanın boşa yazılması demek.

qreport preview olarak açıldığında biliyorsunuz iki hareket yapıyorum birincisi printsetup ta sayfayı belirlemek ikincisi print düğmesine basmak. şimdi bu kullanıcı için sıkıcı oluyor yani formda sayfa sayısını takip et setupu aç sayfayı yaz sonra print düğmesine bas.

oysa cuma günü eski çalıştığım yere gittim ve gördümki Access te aynı amaca yönelik bi çalışma var ve kullanıcı formda arama sonucu veriye ulaşıyor kaydet düğmesine basıyor ardından rapor tuşuna basıyor ve yazdırılacak rapor sayfası açılıyor. karşımızda formda arama sonucu bulduğu sayfa var ve başkaca sayfa yok rahat rahat print düğmesine basıp çıktı alıyor.

Biz bunu delphi ve qreport ta yapabilirmiyiz. Sorgulamalarda sorunum yok neyi sorgulayıp bulmuşsam çıktı alıyorum onda sayfa seçim sorunu olmuyor.

2880 kayıt var ve bu hergeçen gün artacak. bunlardan bir şahsı yazdırmak istediğimde tüm 2880 sayfayı hazırlıyor ve sen yazdıravağın kişinin sırasını bilmek zorundasın yoksa 2880 sayfayı yazdırmaya başlayacak ve printer ile istiyorum vermiyoram savaşı başlayacak

teşekkür ve saygılar
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

hocam ilk önce bunu delphide yapabilir miyiz? sorusunu esefle kınıyorum :)

cevaba gelince bunun bir kaç yolu var

en basiti
Eğer QuickRep1 bileşeninin Dataset özelliğini boş bırakırsanız sadece tablodaki aktfi kayıt yazdırılır.
siz yazdırmak istediğiniz kayıtı bir şekilde aktif yapıp daha sonra önizleme sayfasını açtığınız zaman sadece aktif kayıt ile ilgili olan bilgileri görürsünüz.

2-yazıcıdan çıktısını almak istediğiniz kişiyi ayrı bir sorgu ile seçebilirsiniz.

v.s v.s. daha bir çok yol söylenebilir :)

iyi çalışmalar...
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Özür Diliyorum ustam.

Aslında kastım delphi için diğildi. Qreport desteklenmiyor ve bazı sorunları var denildiği için yani lafım qreport içindi.

[/code]form1.table1.open;
form1.quickrep1.preview;
form1.table1.close;

Kod: Tümünü seç


olarak kullanıyorum, sizin dediğinizi uygularsam bu iş olur diyorsunuz. deniycem.

işi sorgu ile diğilde, şimdi yazdırılması gereken matbu formlar var şahıs gelir ve bu form doldurulur daha sonra yazdırılır. böle böle hem kayıt altına alınır hemde yazdırılır. kullanan kişinin hiç uğraşmadan yazdırmasını istemiştim o yüzden aslında biraz emek harcamak iyidir ama neyse  

teşekkür ve saygılarla.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

yukarıdaki yazım şekli için özür diliyorum. kod işi oldu diyerek gönder tuşuna bastım ama yanlış olmuş. affffffff.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Sadettinpolat arkadaşımın dediği gibi qreportun datasetini boş bıraktım ve qreport ön izlemede ilk kaydı gösterdi. Formda görünen kaydı bi şekil aktif hale gerirmemi söylüyor ve bu şekilde qreportta yazdırmam gereken alan görünür diyor. yaptığım çalışmada biraz süs oluyor heralde ama şöle bi uygulama var bir buton var ve komutu

Kod: Tümünü seç

if button1.caption='aktif yap' then
begin
   tablo1.active:=true;
   Button1.caption:='pasif yap';
end else
begin
   tablo1.active:=false;
   button1.caption:='aktif yap';
end;
şeklinde kod var ve ilk açılışta bilgilerin görünmemesini istiyoruz. burada sadettin abinin dediğini nasıl yapalım ki formda görünen veriyi aktif hale getirelim ve qreport ta o görünsün ve kullanıcı bunu hemen yazdırsın.

teşekkür ve iyi çalışmalar.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

hocam tam olarak sorunuzu anlamadım ama anladığım kadarıyla cevap veriyorum.

şimdi tablo1 adlı bir tablomuz var ve bunda 100 tane kayıt var.
biz rapor almak istediğimiz zaman 100 kaydın hepsini değilde sadece kullanıcının o an seçtiği 1 adet kaydı yazdırmak istiyoruz.

quickreportun dataset ozelligini nil yapın.

1.yol
bunun için extra bir kod yazmanıza gerek yok
tablo1.active := true; yazın
tabloyu dbgrid gibi bir nesneye bağlayın, kullanıcı fareyle hangi kaydı aktif yaparsa sadece o kayıt yazıcıdan çıktı olarak alınır.

2.yol

bunu kodla yapmak isterseniz
tablo1.locate gibi arama fonksiyonlarını kullanarak yazdırmak istediğiniz kaydı aktfi hale getirin. buraya dikkat edin. tabloyu aktif hale getirmek demiyorum. yazıcıdan çıktısı alınmak istenen kaydı aktif hale getirmekten söz ediyoruz. bunu tablo1.locate ile yapabileceğiniz gibi daha başka bir çok metod ile de yapabilirsiniz.

umarım yardımcı olabilmişimdir.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Sorunumu tam olarak anlamışsın ustam.

formum var ve bu form üzerine bi tane bitbutton koydum. kullanıcı bu butona basınca kişinin sicil bilgilerinin tümünü alabilsin diye. çok lazım olan bişi diğil ama diğer uygulamalarda lazım olacak.

Hocam acemiyim ve yardım aldığım (gerçekten) bu forumdan başka bir yer yok. hiç bir temelim olmadan bu işe başladım.

şu an binim yaptığım

Kod: Tümünü seç

form1.tablo1.open;
form1.quickrep1.preview;
form1.tablo1.close;
diyerek çıktı almak. biliyorsunuzki burada istenilen sayfadaki çıktıyı alabilmek için kayıt sayısını bilmek gerekiyor ve print setup kısmına yazmak gerekiyor. aksi halde tüm girdileri yazmaya başlar.

kolaylık açısından kullanıcı formu açsın işlemlerini yapsın form da görünen kaydı bahsettiğim bitbutton tuşuna bastığında quicrep te o kayıt görünsün başka kayıt olmasın. quick rep için tabiki.

ustam raporun data setini boş bıraktım, form daki ve rapordaki tablo ların özelliklerinden active yi true dbgrid ekledim tabloya bağladım yine kayıtlardaki ilk kaydı veriyor.

locate yi denemek istedim locate() gelen paranteze ne yazacağımı düşünüyorum.

kahrımı çektiğin için teşekkür ve saygılar
hayırlı çalışmalar.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

hocam madem acele değil bi kaç gün bekleyebilirseniz bi örnek yapıp buraya gönderirim. şu an bilgisayarda delphi yok.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ne münasebet ustam gayemiz sizleri veya diğer arkadaşları meşgul etmek değil.

Ne zaman müsait olursanız. Hayırlı çalışmalar.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

yeni bir proje oluştur
form1 ekrana gelince forma sağ tuşla tıkla ve View As Text seçeneğini seç
karşına çıkan penceredeki bütün yazılanları sil
aşağıda unit1.dfm olarak yazılanları kopyala ve yazıları sildiğin yere aynen yapıştır

Unit1.dfm

Kod: Tümünü seç


object Form1: TForm1
  Left = 200
  Top = 216
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  Scaled = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object btnSeciliKisiyiYazdir: TButton
    Left = 8
    Top = 136
    Width = 145
    Height = 25
    Caption = 'btnSeciliKisiyiYazdir'
    TabOrder = 0
    OnClick = btnSeciliKisiyiYazdirClick
  end
  object DBGrid1: TDBGrid
    Left = 8
    Top = 8
    Width = 320
    Height = 120
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
  end
  object QuickRep1: TQuickRep
    Left = 16
    Top = 256
    Width = 794
    Height = 1123
    Frame.Color = clBlack
    Frame.DrawTop = False
    Frame.DrawBottom = False
    Frame.DrawLeft = False
    Frame.DrawRight = False
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'Arial'
    Font.Style = []
    Functions.Strings = (
      'PAGENUMBER'
      'COLUMNNUMBER'
      'REPORTTITLE')
    Functions.DATA = (
      '0'
      '0'
      '''''')
    Options = [FirstPageHeader, LastPageFooter]
    Page.Columns = 1
    Page.Orientation = poPortrait
    Page.PaperSize = A4
    Page.Values = (
      100
      2970
      100
      2100
      100
      100
      0)
    PrinterSettings.Copies = 1
    PrinterSettings.Duplex = False
    PrinterSettings.FirstPage = 0
    PrinterSettings.LastPage = 0
    PrinterSettings.OutputBin = Auto
    PrintIfEmpty = True
    SnapToGrid = True
    Units = MM
    Zoom = 100
    object DetailBand1: TQRBand
      Left = 38
      Top = 78
      Width = 718
      Height = 40
      Frame.Color = clBlack
      Frame.DrawTop = False
      Frame.DrawBottom = False
      Frame.DrawLeft = False
      Frame.DrawRight = False
      AlignToBottom = False
      Color = clWhite
      ForceNewColumn = False
      ForceNewPage = False
      Size.Values = (
        105.833333333333
        1899.70833333333)
      BandType = rbDetail
      object QRDBText1: TQRDBText
        Left = 104
        Top = 8
        Width = 61
        Height = 17
        Frame.Color = clBlack
        Frame.DrawTop = False
        Frame.DrawBottom = False
        Frame.DrawLeft = False
        Frame.DrawRight = False
        Size.Values = (
          44.9791666666667
          275.166666666667
          21.1666666666667
          161.395833333333)
        Alignment = taLeftJustify
        AlignToBand = False
        AutoSize = True
        AutoStretch = False
        Color = clWhite
        DataSet = Table1
        DataField = 'FirstName'
        Transparent = False
        WordWrap = True
        FontSize = 10
      end
      object QRDBText2: TQRDBText
        Left = 32
        Top = 8
        Width = 60
        Height = 17
        Frame.Color = clBlack
        Frame.DrawTop = False
        Frame.DrawBottom = False
        Frame.DrawLeft = False
        Frame.DrawRight = False
        Size.Values = (
          44.9791666666667
          84.6666666666667
          21.1666666666667
          158.75)
        Alignment = taLeftJustify
        AlignToBand = False
        AutoSize = True
        AutoStretch = False
        Color = clWhite
        DataSet = Table1
        DataField = 'LastName'
        Transparent = False
        WordWrap = True
        FontSize = 10
      end
    end
    object TitleBand1: TQRBand
      Left = 38
      Top = 38
      Width = 718
      Height = 40
      Frame.Color = clBlack
      Frame.DrawTop = False
      Frame.DrawBottom = False
      Frame.DrawLeft = False
      Frame.DrawRight = False
      AlignToBottom = False
      Color = clWhite
      ForceNewColumn = False
      ForceNewPage = False
      Size.Values = (
        105.833333333333
        1899.70833333333)
      BandType = rbTitle
      object QRLabel1: TQRLabel
        Left = 32
        Top = 16
        Width = 54
        Height = 17
        Frame.Color = clBlack
        Frame.DrawTop = False
        Frame.DrawBottom = False
        Frame.DrawLeft = False
        Frame.DrawRight = False
        Size.Values = (
          44.9791666666667
          84.6666666666667
          42.3333333333333
          142.875)
        Alignment = taLeftJustify
        AlignToBand = False
        AutoSize = True
        AutoStretch = False
        Caption = 'lastname'
        Color = clWhite
        Transparent = False
        WordWrap = True
        FontSize = 10
      end
      object QRLabel2: TQRLabel
        Left = 104
        Top = 16
        Width = 54
        Height = 17
        Frame.Color = clBlack
        Frame.DrawTop = False
        Frame.DrawBottom = False
        Frame.DrawLeft = False
        Frame.DrawRight = False
        Size.Values = (
          44.9791666666667
          275.166666666667
          42.3333333333333
          142.875)
        Alignment = taLeftJustify
        AlignToBand = False
        AutoSize = True
        AutoStretch = False
        Caption = 'fisrtname'
        Color = clWhite
        Transparent = False
        WordWrap = True
        FontSize = 10
      end
    end
  end
  object btnBul: TButton
    Left = 144
    Top = 200
    Width = 145
    Height = 25
    Caption = 'isim bul'
    TabOrder = 3
    OnClick = btnBulClick
  end
  object Edit1: TEdit
    Left = 16
    Top = 200
    Width = 121
    Height = 21
    TabOrder = 4
    Text = 'bruce'
  end
  object Memo1: TMemo
    Left = 296
    Top = 192
    Width = 353
    Height = 41
    Lines.Strings = (
      'mesela edit1e ki yaz ve ardından isim bul düğmesine tıkla'
      
        'daha sonra bntSeciliKisiyiYazdir dedigin zaman sadece arama sonu' +
        'cunda'
      'bulunmuş olan kaydı yazdırırsın')
    TabOrder = 5
  end
  object Memo2: TMemo
    Left = 336
    Top = 8
    Width = 235
    Height = 89
    Lines.Strings = (
      'grid üzerinde yazdırmak istediğin kişiin üstüne '
      'fareyle tıkla (seç) ve ardından btn '
      'seçiliKişiyiYazdır düğmesine tıkla')
    TabOrder = 6
  end
  object DataSource1: TDataSource
    Left = 584
    Top = 224
  end
  object Table1: TTable
    DatabaseName = 'DBDEMOS'
    TableName = 'employee.db'
    Left = 624
    Top = 224
  end
end

yapıştırdıktan sonra yazıların üstünde tekrar sağ tuş ve bu sefer View As Form seçeneğini seç. formun karşına çıkmış olması lazım. eğer form ekrana gelmediyse yukarıda yazılanları tekrar gözden geçiriver. atladığın bir husus olmalı.


daha sonra delphide kod yazdığın yer varya

unit Unit1;
interface

diye başlayan. orda yazılanların hepsini seç ve sil.
sonra aşağıdaki unit1.pası kopyala ve oraya yapıştır.
daha sonra F9 ile çoştur.

Unit1.pas

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, QuickRpt, QRCtrls,
  ExtCtrls;

type
  TForm1 = class(TForm)
    btnSeciliKisiyiYazdir: TButton;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Table1: TTable;
    QuickRep1: TQuickRep;
    DetailBand1: TQRBand;
    QRDBText1: TQRDBText;
    QRDBText2: TQRDBText;
    TitleBand1: TQRBand;
    QRLabel1: TQRLabel;
    QRLabel2: TQRLabel;
    btnBul: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure btnSeciliKisiyiYazdirClick(Sender: TObject);
    procedure btnBulClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.DatabaseName  :='DBDEMOS';
Table1.TableName := 'employee.db';
DataSource1.DataSet := Table1;
DBGrid1.DataSource := DataSource1;
Table1.Open;

end;

procedure TForm1.btnSeciliKisiyiYazdirClick(Sender: TObject);
begin
QuickRep1.Preview;
end;

procedure TForm1.btnBulClick(Sender: TObject);
begin
Table1.Locate('Firstname',Edit1.Text,[loCaseInsensitive, loPartialKey]);
end;

end.

hocam bu örnek gayet güzel çalışıyor.
umarım işininzi görür
iyi çalışmalar...
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustam ne kadar teşekkür etsem az olduğunu biliyorum ve hissediyorum. Çünkü baya uğraşmışsın ve güzel olmuş. Eline sağlık çalışıyor.

Acizliğime ver ilk kopyaladığım sanırsam tablo ve form üzerindekileri oluşturmak için bize lazım olanlar ikinci kodlar çünkü tablomuz ve üzerindeki nesneler hazır.

Zahmetimden dolayı özür diler saygılar sunarım.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustam,

Bizim çalışmaya uyarlayamadım.

Çalışmamızın veri giriş formunun
FormAdı=FormArsivVeriGiris
TabloAdı=ArsivVeriGirisi

Raporumuzun(ayrı formda oluşturuldu)
FormAdı=FormArsivKayitTumBilgi
TabloAdı=ArsivTumYazdir(qreport üzerine Table nesnesi koyulu)

sizin uygulamayı uyarlamaya çalıştım olmadı. Fakat qreportu veri giriş formu üzerine uygular ve bağlantıyı yaparsam oluyor. Ama Yerinde bırakır bağlantıyı yaparsam olmuyor veriler görünmüyor. QRepor üzerindeki tabloyu kaldırdım ve dbtexlerin datasetlerini verigiriş formundaki tabloya bağlamak istedim invalid hatası verdi. Yani oraya girmeyi kabul etmiyor. illaki üzerine nesne istiyor kendine ait.

Veri giriş formuna qreport koymak göze hoş gelmiyor. Bi yerde hata yapıyorum ama bulamadım.

teşekkürler.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhabalar,

ustam hatamı anladım yeni bir veri giriş formu oluşturdum ve yeni bir qreport oluşturdum ve oldu. Evdeki bulunan bilgisayarda çalışmamızın deneme amaçlı bi versiyonu vardı onda olmamıştı.

yardımlarınız için teşekkürler
hayırlı calışmalar.
Cevapla