Диплом: Автоматизация обработки заявок в Центре оказания финансовых услуг ООО "ИБМ ВЕА"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
86
def FBL1NPutin(balance_unit, clear_doc, vendor, po, total_sum, amount):
re_sum = []
a = []
session_of_fbl = CREATE_SAP_CONNECTION()
session_of_fbl.starttransaction('fbl1n')
session_of_fbl.Children(0).maximize()
for el in session_of_fbl.FindById("wnd[0]/usr").Children:
if el.Changeable and el.Text != '' and (el.Type == "GuiTextField" or el.Type == "GuiCTextField"):
el.text = ''
session_of_fbl.FindById("wnd[0]/tbar[1]/btn[16]").press()
try:
sap_table =
session_of_fbl.FindById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSC
REEN_CONTAINER2:SAPLSSEL:2000/cntlSUB_CONTAINER/shellcont/shellcont/shell/shellcont[1]/shell")
except():
pass
try:
session_of_fbl.findById("wnd[0]/usr/ctxtKD_BUKRS-LOW").text = balance_unit
session_of_fbl.FindById("wnd[0]/usr/ctxtKD_LIFNR-LOW").text = vendor
except(AttributeError):
raise ValueError
session_of_fbl.FindById("wnd[0]/usr/radX_AISEL").select()
session_of_fbl.FindById("wnd[0]/usr/chkX_SHBV").selected = True
session_of_fbl.FindById("wnd[0]/usr/chkX_NORM").selected = True
if len(clear_doc) == 0:
BO_found = False
session_of_fbl.FindById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSC
REEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN010-
LOW").text = po
else:
87
session_of_fbl.FindById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSC
REEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/btn%_%%DYN011_%_AP
P_%-VALU_PUSH").press()
import_cleardoc_csv(clear_doc)
session_of_fbl.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSC
REEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/btn%_%%DYN011_%_AP
P_%-VALU_PUSH").press()
session_of_fbl.findById("wnd[1]/tbar[0]/btn[23]").press()
session_of_fbl.findById("wnd[2]/usr/ctxtDY_PATH").text = os.getcwd()
session_of_fbl.findById("wnd[2]/usr/ctxtDY_FILENAME").text = "test.csv"
session_of_fbl.findById("wnd[2]/tbar[0]/btn[0]").press()
session_of_fbl.findById("wnd[1]/tbar[0]/btn[8]").press()
session_of_fbl.FindById("wnd[0]").sendVKey(8)
try:
sap_table = session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
except(pywintypes.com_error):
raise ValueError
session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").setCurrentCell(-1,
"WRSHB")
session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").selectColumn("WRSHB"
)
session_of_fbl.FindById("wnd[0]/tbar[1]/btn[19]").press()
session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").setCurrentCell(-1,
"BUDAT")
session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").selectColumn("BUDAT"
)
time.sleep(1)
88
session_of_fbl.FindById("wnd[0]/tbar[1]/btn[25]").press()
sap_table = session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
LastRows = sap_table.RowCount - 1
p = sap_table.visibleRowCount
k = 0
sap_table.currentCellRow = 0
l = LastRows / sap_table.visibleRowCount
for b in range(1, int(l) + 2):
k = b * p
if k > LastRows:
k = LastRows
for k1 in range(sap_table.currentCellRow, k + 1):
if sap_table.getcellvalue(k1, "BLART") == "BO":
BO_not_found = False
break
else:
BO_not_found = True
#break
if k1 > LastRows:
break
if k1 < LastRows:
sap_table.currentCellRow = k1
p = sap_table.visibleRowCount
k = 0
sap_table.currentCellRow = 0
l = LastRows / sap_table.visibleRowCount
89
checkClrDocDup=[]
for b in range(1, int(l) + 2):
k = b * p
if k > LastRows:
k = LastRows
for k1 in range(sap_table.currentCellRow, k + 1):
if sap_table.getcellvalue(k1, "BLART") == "BO":
checkClrDocDup.append(sap_table.getcellvalue(k1, "AUGBL"))
if k1 > LastRows:
break
if k1 < LastRows:
sap_table.currentCellRow = k1
p = sap_table.visibleRowCount
k = 0
sap_table.currentCellRow = 0
l = LastRows / sap_table.visibleRowCount
for b in range(1, int(l) + 2):
k = b * p
if k > LastRows:
k = LastRows
for k1 in range(sap_table.currentCellRow, k + 1):
if sap_table.getcellvalue(k1, "BLART") == "RE" or sap_table.getcellvalue(k1, "BLART") == "R3":
if sap_table.getcellvalue(k1, "AUGBL") == '' and sap_table.getcellvalue(k1, "WRSHB").replace('-', '')
in amount:
re_sum.append(sap_table.getcellvalue(k1, "WRSHB").replace('-', ''))
if total_sum is False and sap_table.getcellvalue(k1, "AUGBL") == '':
re_sum.append(sap_table.getcellvalue(k1, "WRSHB"))
if sap_table.getcellvalue(k1, "AUGBL") not in checkClrDocDup and sap_table.getcellvalue(k1,
"AUGBL") != '':
90
clear_doc.append(sap_table.getcellvalue(k1, "AUGBL"))
if total_sum == sap_table.getcellvalue(LastRows, "WRSHB").replace('-', '') and
sap_table.getcellvalue(k1, "AUGBL") == '' and sap_table.getcellvalue(k1, 'U_LIFNR') != '':
re_sum.append(sap_table.getcellvalue(k1, "WRSHB").replace('-', ''))
if k1 > LastRows:
break
if k1 < LastRows:
sap_table.currentCellRow = k1
return BO_not_found, list(set(re_sum))
def main_func(query, clear_doc, converter, query2, numberFormat):
not_charged_yet = []
vendor_po_erorrs = []
amount_errors = []
finish = []
if len(query) != 0:
for balance_unit in query.keys():
for vendor in query[balance_unit].keys():
for po in query[balance_unit][vendor].keys():
if '' in query[balance_unit][vendor][po]:
query[balance_unit][vendor][po] = []
if len(query[balance_unit][vendor][po]) > 0:
for index, value in enumerate(query[balance_unit][vendor][po]):
query[balance_unit][vendor][po][index] = converter(value, numberFormat)
for balance_unit in query.keys():
for vendor in query[balance_unit].keys():
for po, amount in query[balance_unit][vendor].items():
balance_unit2 = Me23n(po, vendor, balance_unit)
if len(amount) > 0:
91
total_sum = map(lambda x: int(re.sub(r'[^\d]', '', x)), amount)
total_sum = list(str(sum(list(total_sum))))
total_sum.insert(-2, '.')
total_sum = converter(''.join(total_sum), numberFormat)
else:
total_sum = False
try:
result = FBL1NPutin(balance_unit2, clear_doc, vendor, po, total_sum, amount)
for res in result[1] or []:
not_charged_yet.append([vendor, po, res])
except(ValueError):
vendor_po_erorrs.append([vendor, po])
continue
DISCONNECT_SAP_CONNECTION()
temp_list=[]
if not result[0]:
session_of_fbl = CREATE_SAP_CONNECTION()
temp_list = GetDataFbl1n(session_of_fbl,amount, total_sum,temp_list)
if len(clear_doc)>0:
try:
result = FBL1NPutin(balance_unit2, clear_doc, vendor, po, total_sum, amount)
for res in result[1] or []:
not_charged_yet.append([vendor, po, res])
except(ValueError):
vendor_po_erorrs.append([vendor, po])
continue
clear_doc = []
session_of_fbl = CREATE_SAP_CONNECTION()
sap_table =
session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
92
try:
temp_list = GetDataFbl1n(session_of_fbl,amount, total_sum,temp_list)
except(AttributeError):
vendor_po_erorrs.append([vendor, po])
pass
resu = FK03GetData(vendor, balance_unit2)
check_amount = []
t = []
if len(temp_list) == 0:
amount_errors.append([vendor, po])
continue
for t in temp_list:
qur = []
qur.extend(t)
qur.append(resu[0])
qur.append(resu[1])
qur.append(balance_unit2)
qur.append(vendor)
qur.append(po)
check_amount.append(qur[0])
finish.append(qur)
if total_sum is not False:
summa_check_amount = str(sum(list(map(lambda x: int(re.sub(r'[^\d]', '', str(x))),
check_amount))))
summa_user_amount = re.sub(r'[^\d]', '', amount[0])
if summa_check_amount != summa_user_amount:
for er in set(amount).difference(set(check_amount)) or []:
amount_errors.append([vendor, po, er])
if len(query2) != 0:
print('QUERY2 HAS STARTED*******************************')
for balance_unit in query2.keys():
93
for vendor in query2[balance_unit].keys():
for po in query2[balance_unit][vendor].keys():
if '' in query2[balance_unit][vendor][po]:
query2[balance_unit][vendor][po] = []
if len(query2[balance_unit][vendor][po]) > 0:
for index, value in enumerate(query2[balance_unit][vendor][po]):
query2[balance_unit][vendor][po][index] = converter(value, numberFormat)
for balance_unit in query2.keys():
for vendor in query2[balance_unit].keys():
clear_doc = []
for po, amount in query2[balance_unit][vendor].items():
clear_doc.append(po)
if len(amount) > 0:
total_sum = map(lambda x: int(re.sub(r'[^\d]', '', str(x))), amount)
total_sum = list(str(sum(list(total_sum))))
total_sum.insert(-2, '.')
total_sum = converter(''.join(total_sum), numberFormat)
else:
total_sum = False
try:
result = FBL1NPutin(balance_unit, clear_doc, vendor, po, total_sum, amount)
except(ValueError):
vendor_po_erorrs.append([vendor, po])
continue
DISCONNECT_SAP_CONNECTION()
clear_doc = []
session_of_fbl = CREATE_SAP_CONNECTION()
sap_table = session_of_fbl.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
94
temp_list=[]
try:
temp_list = GetDataFbl1n(session_of_fbl,amount, total_sum,temp_list)
except(AttributeError):
vendor_po_erorrs.append([vendor, po])
continue
resu = FK03GetData(vendor, balance_unit)
check_amount = []
t = []
if len(temp_list) == 0:
amount_errors.append([vendor, po])
continue
for t in temp_list:
qur = []
qur.extend(t)
qur.append(resu[0])
qur.append(resu[1])
qur.append(balance_unit)
qur.append(vendor)
qur.append(po)
check_amount.append(qur[0])
finish.append(qur)
if total_sum is not False:
summa_check_amount = str(sum(list(map(lambda x: int(re.sub(r'[^\d]', '', str(x))),
check_amount))))
summa_user_amount = re.sub(r'[^\d]', '', amount[0])
if summa_check_amount != summa_user_amount:
for er in set(amount).difference(set(check_amount)) or []:
amount_errors.append([vendor, po, er])
return finish, amount_errors, vendor_po_erorrs, not_charged_yet
95
def FK03GetData(vendor, balance_unit):
res = []
Session = CREATE_SAP_CONNECTION()
Session.starttransaction("FK03")
Session.FindById("wnd[0]").Maximize()
Session.FindById("wnd[0]/usr/ctxtRF02K-LIFNR").text = vendor
Session.FindById("wnd[0]/usr/ctxtRF02K-BUKRS").text = balance_unit
Session.FindById("wnd[0]/tbar[1]/btn[7]").press()
Session.FindById("wnd[0]").sendVKey(0)
if Session.FindById("wnd[0]/sbar").text == ("Vendor " + vendor + " is marked for deletion"):
Session.FindById("wnd[0]").sendVKey(0)
Session.FindById("wnd[0]/tbar[1]/btn[8]").press()
inn_vendor = Session.FindById("wnd[0]/usr/txtLFA1-STCD1").text
while Session.FindById("wnd[0]/titl").text != "Display Vendor: Payment transactions Accounting":
Session.FindById("wnd[0]/tbar[1]/btn[8]").press()
bank_name = Session.FindById("wnd[0]/usr/ctxtLFB1-HBKID").text
if bank_name == '':
bank_name = "Сити банк КБ ЗАО"
elif 'HSB' in str(bank_name).upper():
bank_name = "Эйч-эс-би-си Банк РР ООО"
else:
bank_name = 'NOT_FOUND'
return inn_vendor, bank_name

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)