SAP PO相关打印编程
- 格式:docx
- 大小:634.74 KB
- 文档页数:17
更新系统打印程序以打印采购订单为例,我们可以在系统的后台维护里面设置关于生成采购订单打印消息类型,处理程序,还有打印方式等信息。
前面的程序是指处理这些“打印”,“传真”等事件的处理程序,后面的FORM子程序就是指在其中一个事务产生的时候,他会去调用这个程序中的哪一个FORM去处理这个事务。
比如说“打印输出”的响应程序就是SAPFMO6P程序下的ENTRY_NEU这个FORM,然后他打印的时候调用的表格是MEDRUCK。
(值得一提的是他后面还有一列是PDF/智能表格,指的就是SMARTFORMS,但是大多系统默认都不会给维护好,系统用的大部分都是SCRIPTFORM)。
然后双击程序,进到程序里面之后找到对应的FORM。
这个ENTRY_NEU就是你在前台点了打印之后,系统响应你操作的FROM了。
也可以在这里加一下断点,看看他带过来了一些什么类型的数据。
一般情况下,他都会用ME_READ_PO_FOR_PRINTING这个FUCTION来获取前台的数据,比如说ex_nast= l_nastdoc = l_docEX_NAST存的是打印时候的环境,比如说打印人啊,系统调用哪台打印机一类的配置信息。
L_DOC就是你所需要的基本上,所有的数据信息了。
就像刚才那段代码,他在后面又CALL了一个FUCTION。
进入那个FUCTION里面去,查看是不是再那个FUCTION里面又读取了一些其他的信息,如果在l_doc里面已经有你所需要的所有数据了,那你就可以直接把这个FUCTION干掉。
还有一点,就是可能他会在打印完成之后(如果是SCRIPT FORM的话,一般他会调用一个名称类似于”CLOSE_FORM”的),如果在这个时候,他又做了一些处理,比如说什么IF sy-subrc=0或者其他的什么东西,然后又调用了或者是写入了一个MESSAGE,这种情况你就要根据他的返回类型在你的程序里面也配出一个相同类型的数据,返回给系统处理了。
操作指导(文字部分):一、PO打印操作如下:打印华为技术及其它子公司帐套的PO:步骤一、在ERP中点击Reports,再点击Run Request,或者在工具条的View下拉菜单中找到并点击Requests,然后在出现的Find Requests界面中选择Submit a new request;步骤二、在出现的Submit a New Request界面,选择报表集Single Request,点击OK确认后出现Submit Request界面;步骤三、在Submit Request界面的Name中选择HW PG Printed Purchase Order Report;(快捷操作:如果以前有PO打印报表的运行记录,则可点击Copy选择对应的记录进行拷贝,再对步骤四中提及的PO参数进行修改;)步骤四、Name中的报表选择完成后,即转到(Parameters)界面,在该界面中输入要打印的PO 参数(在P-report-type中可选择All、Changed或New,如果选择All,则需分别在Purchase Order Numbers From字段和To字段中分别输入起始、结束的PO号;在Buyer Name,Employee Number 中输入采购员;其他参数均设置为默认值,无须更改);步骤五、继续在Submit Request界面点击Options,在其Printer域选择就近的打印机,在Copies域中输入PO打印的数量,点击OK确认选择;步骤六、在打印机的纸盒里放进PO套打纸,然后点击报表集参数设置界面最下方的Submit,就完成PO打印报表的提交。
二、PO打印报表的状态查询:步骤一、PO打印报表提交后,出现Requests界面,点击Refresh Data,进行状态刷新,当Phase状态变成Completed,Status的状态变成Normal,表明PO打印正常完成;或者可以点击Reports,再点击View,在出现的Find Requests界面选择对应的选项进行查询;步骤二、点击View Output,查看打出的PO。
SAP中使用本地打印机的设置。
添加本地打印机到SAP1, 输入T-Code:SPAD2, 回车后进入打印机设置界面,点击界面中的Display按钮,进入下一界面3, 在出现的界面中,先点击按钮,然后点击,出现如下界面,按图中所示进行设置。
注:Outputdevice和Short name处文字可任意4, 选择Access Method标签页,按照下图所示进行设置注意:Default之前为两个下划线5, 保存后退出。
至此本地打印机在SAP中的添加已经完成,接下来的设置分两种情况进行设置。
1,没有使用Message determination此种情况下,Printer的决定顺序如下▪User definition(Easy Access->Logistic->Material Management->Purchasing->Master Data->Message) * 此处可针对单个Message type进行output的设定。
▪Printer of purchasing group▪Printer of USER parameter PRI▪Printer of USER defaults可采用下述1.1或1.2两种方式来进行打印机设置的更改。
1.1,Easy Access->Logistic->Material Management->Purchasing->Master Data->Message针对需要进行更改的Message type逐个更改打印机设置。
※此方法的缺点是要对Message type进行逐个更改,操作比较繁琐。
1.2,更改Purchasing group的打印机设置IMG->Material Management->Purchasing->Messages->Output Control->Assign Output Device to Purchasing Groups※参照Purchasing Group进行打印机设置,更改时,只需要更改Purchasing Group对应设置即可。
一、SAP打印原理SAP的打印过程分两个步骤:1. 创建假脱机请求2. 创建输出请求在点击打印按钮后,系统会提示创建假脱机请求后,你可以选择直接生成输出请求,或者手动生成输出请求,产生输出请求后,系统会根据输出设备的配置,调用相关的打印程序;执行打印任务。
手动生成输出请求:TCode:SP01直接生成输出请求:设置时可以在用户属性(su3-->Default-->勾选print immediately)。
∙一般设定“立即打印”,所以打印请求的产生与输出请求的产生几乎同时;∙在WINDOWS系统中执行SAP打印要开启SAPLPD服务;∙SAP系统以不同的方式处理ABAP列表打印与Smartforms的打印,它们的配置过程相似,但实际控制方式不同。
二、SAP打印配置1、TCode:SPAD输入需要定义的打印设备名称,然后点击'显示'。
点击修改,然后单击新建按钮。
2、配置新建的打印设备---“设备属性”视图。
a.设备类型:选择“CNSAPWIN:MS Windows driver via SAPLPD”。
b.设备类:选择“打印标准”。
注意:SPAD驱动的选择(驱动选择不当会导致打印预览或打印结果乱码)∙中文打印:CNSAPWIN CNSAPWIN:MS Windows driver via SAPLPD∙日文打印:JPSAPWIN JPSAPWIN:MS-J Windows driver via SAPLPD∙繁体中文:TWSAPWIN TWSAPWIN:MS Windows driver via SAPLPD3、配置新建的打印设备---Access method存取方法视图。
输出设备的打印机访问模式有很多种,不过常用的就F、G两种:1. G计算机前端控制打印;2. F前端打印:是在sap里统一配置后,如果用户需要打印,遍可以手动选择自己机器上安装的打印机进行打印就不用一台一台去安装打印机了3. L的意思很容易理解,就是local本地的意思,就是本机安装的打印机。
第八章打印列表概览内容在创建列表之后打印 ....................................................................................................................... 1在创建列表时打印........................................................................................................................... 2打印参数 ..................................................................................................................................... 2执行和打印.................................................................................................................................. 7从程序中打印 ............................................................................................................................ 8调用报表的打印列表.............................................................................................................. 11打印控制 ................................................................................................................................. 12ABAP/4 报表的输出结果显示在列表中。
PO的输出方式(打印,EDI, EMAIL)一、业务背景在实际业务中,企业经常要将询价单,PO/SA等对外发送给供应商,最常用到的几种方式已经在下图中标识出来;分别是打印的纸张版,EMAIL,FAX,还有可能是EDI的方式;(图片来源:SAP)二、SAP提供的设计逻辑和解决方案SAP在设计采购凭证的输出逻辑时,采用条件技术,设计的逻辑跟PRICE的确定逻辑一样,请看下图:Process of Message Determination (Document Type NB)(图片来源:SAP)Process:1.当你在前台创建采购订单(ME21N)时,在保存前,系统会确定PO订单的使用到的message schema,在标准情况下,用到的是RMBEF1;配置路径:Material Management→Purchasing→Messages→output control→Message Determination Schemas→Assign Schema to Purchase Order2.在message schema中,系统会按次序读取condition type, 标准的PO output message type是NEU;配置路径:Material Management→Purchasing→Messages→output control→Message Determination Schemas→Maintain Message Determination Schema: Purchase Order3. Message type中定义了access sequence, NEU的access sequence是0001;配置路径:Material Management→Purchasing→Messages→ output control→ Message types → Define Message T ypes for Purchase Order4. Access sequence中定义了message table的访问顺序,系统依次在各个表中寻找对应的条件记录并输出;配置路径:Material Management→Purchasing→Messages→output control→Access Sequences → Define Access Sequence for Purchase Order5. 在前台维护message record. 代码如下:MN01 create RFQ output messageMN04 create PO output messageMN07 create SA output messageMN10 create SA Delivery schedule output message可以用MN04进去,为NEU创建条件,可以看到下图:Note: 在维护时,可以选择维护的级别,此处出来的选项即为在access sequence 0001中定义的四张条件表,请看后台的message table:三、用message type连接输出单据的格式到上面为止,已经讲完了message是怎么输出到PO中,那么Message和具体的单据输出格式如何连接起来呢?这个连接是在message type中定义的。
SAP 学习手册(1)SAP BASIS 2008-11-25 15:29:53 阅读67 评论0 字号:大中小订阅1.Unix操作更改口令 passwd eg. passwd orap34看当前路径 pwd看sap或者oracle的进程 eg. ps -ef|grep sap或者ora看命令的使用方法,相当于DOS中的help命令 eg. man xxx切换当前用户 su eg. su – orap34查看cluster lssrc –g cluster (hp-ux cluster状态 cmviewcl -v)看文件大小 df –k看有哪些用户 who看文件内容 morevi编辑器 vi查看服务器地址 netstat –in新建目录 mkdir192.167.17.1 db内部地址192.167.17.2 app内部地址192.167.17.3 tsm内部地址进入tsm管理界面 dsmadmc(admin : admin)使用orap34 用户运行sapdba,以扩展表空间: su – orap34sapdbac-----a-----……当数据库备份失败,oracle启动不了的时候sapdba----j---a----a----y当sap*用户密码忘记时:sqlplus /nologconnect sapr3/sap 或者 connet system/managerdesc r02;delete from r02 where mandt = '420' and bname = 'sap*'; commit;登陆sqlplus : sqlplus /nologconnect /as sysdba在PC机上从app上以二进制方式获取文件: c:\>ftp 10.124.4.71cd xxxbinget xxx生成错误报告:erppt –a|> xxx.txt将系统面板警告灯熄灭:diag-----task selection-----identify and attention indicators-----setsystem attention indicators to normal回车-----F7使用p34adm用户关停 sap ,改系统参数时使用 root用户开关ha ,当选择takeover时,ha会自动切换(从db切换到app)当选择graceful时,ha不会自动切换IBM中国24小时服务热线: 800-8106677 / 800-8101818-5100AIX 系统命令物理卷命令命令名称说明lsdev 列出ODM中的设备chdev 改变设备的属性mkdev 增加一个设备chpv 改变物理设备的状态lspv 列出卷组中一个物理卷的信息migratepv 将分配好的物理分区从一个物理卷移动到另外一个或多个物理卷中卷组命令命令名称说明mkvg 创建一个新卷组extendvg 将一个物理卷加到一个卷组中reducevg 在一个卷组中删除物理卷chvg 改变一个卷组lsvg 显示一个卷组的信息importvg 安装一个卷组exportvg 删除一个卷组reorgvg 重组织一个卷组syncvg 同步一个卷组varyonvg 使一个卷组可用varyoffvg 使一个卷组不可用逻辑卷命令命令名称说明mklv 创建一个逻辑卷lslv 显示一个逻辑卷的信息rmlv 删除一个逻辑卷extendlv 扩大一个逻辑卷chlv 改变一个逻辑卷mklvcopy 对一个逻辑卷增加拷贝rmlvcopy 对一个逻辑卷删除拷贝文件系统命令命令名称说明chfs 改变一个文件系统的属性crfs 增加一个文件系统lsfs 显示一个文件系统的属性rmfs 删除一个文件系统mount 设置一个可用文件系统fsck 检查和修复文件系统umount 卸载一个可用文件系统、目录或文件df 显示一个文件系统空间使用情况交换空间管理命令名称说明chps 改变一个交换空间的属性lsps 显示一个交换空间的属性mkps 创建一个附加的交换空间rmps 删除一个不活动的交换空间swapon 激活一个交换空间用户管理命令名称说明mkuser 创建一个新用户chuser 改变用户属性(密码除外)lsuser 显示用户属性rmuser 删除一个用户chsec 改变安全属性dtconfig 改变自动启动桌面的特性其他命令名称说明startsrc 启动一个子系统或子系统群或子服务stopsrc 停止一个子系统或子系统群或子服务refresh 告诉一个子系统或子系统群进行自我更新lpstat 显示当前打印机信息qchk 显示当前打印任务或打印队列的状态信息1.1. 小型机开停机操作手册开机:1. 打开主阵列电源开关,间隔三分钟之后打开从阵列电源开关2. 打开扩展磁带机(两台),然后开磁带库3. 先开DB(570),然后开APP(570)4. 最后开TSMSERVER(520)关机:1. 关闭TSMSERVER2. 关闭APP,随后关闭DB3. 关闭磁带库,关闭两台扩展磁带机4. 先关闭从阵列电源开关,间隔三分钟关闭主电源开关启动HACI和DB会随着cluster一块被启动起来:telnet 10.124.4.70smitty clstartlssrc –g clusterAI也会被带起来:telnet 10.124.4.71smitty clstartlssrc –g cluster停止HAtelnet 10.124.4.71smitty clstop 选择gracefulshutdown –Ftelnet 10.124.4.70smitty clstop选择gracefulshutdown –F当db想要切换到app时,app不做任何动作,注意千万不能停cluster,应该直接在db上以takeover的方式停掉db的cluster,则db上的db和ci就会自动切换到app上了,与此同时,ai被杀掉了。
SAP中使用本地打印机的设置。
添加本地打印机到SAP1, 输入T-Code:SPAD2, 回车后进入打印机设置界面,点击界面中的Display按钮,进入下一界面3, 在出现的界面中,先点击按钮,然后点击,出现如下界面,按图中所示进行设置。
注:Outputdevice和Short name处文字可任意4, 选择Access Method标签页,按照下图所示进行设置注意:Default之前为两个下划线5, 保存后退出。
至此本地打印机在SAP中的添加已经完成,接下来的设置分两种情况进行设置。
1,没有使用Message determination此种情况下,Printer的决定顺序如下▪User definition(Easy Access->Logistic->Material Management->Purchasing->Master Data->Message) * 此处可针对单个Message type进行output的设定。
▪Printer of purchasing group▪Printer of USER parameter PRI▪Printer of USER defaults可采用下述1.1或1.2两种方式来进行打印机设置的更改。
1.1,Easy Access->Logistic->Material Management->Purchasing->Master Data->Message针对需要进行更改的Message type逐个更改打印机设置。
※此方法的缺点是要对Message type进行逐个更改,操作比较繁琐。
1.2,更改Purchasing group的打印机设置IMG->Material Management->Purchasing->Messages->Output Control->Assign Output Device to Purchasing Groups※参照Purchasing Group进行打印机设置,更改时,只需要更改Purchasing Group对应设置即可。
362 SAP从入门到精通 12.6 打印配置前面已经介绍了ABAP 语法及ABAP 报表的开发,而对于ABAP 报表,经常会涉及到打印的问题。
本节介绍SAP 系统提供的打印功能。
1.SAP 系统的打印控制SAP 系统的打印控制一般分为两步,首先生成与打印设备无关的打印请求,然后生成与打印设备相关的输出请求。
通过选择菜单“工具→CCMS →Spool →SP01 – Output Controller ”选项(或者直接在命令栏中输入“SP01”命令),进入“输出控制器”中。
在“输出控制器”中,可以查看“假脱机请求”和“输出请求”。
一般来说,根据需求的不同,SAP 系统会以不同的方式处理ABAP 列表打印与SmartForms 的打印,它们的配置过程相似,但实际控制方式不同。
具体ABAP 列表的打印配置过程如图12-55所示。
图12-54 自定义输出字段的ALV 程序 图12-55 列表打印配置过程 2.创建终端打印设备在SAP 系统中可以自己定义“终端打印设备”,自己定义的“终端打印设备”可以由最终用户指定的本地打印机打印。
具体创建步骤如下。
1 通过选择菜单“工具→CCMS →Spool → SPAD–Spool Administration ”选项(或者直接在命令栏中输入“SPAD ”命令),进入“假脱机管理:初始屏幕”界面,如图12-56所示。
2 选择“设备/服务器”页,然后在“输出设备”栏中输入要创建的输出设备名称“test ”,并单击“输出设备”按钮,进入图12-57所示的界面。
图12-56 “假脱机管理:初始屏幕”界面图12-57 假脱机输出设备清单 3 单击“”按钮,然后单击“”按钮,进入“假脱机管理:建立输出设备”界面,如图12-58所示。
SAP日记-ABAP SMARTFORMS导出PDF有几种方式1、安装pdf打印程序,在sap打印界面选择改打印程序即可适合打印PDF的个别用户。
2、把smartform打印到spool.然后在事务码SP02里面查到spool号复制spool号SE38 执行RSTXPDFT4即可3、调用GUI_DOWNLOAD此处仅为打印代码CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'EXPORTINGFORMNAME = 'ZSDK006' “SMARTFORMS名称IMPORTINGFM_NAME = FM_NAMEEXCEPTIONSNO_FORM = 1NO_FUNCTION_MODULE = 2OTHERS = 3.CLEAR:OUTPUT_OPTIONS.CONTROL_PARAMETERS-GETOTF = 'X'.CONTROL_PARAMETERS-NO_DIALOG = 'X'.OUTPUT_OPTIONS-TDNOPREV = 'X'.CALL FUNCTION FM_NAMEEXPORTINGOUTPUT_OPTIONS = OUTPUT_OPTIONS"l_optionCONTROL_PARAMETERS = CONTROL_PARAMETERSIMPORTINGJOB_OUTPUT_INFO = T_OTFDATATABLESGT_ITAB = ITAB “内表EXCEPTIONSFORMATTING_ERROR = 1INTERNAL_ERROR = 2SEND_ERROR = 3USER_CANCELED = 4OTHERS = 5.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.*************此处为导出PDFT_OTF[] = T_OTFDATA-OTFDATA[].CALL FUNCTION 'CONVERT_OTF'EXPORTINGFORMAT = 'PDF'MAX_LINEWIDTH = 132IMPORTINGBIN_FILESIZE = W_BIN_FILESIZETABLESOTF = T_OTFLINES = T_PDF_TABEXCEPTIONSERR_MAX_LINEWIDTH = 1ERR_FORMAT = 2ERR_CONV_NOT_POSSIBLE = 3OTHERS = 4.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.*---------------TAKING THE DOWNLOAD FILE PATH AS USER INPUT** DATA UA TYPE I.CONCATENATE 'D:\' KUNNR NAME1 ZDATE1+0(6) '对账单.pdf' INTO FILE_NAME. “定义文件名******************这一段不屏蔽,在打印的时候会有显示选择路径的对话框,屏蔽则直接保存在上面的文件名FILE_NAME指定的路径* CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG* EXPORTING* DEFAULT_FILE_NAME = FILE_NAME* CHANGING* FILENAME = FILE_NAME* PATH = FILE_PATH* FULLPATH = FULL_PATH* USER_ACTION = UA* EXCEPTIONS* CNTL_ERROR = 1* ERROR_NO_GUI = 2* NOT_SUPPORTED_BY_GUI = 3* OTHERS = 4.* IF SY-SUBRC <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.* ELSE.* IF UA = 0.* Download the file to the selected path************************CALL FUNCTION 'GUI_DOWNLOAD'EXPORTINGBIN_FILESIZE = W_BIN_FILESIZEFILENAME = FILE_NAME "fname1FILETYPE = 'BIN'IMPORTINGFILELENGTH = W_FILESIZETABLESDATA_TAB = T_PDF_TABEXCEPTIONSFILE_WRITE_ERROR = 1NO_BATCH = 2GUI_REFUSE_FILETRANSFER = 3INVALID_TYPE = 4NO_AUTHORITY = 5UNKNOWN_ERROR = 6HEADER_NOT_ALLOWED = 7SEPARATOR_NOT_ALLOWED = 8FILESIZE_NOT_ALLOWED = 9HEADER_TOO_LONG = 10DP_ERROR_CREATE = 11DP_ERROR_SEND = 12DP_ERROR_WRITE = 13UNKNOWN_DP_ERROR = 14ACCESS_DENIED = 15DP_OUT_OF_MEMORY = 16DISK_FULL = 17DP_TIMEOUT = 18FILE_NOT_FOUND = 19DATAPROVIDER_EXCEPTION = 20CONTROL_FLUSH_ERROR = 21OTHERS = 22.IF SY-SUBRC <> 0.MESSAGE 'File not downloaded' TYPE 'I'.ELSE.ENDIF.* ENDIF.* ENDIF.第一种和第二种都可在用户突然需要PDF文件的时候应用,不需要写程序,第三种则应用在用户需要经常导出PDF格式时;第二种也可以通过SUBMIT 调用RSTXPDFT4 执行。
SAP PO相关打印编程1.PO打印通常企业打印PO有两种方式,一是套打(由印刷厂商印制好一式多联的格式以备打印的PO 送给相关部门,比如采购部,供应商,财务部,仓库等保存),另一种就是直接打印在A4纸上.不管哪种方式,可直接写一个外挂程序或使用SAP配置来打印,谁优谁劣无可非议只要能正确将东西打印出来就行.在打印报表的问题上我个人很喜欢Crystal report因为能很容易定义所需要的各种复杂格式,遗憾的是SAP系统似乎要装插件才支持Crystal report.使用外挂程序或配置,就要使用到所谓的Form(SAPscript)或Smartform,当然另外一种方法就是使用OLE to Excel,在Excel定义好格式然后填充数据.好了,下面就PO打印配置谈谈如何设置PO打印.PO打印设置难吗?显然是非常容易的,从某种意义上讲,你不做任何配置实际SAP已经提供了default的output NEU打印PO了.让我们看看图1.(Tcode:ME21N|ME22N)[1]首先必须让此PO输出一个所谓的Message,在此此message是print output .[2]打印预览按Messages进入图2.[1]按Communication method进入图3.[2]Processing log你能看到调用的程序名称如是打印能看到产生的Spool no.号(有一种case是系统hang up了上万个打印请求结果造成Spool buffer溢出,所以basis有必要定期去清理下)SAP默认是使用程序SAPFM06P的子程序ENTRY_NEU处理打印message的,这在配置中可做适当更改如果有需要的话,毕竟SAP是程序堆起来的改改是很正常的.[3]进去后Requested processing栏位的Dispatch time选4 Send immediately就表示立即发送消息.[4]通常如需要重新打印,可选择一已经存在的Output 后再按它copy一个.当然也可使用ME9F重打.[5]NEU是打印PO,SAP default的,接下来会告诉如何自定义output type. 为什么需要自定义output type?是在一个大集团公司,可能存在有各种PO的打印格式并且可能需要各种不同的语言版本.[6]在此选1 print output,你也可看到Message实际上可发送到printer, Fax,Mail, EDI和触发PO的workflow事件等,举个简单的例子,供应商要求建立PO后立即自动将PO数据EDI到他们的系统就可配置EDI Message ,关于EDI有专门解剖的一刀.[7]Partner,SAP经常有sold-to,ship-to,billing-to伙伴,VN是vendor.[8]这个语言在一些跨国集团可能用的上,假设公司间的transfer order格式相同,但是希望法国公司打印的是法文,德国打印的是德文,中国是中文,美国是英文,要么你为每种语言版本定义一个output type要么就在程序中判断这个语言字段,而后者可能更好些,因为你只要使用SO10定义标准文本就行.让我们切换到图3.[1]Tcode:SAPD可设置打印机[2]立即打印出来[3]你还可使用别的Form(通常不能在此使用smartform,除非你大肆修改后台配置)大家可能对PO打印已有了初步了解,是的,不管是套打还是打印在A4上,都是可通过PO的message来完成的.(1)PO header及其Item文本设置IMG Path:Materials Management->Purchasing->Purchase Order如图[1]定义Header text type.如上图,如企业需要可以增加自己的header text type,这些text type在建立PO时可看到如图5.[2]我们看看SAP default的header text type 06.如下图. 1表示取文本的顺序. 2表示文本能否被Fix(修理修改),空和*表示能修改,空表示修改Source object不会影响到PO text,*表示修改文本立即自动反映到PO text, N表示文本从source object自动取得不能修改.在下面将进一不描述.[3]定义item text type.[4]如下图,是text type 03的设置,1表示取数据顺序,Seq.为0似乎是表示不用它,特别要强调以下这个No.加前坠将会成为文本ID标识. 2.表示数据源,从图中我们能看到PO的Materiap PO text文本取数据先从物料主数据的basic data text中读取(在basic data 1视图进去维护),然后是读取Purchase order text(物料主数据专门有一个View)的数据,就是说你建立PO line text 03将自动从物料主数据将这些东西抓过来3.表示文本能否被更改.当定义好Header 和line Text type后,在建立PO时我们就能在这些文本中填写数据.如图5,可能企业需要在PO中加入各种类型文本,并且这些文本可能被随时更改,这种情况下我想使用固定程序恐怕相当麻烦.就需要使用相关配置,然后在程序中调用这些文本.1根据欧美的相关合同法,PO上通常需要打印T&C(Terms*Condition),以便万一有经济纠纷时可参照当时打印出的文本条款,很明显,T&C是针对不同的Vendor是经常被修改的.另外PO上的运输方式也可能经常变更,这种复杂的业务使用文本就可解决.2 让我们更深入了解下PO文本的保存情况,在SAP中,大多数的文本比如PO,SO,Billing等各种相关文本都保存在STXH,STXL中,我们根据一定规则将它读出来,这些规则在稍后会继续细讲,回答那个Fix 标识.N表示从source object抓出来后你不能再做修改,因此从文本STXH,STXL表中By PO item是查不到数据的,*表示文本抓出来你还能修改,当自动抓取数你去做更改后才会保存早STXH,STXL中, By PO item可以读取,这样在编程序就必须注意首先根据PO item读数据如没读到再到物料主数据中去找. 详细请看SAP文本.(2)PO Message配置[1]应该不会这么快就忘记建立PO header/Line text type的Seq. no.加上F前坠就是Text ID ,这步通常是不用做的除非你使用SAP标准的,因为PO将使用[2]分配Form和相关Output程序给PO,在第[3]步讨论,因为在定义PO output type时包括了这部分的配置.[3]打开Output control发现配置和MM/SD的定价条件相似,是的,所谓的condition技术用在在Message output,MM/SD Pricing,FI Tax IMG等,而且他们共享了很多配置表,我想SAP是因为他们逻辑上相似所以将他们组织在一起. 通常的情况下是比如要设置PO一建立好就自动打印,否则就需要想第一步更改PO哪些重要字段后会自动重打PO,兼于篇幅,在此就不讨论了,这个问题留给读者自己去考虑,在这里只讨论如何Copy出新的output type .因为用户可能需求不同的打印格式.一.新增Output type Message .IMG Path:Output Control->Message Types->Define Message Types for Purchase Order.如图6.[1]Copy All data from NEU to ZUSA.[2]Output type可用在Print, Fax,EDI等上.[3]Output调用的程序,默认是SAPFM06P[4]使用的子程序,默认是ENTRY_NEU[5]打印调用的FORM[6]在此我加了个Smartform,很明显默认是不会认Smartform的,除非你将第3步的SAPFM06P Copy出(比如是ZSAPFM06P)再将ENTRY_NEU修改,这要费点事情,还是使用Form吧二.Define (定义)Message Schema for Purchase OrderIMG Path:Output Control->Message Determination Schemas[1]选定procedure RMBEF1.[2]将ZUSA加上.[3]特别要强调一下,关于这个requirement在MM/SD的pricing配置中将会重点介绍,这个将对应到一个子程序比如你可设置子程序返回值为True打印否则不打印.使用Tcode VOFM>菜单Requirements->output control|OMFT|V/27可自定义requirements,简单理解就是Control message,只有需求满足才输出消息.三.建立条件记录MN04OK,是否现在就可使用这个output type了呢?回答是不能的,我们想象SD pricing后台配好了你要还使用VK11呀,同样,你必须使用MN04为此output type建立一条件记录.这些基础工作都搞定了,下面来吹下如何coding …Coding是TMD世界上最无聊的工作之一,Salary有低,,哎….To be continued .….改天继续将所有的打印给屠宰一遍.(3)物料主数据文本BADI也是enhancemnet的一种,可以在SE19中建立自定义的Implementation name 激活系统自带的badis,系统的badis可以在SE18中看。
这个东东很好玩哟,要不要我教你玩呀?SE75可看到所有的相关文本.物料主数据中有很多Text(文本),比如有两个视图Purchase order text和Sales text,在basic data1视图中单击Basic data text按钮或直接点击Additional data按钮能看见Basic data text和Inspection text两tab页,在此可写入一些相关信息,这些信息没别的,就是将来可用在打印PO或SO上而已(更详细请看MM相关单据打印).如图3.2.3-1,在purchase order text中保存了9行数据,每行使用回车键分开.当物料保存时,SE16检查STXH和STXL, 图3.2.3-2是STXL表的结果,注意画红圈的字段,数据以binary格式保存在STXL字段CLUSTR里.1.其实STXL就是一个所谓的簇式数据库(一个有特定结构的透明表),详情请看第一篇的第12节簇数据库和逻辑数据库.2.注意簇数据库和簇表的区别.簇数据库(ABAP层的概念)是透明表对应一个SAP系统用的数据库的一个物理表,REPORT ZMATTXT .data: itab_head like thead ,itab_line like tline occurs 0 with header line .CALL FUNCTION 'READ_TEXT'EXPORTING***ID: 1.BSET:Purchase Order Text(物料视图)*** 2.GRUN:Basic Data Text(从additional data按钮进去) *** 3.PRUE:Inspection Text*** 4.0001:Sales TextID = 'BEST'LANGUAGE = SY-LANGU***对1.2.3是Name就是mat. no.***4sales text对应的name是Mat. no+sales org.+dist.chann.NAME = 'SL62ABPLS49H1535'***1.2.3是MATERIAL,4是MVKE.OBJECT = 'MATERIAL'IMPORTINGHEADER = itab_headTABLESLINES = itab_lineEXCEPTIONSID = 1LANGUAGE = 2NAME = 3NOT_FOUND = 4OBJECT = 5REFERENCE_CHECK = 6WRONG_ACCESS_TO_ARCHIVE = 7OTHERS = 8 .*check sy-subrc eq 0 .***此例是读出materail master data的purchase order text . ***PO text可有多行,使用Enter键分行,所以使用内表.Loop at itab_line.write :/ itab_line-tdformat,'|',itab_line-tdline.endloop .***下面是读出mat. master data的sales text的例子.***注意NAME是物料(补满18位)+Sales org.+dist. chann.data: itab_sohead like thead ,itab_soline like tline occurs 0 with header line . CALL FUNCTION 'READ_TEXT'EXPORTINGID = '0001'LANGUAGE = SY-LANGUNAME = 'SL62ABPLS49H1535 510001' OBJECT = 'MVKE' "Sales text是MVKE IMPORTINGHEADER = itab_soheadTABLESLINES = itab_solineEXCEPTIONSID = 1LANGUAGE = 2NAME = 3NOT_FOUND = 4OBJECT = 5REFERENCE_CHECK = 6WRONG_ACCESS_TO_ARCHIVE = 7OTHERS = 8 .Loop at itab_soline.write :/ itab_soline-tdformat,'|',itab_soline-tdline. endloop .。