SAP MM 外部采购流程里的如同鸡肋一样的Advanced Returns Management功能
文章中的配置界面和单据流界面都是基于SAP S4HANA 1909系统。
Part I: 外部采购订单中高级退货管理(Advanced Return Management) 功能
这部分简要介绍外部采购订单中高级退货管理(Advanced Return Management) 功能。
1,采购订单单据类型 NB2,
2,交货单类型的设置
3, BP主数据设置
需要为供应商也同时维护一个customer代码,
同时勾选供应商角色的数据里的Returns Supplier 选项,如下图:
4,创建NB2类型的采购订单。
5, VL10B为之创建交货单,
6, VL02N为交货单做发货过账。
7, 在采购订单的Returns选项卡里看数据。
退货订单中创建交货单然后发货过账的做法,在项目实践中并不鲜见。
Part II: 外部采购订单中没有启用ARM(高级退货管理)功能时候的退货流程
这部分内容简要介绍外部采购订单中没有启用ARM(高级退货管理)功能时候的退货流程。这个流程里,也可以为退货订单创建外向交货单,然后基于外向交货单做发货出库给到供应商。
1,采购订单单据类型 NB的配置,保持SAP标准设置。
AdvReturns选项不勾选。
2,交货单类型的设置,保持SAP标准配置。
3, BP主数据设置。
需要为供应商也同时维护一个customer代码,
同时勾选供应商角色的数据里的Returns Supplier 选项,如下图:
4,创建NB类型的采购订单。
此时Returns item选项需要手工勾选!
后续执行事务代码VL10B为之创建交货单,VL02N为交货单做发货过账。
我们可以发现,该NB类型的采购订单的Header和ITEM里不会出现Returns选项卡!
由此可见,不激活ARM(Advanced Returns Management)功能的前提下,我们也可以为退货类型采购订单创建外向交货单,然后拣配,以及发货过账。这是很多SAP项目上的做法。
当然SAP项目实践中还可以更简单,创建了退货采购订单后可以直接MIGO对此采购订单执行发货过账。
Part III:结论
笔者认为,SAP 设计的ARM功能其实就是一个鸡肋,用处不大,徒增复杂性而已。这也可以解释为啥ARM功能在项目实践中都不怎么被使用到,毕竟没有哪个SAP顾问喜欢把简单的问题复杂化!
-完-
写于2021-12-6
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建
我想在Windows7上安装带有ruby1.9.3的rspec-railsgem。我收到一些错误消息,提示无法安装某些json库。所以,我使用下面的说明来解决它。来源=The'json'nativegemrequiresinstalledbuildtools从[rubyinstaller.org][3]下载[Ruby1.9.3][2]从[rubyinstaller.org][3]下载DevKit文件对于Ruby1.9.3,使用[DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe][4]将DevKit解压到路径C:\Ruby193\DevKit运行cd
是否有可能以某种方式访问Class.new范围内的a?a=5Class.new{defb;aend}.new.b#NameError:undefinedlocalvariableormethod`a'for#:0x007fa8b15e9af0>#:in`b' 最佳答案 即使@MarekLipka的回答是正确的——改变变量范围总是有风险的。这是可行的,因为每个block都带有创建它的上下文,因此您的局部变量a突然变得不那么局部了——它变成了一个“隐藏的”全局变量:a=5object=Class.new{define_method(
在我的一些Controller中,我有一个before_filter检查用户是否登录?用于CRUD操作。application.rbdeflogged_in?unlesscurrent_userredirect_toroot_pathendendprivatedefcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefine
如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用
require'pp'p*1..10这会打印出1-10。为什么这么简洁?您还可以用它做什么? 最佳答案 它是“splat”运算符。它可用于分解数组和范围并在赋值期间收集值。这里收集赋值中的值:a,*b=1,2,3,4=>a=1b=[2,3,4]在此示例中,内部数组([3,4])中的值被分解并收集到包含数组中:a=[1,2,*[3,4]]=>a=[1,2,3,4]您可以定义将参数收集到数组中的函数:deffoo(*args)pargsendfoo(1,2,"three",4)=>[1,2,"three",4]
如果我说x.hello()在Java中,对象x正在“调用”它包含的方法。在Ruby中,对象x正在“接收”它包含的方法。这只是表达相同想法的不同术语,还是意识形态上的根本差异?来自Java,我发现Ruby的“接收器”想法非常令人困惑。也许有人可以解释这与Java的关系? 最佳答案 在您的示例中,x不调用hello()。包含该片段的任何对象都是“调用”(即,它是“调用者”)。在Java中,x可以称为接收者;它正在接收对hello()方法的调用。 关于java-Java中的"caller"和R