Var
  Tarih1, Tarih2: TDateTime;

procedure FindParam(FF: String);
Var 
  S: TStringList;
  I: Integer;
  C: String;
Begin
  S:= TStringList.Create;
  S.Text:= FF;
  
  For I:= 0 to S.Count - 1 Do
  Begin
    C:= S[I];
	
	if Length(C) > 9 Then
	  Delete(C, 1, 9);
	
    if Pos('TARIH1 = ', S[I]) = 1 Then
	  Tarih1:= StrToDate(C)
    else if Pos('TARIH2 = ', S[I]) = 1 Then
	  Tarih2:= StrToDate(C)
  End;
  S.Free;
End;

Function ReadSQL(W: String): String;
Begin
  if W <> '' Then
    FindParam(W)
  else 
    FindParam(FFilter);
	
  Result:= 'Set DateFormat DMY ' +
      ' Declare @T1 DateTime, @T2 DateTime ' + #13#10 +
      ' Set @T1 = ' + QuotedStr(DateToStr(Tarih1)) +  #13#10 +
      ' Set @T2 = ' + QuotedStr(DateToStr(Tarih2)) +  #13#10 +
      ' SELECT  ' + #13#10 +
      '   PERSONEL, STOKKODU, CINSI, SUM(MIKTARI) AS MIKTARI, BIRIMADI, FIYATI, A.MALIYET, A.NETFIYATI, A.ALISFIYATI1, SUM(ALISTUTARI) AS ALISTUTARI,' + #13#10 +
      '   (FIYATI - NETFIYATI) * SUM(MIKTARI) AS ISKONTO, NETFIYATI * SUM(MIKTARI) AS NETTUTARI, TEDARIKCIFIRMA, ' + #13#10 +
      '   FIYATI * SUM(MIKTARI) AS TUTARI, A.MALIYET * SUM(MIKTARI) AS MALIYETTUTARI,  ' + #13#10 +
      '   (NETFIYATI * SUM(MIKTARI)) - (A.MALIYET * SUM(MIKTARI)) AS KAR,  ' + #13#10 +
      '   CASE WHEN A.MALIYET <= 0 THEN 100 ELSE (100 * (NETFIYATI - A.MALIYET)) / (A.MALIYET) END AS GERKARORANI  ' + #13#10 +
      ' FROM(  ' + #13#10 +
      ' Select  ' + #13#10 +
      '   B.CARPAN, B.BIRIMADI, S.STOKKODU, S.CINSI, SB.TARIH, SB.BELGENO,  B.ALISFIYATI1, B.ALISFIYATI1 * MIKTARI AS ALISTUTARI, ' + #13#10 +
      '   H.MIKTARI, H.FIYATI, ISNULL(H.MALIYET, S.MALIYET) * B.CARPAN AS MALIYET,  P.AD + '' '' + P.SOYAD AS PERSONEL, TF.FIRMAADI AS TEDARIKCIFIRMA, ' + #13#10 +
      '   dbo.ISKONTODUS(dbo.ISKONTODUS(((FIYATI * MIKTARI - ISKONTOTOPLAMI) / CASE WHEN MIKTARI <= 0 THEN 1 ELSE MIKTARI END), SB.ALTISKONTO1Y), SB.ALTISKONTO2Y) AS NETFIYATI  ' + #13#10 +
      ' FROM TBLSATFATHAREKET H WITH(INDEX=TBLSATFATHAREKET_FATURAID)  ' + #13#10 +
      ' LEFT OUTER JOIN TBLSATFATBASLIK SB WITH(INDEX=TBLSATFATBASLIK_KARTNO) ON H.FATURAID = SB.KARTNO  ' + #13#10 +
	  ' LEFT OUTER JOIN TBLPERSONEL P ON P.KARTNO = SB.PERSONELID '#13#10 +
      ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON H.STOKID = S.KARTNO  ' + #13#10 +
      ' LEFT OUTER JOIN TBLBIRIMLEREX B WITH(INDEX=TBLBIRIMLEREX_KARTNO) ON H.BIRIMID = B.KARTNO  ' + #13#10 +
      ' LEFT OUTER JOIN TBLCARI C WITH(INDEX=TBLCARI_KARTNO) ON C.KARTNO = SB.CARIID  ' + #13#10 +
	  ' LEFT OUTER JOIN TBLCARI TF WITH(INDEX=TBLCARI_KARTNO) ON TF.KARTNO = S.TEDARIKCI  ' + #13#10 +
      ' WHERE ISNULL(SB.DELETED, 0) = 0 AND SB.TARIH >= @T1 AND SB.TARIH <= @T2 ' + #13#10 +
      ' ) AS A  ' + #13#10 +
      ' GROUP BY STOKKODU, CINSI, BIRIMADI, FIYATI, MALIYET, NETFIYATI, CARPAN, ALISFIYATI1, TEDARIKCIFIRMA, PERSONEL ';
End;

procedure RaporLoad;
Begin
  FindParam(FFilter);
  
  SetViewCaption('BASLIK', 'PARADOX ' + FormatDateTime('dd.mm.yyyy', Tarih1) + ' İLE ' + FormatDateTime('dd.mm.yyyy', Tarih2) + 
       ' ARASI KARLILIK RAPORU');
  
  SetQueryParam('kullaniciQ', 'TARIH1', Tarih1);
  SetQueryParam('kullaniciQ', 'TARIH2', Tarih2);
End;

Function RaporFileName: String;
Begin
  Result:= ParsDir + 'Karlılık Raporları\Karlilik.fr3';
End;

Function RaporDefaultSQL: String;
Begin
  Result:= ReadSQL('TARIH1 = ' + FormatDateTime('dd.mm.yyyy', Date) + #13#10 + 'TARIH2 = ' + FormatDateTime('dd.mm.yyyy', Date));
End;

procedure Start;
Begin
End;

Procedure Finish;
Begin
End;

Function ReadFilter(Var F: String): Boolean;
Var
  t1, t2: TDateTime;
Begin
  Result:= Input2Date('Tarihleri Girin', t1, t2);
  if Result Then
  Begin
    F:= 'TARIH1 = ' + DateToStr(t1) + #13#10 + 'TARIH2 = ' + DateToStr(t2);
  End;
End;

procedure Execute;
Var
  IDS: String;
Begin
  if ReadFilter(IDS) Then
  Begin
	CreateReport(IDS, ReadSQL(IDS), 
     'PERSONEL;STOKKODU:0;CINSI;MIKTARI;BIRIMADI;FIYATI:0;NETFIYATI;ALISFIYATI1:0;MALIYET;ISKONTO:0;NETTUTARI:0;MALIYETTUTARI:0;ALISTUTARI:0;KAR;GERKARORANI;TEDARIKCIFIRMA:0', 
	 'Personel;Stok Kodu;Cinsi;Miktarı;Birim Adı;Fiyatı;Net Fiyatı;1. Alış Fiyatı;Maliyet F.; İskonto;Net Tutar;Maliyet Tutarı;1.Alış F. Tut;Kar; Ger. Kar. Oranı;Tedarikçi,', 
	  0);
	 
	CreateSummary('NETTUTARI', skSum); 
	CreateSummary('MALIYETTUTARI', skSum); 
	CreateSummary('ALISTUTARI', skSum); 
	CreateSummary('KAR', skSum); 
	CreateSummary('MIKTARI', skSum); 
	CreateSummary('ISKONTO', skSum); 
	CreateSummary('CINSI', skCount); 
	
  End;
End;

Begin
End.