Архив

Публикации с меткой ‘INV’

OEBS API INV: Создание заказа на перемещение

Пример использования API для создания заказа на перемещение

declare 
  lx_doc_hdr    inv_move_order_pub.Trohdr_Rec_Type;
  lx_doc_lines  inv_move_order_pub.Trolin_Tbl_Type;    
  --
  lx_doc_hdr_vals   inv_move_order_pub.Trohdr_Val_Rec_Type;
  lx_doc_lines_vals inv_move_order_pub.Trolin_Val_Tbl_Type;
  lx_return_status  varchar2(1);
  lx_msg_data       varchar2(4000);
  lx_msg_count      number;
begin
  -- тип заказа на перемещение = заявка
  lx_doc_hdr.move_order_type        := inv_globals.G_MOVE_ORDER_REQUISITION;
  lx_doc_hdr.organization_id        := 1775;
  lx_doc_hdr.date_required          := sysdate;
  
  lx_doc_hdr.operation              := inv_globals.G_OPR_CREATE;
  lx_doc_hdr.header_status          := inv_globals.G_TO_STATUS_PREAPPROVED;
    
  -- создание заголовка заказа на перемещение
  inv_move_order_pub.create_move_order_header(
    p_api_version_number => 1,
    p_init_msg_list      => fnd_api.G_TRUE,
    p_return_values      => fnd_api.G_TRUE,
    p_commit             => fnd_api.G_FALSE,
    x_return_status      => lx_return_status,
    x_msg_count          => lx_msg_count,
    x_msg_data           => lx_msg_data,
    p_trohdr_rec         => lx_doc_hdr,
    p_trohdr_val_rec     => lx_doc_hdr_vals,
    x_trohdr_rec         => lx_doc_hdr,
    x_trohdr_val_rec     => lx_doc_hdr_vals
  );
  
  dbms_output.put_line('create_move_order_header='||lx_return_status);
  dbms_output.put_line('header_id='||lx_doc_hdr.header_id);

  if (lx_return_status!='S') then
    FOR j IN 1 .. lx_msg_count LOOP
      dbms_output.put_line('error('||j||')= ' ||fnd_msg_pub.get(j,fnd_api.g_false));
    END LOOP;  
  else

    lx_doc_lines(1).header_id      := lx_doc_hdr.header_id;
    
    lx_doc_lines(1).operation      := inv_globals.G_OPR_CREATE;
    lx_doc_lines(1).line_status    := inv_globals.G_TO_STATUS_PREAPPROVED;
    lx_doc_lines(1).date_required  := sysdate;       
    lx_doc_lines(1).status_date    := sysdate;
    -- 64 Перенос заказа на перемещение    
    lx_doc_lines(1).transaction_type_id := inv_globals.g_type_transfer_order_subxfr;
    --
    lx_doc_lines(1).from_subinventory_code := 'ttttttt';
    lx_doc_lines(1).organization_id        := 1775;
    lx_doc_lines(1).to_subinventory_code   := 'fffffff';      
    lx_doc_lines(1).to_organization_id     := 1775;
          
    lx_doc_lines(1).inventory_item_id      := 57878;
    lx_doc_lines(1).uom_code               := 'шт'; 
    lx_doc_lines(1).quantity               := 5;    
    
    -- создание строки заказа на перемещение
    inv_move_order_pub.create_move_order_lines(
      p_api_version_number       => 1,
      p_init_msg_list            => fnd_api.G_TRUE,
      p_return_values            => fnd_api.G_TRUE,      
      p_commit                   => fnd_api.G_FALSE,
      x_return_status            => lx_return_status,
      x_msg_count                => lx_msg_count,
      x_msg_data                 => lx_msg_data,
      p_trolin_tbl               => lx_doc_lines,
      p_trolin_val_tbl           => lx_doc_lines_vals,
      x_trolin_tbl               => lx_doc_lines,
      x_trolin_val_tbl           => lx_doc_lines_vals
    );    
    
    dbms_output.put_line('create_move_order_lines='||lx_return_status);
    if (lx_return_status!='S') then
      FOR j IN 1 .. lx_msg_count LOOP
        dbms_output.put_line('error('||j||')='||fnd_msg_pub.get(j,fnd_api.g_false));
      END LOOP;  
    else
      dbms_output.put_line('line_id='||lx_doc_lines(1).line_id);      
    end if;    

  end if;
  
end;

OEBS API INV – Удаление резервирований для позиции

10 Декабрь 2014 Нет комментариев

Пример использования API для удаления резервирований позиции:

declare
  l_rsv_rec                inv_reservation_global.mtl_reservation_rec_type;
  l_serial_number_tbl_type inv_reservation_global.serial_number_tbl_type;
  --
  lx_return_status varchar2(1);
  lx_msg_data      varchar2(4000);
  lx_msg_count     number;
