Kategori arşivi: IFS ERP

IFS ERP ile ilgili örnekler

IFS ERP-Satış Siparişi Fiyat Güncellemek

IFS ERP-Satış Siparişi Fiyat Güncellemek

Aşağıdaki plsql blok ile, IFS satış siparişinin fiyatları fiyat listesi ile yeniden güncellenmiş olur, production ortamlarda denemeden önce test ortamlarında sonuçlarını görünüz.Tabi statüsü planned ve released olan satırlar için geçerlidir. Currency TL olarak alınmıştır, dövizli satışlarda kur ve yabancı para değerlerini hesaplayıp göndermek gerekir.

DECLARE
info_ VARCHAR2(2000);
objid_ VARCHAR2(2000);
objversion_ VARCHAR2(2000);
attr_ VARCHAR2(2000);
BEGIN
FOR rec_ IN (

SELECT k.*,
NVL((SELECT fl.sales_price
FROM IFSAPP.SALES_PRICE_LIST_PART fl
WHERE fl.price_list_no='Fiyat Listesi No'
AND fl.catalog_no =k.catalog_no),0) fiyat ,
k.sale_unit_price satıs_fiyati
FROM customer_ordeR_line k
WHERE k.order_no IN ('&SIP_NO')
AND k.sale_unit_price=0

) LOOP

Client_Sys.Clear_Attr(attr_);
Client_Sys.Add_To_Attr('SALE_UNIT_PRICE',rec_.fiyat,attr_);
Client_Sys.Add_To_Attr('BASE_SALE_UNIT_PRICE',rec_.fiyat,attr_);
Client_Sys.Add_To_Attr('CURRENCY_RATE',1,attr_);

IFSAPP.Customer_Order_Line_api.Modify(attr_,rec_.order_no,rec_.line_no,rec_.rel_no,rec_.line_item_no);

END LOOP;
END;

IFS ERP- Toplu Sipariş İptal Etmek

IFS ERP- Toplu Sipariş İptal Etmek

IFS ERP satış siparişlerinde topluca iptal etmeniz gerekirse aşağıdaki scriptleri kendinize göre uyarlayıp kullanabilirsiniz. Lütfen kullanmadan önce test ortamlarında yazdığınız scriptin sonuçlarını görün.

1. Satırı Olmayıp Başlığı Planlı Statüsünde Bekleyenlerin İptali.

DECLARE 
BEGIN 
FOR rec_ IN (
SELECT k.order_no,k.Date_Entered
 FROM  IFSAPP.customer_order_tab k
WHERE  k.date_entered > SYSDATE-10 
AND    k.Rowstate LIKE 'Plan%'
AND    ( SELECT COUNT(*) FROM customer_ordeR_line cl
            WHERE cl.order_no=k.order_no)=0
           ) LOOP
IFSAPP.Customer_order_api.Set_Cancelled(rec_.order_no);
END LOOP;
END;            

2. Tüm Satırları İptal Olup Başlığı İptal Olmayan Siparişlerin İptali

Bu case normalde olmaması gereken bir durumdur, manuel update edilmiş kayıtlar vardır, ve sipariş başlığı unutulmuştur, temizlenmesi gerekir.

DECLARE 
BEGIN 
FOR rec_ IN (
SELECT k.order_no
 FROM  IFSAPP.customer_order_tab k
WHERE  k.date_entered > SYSDATE-10 
AND    k.Rowstate LIKE 'Releas%'
AND    (SELECT COUNT(*) FROM IFSAPP.customer_ordeR_line cl
            WHERE cl.order_no=k.order_no
              AND cl.objstate='Cancelled')= 
       (SELECT COUNT(*) FROM IFSAPP.customer_ordeR_line cl
            WHERE cl.order_no=k.order_no)
             ) LOOP
IFSAPP.Customer_order_api.Set_Cancelled(rec_.order_no);
END LOOP;
END;

Umarım faydalı olur.

IFS-ERP Lokasyonlar Arası Taşıma Yapmak

IFS-ERP Lokasyonlar Arası Taşıma Yapmak

Bir ziyaretçimiz IFS ERP’de lokasyonlar arası taşıma ile ilgili işimizi kolaylaştıracak pratik bir çözüm var mı
diye sordu, beraber lokasyonlar arası taşıma işlemini yapalım. Bir lokasyonda olan tüm ürünleri başka bir lokasyona plsql script ile aktaracağız.

