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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
76
sheet = wb.sheet_by_index(0)
query = []
for i in range(0, sheet.nrows)[1:]:
if sheet.row_values(rowx=i)[:4] != ['', '', '', '']:
row = sheet.row_values(rowx=i)[:5]
if row[2] != '' and row[4] != '':
row[2] = ''
query.append(row[:4])
query = list(zip(*query))
autofill_query(query)
query = list(zip(*query))
query = filter(lambda x: x[2] != '', query)
query = groupping_query(query)
query2 = []
if all([i == '' for i in sheet.col_values(colx=4)]) is False:
for i in range(0, sheet.nrows)[1:]:
if sheet.row_values(rowx=i)[:5] != ['', '', '', '', ''] and sheet.row_values(rowx=i)[:5][-1] != '':
query2.append(sheet.row_values(rowx=i)[:5])
for q in query2:
del q[2]
q[2], q[3] = q[3], q[2]
autofill_query(query2)
query2 = groupping_query(query2)
if sap_is_started is False:
sap_start()
session = None
while session is None:
try:
77
session = CREATE_SAP_CONNECTION()
time.sleep(1)
numberFormat = SAP_get_date_and_number_formats()
except:
pass
time.sleep(2)
sap_is_started = True
clear_doc = []
sap_data = main_func(query, clear_doc, converter, query2, numberFormat)
sum_errors_extend = sap_data[1][:]
sum_errors_extend.extend(sap_data[3])
[sap_data[2].remove(a[:2]) for a in sum_errors_extend if a[:2] in sap_data[2]]
groupped_sap_data = groupping_outcome_sap(sap_data[0])
if len(sap_data[0]) == 0:
not_found_pdf = []
if len(os.listdir(output_dir)) != 0:
[os.remove(os.path.join(output_dir, file))for file in os.listdir(output_dir)]
while len(os.listdir(output_dir)) != 0:
time.sleep(2)
for a, b in groupped_sap_data.items():
converted_date = datetime.datetime.strptime(a, "%d.%m.%Y").strftime("%Y-%m-%d")
pdf_path = os.path.join(main_path, converted_date[:4], converted_date[:7], converted_date)
while not os.path.exists(pdf_path):
converted_date = datetime.datetime.strptime(str(converted_date), "%Y-%m-%d") -
datetime.timedelta(days=1)
converted_date = str(converted_date)[:10]
pdf_path = os.path.join(pdf_path[:-11], converted_date)
for c, d in dict(b).items():
for e, f in dict(d).items():
if c == 'Сити банк КБ ЗАО':
78
if e == 'RU03':
e = '700007 Pepsi'
if e == 'RU02':
e = '700467 Frito'
if e == 'RU04':
e = '702134 Lebed'
if c == 'Эйч-эс-би-си Банк РР ООО':
if e == 'RU03':
e = 'PCH'
if e == 'RU02':
e = 'FLM'
if e == 'RU04':
e = 'LEB'
directory = os.path.join(pdf_path, c, e)
not_found_pdf = unzip_dir(directory, f, output_dir)
body = ''
for i, n in enumerate(sap_data[2]) or []:
sap_data[2][i] = '<b>' + str(n) + '</b> - некорректные данные в шаблоне<br>'
body = ''.join(sap_data[2])
for i, n in enumerate(sap_data[1]) or []:
sap_data[1][i] = '<b>' + str(n) + '</b> - не найдена сумма/нет платёжного поручения<br>'
body2 = ''.join(sap_data[1])
for i, n in enumerate(not_found_pdf) or []:
not_found_pdf[i] = '<b>' + str(n) + '</b> - сумма не найдена в платёжном поручении<br>'
body3 = ''.join(not_found_pdf)
for i, n in enumerate(sap_data[3]) or []:
sap_data[3][i] = '<b>' + str(n) + '</b> - оплата по запрашиваемому документу еще не
произведена*<br>'
body4 = ''.join(sap_data[3])
if len(body4) > 1:
79
body4 = body4 + '<br>*Узнать статус оплаты по документам вы можетев колл-центре
GFSS, позвонив по номеру 8 800 700 8738 или связаться по e-mail
ssc_callcenter_kazan@pepsico.com<br><br>'
body_OK = u'<html><body>Добрый день.<br><br><font color="blue">Данное сообщение
создано автоматически.</font><br><br>Ваш запрос успешно обработан. Все запрашиваемые
документы во вложении.<br><br>В случае некорректной работы сервиса направьте Ваш запрос на
почтовый адрес бухгалтерам "Morozova, Natalia - Contractor" <a href="natalia-
contractor.morozova@pepsico.com">natalia-contractor.morozova@pepsico.com</a> и "Kurbangaleev,
Ilshat - Contractor" <a
href="ilshat.kurbangaleev@pepsico.com">ilshat.kurbangaleev@pepsico.com</a><br><br><br>Спасибо!</
body></html>'
body_partly_OK = f'<html><head><meta charset="UTF-8"></head><body>Добрый
день.<br><br><font color="blue">Данное сообщение создано автоматически.</font><br><br>Ваш
запрос обработан частично. Все найденные документы во вложении.<br><br>Запросы, по которым
не были найдены документы, ниже:<br> <b>Поставщик</b> &emsp;&emsp;&emsp;
<b>PO</b><br>{body}{body2}{body3}{body4}<br><br>Пожалуйста, убедитесь в корректности
предоставляемых Вами данных.<br><br>В случае некорректной работы сервиса направьте Ваш
запрос на почтовый адрес бухгалтерам "Morozova, Natalia - Contractor" <a href="natalia-
contractor.morozova@pepsico.com">natalia-contractor.morozova@pepsico.com</a> и "Kurbangaleev,
Ilshat - Contractor" <a
href="ilshat.kurbangaleev@pepsico.com">ilshat.kurbangaleev@pepsico.com</a><br><br>Спасибо!</body
></html>'
body_NOT_OK = f'<html><body>Добрый день.<br><br><font color="blue">Данное
сообщение создано автоматически.</font><br><br>Благодарим Вас за обращение в
Banking@pepsico.com<br><br><b>Комментарий по запросу:</b> Ваш запрос не был обработан,
предоставленные данные не найдены.<br><br>Пожалуйста, проверьте корректность заполнения
формы, возможно, данные были указаны неверно.<br><br><b>Поставщик</b> &emsp;&emsp;&emsp;
<b>PO</b><br>{body}{body2}{body3}{body4}<br><br>Для получения платежного поручения,
пожалуйста, оформите новый запрос.<br><br>Информируем Вас о том, что с 07.11.2019 года
доступен сервис по автоматической обработке запросов на предоставление платежных поручений по
исходящим платежам в адрес кредиторов.<br><font color="blue">Сервис доступен в рабочие дни с
9:00 до 18:00 по МСК</font>.<br><br>В случае некорректной работы сервиса направьте Ваш запрос
на почтовый адрес бухгалтерам "Morozova, Natalia - Contractor" <a href="natalia-
contractor.morozova@pepsico.com">natalia-contractor.morozova@pepsico.com</a> и "Kurbangaleev,
Ilshat - Contractor" <a
href="ilshat.kurbangaleev@pepsico.com">ilshat.kurbangaleev@pepsico.com</a><br><br>Спасибо!</body
></html>'
if len(os.listdir(output_dir)) > 0:
if len(sap_data[1]) == 0 and len(sap_data[2]) == 0 and len(not_found_pdf) == 0 and
len(sap_data[3]) == 0:
body = body_OK
if len(sap_data[1]) != 0 or len(sap_data[2]) != 0 or len(not_found_pdf) != 0 or len(sap_data[3])
!= 0:
body = body_partly_OK
80
if len(os.listdir(output_dir)) == 0:
body = body_NOT_OK
if ((len(sap_data[1]) != 0 or len(sap_data[2]) != 0 or len(not_found_pdf) != 0 or len(sap_data[3])
!= 0) and len(os.listdir(output_dir)) > 0) or (len(os.listdir(output_dir)) == 0 and len(sap_data[1]) != 0):
forward = item.create_reply(subject='FW: ' + item.subject, body=HTMLBody(body),
to_recipients=['timur.frolov.contractor@pepsico.com', 'ilshat.kurbangaleev@pepsico.com', 'natalia-
contractor.morozova@pepsico.com']).save(draft_folder)
for attachment_name in os.listdir(output_dir) or []:
with open(os.path.join(output_dir, attachment_name), 'rb') as f:
content = f.read()
forward.attach(FileAttachment(name=attachment_name, content=content))
forward.reply_to = [item.sender]
attachement_counting = 0
while len(os.listdir(output_dir)) != attachement_counting:
attachement_counting = 0
for attachment in forward.attachments:
if isinstance(attachment, FileAttachment):
if attachment.name.upper().endswith('.PDF'):
attachement_counting += 1
with open(local_path, 'rb') as f:
content = f.read()
forward.attach(FileAttachment(name=os.path.basename(local_path), content=content))
else:
reply = item.create_reply(subject='RE: ' + item.subject, body=HTMLBody(body),
to_recipients=[item.sender]).save(draft_folder)
for attachment_name in os.listdir(output_dir) or []:
with open(os.path.join(output_dir, attachment_name), 'rb') as f:
content = f.read()
reply.attach(FileAttachment(name=attachment_name, content=content))
attachement_counting = 0
while len(os.listdir(output_dir)) != attachement_counting:
81
attachement_counting = 0
for attachment in reply.attachments:
if isinstance(attachment, FileAttachment):
if attachment.name.upper().endswith('.PDF'):
attachement_counting += 1
reply.send()
os.remove(local_path)
82
Приложение 2
Программный код модуля Main
import sys
sys.path.append(r'\\smb.ukldcisilon01.cww.pep.pvt\RussiaFinance\GFSS_Russia\!CI_Team\Artem\Projects
\r2r_automailer\Lib\site-packages')
import subprocess
import time
import os
import clipboard
import re
import pywintypes
from setup import converter, import_cleardoc_csv
import win32com.client
def check_layout(Session, sap_table):
name_of_columns ={'ZZAPLIFNR':'Vendor', 'ZUONR':'Assignment', 'BLART':'Document Type',
'BELNR':'Document Number',
'BLDAT':'Document Date', 'BUDAT':'Posting Date', 'XBLNR':'Reference', 'ZLSPR':'Payment Block',
'ICO_AUGP':'Cleared/open items symbol', 'WRSHB':'Amount in doc. curr.', 'WAERS':'Document currency',
'SGTXT':'Text', 'AUGBL':'Clearing Document', 'EBELN':'Purchasing Document', 'U_LOKKT':'Alternative
account no.',
'HKONT':'G/L Account', 'PROJK':'WBS element', 'HWAER':'Local Currency', 'DMSHB':'Amount in local
currency',
'KONTO':'Account', 'U_XREF1_HD':'Ref.key (header) 1'}
Session.FindById("wnd[0]/tbar[1]/btn[33]").press()
layouts =
Session.FindById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shell
cont/shell")
p = layouts.VisibleRowCount
LastRows = layouts.RowCount - 1
l = LastRows / p
83
j = 1
layoutIsFinded = False
k = 0
layouts.currentCellRow = 0
for b in range(1, int(l) + 2):
k = b * p
if k > LastRows:
k = LastRows
for k1 in range(layouts.currentCellRow, k + 1):
if layouts.getcellvalue(k1, "VARIANT") == "AUTORESPRTR":
layouts.selectedRows = k1
layouts.click(k1, "VARIANT")
layoutIsFinded = True
break
if layoutIsFinded is True:
break
if k1 > LastRows:
break
if k1 < LastRows:
layouts.currentCellRow = k1
if Session.Children.Count == 2 and Session.Children(1).Text == "Choose Layout":
Session.FindById("wnd[1]/tbar[0]/btn[12]").press()
Session.FindById("wnd[0]/tbar[1]/btn[32]").press()
Session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/cntlCON
TAINER2_LAYO/shellcont/shell").SelectAll()
Session.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/btnAPP_
FL_SING").press()
Session.FindById("wnd[1]/tbar[0]/btn[0]").press()
84
for name in name_of_columns.keys():
check_columns(name, sap_table,name_of_columns,Session)
Session.FindById("wnd[0]/tbar[1]/btn[36]").press()
Session.FindById("wnd[1]/usr/tabsG50_TABSTRIP/tabpTAB_D0501/ssubD0505_SUBSCREEN:SAPLSLVC_DIA
LOG:0501/txtLTDX-VARIANT").text = "AUTORESPRTR"
Session.FindById("wnd[1]/usr/tabsG50_TABSTRIP/tabpTAB_D0501/ssubD0505_SUBSCREEN:SAPLSLVC_DIA
LOG:0501/txtLTDXT-TEXT").text = "This is for autoResp RTR"
Session.FindById("wnd[1]/tbar[0]/btn[0]").press()
if Session.Children.Count == 3:
Session.FindById("wnd[2]/usr/btnSPOP-OPTION1").press()
def check_columns(name, sap_table,name_of_columns,session_of_fbl):
for i in range(1, sap_table.ColumnCount):
need_to_find = False
if sap_table.ColumnOrder(i) == name:
break
else:
need_to_find = True
if need_to_find:
print(name_of_columns[name])
session_of_fbl.FindById("wnd[0]/tbar[1]/btn[32]").press()
session_of_fbl.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/c
ntlCONTAINER1_LAYO/shellcont/shell").PressToolbarButton("&FIND")
session_of_fbl.FindById("wnd[2]/usr/chkGS_SEARCH-EXACT_WORD").selected = True
session_of_fbl.FindById("wnd[2]/usr/txtGS_SEARCH-VALUE").text = name_of_columns[name]
session_of_fbl.FindById("wnd[2]/usr/cmbGS_SEARCH-SEARCH_ORDER").key = "0"
session_of_fbl.FindById("wnd[2]/tbar[0]/btn[0]").press()
session_of_fbl.FindById("wnd[2]").Close()
session_of_fbl.FindById("wnd[1]/usr/tabsG_TS_ALV/tabpALV_M_R1/ssubSUB_DYN0510:SAPLSKBH:0620/c
ntlCONTAINER1_LAYO/shellcont/shell").DoubleClickCurrentCell()
session_of_fbl.FindById("wnd[1]/tbar[0]/btn[0]").press()
85
def CREATE_SAP_CONNECTION():
SapGuiAuto = win32com.client.GetObject("SAPGUI")
application = SapGuiAuto.GetScriptingEngine
connection = application.Children(0)
session = connection.Children(0)
return session
def DISCONNECT_SAP_CONNECTION():
SapGuiAuto = None
application = None
connection = None
session = None
def SAP_get_date_and_number_formats():
session = CREATE_SAP_CONNECTION()
session.starttransaction ("su3")
session.FindById("wnd[0]/usr/tabsTABSTRIP1/tabpDEFA").Select()
dateFormat =
session.FindById("wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/c
mbSUID_ST_NODE_DEFAULTS-DATFM").Text
dateFormat = dateFormat.replace("Д", "D").replace('М', 'M').replace('Г', 'Y')
dateFormat.strip()
print(dateFormat)
numberFormat =
session.FindById("wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/c
mbSUID_ST_NODE_DEFAULTS-DCPFM").Text
numberFormat = numberFormat.strip()
print(numberFormat)
DISCONNECT_SAP_CONNECTION()
return numberFormat

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

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