Function ReadSQL(W: String): String;
Var
  S: String;
Begin
  S:= REPLACESTRING(W, 'ANAGRUP', 'S.ETKENMADDE');
  S:= REPLACESTRING(S, 'DEPOKODU', 'D.KOD');
  S:= REPLACESTRING(S, 'DEPOADI', 'D.ACIKLAMA');
  S:= REPLACESTRING(S, 'STOKKODU', 'A.STOKKODU');
  S:= REPLACESTRING(S, 'CINSI', 'A.CINSI');

  Result:= 'Select   ' +
  '   A.STOKID, DEPO AS DEPOID, D.KOD AS DEPOKOD, D.ACIKLAMA AS DEPOADI, S.STOKKODU, S.CINSI, B.BIRIMADI,  ' +
  '   S.ETKENMADDE AS ANAGRUP, S.GRUPADI AS ALTGRUP, KOD1, KOD2, KOD3, KOD4, KOD5,    ' +
  '   (Sum(A.GIREN) - SUM(A.CIKAN)) / B.CARPAN AS DEPO From (  ' +
  ' Select   ' +
  '   ISLEM, D.STOKID, D.CIKISDEPO AS DEPO, STOKKODU, CINSI, 0 AS GIREN, Sum(Coalesce(D.CIKAN, 0)) AS CIKAN  ' +
  ' from STOKHAREKET D  ' +
  ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON D.STOKID = S.KARTNO  ' +
  ' WHERE D.CIKISDEPO <> 0 AND D.CIKISDEPO IS NOT NULL AND ISLEMTIPI <> 10  ' +
  ' Group By STOKKODU, CINSI, ISLEM, STOKID, CIKISDEPO  ' +
  ' UNION ALL  ' +
  ' Select   ' +
  '   ISLEM, D.STOKID, D.GIRISDEPO, STOKKODU, CINSI, Sum(Coalesce(D.GIREN, 0)) AS GIREN, 0 AS CIKAN   ' +
  ' from STOKHAREKET D  ' +
  ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON D.STOKID = S.KARTNO  ' +
  ' WHERE D.GIRISDEPO <> 0 AND D.GIRISDEPO IS NOT NULL AND ISLEMTIPI <> 10  ' +
  ' Group By STOKKODU, CINSI, ISLEM, STOKID, GIRISDEPO  ' +
  ' UNION ALL  ' +
  ' Select   ' +
  '   ISLEM, D.STOKID, D.GIRISDEPO, STOKKODU, CINSI, Sum(Coalesce(D.CIKAN, 0)) AS GIREN, 0 AS CIKAN   ' +
  ' from STOKHAREKET D  ' +
  ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON D.STOKID = S.KARTNO  ' +
  ' WHERE D.GIRISDEPO <> 0 AND D.GIRISDEPO IS NOT NULL AND ISLEMTIPI = 10  ' +
  ' Group By STOKKODU, CINSI, ISLEM, STOKID, GIRISDEPO  ' +
  ' UNION ALL  ' +
  ' Select   ' +
  '   ISLEM, D.STOKID, D.CIKISDEPO, STOKKODU, CINSI, 0 AS GIREN, Sum(Coalesce(D.CIKAN, 0)) AS CIKAN   ' +
  ' from STOKHAREKET D  ' +
  ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON D.STOKID = S.KARTNO  ' +
  ' WHERE D.CIKISDEPO <> 0 AND D.CIKISDEPO IS NOT NULL AND ISLEMTIPI = 10  ' +
  ' Group By STOKKODU, CINSI, ISLEM, STOKID, CIKISDEPO  ' +
  ' UNION ALL  ' +
  ' Select   ' +
  '   ISLEM, D.STOKID, 1, STOKKODU, CINSI, 0 AS GIREN, Sum(Coalesce(D.CIKAN, 0)) AS CIKAN   ' +
  ' from STOKHAREKET D  ' +
  ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON D.STOKID = S.KARTNO  ' +
  ' WHERE ISLEMTIPI = -1 ' +
  ' Group By STOKKODU, CINSI, ISLEM, STOKID  ' +
  ' ) AS A  ' +
  ' LEFT OUTER JOIN TBLDEPOLAR D ON A.DEPO = D.KARTNO  ' +
  ' LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON A.STOKID = S.KARTNO  ' +
  ' LEFT OUTER JOIN TBLBIRIMLEREX B WITH(INDEX=TBLBIRIMLEREX_KARTNO) ON B.KARTNO = S.ANABIRIM  ';

  if S <> '' Then
    Result:= Result + ' WHERE ' + S;

  Result:= Result +  
    ' Group By A.STOKID, DEPO, ACIKLAMA, S.STOKKODU, S.CINSI, B.CARPAN, B.BIRIMADI,  ' +
    '   S.ETKENMADDE, S.GRUPADI, KOD1, KOD2, KOD3, KOD4, KOD5, D.KOD  ';	
End;

procedure RaporLoad;
Begin
  SetViewCaption('BASLIK', 'PARADOX DEPO BAZLI ENVANTER RAPORU');
  SetQuerySQL('KullaniciQ', ReadSQL(FFilter));
End;

Function RaporFileName: String;
Begin
  Result:= ParsDir + 'Stok Raporları\Envanter Raporları\Depo Bazlı Envanter Raporu.fr3';
End;

Function RaporDefaultSQL: String;
Begin
  Result:= ReadSQL('');
End;

procedure Start;
Begin
End;

Procedure Finish;
Begin
End;

Function ReadFilter(Var F: String): Boolean;
Var
  B: Boolean;
  IDS: String;
Begin
// TableName, SQL, SearchFilter, Fields, Captions, SelectListFields, FilteredFields, FilteredCaptions, OrderBy, IndexField, var Filter
  Result:= ReadSQLFilter('TBLSTOKLAR', 
        'Select ' +  
		'  D.KOD AS DEPOKODU, D.ACIKLAMA AS DEPOADI, ' + 
		'  STOKKODU, CINSI, S.ETKENMADDE AS ANAGRUP, S.GRUPADI AS ALTGRUP, B.BIRIMADI, B.BARKOD, ' +  
		'  KOD1, KOD2, KOD3, KOD4, KOD5, ISNULL(SD.SEMBOL, ''TL'') AS PB1, S.KDV ' + 
		' from TBLSTOKLAR S ' +  
		' LEFT OUTER JOIN TBLBIRIMLEREX B WITH(INDEX=TBLBIRIMLEREX_KARTNO) ON B.KARTNO = S.ANABIRIM ' +  
		' LEFT OUTER JOIN TBLDOVIZLER SD ON SD.KARTNO = B.SATISFIYATIPB1 ' +  
		' LEFT OUTER JOIN TBLDEPOLAR D ON 1 = 1 ' +
		' WHERE S.DELETED = 0', 
		'DELETED = 0', 
		'DEPOKODU;DEPOADI;STOKKODU;CINSI;ANAGRUP;GRUPADI;BIRIMADI;KOD1;KOD2;KOD3;KOD4;KOD5;PB1;KDV', 
		'Depo Kodu;Depo Adı;Stok Kodu;Cinsi;Ana Grup;Alt Grup;Birim Adı;Özel Kod 1;Özel Kod 2;Özel Kod 3;Özel Kod 4;Özel Kod 5;Para Birimi;KDV',
        'DEPOKODU;DEPOADI;STOKKODU;CINSI;ANAGRUP;ALTGRUP;KOD1;KOD2;KOD3;KOD4;KOD5', 
		'DEPOKODU;DEPOADI;STOKKODU;CINSI;ANAGRUP;ALTGRUP;BIRIMADI;KOD1;KOD2;KOD3;KOD4;KOD5',
		'Depo Kodu;Depo Adı;Stok Kodu;Cinsi;Ana Grup;Alt Grup;Birim Adı;Özel Kod 1;Özel Kod 2;Özel Kod 3;Özel Kod 4;Özel Kod 5',
        'STOKKODU', 'KARTNO', F); 
End;

procedure Execute;
Var
  IDS: String;
Begin
  if ReadFilter(IDS) Then
  Begin
	CreateReport(IDS, ReadSQL(IDS), 
     'DEPOKOD;DEPOADI;STOKKODU;CINSI;ANAGRUP:0;ALTGRUP:0;KOD1:0;KOD2:0;KOD3:0;KOD4:0;KOD5:0;DEPO;BIRIMADI',
	 'Depo Kodıu;Depo Adı;Stok Kodu;Cinsi;Ana Grup;Alt Grup;Özel Kod 1;Özel Kod 2;Özel Kod 3;Özel Kod 4;Özel Kod 5;Depo;Birim Adı',
	  2);
	  
	AddDataField('DEPO');
	AddRowField('CINSI');
	AddColumnField('DEPOADI');
  End;
End;

Begin
End.