FrxMailExport' un Kitlenmesi hk. {ÇÖZÜLDÜ}

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

FrxMailExport' un Kitlenmesi hk. {ÇÖZÜLDÜ}

Mesaj gönderen barutali »

Talep Kontrolü

Kod: Tümünü seç

function TFMAILMAN.CheckMail: Integer;
begin
  with QCHECK do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ISLEM, ISLEMNO FROM TBLBILDIRIMLERIM WHERE ISLEM Like ''%Yeni Talep Oluşturuldu%'' AND MAILATILDI=0 GROUP BY ISLEM, ISLEMNO');
    Open;
  end;
  Result := QCHECK.RecordCount;
end;

Rapor Dosyasının Hazırlanması

Kod: Tümünü seç

procedure TFMAILMAN.MaliHazirla(ISLEMNO: STRING);
VAR
  A : TfrxADODatabase;
  QTALEPM,
  QTALEPDD,
  QTALEPTEMP : TADOQuery;
  fi, IDSI, COUNT : Integer;
  Himza, timza, kimza, oimza : Tfrxpictureview;
  MS: TMemoryStream;
begin
   QTALEPM := TADOQuery.Create(Self);
   QTALEPM.Connection := CON;

   QTALEPDD := TADOQuery.Create(Self);
   QTALEPDD.Connection := CON;

   QTALEPTEMP := TADOQuery.Create(Self);
   QTALEPTEMP.Connection := CON;

  with QTALEPM do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ID,ISLEMNO, HID, TID, KID, OID FROM TBLTALEPM WHERE ISLEMNO=:P');
    Parameters.ParamByName('P').Value := ISLEMNO;
    Open;
  end;

  IDSI := QTALEPM.FieldByName('ID').AsInteger;

  with QTALEPDD do
  begin
    close;
    SQL.Clear;
    SQL.Add('SELECT * FROM TBLTALEPD WHERE TALEPID=:IDSI');
    Parameters.ParamByName('IDSI').Value := IDSI;
    Open;
  end;

  QTALEPDD.First;
  try
     try
       Screen.Cursor := crSQLWait;
       while NOT QTALEPDD.Eof do
       begin
          Application.ProcessMessages;
          with QTALEPTEMP do
          begin
            Close;
            SQL.Clear;
            SQL.Add('INSERT INTO dbo.TBLTALEPTEMP');
            SQL.Add('(TALEPID,ISLEMNO,STOKID,STOK,MARKA,MIKTAR,BIRIM,TESLIMTARIHI,');
            SQL.Add('TESLIMYERI,S,G,N,M,KULLANILACAGIYER,DIGER,PARABIRIMI,');
            SQL.Add('BIRIMFIYAT,BIRIMP,KDVORAN,KDVDURUM,TUTAR)');
            SQL.Add('VALUES');
            SQL.Add('(:TALEPID,:ISLEMNO,:STOKID,:STOK,:MARKA,:MIKTAR,:BIRIM,:TESLIMTARIHI,');
            SQL.Add(':TESLIMYERI,:S,:G,:N,:M,:KULLANILACAGIYER,:DIGER,:PARABIRIMI,');
            SQL.Add(':BIRIMFIYAT,:BIRIMP,:KDVORAN,:KDVDURUM,:TUTAR)');
            Parameters.ParamByName('TALEPID').Value := IDSI;
            Parameters.ParamByName('ISLEMNO').Value := QTALEPDD.FieldByName('ISLEMNO').AsString;
            Parameters.ParamByName('STOKID').Value  := QTALEPDD.FieldByName('STOKID').AsInteger;
            Parameters.ParamByName('STOK').Value    := QTALEPDD.FieldByName('STOK').AsString;
            Parameters.ParamByName('MARKA').Value    := QTALEPDD.FieldByName('MARKA').AsString;
            Parameters.ParamByName('MIKTAR').Value    := QTALEPDD.FieldByName('MIKTAR').AsFloat;
            Parameters.ParamByName('BIRIM').Value    := QTALEPDD.FieldByName('BIRIM').AsString;
            Parameters.ParamByName('TESLIMTARIHI').Value    := QTALEPDD.FieldByName('TESLIMTARIHI').AsDateTime;
            Parameters.ParamByName('TESLIMYERI').Value    := QTALEPDD.FieldByName('TESLIMYERI').AsString;
            Parameters.ParamByName('S').Value    := QTALEPDD.FieldByName('S').AsBoolean;
            Parameters.ParamByName('G').Value    := QTALEPDD.FieldByName('G').AsBoolean;
            Parameters.ParamByName('N').Value    := QTALEPDD.FieldByName('N').AsBoolean;
            Parameters.ParamByName('M').Value    := QTALEPDD.FieldByName('M').AsBoolean;
            Parameters.ParamByName('KULLANILACAGIYER').Value    := QTALEPDD.FieldByName('KULLANILACAGIYER').AsString;
            Parameters.ParamByName('DIGER').Value    := QTALEPDD.FieldByName('DIGER').AsString;
            Parameters.ParamByName('PARABIRIMI').Value    := QTALEPDD.FieldByName('PARABIRIMI').AsString;
            Parameters.ParamByName('BIRIMFIYAT').Value    := QTALEPDD.FieldByName('BIRIMFIYAT').AsFloat;
            Parameters.ParamByName('BIRIMP').Value    := QTALEPDD.FieldByName('BIRIMP').AsString;
            Parameters.ParamByName('KDVORAN').Value    := QTALEPDD.FieldByName('KDVORAN').AsFloat;
            Parameters.ParamByName('KDVDURUM').Value    := QTALEPDD.FieldByName('KDVDURUM').AsBoolean;
            Parameters.ParamByName('TUTAR').Value    := QTALEPDD.FieldByName('TUTAR').AsFloat;
            ExecSQL;
          end;
          QTALEPDD.Next;
       end;

          with QTALEPDD do
          begin
            close;
            SQL.Clear;
            SQL.Add('SELECT COUNT(ID) AS SAYISI FROM TBLTALEPD WHERE TALEPID=:IDSI');
            Parameters.ParamByName('IDSI').Value := IDSI;
            Open;
            Count := Fields[0].AsInteger;
          end;

           if Count < 7 then
           begin
             Count := 7 - Count;
             for fi := 0 to Count -1 do
             begin
              Application.ProcessMessages;
              with QTALEPTEMP do
              begin
                Close;
                SQL.Clear;
                SQL.Add('INSERT INTO TBLTALEPTEMP (TALEPID) VALUES (:PX)');
                Parameters.ParamByName('PX').Value := IDSI;
                ExecSQL;
              end;
             end;
           end;


      frxreport1.ReportOptions.Name:='TALEP';
      frxreport1.FileName:=ExtractFilePath(Application.ExeName)+ 'reports\TALEP.fr3';
      frxReport1.LoadFromFile(ExtractFilePath(Application.ExeName)+ 'reports\TALEP.fr3');

      A:= TFRXAdoDatabase(frxReport1.findobject('CON'));
      A.Connected := false;
      A.DatabaseName := CON.ConnectionString;
      A.Connected := True;


      Himza := TfrxPictureView(frxReport1.findobject('himza'));
      Himza.Picture.Assign(ImzaVer(QTALEPM.FieldByName('HID').AsInteger));

      timza := TfrxPictureView(frxReport1.findobject('timza'));
      timza.Picture.Assign(ImzaVer(QTALEPM.FieldByName('TID').AsInteger));

      kimza := TfrxPictureView(frxReport1.findobject('kimza'));
      kimza.Picture.Assign(ImzaVer(QTALEPM.FieldByName('KID').AsInteger));

      Oimza := TfrxPictureView(frxReport1.findobject('oimza'));
      Oimza.Picture.Assign(ImzaVer(QTALEPM.FieldByName('OID').AsInteger));

      frxReport1.Variables['<IDSI>'] := IDSI;
      frxReport1.PrepareReport(True);

      finally
      Screen.Cursor := crDefault;
      FreeAndNil(QTALEPM);
      FreeAndNil(QTALEPDD);
      FreeAndNil(QTALEPTEMP);
     end;

   except on E: Exception do
     SHOWMESSAGE(E.Message);
  end;