rec_ içindeki selecti kendi sisteminize göre düzenlemelisiniz!
Çalıştırmadan önce test ortamında test etmeniz faydanıza olacaktır..

BEGIN
   FOR rec_ IN ( SELECT * FROM inventory_part_in_stock_tab t
	               WHERE contract = 'SITE_KODU' 
                         AND part_no LIKE 'ÜRÜN_KODU%'
		         AND t.availability_control_id IS NULL 
                         AND location_no='SOURCE_LOKASYON_KODU')

            Inventory_Part_In_Stock_API.Move_Part(dummy_,
                                                  rec_.contract,
                                                  rec_.part_no,
                                                  rec_.configuration_id,
                                                  rec_.location_no,
                                                  rec_.lot_batch_no,
                                                  rec_.serial_no,
                                                  rec_.eng_chg_level,
                                                  rec_.waiv_dev_rej_no,
                                                  to_date(NULL),
                                                  rec_.contract,
                                                  'HEDEF_LOKASYON_KODU',
                                                  Inventory_Part_Destination_API.get_client_value(1),
                                                  rec_.qty_onhand,
                                                  0,
                                                  'TOPLU TASIMA-Açıklama',
                                                  '',
                                                  '',
                                                  '',
                                                  '',
                                                  '',
                                                  'N'); 
   END LOOP;
END;        

Faydalı olması dileğiyle..

IFS ERP Satış Siparişine Rezervasyon Koymak

IFS ERP Satış Siparişine Rezervasyon Koymak

Aşağıdaki plsql script ile bir siparişin istediğiniz satırlarına ya da hepsine belirlediğiniz lokasyondan otomatik olarak rezervasyon yaptırabilirsiniz, değişkenlerin tanımlandığı(order_no,location_no vb) satırlara commentler ekledim, kendi IFS tanımlarınıza göre düzenleyebilirsiniz.

Tabi bu işlemi satış siparişleri listesinde satırlara sağ tıklayıp rezervasyon diyerek yapabilirsiniz, ama yüklü bir sipariş varsa ve bir an önce halletmeniz isteniyorsa işinize çok yarayacağını düşünüyorum 🙂

Bu aralar IFS erp ile ilgili çok soru alıyorum, elimden geldiğince bir şeyler paylaşacağım..

DECLARE 
   info_            VARCHAR2(2000);
   objid_           VARCHAR2(2000);
   objversion_      VARCHAR2(2000);
   attr_            VARCHAR2(2000);
   attr2_           VARCHAR2(2000);
   co_line_no_      VARCHAR2(20);
   co_rel_no_       VARCHAR2(20);
   co_line_item_no_ NUMBER;
   state_           VARCHAR2(100);
   qty_             NUMBER;
   rez_miktar_      NUMBER;
   co_no_           VARCHAR2(20):='R10055'; --Sipariş Numarası 
   
BEGIN   

FOR C2 IN ( 
           SELECT * FROM customer_order_line cl
            WHERE cl.order_no=co_no_
              AND cl.objstate!='Reserved'
              ORDER BY to_number(cl.line_no)
  
          ) LOOP

    rez_miktar_ := c2.buy_qty_due;

    FOR C3 IN (SELECT z.*,z.qty_onhand-z.qty_reserved serbest_miktar 
                 FROM INVENTORY_PART_IN_STOCK Z 
                WHERE Z.CONTRACT=C2.CONTRACT 
                  AND Z.PART_NO=C2.PART_NO 
                  AND Z.QTY_ONHAND-Z.QTY_RESERVED>0
                  AND INVENTORY_LOCATION_API.Get_Warehouse(Z.CONTRACT,Z.LOCATION_NO)='SEVK'
                  AND Z.LOCATION_NO NOT IN ('DEPO') --Hangi depo ya da depolardan rezervasyon koymak isterseniz..
              ) LOOP
      
      IF  rez_miktar_   > c3.serbest_miktar THEN 
          qty_         := c3.serbest_miktar;
          rez_miktar_  := rez_miktar_-qty_;
      ELSE 
          qty_         := rez_miktar_;
          rez_miktar_  := 0;      
      END  IF ;
      
      
      dbms_output.put_line('rez_miktar_'|| rez_miktar_);
      dbms_output.put_line('qty_'|| qty_);

      IF  qty_ > 0 THEN       
                  Reserve_Customer_Order_API.Reserve_Manually__( info_, 
                                                                 state_, 
                                                                 c2.order_no,
                                                                 c2.line_no,
                                                                 c2.rel_no,
                                                                 c2.line_item_no,
                                                                 C3.contract, 
                                                                 C3.part_no,
                                                                 C3.location_no,
                                                                 C3.lot_batch_no,
                                                                 '*',
                                                                 '1', 
                                                                 C3.waiv_dev_rej_no,
                                                                 NULL,
                                                                 qty_);
                  
       END  IF;
    END LOOP;
