SAP B1 – Dillere Göre Tanımların Tek Satırda Verilerini Alma

Merhaba,

SAP B1’da default olarak (örneğin kalem ana verileri ekranında OITM tablosunda) türkçe tanımları kullanırız, orjinal alanların yada udf (user defined field)’ lerin ingilizce yada diğer dillerdeki tanımları ise biraz farklı olarak tutulmakta. Bunun için OMLT ve MLT1 tabloları kullanılmakta. Bu tablo yapılarına göre veriler dil kodu ve kolon ismi ne ise ona göre tutulmaktadır. Yani;

ItemName  LangCode Trans
  elma      8      apple
  elma      23     manzanas

Burada 8 ingilizce, 23 te ispanyolca için çevirili dil kodudur.

Bir malzeme kodunun tüm alanlarına ait dil tanımlarını çekmek istediğinizde ise bu verilere direkt olarak ulaşamıyorsunuz. OITM OMLT ve MLT1 tablolarına inner join atarak yazacağınız query size alan sayısı kadar satır olarak geri dönecektir. 50 kolonunuz varsa 50 satır veri olarak geri dönecektir. Fakat buradan alacağınız veriyi başka bir tabloyu güncelleme ve çıktı için kullanmaya çalıştığınızda size bir çok if le birlikte bunları yazmanıza neden olacaktır.

Bu kolonların isimleri ve o dile ait tanımlarını içeren tek satırlık bir sonuca erişmeniz sizin işinizi daha kolaylaştıracaktır. Bunun için sql de transpoze işlemini pivot clause ile yapabiliriz.

SELECT U_A, U_B,U_C,U_D

         FROM

(

  SELECT CAST(M.Trans as NVARCHAR(200)) AS Trans,O.FieldAlias FROM OMLT O
 
          INNER JOIN MLT1 M ON (O.TranEntry = M.TranEntry)

          WHERE  O.PK = '980130001' AND M.LangCode = 8 AND O.FieldAlias IN

 ('U_A','U_B','U_C','U_D')

) HAUS

PIVOT
(

  MAX(Trans)

  FOR FieldAlias in (U_A, U_B,U_C,U_D)

	  )
) PIV_HAUS;

MLT1 tablosundaki Trans kolonu NTEXT tanımlıdır. Bu yüzden onu NVARCHAR data tipine çevirmemiz gerekmektedir. Onun dışında U_A … U_D kolon isimlerinin karşılıklarını verdiğinizde o malzeme kodu için o dildeki tanımları tek satırda almış olursunuz ve daha sonra da bu kolonların karşılıkları olan uygun yerlere atamalarını yapabilirsiniz.

**Dikkat etmeniz gereken bir nokta, U_A … U_D yazan kısımlarda isimlendirmeler aynı olmalı. Kolon ismi U_FFF ise ilk satırdaki SELECT  in karşısında ve FOR dan sonraki sorgulanan alanlar içinde de U_FFF  yazmalı.

sql-server.png

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s