在FB01创建的会计凭证,可以在FB02中,增加附件,比如,打印的凭证PDF附件,我们的需求是把票据信息生成的PDF放到对应的会计凭证 ,或者是把银企直连接支付后银行的电子回单的PDF文件放到对应的会计凭证 上,
之前一开始做的是附件保存到SAP的服务器上,后来修改为传到OPENTEXT上,
以下记录一些样的功能点,
- 使用函数SSF_FUNCTION_MODULE_NAME得到SMARTFORM,并打印,得到打印的内容LS_CONTROL_PARAMETERS
- 函数CONVERT_OTF把SMARTFORM生成PDF文件,
- SCMS_XSTRING_TO_BINARY转换为二进制值,用于传输 上传。
- 调用函数BINARY_RELATION_CREATE_COMMIT“创建附件”,把文件传到SAP服务器,并使用成为会计凭证附件
- 调用BINARY_RELATION_CREATE,“创建外部凭证(URL)”,把URL地址作为作为会计凭证附件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
背面信息 DATA(LT_NEW) = LT_BMXX2. DELETE LT_NEW WHERE DRAFTNO <> <FS_PMXX>-DRAFTNO. IF LT_NEW IS NOT INITIAL. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING FORMNAME = 'ZTR2_0580_BMXX' VARIANT = ' ' DIRECT_CALL = ' ' IMPORTING FM_NAME = LV_FM_NAME EXCEPTIONS NO_FORM = 1 NO_FUNCTION_MODULE = 2 OTHERS = 3. IF SY-SUBRC <> 0. RETURN. ENDIF. CALL FUNCTION LV_FM_NAME EXPORTING CONTROL_PARAMETERS = LS_CONTROL_PARAMETERS OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS USER_SETTINGS = 'X' IV_ZTR2T0350 = <FS_PMXX> IMPORTING JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO TABLES IT_ZTR2T0370 = LT_NEW EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. REFRESH LT_NEW. ENDIF. CALL FUNCTION 'SSF_CLOSE' IMPORTING JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 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. ENDIF. *Get PDF content CALL FUNCTION 'CONVERT_OTF' EXPORTING FORMAT = 'PDF' MAX_LINEWIDTH = 132 IMPORTING BIN_FILESIZE = LV_BIN_FILESIZE BIN_FILE = LV_BIN_FILE TABLES OTF = LS_JOB_OUTPUT_INFO-OTFDATA[] LINES = LT_PDF_LINE EXCEPTIONS ERR_MAX_LINEWIDTH = 1 ERR_FORMAT = 2 ERR_CONV_NOT_POSSIBLE = 3 ERR_BAD_OTF = 4 OTHERS = 5. IF SY-SUBRC <> 0. ENDIF. DATA: GT_BIN TYPE SOLIX OCCURS 0, G_ATTSIZE TYPE INT4. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING BUFFER = LV_BIN_FILE * APPEND_TO_TABLE = ' ' IMPORTING OUTPUT_LENGTH = G_ATTSIZE TABLES BINARY_TAB = GT_BIN. INCLUDE <CNTN01>. TYPE-POOLS: SLIS, ABAP, TRUXS. DATA:L_OBJ TYPE SWC_OBJECT, G_FILENAME TYPE STRING, GS_OBJB TYPE BORIDENT, GS_OBJA TYPE BORIDENT, GS_BINREL TYPE GBINREL, GT_BINATT TYPE STANDARD TABLE OF BRELATTR. IF <FS_PMXX>-PJZT = '100006' OR <FS_PMXX>-PJZT = '030006'. G_FILENAME = '票面信息-已签收-' && <FS_PMXX>-DRAFTNO. ELSE. G_FILENAME = '票面信息-待签收-' && <FS_PMXX>-DRAFTNO. ENDIF. DATA: L_SEQ TYPE I. SWC_CONTAINER L_CONT. SWC_CREATE_OBJECT L_OBJ 'MESSAGE' ''. SWC_SET_ELEMENT L_CONT 'NO_DIALOG' 'X'. SWC_SET_ELEMENT L_CONT 'DOCUMENTTITLE' G_FILENAME. SWC_SET_TABLE L_CONT 'Content_Hex' GT_BIN. SWC_SET_ELEMENT L_CONT 'DOCUMENTTYPE' 'PDF'. SWC_SET_ELEMENT L_CONT 'DOCUMENTSIZE' G_ATTSIZE. SWC_REFRESH_OBJECT L_OBJ. SWC_CALL_METHOD L_OBJ 'CREATE' L_CONT. SWC_GET_OBJECT_KEY L_OBJ GS_OBJB-OBJKEY. GS_OBJB-OBJTYPE = 'MESSAGE'. "type of attach document GS_OBJA-OBJTYPE = 'BKPF'. "BO of SAP Document. CONCATENATE GS_UPLOAD-BUKRS "company code GS_UPLOAD-BELNR "FI Document GS_UPLOAD-GJAHR "fiscal year INTO GS_OBJA-OBJKEY. CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT' EXPORTING OBJ_ROLEA = GS_OBJA OBJ_ROLEB = GS_OBJB RELATIONTYPE = 'ATTA' IMPORTING BINREL = GS_BINREL TABLES BINREL_ATTRIB = GT_BINATT EXCEPTIONS NO_MODEL = 1 INTERNAL_ERROR = 2 UNKNOWN = 3 OTHERS = 4. |
使用OPENTEXT保存附件,把URL地址作为会计凭证附件地址。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
FORM PF_UPLOAD_FILE USING PS_JOB_OUTPUT_INFO TYPE SSFCRESCL PS_PMXX TYPE ZTR2T0350 PS_UPLOAD TYPE TY_DATA CHANGING P_FALG TYPE CHAR1. DATA: LS_CONTROL_PARAMETERS TYPE SSFCTRLOP, LS_OUTPUT_OPTIONS TYPE SSFCOMPOP, LS_JOB_OUTPUT_INFO TYPE SSFCRESCL. DATA: LT_PDF_LINE TYPE STANDARD TABLE OF TLINE, LV_BIN_FILESIZE TYPE I, LV_BIN_FILE TYPE XSTRING, LV_FILELENGTH TYPE NUM12. DATA: LV_FILENAME TYPE STRING. DATA: L_ZOAREF_NO TYPE ZOAREF_NO. DATA: LV_FLAG TYPE CHAR1, "返回状态 LV_MESSAGE TYPE STRING, " 返回消息 LV_ATT_NO TYPE ZDEATT_NO, " 文件编号 LV_ARC_DOC_ID TYPE SAEARDOID. " SAP 归档链接:文档 ID DATA: LT_0100 TYPE TABLE OF ZTRT0100. LS_JOB_OUTPUT_INFO = PS_JOB_OUTPUT_INFO. *Get PDF content CALL FUNCTION 'CONVERT_OTF' EXPORTING FORMAT = 'PDF' MAX_LINEWIDTH = 132 IMPORTING BIN_FILESIZE = LV_BIN_FILESIZE BIN_FILE = LV_BIN_FILE TABLES OTF = LS_JOB_OUTPUT_INFO-OTFDATA[] LINES = LT_PDF_LINE EXCEPTIONS ERR_MAX_LINEWIDTH = 1 ERR_FORMAT = 2 ERR_CONV_NOT_POSSIBLE = 3 ERR_BAD_OTF = 4 OTHERS = 5. IF SY-SUBRC <> 0. ENDIF. DATA: GT_BIN TYPE TBL1024 OCCURS 0, G_ATTSIZE TYPE INT4. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING BUFFER = LV_BIN_FILE * APPEND_TO_TABLE = ' ' IMPORTING OUTPUT_LENGTH = G_ATTSIZE TABLES BINARY_TAB = GT_BIN. LV_FILELENGTH = G_ATTSIZE. INCLUDE <CNTN01>. TYPE-POOLS: SLIS, ABAP, TRUXS. IF PS_PMXX-PJZT = '100006' OR PS_PMXX-PJZT = '030006'. LV_FILENAME = '票面信息-已签收-' && PS_PMXX-DRAFTNO. ELSE. LV_FILENAME = '票面信息-待签收-' && PS_PMXX-DRAFTNO. ENDIF. CONCATENATE PS_UPLOAD-BUKRS "company code PS_UPLOAD-BELNR "FI Document PS_UPLOAD-GJAHR "fiscal year INTO L_ZOAREF_NO. "外围系统附件上传OpenText CALL FUNCTION 'ZRFC_ARCHIV_CREATE_FILE' EXPORTING IV_BUSTYPE = 'TR_0130' "文件类型 IV_BUKRS = PS_UPLOAD-BUKRS IV_REF_NO = L_ZOAREF_NO "会计凭证号 IV_ITEM = 0 "收款单行项目 IV_SCJS = '' "上传角色 IV_DOC_TYPE = 'PDF' " IV_FILENAME = LV_FILENAME IV_FILELENGTH = LV_FILELENGTH IV_TEXT = '' IMPORTING EV_FLAG = LV_FLAG EV_MESSAGE = LV_MESSAGE EV_ATT_NO = LV_ATT_NO TABLES IT_BIN = GT_BIN. IF LV_FLAG NE 'T'."失败 RETURN . * wd_comp_controller->pup_message( is_message = lv_message is_type = 2 ). ENDIF. LT_0100 = VALUE #( BASE LT_0100 ( GUID = CL_SWF_UTL_GUID_CREATE=>GET_GUID_16( ) REF_NO = L_ZOAREF_NO BUSTYPE = 'TR_0130' ATT_NO = LV_ATT_NO ) ). MODIFY ZTRT0100 FROM TABLE LT_0100[]. COMMIT WORK. *--------------------------------------------------------------------* *取得URL DATA LOBJ TYPE REF TO ZCL_TR_POST_CHECK. DATA L_URL TYPE SAPB-URI. CREATE OBJECT LOBJ. L_URL = LOBJ->DOWNLOAD_FILE_AS_URL( I_ATT_NO = LV_ATT_NO MODE = 'U' ). *--------------------------------------------------------------------* *设置FB03可见 DATA MSG TYPE STRING . DATA ANSWER . DATA LINES TYPE STRING . DATA FOLDER_ID TYPE SOFDK . DATA LT_OBJHEAD TYPE STANDARD TABLE OF SOLI . DATA LT_OBJCONT TYPE STANDARD TABLE OF SOLI WITH HEADER LINE . DATA L_OBJ_ID TYPE SOODK . DATA L_OBJ_DATA TYPE SOOD1 . DATA DOCUMENT_ID TYPE SOFMK . DATA REL_DOC TYPE BORIDENT . DATA IS_OBJECT TYPE BORIDENT . DATA L_INDEX TYPE SY-INDEX . CLEAR :MSG ,ANSWER , LINES ,FOLDER_ID ,LT_OBJHEAD ,LT_OBJCONT ,LT_OBJCONT[] ,L_OBJ_ID ,L_OBJ_DATA ,DOCUMENT_ID ,IS_OBJECT ,REL_DOC ,L_INDEX . DATA LS_OBJCONT TYPE SOLI. DATA LT_URLTAB TYPE STANDARD TABLE OF SOOD-OBJDES. DATA L_TAB_SIZE TYPE I. DATA L_URL_ID TYPE SO_URL. CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET' EXPORTING REGION = 'B' IMPORTING FOLDER_ID = FOLDER_ID EXCEPTIONS OTHERS = 1. L_URL_ID = L_URL. L_OBJ_DATA-OBJDES = LV_FILENAME. WHILE NOT L_URL_ID IS INITIAL. CONCATENATE '&KEY&' L_URL_ID(250) INTO LS_OBJCONT. L_OBJ_DATA-OBJDES = LV_FILENAME. APPEND LS_OBJCONT TO LT_OBJCONT. SHIFT L_URL_ID LEFT BY 250 PLACES. ENDWHILE. L_OBJ_DATA-OBJSNS = 'O'. L_OBJ_DATA-OBJLA = SY-LANGU. CALL FUNCTION 'SO_OBJECT_INSERT' EXPORTING FOLDER_ID = FOLDER_ID OBJECT_TYPE = 'URL' OBJECT_HD_CHANGE = L_OBJ_DATA IMPORTING OBJECT_ID = L_OBJ_ID TABLES OBJHEAD = LT_OBJHEAD OBJCONT = LT_OBJCONT EXCEPTIONS ACTIVE_USER_NOT_EXIST = 35 FOLDER_NOT_EXIST = 6 OBJECT_TYPE_NOT_EXIST = 17 OWNER_NOT_EXIST = 22 PARAMETER_ERROR = 23 OTHERS = 1000. IF SY-SUBRC = 0. DOCUMENT_ID-FOLTP = FOLDER_ID-FOLTP. DOCUMENT_ID-FOLYR = FOLDER_ID-FOLYR. DOCUMENT_ID-FOLNO = FOLDER_ID-FOLNO. DOCUMENT_ID-DOCTP = L_OBJ_ID-OBJTP. DOCUMENT_ID-DOCYR = L_OBJ_ID-OBJYR. DOCUMENT_ID-DOCNO = L_OBJ_ID-OBJNO. CLEAR REL_DOC . REL_DOC-OBJKEY = DOCUMENT_ID . REL_DOC-OBJTYPE = 'MESSAGE' . * CONCATENATE GS_OUT-BUKRS GS_OUT-BELNR GS_OUT-GJAHR INTO IS_OBJECT-OBJKEY . IS_OBJECT-OBJKEY = L_ZOAREF_NO. IS_OBJECT-OBJTYPE = 'BKPF' . CALL FUNCTION 'BINARY_RELATION_CREATE' EXPORTING OBJ_ROLEA = IS_OBJECT OBJ_ROLEB = REL_DOC RELATIONTYPE = 'URL' "'NOTE' EXCEPTIONS OTHERS = 1. IF SY-SUBRC = 0 . P_FALG = 'X'. ELSE . P_FALG = ''. ENDIF . ELSE. P_FALG = ''. ENDIF. ENDFORM. |