END LOOP;
END;

Umarım faydalı olur.

IFS ERP Hızlı Rapor Yetki Işlemleri

IFS ERP Hızlı Rapor Yetki Işlemleri

Hızlı raporlara yetki vermek ve almak için bilmemiz gereken iki değişken var, biri rapor id’si öteki kullanıcı rolü.Rapor id’yi bilmiyorsanız aşağıdaki sorgudan öğrenebilirsiniz.İşlemleri IFSAPP kullanıcısıyla yapıyoruz.

SELECT v.po_id,v.description FROM quick_report v;

Hızlı rapora yetki vermek:

BEGIN
security_sys.Grant_Pres_Object('repQUICK_REPORT23','ROLE_FINANS');
security_sys.Refresh_Active_List__(1);
END;

repQUICK_REPORT23 nolu raporu ROLE_FINANS rolüne atamış oluyoruz, bu ROLE sahip kullanıcılar
da raporu hızlı raporlarda görmüş oluyor..

IFS Erp Hızlı rapor yetki kaldırmak:

BEGIN
security_sys.Revoke_Pres_Object('repQUICK_REPORT12','ROLE_MUHASEBE');
security_sys.Refresh_Active_List__(1);
END;

repQUICK_REPORT12 nolu raporu ROLE_MUHASEBE rolünden almış oluyoruz,
bu rapor ROLE_MUHASEBE Rolünden çıkmış oluyor.

Raporu herkesten kaldırmak:

DECLARE
BEGIN
FOR REC_ IN (SELECT J.ROLE, J.PO_ID
FROM PRES_OBJECT_GRANT_TAB J
WHERE J.PO_ID LIKE 'repQUICK_REPORT25') LOOP
IFSAPP.SECURITY_SYS.REVOKE_PRES_OBJECT(REC_.PO_ID, REC_.ROLE);
END LOOP;
COMMIT;
IFSAPP.SECURITY_SYS.REFRESH_ACTIVE_LIST__(1);
END;

 

 

 

Umarım faydalı olur.

IFS ERP-Toplu Fiş Satırı Eklemek

 IFS ERP-Toplu Fiş Satırı Eklemek

Başlığı oluşturulmuş fiş bilgisine nasıl topluca satır ekleriz beraber bakalım.Aşağıdaki örnekte Credit(alacak) tarafına değer atılmıştır, siz kendinize göre uyarlayabilir, Debet tarafına da satır girebilirsiniz.Kod parçaları olarak code_d ve account kullandım isteğiniz doğrultusunda diğer kod parçalarını da ekleyebilirsiniz.

fis_temp_tab tablosunun yapısı;

CREATE TABLE fis_temp_tab
( hesap VARCHAR2(100),
code_d VARCHAR2(100),
debet NUMBER,
credit NUMBER )

Scriptimiz;

DECLARE

info_ VARCHAR2(2000);
objid_ VARCHAR2(2000);
objversion_ VARCHAR2(2000);
attr_ VARCHAR2(2000);
BEGIN
FOR rec_ IN(SELECT b.* FROM fis_temp_tab b
             WHERE b.Credit IS NOT NULL) LOOP

client_sys.Clear_Attr(attr_);