end;

Kod: Tümünü seç

   
procedure TFMAILMAN.Gönder;
begin
    frxMailExport1.ShowExportDialog := false;
    frxMailExport1.ShowDialog := True;
    frxMailExport1.ExportFilter:=frxPDFExport1;
    frxMailExport1.Address:='aliyesiloglu@mali.com.tr';
    frxMailExport1.FromMail:='bildirim@mali.com.tr';
    frxMailExport1.FromCompany:='MALİ GROUP';
    frxMailExport1.FromName:='Bildirim';
    frxMailExport1.Login:='bildirim@mali.com.tr';
    frxMailExport1.Password:='xxxxxx';
    frxMailExport1.SmtpHost:='mail.mali.com.tr';
    frxMailExport1.SmtpPort := 587;
    frxMailexport1.Subject:='Talep Bildirimi';
    frxpdfexport1.Author:='MALİ GROUP ESAS 2011';
    frxpdfexport1.Creator:='ESAS 2011';

    frxreport1.Export(frxMailExport1);
end;
Bu aşamalardan geçerek fastreport dosyam hazırlanıyor PDF olarak maille gönderilmesi gerekiyor fakat..
frxMailExport1.ShowDialog := True;
bu satırda TRUE olupta dialog açılırsa gönderim yapıyor.. FALSE değer atayıp dialog açılmazsa kitleniyor..

