* [新增开窗③开窗传参(交易条件)](about:blank#_211)
* [校验带值 - 单据别](about:blank#___219)
* [根据 \[税种\] 带出 \[含税否\]](about:blank#____246)
* [根据 \[币种\] 带出 \[汇率\]](about:blank#____281)
* [查询开窗](about:blank#_319)
* [查询开窗 - 单号(自建开窗)](about:blank#___326)
* [单身部分](about:blank#_346)
* * [项次自增](about:blank#_347)
* [表身根据\[料号\]带出\[品名\]和\[规格\]](about:blank#_362)
* [单身根据 \[税种\] 带出 \[税率\]](about:blank#____369)
* [\[数量\]、\[单价\] 变化时要计算\[含税金额\]、\[未税金额\]、\[税额\]](about:blank#__389)
* [查询时单身部分\[规格\]不显示(新增时有的)](about:blank#_414)
* [12\. azzi850 给程序授权](about:blank#12_azzi850__426)
* [13\. r.r 执行程序](about:blank#13_rr__427)
* [14\. azzi880 将程序挂到 menu](about:blank#14_azzi880__menu_428)
单据别建立流程 ???
双档程序源码分析
总结
目录:【实习】T100学习笔记
单档程序和双档程序的区别
所谓单档程序相当于只有表头,下面的东西就相当于表头。
而双档不仅有表头,还有表身,表身一般就是个表格。
===================================================================================
首先要通过 r.t (adzi140) 建立表
azzi900 建立 程序代号
程序代号是唯一的。
azzi910 建立 作业代号
一个程序代号可以被多个作业使用。
通过设计器 - 规格(签出规格)
规格相当于画面。
通过设计器 - 程序(签出程序)
adzp168 通过画面产生器产生画面
通过设计器 - 规格(下载规格)
r.q 开窗,r.v 校验带值(根据需求设定)
通过设计器 - 程序(下载程序)
通过设计器 - 档案(开启规格档案)- 修改程序 - 上传程序
通过设计器 - 程序(下载程序)- 上传程序
(先上传程序,没有报错再来修改对应逻辑)
通过 azzi850 给程序授权
r.r 执行程序
azzi880 将程序挂到 menu
=========================================================================
单头表 xmzyuc_t,字段为:订单单号、订单日期、业务人员、业务部门、客户编号、收款条件、交易条件、税种、币种、税率、含税否、汇率、发票类型、订单备注、基础资料档。
单身表 xmzzuc_t,字段为:项次、料号 (品名、规格)、单位 (单位名称)、订购数量、预计交货日期、税种、税率、单位、含税金额、未税金额、税额、紧急度、备注
单档程序只需要一张表,双档需要建多张表。
单头一般是主档

企业代码、营运据点基本是必要的,其他按需求设置。

字段设置完毕后,【执行异动】
单身一般是明细档

单身表与单头表的主键位置需要一一对应,不然自动生成的SQL语句会关联错误。
单头表的顺序是:企业代码(主)、营运据点、单号(主)、…
则单身表的顺序必须是:企业代码(主)、营运据点、单号(主)、…
单身表一定会比单头表多1个主键。

字段设置完毕后,【执行异动】
在单身表中建立与单头表的主外键关联。

同时查出多张表的小技巧:
xmzyuc | xmzzuc
所有步骤完成后按照如下顺序操作:
单头【产出数据表纲要】、单身【产出数据表纲要】、
单头【产出数据表清单】、单身【产出数据表清单】
单头【产出数据表结构与规格设置】、单身【产出数据表结构与规格设置】
===============================================================================
注:双档和单档在整体流程上差不多,所以这里过程很简略,具体有哪个步骤忘记可以参考单档的文章(图片很全,很细)。
adzi170 可以查询数据表的内容
点击【录入信息】,然后输入 [程序编号] 和 [程序名称],选择 [归属模块]

由于是订单维护作业,还需要建立单据别,具体参考下面的单据别建立流程

点击【字段设置】,分别给单头、单身以及查询方案设置字段
单头设置字段,注意 Table 必须选中单头表,画面结构要选中 Page:page_1

ps:上图少放了一个字段单据日期。。已补上,截图没有改
单身设置字段,Table 选中单身表,画面结构中选中 Table:s_detail1。单号是单头和单身的主键,单头里放了,单身不需要再放。

查询方案设置字段,查询方案一般放一些重要的单头字段

操作完以后,【保存底稿】、【生成画面】,弹出预览界面后关掉它。
如果没有数据,【进阶功能】-【更新基础数据】、【重新产生基础数据】
注意,带开窗的组件有的需要自己转:右键,Concert Widget,ButtonEdit 即可。
业务人员开窗 可以抄 资料所有者开窗
业务部门开窗 可以抄 资料所有部门开窗
所有的都可以抄 axmt500。。。。
业务人员开窗

业务人员参考语系

交易条件开窗

交易条件参考字段 ******************

太多了。。直接抄 axmt500 。。。。。
开窗抄 axmt500,参考字段需要点击要添加的列,右键 Add Reference Field,然后抄 axmt500
【10】 设计器 - 档案 - 开启档案,直接上传程序(修改程序)
将刚下载的程序直接【上传】一下,确保设计器默认生成的没有问题,再开始修改。
下图中,在 adzi210开窗设计器中可以看到,单号的开窗识别码要求传2个参数,分别是 参照表编号 和 程序编号 ,需要我们在代码里添加。
参照表编号 在下面的【单据别建立流程】中有讲,aooi100 中可以查看
程序编号在代码里是个全局变量,g_prog,本程序中即 cxmt666
如何知道对应的数据表字段?
在 aooi100 中查询过后,可知参照表编号为 S01
并且,我们将鼠标放上去,可以看见它是在哪个数据库中进行维护的。
查看 ooef_t 表,发现 ooef004 的确是参照表编号。
开窗测试工具的使用
在 adzi210开窗设计工具中,查出了对应的开窗识别码后,点击【开窗测试工具】,然后将对应的参数输入,点击右边的开窗,即可查出对应的值。
如果没有查出来,按照【单据别建立流程】检查一遍流程。

在 ON ACTION controlp INFIELD xmzyucdocno,即点击单号开窗的位置,写代码:
#add by lzy #2021/1/27 根据当前的据点找到对应的单据别参照表号
LET l_ooef004 = ''
SELECT ooef004 INTO l_ooef004 FROM ooef_t
WHERE ooefent = g_enterprise #企业编号=当前企业编号
AND ooef001 = g_site #组织编号=据点
#給予arg
LET g_qryparam.arg1 = l_ooef004
LET g_qryparam.arg2 = g_prog #程序编号:cxmt666
注:l_ooef004 需要在前面定义变量,我们在 cxmt666_input() 开头定义:
DEFINE l_ooef004 LIKE ooef_t.ooef004 #add by lzy#2021/1/27 单据别参照表号
学会这个以后,再有开窗需要传参的,都是以此类推!
在 ① 里我们是用 l_ 开头的局部变量的方式写的,但是有时候很多开窗要传的参数是一样的,如果每次都要重新写,那将很麻烦,不如直接改成全局变量,后需要用到都可以拿来用。
将变量声明到 MAIN 上面的全局区域:
#add-point:自定義模組變數(Module Variable) (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="global.variable"
DEFINE g_ooef004 LIKE ooef_t.ooef004 #add by lzy#2021/1/27 单据别参照表号
DEFINE g_ooef024 LIKE ooef_t.ooef024 #add by lzy#2021/1/27 供应商编号
DEFINE g_ooef019 LIKE ooef_t.ooef019 #add by lzy#2021/1/27 税区编号
#end add-point
在 xxxx_init() 的画面资料初始化区域写SQL查询:
#add-point:畫面資料初始化 name="init.init"
LET g_ooef004 = ''
LET g_ooef024 = ''
SELECT ooef004,ooef024,ooef019 INTO g_ooef004,g_ooef024,g_ooef019 FROM ooef_t
WHERE ooefent = g_enterprise #企业编号=当前企业编号
AND ooef001 = g_site #组织编号=据点
#end add-point
最后在 ON ACTION controlp INFIELD xxxxx 处给参数赋值即可。
在 xxx_insert() 中的单头预设值处填写代码:
#add-point:單頭預設值 name="insert.default"
LET g_xmzyuc_m.xmzyucdocdt = g_today #add by lzy#2021/1/27 单据日期默认为今天
#end add-point
交易条件由 apmi012 维护。
直接在代码里给传入参数设为 '238' 即可。
LET g_qryparam.arg1 = '238' #交易条件
校验带值都是写在 xxxx_input() 下的 AFTER FIELD xxxxx。
比如要写单号 xmzyucdocno 的校验带值,写下面代码:
#add by lzy 单据别校验带值
IF NOT s_aooi200_chk_slip(g_site,'',g_xmzyuc_m.xmzyucdocno,g_prog) THEN
LET g_xmzyuc_m.xmzyucdocno = g_xmzyucdocno_t
NEXT FIELD CURRENT
END IF
客户编号校验带值,直接抄 axmt500,参数也要一起抄。。
#設定g_chkparam.*的參數
LET g_chkparam.arg1 = g_xmzyuc_m.xmzyuc003
LET g_chkparam.arg2 = g_site
#呼叫檢查存在並帶值的library
IF cl_chk_exist("v_pmaa001_3") THEN
#檢查成功時後續處理
ELSE
#檢查失敗時後續處理
NEXT FIELD CURRENT
END IF
后面有问题的校验带值,都直接抄。。。

要达到的效果主要是选择了 [税种] 以后,下面的 [税率] 和 [含税否] 也会自动有值。
现在开始不用记那么多套路了,抄axmt500就完事,上传报错就跟着报错信息改,比如下面的代码直接上传会报错,因为 l_success 和 l_oodb011 都没有定义,去axmt500里搜一下,看看它怎么定义的,直接拿过来来。
顺带一提,视频中老师一开始都是自己写的,讲道理真的看不懂,直到后面她开始抄axtm500。。。我也就学会了抄了。。
AFTER FIELD xmzyuc006
#add-point:AFTER FIELD xmzyuc006 name="input.a.xmzyuc006"
LET g_xmzyuc_m.xmzyuc006_desc = ''
IF NOT cl_null(g_xmzyuc_m.xmzyuc006) THEN
IF p_cmd = 'a' OR (p_cmd = 'u' AND (g_xmzyuc_m.xmzyuc006 <> g_xmzyuc_m_o.xmzyuc006 OR g_xmzyuc_m_o.xmzyuc006 IS NULL)) THEN
CALL s_tax_chk(g_site,g_xmzyuc_m.xmzyuc006)
RETURNING l_success,g_xmzyuc_m.xmzyuc006_desc,g_xmzyuc_m.xmzyuc009,g_xmzyuc_m.xmzyuc008,l_oodb011
IF NOT l_success THEN
LET g_xmzyuc_m.xmzyuc006 = g_xmzyuc_m_o.xmzyuc006
LET g_xmzyuc_m.xmzyuc008 = g_xmzyuc_m_o.xmzyuc008
LET g_xmzyuc_m.xmzyuc009 = g_xmzyuc_m_o.xmzyuc009
NEXT FIELD CURRENT
ELSE
#pass
END IF
END IF
LET g_xmzyuc_m_o.xmzyuc006 = g_xmzyuc_m.xmzyuc006
LET g_xmzyuc_m_o.xmzyuc008 = g_xmzyuc_m.xmzyuc008
LET g_xmzyuc_m_o.xmzyuc009 = g_xmzyuc_m.xmzyuc009
END IF
CALL s_desc_get_tax_desc1(g_site,g_xmzyuc_m.xmzyuc006) RETURNING g_xmzyuc_m.xmzyuc006_desc
DISPLAY BY NAME g_xmzyuc_m.xmzyuc006,g_xmzyuc_m.xmzyuc008,g_xmzyuc_m.xmzyuc009,g_xmzyuc_m.xmzyuc006_desc
这个有坑!直接抄 axmt500也可能会跳进坑里。。。主要在于它似乎需要一个 [内外销] 字段来计算出汇率。。。但是这个字段在我的项目中并没有建,我只能在调函数s_axmt540_get_exchange的时候手动给这个参数传值,经过测试,只要传'2'就可以了。
#應用 a02 樣板自動產生(Version:2)
AFTER FIELD xmzyuc007
# 资料分享
这是我从某优质机构弄来的一些资料,内容我认为确实称得上优质二字
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
**首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:**
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构.........实在是太多了)

**其次分享一些技术知识,以截图形式分享一部分:**
Tomcat架构解析:

算法训练+高分宝典:

Spring Cloud+Docker微服务实战:

**最后分享一波面试资料:**
> 切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:

Java高级架构面试知识整理:

rsion:2)
AFTER FIELD xmzyuc007
# 资料分享
这是我从某优质机构弄来的一些资料,内容我认为确实称得上优质二字
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
**首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:**
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构.........实在是太多了)
[外链图片转存中...(img-ncCDdyRH-1630927280231)]
**其次分享一些技术知识,以截图形式分享一部分:**
Tomcat架构解析:
[外链图片转存中...(img-RaOXQyS7-1630927280232)]
算法训练+高分宝典:
[外链图片转存中...(img-Csq7EqXK-1630927280234)]
Spring Cloud+Docker微服务实战:
[外链图片转存中...(img-B0YioHnM-1630927280235)]
**最后分享一波面试资料:**
> 切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
[外链图片转存中...(img-j30oSaXm-1630927280237)]
Java高级架构面试知识整理:
[外链图片转存中...(img-dizEJceO-1630927280238)]
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD