Merhaba Naile Hanım,
Öncelikle bana sorulan soruyu açmakla işe başlayayım.
Lks de borç takip olayı var. Bu borç takibinde Örneğin
BD14675 nolu alış faturasını seçip bu fatura 1563,1564,1565 seri nolu çeklerle ödenmiştir diyebiliyorsunuz. Ama borç takip ekranında sadece çek senedin fiş nosu görünüyor. Vatandaşın satıcı firması geldiğinde BD14675 nolu faturamızı ödememişsiniz dediğinde. Adam "bd14675 nolu faturanın hangi çeklerle ödendiğini göreyim" diyor.
Ben de tablo yapılarına baktım.
Kod: Tümünü seç
SELECT NEWSERINO
FROM
LG_200_01_CSCARD AS A,
LG_200_01_CSTRANS AS B,
LG_200_01_PAYTRANS AS C,
LG_200_01_INVOICE AS D,
LG_200_01_PAYTRANS AS E
WHERE
D.FICHENO='0000000000000003' AND D.TRCODE=1 AND
C.FICHEREF=D.LOGICALREF AND C.CLOSINGRATE=1 AND C.TRCODE=1 AND C.MODULENR=4 AND
E.LOGICALREF=C.CROSSREF AND E.CLOSINGRATE=1 AND E.TRCODE=3 AND E.MODULENR=6 AND
B.ROLLREF= E.FICHEREF AND B.LOGICALREF=E.FICHELINEREF AND
A.LOGICALREF=B.CSREF
şeklinde alabildiğimi görebiliyorum.
Lks tarafında ise Adama diyeceğim ki"Sen alış faturasının üzerine geleceksin. örneğin bd14675 nolu faturanın üzerindeyken sağ tıklayıp yaz seçeneğini seçeceksin. Yazıcı yerine ekranı seçeceksin. Sana dökecek. "
yukarıdaki deyimi iki fonksiyon ile lksden alabiliyorum.
Lks de kullanıcı tanımlı bir alan yapıp. bu çek numaralarını alabiliyorum.
Sonucu alış faturasının yaz kısmını alarak sizin bahsettiğiniz firma no ve dönem nolarının sorununu halletmiş oluyorum. Oradan direk fişno, dönem no , firma no bilgilerini kullanıcı girmemiş oluyor.
Lks tarafında _sqlinfo fonksiyonunu biraz yanıltarak istediğimi alıyorum.
Kullanıcı tanımlı alan tipini Metin yapıp formül kısmına
Kod: Tümünü seç
_sqlinfo ("LKSDB.DBO.kysilana('"+[fis]+"',3)","L_BANKCODE","LOGICALREF=2")
yazıyorum. Şuan sadece fiş numarasını vererek 200 nolu firmanın 01 nolu dönemi için yukarıdaki şekilde alabiliyorum. Fişten sonraki 3 rakamı
3. sıradaki serinoyu ver anlamındadır.
Bu şekilde 10 tane kullanıcı tanımlı alan yapıp 3 yerine sıra numarasına göre uygun bilgileri girecektim.
Şu an manuel olarak her şey hazır. Sadece yapmak istediğim.
kursor tanımlamada ve create funtion un return table kısmında
exec sp_executesql ile stringimi çalıştıramıyorum.
Yada daha da değiştireyim fonksiyonun için de de exec komutunu kullanamıyorum.
Bu konuda bilgisi olan varsa yardımlarınızı bekliyorum.
ofenX yazdı:
ile
arasında belirgin bir fark var mı? Hangisini kullanmamı tavsiye edersiniz?
İkisinin arasındaki farkı msdn yi karıştırırken buldum.
Kod: Tümünü seç
Execute a character string:
EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )
ile düz bir deyim işletebiliyorsunuz. Ama
Kod: Tümünü seç
sp_executesql [@stmt =] stmt
[
{, [@params =] N'@parameter_name data_type [,...n]' }
{, [@param1 =] 'value1' [,...n] }
]
ile parametre içeren deyimler oluşturabiliyorsunuz.
Kod: Tümünü seç
declare @dosya varchar(500)
declare @deyim nvarchar(4000)
declare @faturano varchar(16)
declare @belge_nu varchar(16)
set @faturano='0000000000000003'
set @belge_nu='BD14675'
set @dosya ='LG_200_01_INVOICE'
set @deyim=N'select * from '+@dosya+' where FICHENO=@fisno and DOCODE=@belgeno'
exec sp_executesql @deyim,
N'@fisno varchar(16), @belgeno varchar(16)',
@fisno=@faturano,
@belgeno=@belge_nu
şeklinde bir örnek verebiliriz.
Herkese iyi çalışmalar dilerim.