daha öncesinde böyle bir çalışması olan arkadaşlar varsa tecrübelerini paylaşmalarını bekliyorum..

Teşekkürler...
En son barutali tarafından 20 Nis 2011 04:44 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
amatör küme programcı :D
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: FrxMailExport' un Kitlenmesi hk.

Mesaj gönderen vkamadan »

Merhaba ,
FastReport 4.10.3 kullanıyorum, ben normal dialoglu gönderimde de bir çok mail hesabıyla sorun yaşıyordum fakat bazı mail hesaplarıyla gönderimde sorun çıkartmıyordu,
TfrxmailExport nesnesinin OnSendMail adında çok yararlı bir olay metodu var,

Kod: Tümünü seç

function frxMailExport1SendMail(const Server: string;
  const Port: Integer; const UserField, PasswordField: string; FromField,
  ToField, SubjectField, CompanyField, TextField: WideString;
  FileNames: TStringList; Timeout: Integer; ConfurmReading: Boolean): string;
gördüğünüz gibi ilgili mail gönderimiyle ilgili tüm bilgiler bu metoda düşüyor, bu metot dan yararlanarak indy nin SMTP nesnesiyle maili kendiniz gönderin, metodun dönüş değerini boşa eşitlerseniz Frx in mail gönderim rutinleri çalışmaz sizinkiler çalışır (Result:='')

Kullanıma örnek olması açısından aşağıdaki yapıyı inceleyebilirsiniz (NOT : SMTP ve MEssage nesneleri Clever Internet Suite e aittir.)

Kod: Tümünü seç

function Tgecici.frxMailExport1SendMail(const Server: string;
  const Port: Integer; const UserField, PasswordField: string; FromField,
  ToField, SubjectField, CompanyField, TextField: WideString;
  FileNames: TStringList; Timeout: Integer; ConfurmReading: Boolean): string;
var
  intAttList : TStringList;
  i : Integer;
begin

   Result :='';

  if MailSrv.Active then Exit;

 try
   ShowWaitForm('E-Posta Gönderiliyor. Lütfen Bekleyin..');

   intAttList := TStringList.Create;

   for I := 0 to FileNames.Count - 1 do
      begin
         if Pos('=' , FileNames[i]) > 0 then intAttList.Add( Copy( FileNames[i] ,1 ,pos('=',FileNames[i])-1 ) ) else
         intAttList.Add( FileNames[i] );
      end;


   MailMessage.BuildMessage( TextField , '',nil,intAttList );
   MailMessage.From.FullAddress := FromField;
   MailMessage.From.Name        := CompanyField;
   MailMessage.ToList.EmailAddresses := ToField;
   MailMessage.Subject    := SubjectField;

   if ConfurmReading then MailMessage.ReadReceiptTo := FromField else MailMessage.ReadReceiptTo := '';


      MailSrv.Server   := Server;
      MailSrv.UserName := UserField;
      MailSrv.Password := PasswordField;
      MailSrv.Port     := Port;

      MailSrv.Open();
      try
        MailSrv.Send(MailMessage);
      finally
        MailSrv.Close();
      end;

 finally
    intAttList.Free;
    HideWaitForm;
 end;


end;

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: FrxMailExport' un Kitlenmesi hk.

Mesaj gönderen barutali »

Cevabınız için ilk önce teşekkür ederim.
Sorunun kaynağı frxReport1.PrepareReport(True); bu satır..
preview ekranını açmadan raporu oluşturmayla ilgili bi bug var.
forma bir adet frxPreview1 nesnesi ekledim.

mail hazırla procedure üme aşağıdaki satırı ekledim..
frxReport1.Preview := frxPreview1;

önizleme frxPreview da oluşuyor.

ve gönderme kodum da aşağıdaki değişikliği yapınca sorun halloldu.

frxReport1.Export(frxMailExport1); // eski satır
frxPreview1.Export(frxMailExport1); // yeni satır..

export işlemini preview üzerinden yaptım..
amatör küme programcı :D
Cevapla