壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2663|回复: 10

PO采购行单价修改!

[复制链接]
发表于 2008/11/18 16:36:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
各位好:
       ORALCE采购订单行上的价格是不含税的价格,如果供应商报过来的是含税价时,采购员就需除以税率算出税前价,用户业务要求这个数至少保留8位以上,所以,采购员在采购行上输这个价格数字时比较麻烦(得人工算出且数字长),通过以下方法去做FORM客制化:
第一种方法:
1、首先开启采购订单行最后的描述性弹性域。
2、对这个弹性域写触发器:WHEN-VALIDATE-ITEM,代码如下:
declare
  n number;
begin
  select atc.TAX_RATE
    into n
    from apps.PO_LINE_LOCATIONS_ALL pla,
         apps.AP_TAX_CODES          atc,
         apps.po_lines_all          pll,
         apps.po_headers_all        pha
   where pla.tax_code_id = atc.TAX_ID
     and pll.po_line_id = pla.po_line_id
     and pll.po_header_id = pha.po_header_id
     and pla.po_line_id = :po_lines.po_line_id;
  if SQL%NOTFOUND then
    raise form_trigger_failure;
  else
    :po_lines.unit_price := round(to_number(:po_lines.desc_flex) /
                                  (1 + n / 100),
                                  10);
  end if;
end;
3、当用户在这个弹性域中输入价格后,会自动触发,并生成采购订单行上的税前价格,这个可以达到要求。

第二种方法:
1、从服务器上下载CUSTOM。PLL库文件,进行修改。
2、代码解释为:当目前的FORM是采购订单界面时,且当前数据块是采购订单行数据块时,且当前项目是以上开的弹性域时,进行代码上相应触发器的触发:WHEN-VALIDATE-ITEM,主要代码如下:
   elsif (form_name = 'POXPOEPO' and block_name = 'PO_LINES' and curdor_item = 'PO_LINES.DESC_FLEX') then
       if (event_name = 'WHEN-VALIDATE-ITEM') then
        
        v_id:=name_in('PO_LINES.PO_LINE_ID');
        if v_id is not null then
          select atc.TAX_RATE
            into v_num
          from PO_LINE_LOCATIONS_ALL pla,
             AP_TAX_CODES          atc,
             po_lines_all          pll,
             po_headers_all        pha
          where pla.tax_code_id = atc.TAX_ID
           and pll.po_line_id = pla.po_line_id
            and pll.po_header_id = pha.po_header_id
           and pla.po_line_id = v_id;
            if SQL%NOTFOUND then
             raise form_trigger_failure;
             else
             copy(round(to_number(name_in('PO_LINES.DESC_FLEX')) /(1 + v_num / 100),10),'PO_LINES.UNIT_PRICE');
             --:po_lines.unit_price := round(to_number(:po_lines.desc_flex) /(1 + n / 100),10);
             end if;
        else
           fnd_message.debug('税率不存在有效数据!');
        end if;   
      else
        null;  
       end if;                     
  else
3、把此CUSTOM。PLL上传并编释成功后,重开应用,怎么也输发不了这个事件,也就没法自动算出税前价(目前碰到的问题)。
4、CUSTOM。PLL和FORM上客制化的触发器应有先后顺序,还有和弹性域的触发应也有先后顺序。
5、现在摸不着到底这个方法哪出了问题,是代码有问题,还是触发规则设置的问题?????????????
还有一种是直接在FORM上进行个性化修改,这个试过了,达不到要求。
不知各位有没做过类似的修改,还忘路过的朋友踩踩啊。
1.bmp
发表于 2008/11/19 14:43:41 | 显示全部楼层
本帖最后由 jojoz 于 2008-11-19 14:44 编辑

俺做过最傻的作法,直接写DB TRIGGER
为啥这样做?因为复制的时候,任何FORM里的定制都搞不定
用户还必须去手工动一下保存才能转过来
 楼主| 发表于 2008/11/19 16:19:29 | 显示全部楼层
楼主的这个方法没试过,估计不适合我的这个需求,可否讲的更详细点?
发表于 2008/11/20 09:22:41 | 显示全部楼层
给个例子你吧。俺写过一个,看下面
CREATE OR REPLACE TRIGGER xxpo_lines_all_t2
  BEFORE INSERT OR UPDATE
  ON po_lines_all
  FOR EACH ROW
  WHEN (NEW.item_id IS NOT NULL)
