Mar
18
2016

Teslim Alma İşlemi Yapılmış RMA satırının AWAITING_RETURN statüsünde Kalması

Merhaba,

Bu yazımda teslim alma işlemi gerçekleşmiş (rcv_transactions) ancak sipariş satır iş akışı statüsünün AWAITING_RETURN olarak kalmaya devam etmesi probleminin çözümüne ilişkin datafix scriptini paylaşacağım.

Sipariş satırı AWAITING_RETURN statüsünde iken teslim alma işlemine gelir. Teslim alması tamamlanan RMA (Return Material Authorization) satırı işakışı adımı olarak faturalandırılır ve statüsü INVOICED haline gelir. Faturalanan satırın son statüsü CLOSED dur.

Ancak versiyondan kaynaklanan bug nedeniyle teslim alma işlemi gerçekleşen bazı RMA sipariş satırlarının statüsü AWAITING_RETURN olarak kalmaya devam eder. Teslim alması tamamlandığı halde teslim alma alacaklar ekranına satır geldiği için teslim alma işlemine devam edilip çoklamasına sebeb olabilir. Ayrıca fatura aşamasına geçmediği için malzeme stoklara dönse bile memo credit faturası oluşmadığı için iade ödemesi de yapılmayacaktır. Bu hatanın düzeltilmesi ve satırın CLOSED statüsüne gelebilmesi için aşağıdaki datafix kullanılır.

Bug Number : 2065364,2062444

 
DECLARE
   l_line_id         NUMBER;
   l_ordered_qty     NUMBER;
 
   CURSOR line_info
   IS
      SELECT     line_id, ordered_quantity
            FROM oe_order_lines_all ool
           WHERE ool.line_id = l_line_id
             AND ool.flow_status_code = 'AWAITING_RETURN'
             AND NVL (ool.shipped_quantity, 0) = 0
             AND EXISTS (
                    SELECT 'x'
                      FROM mtl_material_transactions mmt
                          ,rcv_transactions rcv
                     WHERE mmt.trx_source_line_id = ool.line_id
                       AND mmt.transaction_type_id = 15
                       AND rcv.oe_order_line_id = ool.line_id
                       AND mmt.rcv_transaction_id = rcv.transaction_id)
      FOR UPDATE NOWAIT;
 
   x_user_id         NUMBER;
   x_org_id          NUMBER;
   x_resp_id         NUMBER;
   x_appl_id         NUMBER;
   x_return_status   VARCHAR2 (10);
   x_msg_count       NUMBER;
   x_msg_data        VARCHAR2 (2000);
 
   TYPE number_tbl IS TABLE OF NUMBER;
 
   l_num             number_tbl      := number_tbl ();
BEGIN
   l_num    :=
      number_tbl (56588925
                 ,56803990
                 ,56634433
                 ,55866645
                 ,54607012
                 ,56750271
                 ,56080727
                 ,56071594
                 ,53991849
                 ,54102972
                 );
 
   FOR i IN 1 .. l_num.COUNT
   LOOP
      l_line_id    := l_num (i);
      DBMS_OUTPUT.put_line ('line_id : ' || l_line_id);
 
      IF NVL (l_line_id, 0) > 0
      THEN
         OPEN line_info;
 
         FETCH line_info
          INTO l_line_id, l_ordered_qty;
 
         IF line_info%notfound
         THEN
            CLOSE line_info;
 
            DBMS_OUTPUT.put_line (   'Error: Invalid Line Id, Re-enter.'
                                  || CHR (10)
                                 );
            --  return;
            GOTO loop_sonu;
         END IF;
 
         CLOSE line_info;
