试着写一个会计凭证excel上传的程序代码,需要有入力画面,excel文件上载,bapi过账
时间: 2024-04-01 14:34:18 浏览: 111
好的,以下是一个简单的会计凭证excel上传的程序代码示例,包括入力画面、excel文件上传和BAPI过账功能。请注意,这只是一个示例,您需要根据您的具体需求和环境进行适当的修改和调整。
```python
# 导入必要的库和模块
from tkinter import *
from tkinter import filedialog
import pandas as pd
import pyrfc
import os
# SAP连接参数
sap_conn = {
'user': 'SAP用户名',
'passwd': 'SAP密码',
'ashost': 'SAP应用服务器地址',
'sysnr': 'SAP系统编号',
'client': 'SAP客户端编号',
'lang': 'EN'
}
# SAP过账函数
def sap_posting(voucher_data):
try:
# 创建RFC连接
conn = pyrfc.Connection(**sap_conn)
# 调用BAPI过账
result = conn.call('BAPI_ACC_GL_POSTING_POST', DOCUMENTHEADER=voucher_data['header'], ACCOUNTGL=voucher_data['items'])
# 关闭RFC连接
conn.close()
return result
except Exception as e:
print('SAP过账错误:', e)
return None
# 选择excel文件函数
def select_file():
file_path = filedialog.askopenfilename()
file_var.set(file_path)
# 上传excel文件函数
def upload_file():
# 读取excel文件
df = pd.read_excel(file_var.get())
# 构建BAPI参数
voucher_data = {}
voucher_data['header'] = { 'COMP_CODE': '公司代码', 'DOC_TYPE': '凭证类型', 'DOC_DATE': '凭证日期', 'FISC_YEAR': '会计年度', 'CURRENCY': '货币代码', 'USERNAME': '用户名', 'HEADER_TXT': '凭证抬头文本' }
voucher_data['items'] = []
for index, row in df.iterrows():
item = { 'ITEMNO_ACC': row['科目行项目号'], 'GL_ACCOUNT': row['总账科目'], 'ITEM_TEXT': row['行项目文本'], 'ALLOC_NMBR': row['分配号码'], 'COSTCENTER': row['成本中心'], 'AMOUNT_LC': row['本币金额'], 'TAX_CODE': row['税码'], 'TAXJURCODE': row['税务机关代码'], 'BUS_AREA': row['业务范围'] }
voucher_data['items'].append(item)
# 调用SAP过账函数
result = sap_posting(voucher_data)
# 显示结果
if result is not None and result['RETURN'][0]['TYPE'] == 'S':
result_var.set('会计凭证上传和过账成功!\n凭证号码: ' + result['OBJ_KEY'] + '\n消息: ' + result['RETURN'][0]['MESSAGE'])
else:
result_var.set('会计凭证上传和过账失败!\n消息: ' + result['RETURN'][0]['MESSAGE'])
# 创建主窗口
root = Tk()
root.title('会计凭证Excel上传程序')
# 创建画布
canvas = Canvas(root, height=400, width=600)
canvas.pack()
# 创建背景图片
bg_image = PhotoImage(file=os.path.join(os.path.dirname(__file__), 'bg.png'))
bg_label = Label(root, image=bg_image)
bg_label.place(relwidth=1, relheight=1)
# 创建输入框和标签
file_var = StringVar()
file_label = Label(root, text='选择要上传的Excel文件:', font=('Arial', 14), bg='#F7D08A')
file_label.place(relx=0.1, rely=0.1, relwidth=0.4, relheight=0.1)
file_entry = Entry(root, textvariable=file_var, font=('Arial', 14))
file_entry.place(relx=0.5, rely=0.1, relwidth=0.3, relheight=0.1)
# 创建选择文件按钮
file_button = Button(root, text='选择文件', font=('Arial', 14), bg='#F7D08A', command=select_file)
file_button.place(relx=0.8, rely=0.1, relwidth=0.1, relheight=0.1)
# 创建上传按钮
upload_button = Button(root, text='上传文件并过账', font=('Arial', 14), bg='#F7D08A', command=upload_file)
upload_button.place(relx=0.3, rely=0.3, relwidth=0.4, relheight=0.1)
# 创建结果标签
result_var = StringVar()
result_label = Label(root, textvariable=result_var, font=('Arial', 14), bg='#F7D08A')
result_label.place(relx=0.1, rely=0.5, relwidth=0.8, relheight=0.3)
# 运行主循环
root.mainloop()
```
请注意,以上代码仅供参考,您需要根据您的具体需求和环境进行适当的修改和调整。例如,您需要将SAP连接参数、excel文件格式、BAPI参数等替换为您自己的值。同时,您还需要根据您的实际需求设计入力画面和结果显示方式。
阅读全文