DECLARE
  ln_exists      NUMBER;
  ln_price       NUMBER;
  lv_old_price   VARCHAR2 (200);
BEGIN
  --Check PO type, if it is not a "BLK" or "STD PO", then return.
  BEGIN
    SELECT 1
    INTO   ln_exists
    FROM   po_headers_all pha
    WHERE  pha.type_lookup_code IN ('BLANKET', 'STANDARD')
    AND    pha.po_header_id = :NEW.po_header_id;
  EXCEPTION
    WHEN OTHERS
    THEN
      ln_exists := 0;
  END;

  IF ln_exists = 1
  THEN
    --Change list price to master inventory organization's purchars list price.
    IF INSERTING
    THEN
      BEGIN
        SELECT msi.list_price_per_unit
        INTO   ln_price
        FROM   mtl_system_items_b msi
        WHERE  msi.inventory_item_id = :NEW.item_id
        --As per BSR A001255, modified by Jojo jz zhu 2008-11-17.
        --AND    msi.organization_id = 45;
        AND    msi.organization_id = NVL ((SELECT inventory_organization_id
                                           FROM   financials_system_params_all fsp
                                           WHERE  fsp.org_id = :NEW.org_id), 45);
      --As per BSR A001255, end modified by Jojo jz zhu 2008-11-17.
      EXCEPTION
        WHEN NO_DATA_FOUND
        THEN
          Po_Message_S.sql_error ('PO'
                                ,    'Can not found PO line '
                                  || :NEW.line_num
                                  || '''s inventory item in Master Organization!'
                                , -20001);
          App_Exception.raise_exception;
      END;

      :NEW.list_price_per_unit := ln_price;
    END IF;

    --Check new list price and old list price when update.
    IF     UPDATING
       AND (   (    :NEW.list_price_per_unit IS NULL
                AND :OLD.list_price_per_unit IS NOT NULL)
            OR (    :NEW.list_price_per_unit IS NOT NULL
                AND :OLD.list_price_per_unit IS NULL)
            OR (:NEW.list_price_per_unit <> :OLD.list_price_per_unit))
    THEN
      SELECT DECODE (:OLD.list_price_per_unit, NULL, 'NULL', :OLD.list_price_per_unit)
      INTO   lv_old_price
      FROM   DUAL;

      Po_Message_S.sql_error ('PO'
                            ,    ' Can not update PO line '
                              || :NEW.line_num
                              || '''s List Price! '
                              || CHR (10)
                              || 'Please change List Price back to old value: '
                              || lv_old_price
                            , -20001);
      App_Exception.raise_exception;
    END IF;
  END IF;
END;
/
发表于 2008/11/20 09:23:20 | 显示全部楼层
根据你自己的需求吧。应该可以满足,不过这样做的不好是,你看得到的东西并不等于你最后存到DB里的东西
 楼主| 发表于 2008/11/20 10:37:04 | 显示全部楼层
5# jojoz


谢谢你的帮助,我决定还是直接改FORM了,呵。。本来想改CUSTOM。PLL,但成功不了,,,,
发表于 2008/11/26 16:04:47 | 显示全部楼层
建议别做这个开发了。直接让供应商报不含税的价格。慢慢习惯就好了。
这个是个趋势
 楼主| 发表于 2008/11/26 22:31:21 | 显示全部楼层
7# cdlibo
是啊,你说的不是没考滤过,可我们的采购同仁死也要这样做,没法子,
发表于 2011/12/15 13:37:30 | 显示全部楼层
这种情况,即使是价格自动计算,入库后还是最多5位小数。退货时必然产生差异。所以还是按照Oracle理念,与供应商签不含税合同为好。
发表于 2012/1/17 15:56:01 | 显示全部楼层
楼主也是说了个法子,采用什么办法,关键还是看维护与采购那个更强势点了,是在不行只能找开发...
发表于 2012/2/13 10:46:37 | 显示全部楼层
楼上的大哥大姐……爱死你们了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 01:54 , Processed in 0.019079 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表