client_sys.Add_To_Attr('COMPANY','&Sirket_Kodu',attr_);
client_sys.Add_To_Attr('ACCOUNTING_YEAR',2011,attr_);
client_sys.Add_To_Attr('VOUCHER_NO','&Fis_No',attr_);
client_sys.Add_To_Attr('VOUCHER_DATE',TO_DATE('01.01.2011','DD.MM.YYYY'),attr_);
client_sys.Add_To_Attr('CURRENCY_TYPE','MDBA',attr_);
client_sys.Add_To_Attr('CURRENCY_RATE',1,attr_);
client_sys.Add_To_Attr('ACCOUNTING_PERIOD',1,attr_);
client_sys.Add_To_Attr('CONVERSION_FACTOR',1,attr_);
client_sys.Add_To_Attr('AUTO_TAX_VOU_ENTRY','FALSE',attr_);
client_sys.Add_To_Attr('TAX_AMOUNT',0,attr_);
client_sys.Add_To_Attr('CORRECTED','N',attr_);
client_sys.Add_To_Attr('VOUCHER_TYPE','&Fis_Turu',attr_);
client_sys.Add_To_Attr('ACCOUNT',REC_.HESAP,attr_);
client_sys.Add_To_Attr('CODE_D',REC_.CODE_D,attr_);
client_sys.Add_To_Attr('TRANS_CODE','MANUAL',attr_);
client_sys.Add_To_Attr('CURRENCY_CODE','TL',attr_);
client_sys.Add_To_Attr('CREDIT_AMOUNT',REC_.CREDIT,attr_);
client_sys.Add_To_Attr('CURRENCY_CREDIT_AMOUNT',REC_.CREDIT,attr_);
client_sys.Add_To_Attr('TAX_AMOUNT',0,attr_);
client_sys.Add_To_Attr('TAX_BASE_AMOUNT',0,attr_);
client_sys.Add_To_Attr('CURRENCY_TAX_BASE_AMOUNT',0,attr_);

VOUCHER_ROW_API.New__(info_,objid_,objversion_,attr_,'DO');

END LOOP;
END;

COMMIT;

 

Umarım faydalı Olur.

 

 

IFS ERP Toplu Sipariş Açmak

IFS ERP Toplu Sipariş Açmak:

