14 de junio de 2010

Modificar listas de Precios con API's en Oracle e-Business Suite

En esta entrada vamos a usar una API muy típica para modificar los precios de nuestras listas de precios ya creadas. Esta es una forma muy sencilla de hacerlo y tan solo necesitamos de una tabla temporal donde hemos cargado nuestros precios nuevos. Normalmente, esto se utiliza para aprovechar una lista existente, copiarla, renombrarla y cambiarle solo los precios. Para copiar la lista de precios y renombrarla, se hace desde el módulo de AR->Lisas de Precios->Copiar A continuación se muestra un ejemplo. La tabla temporal esta los artículos ya existentes y sus precios nuevos. ------------------------------------------------------------------------------------- DECLARE --Declaramos todas las variables posibles que puedan recibir los paquetes. --Realmente solo se suelen usar 3, en los casos sencillos. gpr_return_status VARCHAR2(1) := NULL; gpr_msg_count NUMBER := 0; gpr_msg_data VARCHAR2(2000); v_id_lista_precios NUMBER; gpr_price_list_rec qp_price_list_pub.price_list_rec_type; gpr_price_list_val_rec qp_price_list_pub.price_list_val_rec_type; gpr_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type; gpr_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type; gpr_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type; gpr_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type; gpr_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type; gpr_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type; ppr_price_list_rec qp_price_list_pub.price_list_rec_type; ppr_price_list_val_rec qp_price_list_pub.price_list_val_rec_type; ppr_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type; ppr_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type; ppr_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type; ppr_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type; ppr_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type; ppr_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type; k NUMBER := 1; j NUMBER := 1; BEGIN /***********************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANTE SI CREAMOS UNA NUEVA LISTA DE PRECIOS ASEGURARSE DE QUE LA FECHA DE LA CABECERA, DE LA NUEVA LISTA ES ANTERIOR A DE CUALQUIER ITEM, ES MUY IMPORTANTE, O BIEN MODIFICAR LAS FECHAS DE LOS ITEMS DE LA NUEVA LISTA A LA FECHA ACTUAL */ /***********************************************************************/ mo_global.set_policy_context('S', /*¡¡¡¡ ORG_ID de la maestra en tu proyecto¡¡¡ */); mo_global.init('ONT');--obligatorio --En la pantalla de listas de precios, copiamos el nombre y lo ponemos en esta select para obtener el id. --O bien se mira en ayuda--examinar SELECT price_list_id INTO v_id_lista_precios FROM so_price_lists WHERE NAME = 'LISTA EJEMPLO 2010' ; oe_debug_pub.initialize; oe_debug_pub.setdebuglevel(5); oe_msg_pub.initialize; FOR v_reg in ( select precio_nuevo codigo_articulo , de la talba tmp itm.INVENTORY_ITEM_ID , PRICE_LIST_LINE_ID from so_price_list_lines spll , XX_TEMPORAL_EJEMPLO_PRECIOS prec , mtl_system_items_b itm where prec.CODIGO = itm.segment1 and itm.organization_id = --TU ORG_ID and spll.inventory_item_id = itm.inventory_item_id and spll.price_list_id = v_id_lista_precios ) LOOP gpr_price_list_line_tbl(k).list_header_id := v_id_lista_precios; --Price List Header Id (List_header_id) gpr_price_list_line_tbl(k).list_line_id := V_REG.PRICE_LIST_LINE_ID; -- Price List Line Id (List_Line_id) gpr_price_list_line_tbl(k).list_line_type_code := 'PLL'; GPR_PRICE_LIST_LINE_TBL(K).OPERAND := V_REG.PRECIO; gpr_price_list_line_tbl(k).operation :=qp_globals.g_opr_update; DBMS_OUTPUT.put_line('Carga de Precios.'); DBMS_OUTPUT.put_line('=============================================='); K :=K +1; END LOOP; DBMS_OUTPUT.put_line('LINEAS CARGADA' || K); qp_price_list_pub.process_price_list(p_api_version_number => 1, p_init_msg_list => fnd_api.g_false, p_return_values => fnd_api.g_false, p_commit => fnd_api.g_false, x_return_status => gpr_return_status, x_msg_count => gpr_msg_count, x_msg_data => gpr_msg_data, p_price_list_rec => gpr_price_list_rec, p_price_list_line_tbl => gpr_price_list_line_tbl, p_pricing_attr_tbl => gpr_pricing_attr_tbl, x_price_list_rec => ppr_price_list_rec, x_price_list_val_rec => ppr_price_list_val_rec, x_price_list_line_tbl => ppr_price_list_line_tbl, x_price_list_line_val_tbl => ppr_price_list_line_val_tbl, x_qualifiers_tbl => ppr_qualifiers_tbl, x_qualifiers_val_tbl => ppr_qualifiers_val_tbl, x_pricing_attr_tbl => ppr_pricing_attr_tbl, x_pricing_attr_val_tbl => ppr_pricing_attr_val_tbl); IF ppr_price_list_line_tbl.COUNT > 0 THEN FOR k IN 1 .. ppr_price_list_line_tbl.COUNT LOOP DBMS_OUTPUT.put_line('Registros Borrados=> ' ||k); DBMS_OUTPUT.put_line('Return Status = ' ||ppr_price_list_line_tbl(k).return_status); END LOOP; END IF; IF gpr_return_status = fnd_api.g_ret_sts_success THEN -- Commit; DBMS_OUTPUT.put_line('Modificación realizada correctamente'); Else Rollback; RAISE fnd_api.g_exc_unexpected_error; END IF; FOR k IN 1 .. gpr_msg_count LOOP gpr_msg_data := oe_msg_pub.get(p_msg_index => k, p_encoded => 'F'); DBMS_OUTPUT.put_line(' Error ' ||k ||'|| : '|| gpr_msg_data); NULL; END LOOP; EXCEPTION WHEN fnd_api.g_exc_error THEN gpr_return_status := fnd_api.g_ret_sts_error; WHEN fnd_api.g_exc_unexpected_error THEN gpr_return_status := fnd_api.g_ret_sts_unexp_error; FOR k IN 1 .. gpr_msg_count LOOP gpr_msg_data := oe_msg_pub.get(p_msg_index => k, p_encoded => 'F'); DBMS_OUTPUT.put_line('Error' ||k ||'|| : ' ||gpr_msg_data); NULL; END LOOP; WHEN OTHERS THEN gpr_return_status := fnd_api.g_ret_sts_unexp_error; END; --fin programa

No hay comentarios:

Publicar un comentario