--      else
--         return;
     --    goto loop_sonu;
      END IF;
 
      rcv_oe_rma_receipts_sv.rma_get_org_info (x_user_id
                                              ,x_org_id
                                              ,x_resp_id
                                              ,x_appl_id
                                              ,l_line_id
                                              );
      fnd_global.apps_initialize (x_user_id, x_resp_id, x_appl_id);
 
      UPDATE oe_order_lines
         SET fulfilled_quantity = NULL
            ,last_updated_by = -2054224
            ,last_update_date = SYSDATE
       WHERE line_id = l_line_id;
 
      BEGIN
         oe_rma_receiving.push_receiving_info (l_line_id
                                              ,l_ordered_qty
                                              ,'NO PARENT'
                                              ,'RECEIVE'
                                              ,'N'
                                              ,x_return_status
                                              ,x_msg_count
                                              ,x_msg_data
                                              );
 
         IF x_return_status = 'S'
         THEN
            oe_rma_receiving.push_receiving_info (l_line_id
                                                 ,l_ordered_qty
                                                 ,'RECEIVE'
                                                 ,'DELIVER'
                                                 ,'N'
                                                 ,x_return_status
                                                 ,x_msg_count
                                                 ,x_msg_data
                                                 );
         END IF;
 
         oe_debug_pub.add ('no. of OE messages :' || x_msg_count, 1);
         DBMS_OUTPUT.put_line ('no. of OE messages :' || x_msg_count);
 
         FOR k IN 1 .. x_msg_count
         LOOP
            x_msg_data    :=
                          oe_msg_pub.get (p_msg_index      => k
                                         ,p_encoded        => 'F');
            oe_debug_pub.add (SUBSTR (x_msg_data, 1, 255));
            oe_debug_pub.add (SUBSTR (x_msg_data, 255, LENGTH (x_msg_data)));
            DBMS_OUTPUT.put_line ('Error msg: ' || SUBSTR (x_msg_data, 1, 200)
                                 );
         END LOOP;
 
         fnd_msg_pub.count_and_get (p_encoded      => 'F'
                                   ,p_count        => x_msg_count
                                   ,p_data         => x_msg_data
                                   );
         oe_debug_pub.add ('no. of FND messages :' || x_msg_count, 1);
         DBMS_OUTPUT.put_line ('no. of FND messages :' || x_msg_count);
 
         FOR k IN 1 .. x_msg_count
         LOOP
            x_msg_data    :=
                         fnd_msg_pub.get (p_msg_index      => k
                                         ,p_encoded        => 'F');
            DBMS_OUTPUT.put_line ('Error msg: ' || SUBSTR (x_msg_data, 1, 200)
                                 );
            oe_debug_pub.add (SUBSTR (x_msg_data, 1, 255));
         END LOOP;
 
         IF x_return_status <> 'S'
         THEN
            oe_debug_pub.add ('Error occurred, rolling back changes.', 1);
            DBMS_OUTPUT.put_line
                          ('Error occurred, please fix the errors and retry.');
            ROLLBACK;
         ELSE
            COMMIT;
         END IF;
      END;
 
      DBMS_OUTPUT.put_line (   'For details, see OM Debug File: '
                            || oe_debug_pub.g_dir
                            || '/'
                            || oe_debug_pub.g_file
                           );
 
      <<loop_sonu>>
      NULL;
   END LOOP;
END;

Mustafa Korkmaz

Oracle Applications Developer at Partnera
2005 yılında Dokuz Eylül Üniversitesi Endüstri Mühendisliğinden Mezun
Oldu, 2011 Yılında Ahmet Yesevi Üniversitesi Bilgisayar Mühendisliğinde
Yüksek Lisansını Tamamlandı,2012 Yılında Doğuş Üniversitesinde Bilgisayar
Mühendisliği Doktora Eğitimine Başladı.10 yılı aşkın bir zamandır Oracle
Ürünleri Uygulama Yazılım Uzmanı Olarak profesyonel kariyerine devam
etmektedir. İlgi alanları Middleware, CI/CD,
Oracle Database , PL/SQL , Java , Makine Öğrenmesi ve Veri Madenciliği alanlarındadır.
2 versiyon Oracle Database ' (10g, 11g) inde OCA(Oracle Certificate Associate) ve
PL/SQL Certificated Professional ünvanları bulunmaktadır.
Mail: mustafakorkmz@gmail.com
Mustafa Korkmaz


Yorum yapın

*