Başlığı oluşturulmus siparişe detay satır giren script.Declare kısmında tanımladığımız sipariş numarasına aa_temp tablosunda belirtilen malzeme kodu, miktar ve birim fiyatla satır ekler.Site vs bilgileri kendinize göre uyarlamalısınız..

 

   DECLARE 
   info_       VARCHAR2(2000);
   objid_      VARCHAR2(2000);
   objversion_ VARCHAR2(2000);
   attr_       VARCHAR2(2000);
   --sat siparişi no burada tanımlanacak
   sat_sip_no_ VARCHAR2(20):='I10104';

 BEGIN 

   FOR rec_ IN (SELECT  part_no,miktar,0 fiyat  FROM aa_temp) LOOP 

   client_sys.Clear_Attr(attr_);
   client_sys.Add_To_Attr('ORDER_NO',sat_sip_no_,attr_);
   client_sys.Add_To_Attr('CONTRACT','10',attr_);
   client_sys.Add_To_Attr('CATALOG_NO',rec_.part_no,attr_);
   client_sys.Add_To_Attr('PART_NO',rec_.part_no,attr_);
   client_sys.Add_To_Attr('ORDER_CODE','O',attr_);
   client_sys.Add_To_Attr('SALES_UNIT_MEAS','m2',attr_);
   client_sys.Add_To_Attr('BASE_SALE_UNIT_PRICE',rec_.fiyat,attr_);
   client_sys.Add_To_Attr('BUY_QTY_DUE',rec_.miktar,attr_);
   client_sys.Add_To_Attr('CATALOG_TYPE',Sales_Part_Type_API.Decode('INV'),attr_);
   client_sys.Add_To_Attr('CONV_FACTOR',1,attr_);
   client_sys.Add_To_Attr('COST',0,attr_);
   client_sys.Add_To_Attr('DISCOUNT',0,attr_);
   client_sys.Add_To_Attr('ORDER_DISCOUNT',0,attr_);
   client_sys.Add_To_Attr('PLANNED_DELIVERY_DATE',SYSDATE+2,attr_);
   client_sys.Add_To_Attr('PLANNED_DUE_DATE',SYSDATE+2,attr_);
   client_sys.Add_To_Attr('PRICE_CONV_FACTOR',1,attr_);
   client_sys.Add_To_Attr('PROMISED_DELIVERY_DATE',SYSDATE+2,attr_);
   client_sys.Add_To_Attr('QTY_ASSIGNED',0,attr_);
   client_sys.Add_To_Attr('QTY_INVOICED',0,attr_);
   client_sys.Add_To_Attr('QTY_ON_ORDER',0,attr_);
   client_sys.Add_To_Attr('QTY_PICKED',0,attr_);
   client_sys.Add_To_Attr('QTY_RETURNED',0,attr_);
   client_sys.Add_To_Attr('QTY_SHIPDIFF',0,attr_);
   client_sys.Add_To_Attr('QTY_SHIPPED',0,attr_);
   client_sys.Add_To_Attr('QTY_TO_SHIP',0,attr_);
   client_sys.Add_To_Attr('QTY_SHORT',0,attr_);
   client_sys.Add_To_Attr('REVISED_QTY_DUE',rec_.miktar,attr_);
   client_sys.Add_To_Attr('SALE_UNIT_PRICE',rec_.fiyat,attr_);
   client_sys.Add_To_Attr('SUPPLY_CODE',Order_Supply_Type_API.Decode('IO'),attr_);
   client_sys.Add_To_Attr('CURRENCY_RATE',1,attr_);
   client_sys.Add_To_Attr('WANTED_DELIVERY_DATE',SYSDATE+2,attr_);
   client_sys.Add_To_Attr('CONSIGNMENT_STOCK',Consignment_Stock_API.Decode('NO CONSIGNMENT STOCK'),attr_);
   client_sys.Add_To_Attr('CLOSE_TOLERANCE',0,attr_);
   client_sys.Add_To_Attr('CHARGED_ITEM',Charged_Item_API.Decode('CHARGED ITEM'),attr_);
   client_sys.Add_To_Attr('CREATE_SM_OBJECT_OPTION',Create_Sm_Object_Option_API.Decode('DONOTCREATESMOBJECT'),attr_);
   client_sys.Add_To_Attr('DEFAULT_ADDR_FLAG',Gen_Yes_No_API.Decode('Y') ,attr_);
   client_sys.Add_To_Attr('ADDR_FLAG',Gen_Yes_No_API.Decode('N') ,attr_);
   client_sys.Add_To_Attr('DELIVERY_TERMS','*',attr_);
   client_sys.Add_To_Attr('DELIVERY_LEADTIME',0,attr_);
   client_sys.Add_To_Attr('DESIRED_QTY',rec_.miktar,attr_);
   client_sys.Add_To_Attr('STAGED_BILLING',Staged_Billing_Type_API.Decode('NOT STAGED BILLING'),attr_);
   client_sys.Add_To_Attr('VAT',Pay_Vat_API.Decode('Y'),attr_);
   client_sys.Add_To_Attr('SM_CONNECTION',Service_Management_Connect_API.Decode('NOT CONNECTED') ,attr_);
   client_sys.Add_To_Attr('PART_PRICE',0,attr_);
   client_sys.Add_To_Attr('PRICE_SOURCE',Pricing_Source_API.Decode('BASE'),attr_);
   client_sys.Add_To_Attr('PRICE_FREEZE',Freeze_Flag_API.Decode('FREE'),attr_);
   client_sys.Add_To_Attr('CONFIGURATION_ID','*',attr_);
   client_sys.Add_To_Attr('CTP_PLANNED',Gen_Yes_No_API.Decode('N'),attr_);
   client_sys.Add_To_Attr('INTRASTAT_EXEMPT',Intrastat_Exempt_API.Decode('INCLUDE'),attr_);
   client_sys.Add_To_Attr('PART_OWNERSHIP',Part_Ownership_API.Decode('COMPANY OWNED'),attr_);
   client_sys.Add_To_Attr('EXCHANGE_ITEM',Exchange_Item_API.Decode('ITEM NOT EXCHANGED'),attr_);
   client_sys.Add_To_Attr('SHIP_ADDR_NO','01',attr_);
   client_sys.Add_To_Attr('SUPPLY_SITE_RESERVE_TYPE',Supply_Site_Reserve_Type_API.Decode('NOTALLOWED'),attr_);
   client_sys.Add_To_Attr('RELEASE_PLANNING',Release_Planning_API.Decode('NOTRELEASED'),attr_);
   client_sys.Add_To_Attr('SHIP_VIA_CODE','*',attr_);

   Customer_order_line_api.New__(info_,objid_ ,objversion_ ,attr_,'DO');

   END LOOP ;
   END;

Umarım Faydalı olur.