begin
  fnd_global.apps_initialize(-1, 20634, 401); --Запасы - Запасы
  for i_cur in (select * from mtl_reservations t
                where 1=1
                      and rownum=1
                      -- and ...
           )
  loop
    l_rsv_rec.reservation_id               := i_cur.reservation_id;
    l_rsv_rec.organization_id              := i_cur.organization_id;          
    l_rsv_rec.inventory_item_id            := i_cur.inventory_item_id;
    l_rsv_rec.demand_source_type_id        := i_cur.demand_source_type_id; 
    l_rsv_rec.demand_source_header_id      := i_cur.demand_source_header_id; 
    l_rsv_rec.demand_source_line_id        := i_cur.demand_source_line_id;  
    l_rsv_rec.primary_uom_code             := i_cur.primary_uom_code;    
    l_rsv_rec.reservation_uom_code         := i_cur.reservation_uom_code;       
  -- l_rsv_rec.reservation_quantity         := 1;--i_cur.reservation_quantity;     
  -- l_rsv_rec.primary_reservation_quantity := 1;--i_cur.primary_reservation_quantity;
    l_rsv_rec.supply_source_type_id        := i_cur.supply_source_type_id;
        
    inv_reservation_pub.delete_reservation(p_api_version_number => 1.0
                                          ,p_rsv_rec            => l_rsv_rec
                                          ,p_serial_number      => l_serial_number_tbl_type
                                          ,x_return_status      => lx_return_status
                                          ,x_msg_count          => lx_msg_count 
                                          ,x_msg_data           => lx_msg_data
                                          );
                                          
    dbms_output.put_line(lx_return_status);   
    if (lx_return_status <> 'S') then    
      fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,                               
                                p_count   => lx_msg_count,                               
                                p_data    => lx_msg_data);       
      dbms_output.put_line('ERROR delete_reservation for reservation_id ='
                           ||l_rsv_rec.reservation_id ||':');       
      if lx_msg_count = 1 then      
        dbms_output.put_line(lx_msg_data);    
      else      
        FOR i IN 1 .. lx_msg_count 
        LOOP         
          dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,fnd_api.g_false));
        END LOOP;     
      end if; 
    end if;
    commit;        
  end loop;                                  
                                          
end;

OEBS API INV – Текущее количество для позиции (ONHAND)

10 Декабрь 2014 Нет комментариев

Пример использования API для получения текущего или доступного для резервирования количества для позиции:


declare
  p_organization_id   NUMBER := 155;
  p_inventory_item_id NUMBER := 546;
  --
  p_revision          VARCHAR2(3);
  p_lot_number        VARCHAR2(80);
  p_subinventory_code VARCHAR2(10) := 'VAlVALVAL';
  p_locator_id        NUMBER;  
  --
  lx_qoh    NUMBER; -- Total Quantity (Onhand)
  lx_rqoh   NUMBER;
  lx_qr     NUMBER;
  lx_qs     NUMBER;
  lx_att    NUMBER; -- Available to Transact
  lx_atr    NUMBER; -- Available to Reserve
  --
  lx_return_status VARCHAR2(1);
  lx_msg_count     NUMBER;
  lx_msg_data      VARCHAR2(4000);
begin
  inv_quantity_tree_grp.clear_quantity_cache;
  inv_quantity_tree_pub.query_quantities(
        p_api_version_number         => 1.0,
        p_init_msg_lst               => fnd_api.g_false,
        x_return_status              => lx_return_status,
        x_msg_count                  => lx_msg_count,
        x_msg_data                   => lx_msg_data,
        --
        p_organization_id            => p_organization_id,
        p_inventory_item_id          => p_inventory_item_id,
        p_tree_mode                  => apps.inv_quantity_tree_pub.g_transaction_mode,
        p_is_revision_control        => case when p_revision is null   then FALSE else TRUE end,
        p_is_lot_control             => case when p_lot_number is null then FALSE else TRUE end,
        p_is_serial_control          => FALSE,
                                         
        p_revision                   => p_revision,
        p_lot_number                 => p_lot_number,
        p_subinventory_code          => p_subinventory_code,
        p_locator_id                 => p_locator_id,
                                         
        x_qoh                        => lx_qoh,  -- OnHand Quantity
        x_rqoh                       => lx_rqoh,
        x_qr                         => lx_qr,
        x_qs                         => lx_qs,
        x_att                        => lx_att, -- Available To Transact
        x_atr                        => lx_atr  -- Available To Reserve
                                        );
   if lx_return_status ='S' then
     DBMS_OUTPUT.put_line ('Общее количество: ' || lx_qoh);
     DBMS_OUTPUT.put_line ('Доступно для резервирования: ' || lx_atr);
     DBMS_OUTPUT.put_line ('Доступно для транзакции: ' || lx_att);
   else
    fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
                              p_count   => lx_msg_count,
                              p_data    => lx_msg_data);
 
    dbms_output.put_line('ERROR for p_inventory_item_id='||p_inventory_item_id);
 
    if lx_msg_count = 1 then
      dbms_output.put_line(lx_msg_data);
    else
      FOR i IN 1 .. lx_msg_count LOOP
        dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,
                                             fnd_api.g_false));
      END LOOP;
    end if;
  end if;   
                                           
end;

Так же есть запрос для просмотра текущего количества Модуль INV – Текущее количество для позиции

Модуль GME/INV — Связка между заданиями и транзакциями

select *
from gme_batch_header          gbh,
     gme_material_details      gmd,
     mtl_material_transactions mmt
where 1=1
      and gbh.batch_type = 0
      -- gmd
      and gmd.batch_id = gbh.batch_id
      -- mmt
      and mmt.transaction_source_id = gmd.batch_id
      and mmt.trx_source_line_id    = gmd.material_detail_id
      -- for test
      --and trunc(gbh.plan_start_date) >
      --and gbh.batch_no =
      --and mmt.attribute_category =
      and rownum<100;