استخدام Python لإعداد التقارير في شركة واحدة

حدثت هذه القصة في شركة حقيقية ، على الرغم من حقيقة أن بعض الأسماء والأحداث وهمية.

كان Glory مطورًا عاديًا في شركة صغيرة في مدينة N. وكانت الشركة تعمل في تقديم الخدمات للمؤسسات التعليمية. كان هناك العديد من التطبيقات التي تحتاج إلى الدعم ، تتطور تدريجياً شيئًا فشيئًا. لكن سلطات Glory لم تؤمن بجهوده وحقيقة أنه يأكل خبزه لسبب ما. بالإضافة إلى ذلك ، لم يرغب رؤساء تقنية المعلومات حقًا في ذلك ، لكنهم أرادوا أن يفهموا ما الذي كان يفعله الموظفون ونوع الإنتاجية في قسم المبيعات (الذي يجب أن أقول أنه يتكون من شخص ونصف).

نظرت السلطات إلى مدير المبيعات بعين مكيدة وسألته: ماذا فعلت اليوم بالنسبة للوطن الأم. أجاب البائع: عقد العديد من الاجتماعات ، وقدم الخدمات لكثير من الناس. جاءت القيادة إلى Glory وقالت: قل لي ما إذا كان الموظفون يقولون الحقيقة أم لا ، فهم يحملون هفوة. تحتاج إحصاءات.

جرى الحوار:

- هل يدفع المستخدمون مقابل الخدمة من خلال خدمة خارجية لتلقي المدفوعات عبر الإنترنت؟ إلى هذا الحد؟
- هكذا
- هل إدارة الشركة لديها حق الوصول إلى هذه الخدمة؟
- هناك.
- لذلك ، ربما ، هناك تفريغ المدفوعات هناك.
- هناك.
"لكن هل تحتاج إلى تقرير إضافي؟"
- مطلوب.
- لماذا؟
- لأنه أكثر ملاءمة ، لأنه يجب عليك ، لأن "فلان وفلان".

في الإنصاف ، يجب القول أن هناك حاجة إلى بيانات إضافية.

دون تردد ، حقق Glory استعلامًا بسيطًا مع التحديد اللاحق في Excel.

كان التقرير عبارة عن مجموعة بيانات في عمود واحد في صفحة واحدة. في البداية اقتربوا من المجد بطريقة فوضوية ، في منتصف النهار وطلبوا. ولكن أعطني تقريرا عن هذه المنظمة ، والآن على هذه المنظمة. من دون تردد ، قررت سلافا أنه كان يكفي لتحمل هذا وأنه ينبغي القيام بشيء جميل وموحد من شأنه تلبية احتياجات أولئك الذين طلبوا.

نشأ نص صغير سمح بإرسال رسائل إخبارية إلى المهتمين:

import openpyxl, pymysql, os from smtplib import SMTP_SSL from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders import datetime # Excel Settings today = datetime.date.today().strftime('%d.%m.%Y') excel_file = 'Oplata_polzovateley_' + today + '.xlsx' # SQL settings host = '' user = '' passwd = '' db = '' port=0000 headers = ['id', 'email', '', '', ' ', ' ', '', '- ', ' '] # SMTP Mail settings smtp_server = 'smtp.gmail.com' mail_login = '' mail_passwd = '' receiver = [''] cc = [''] def main(): # Fetch Data from SQL server conn = pymysql.connect(host=host, user=user, passwd=passwd, db=db, port=port) cursor = conn.cursor() cursor.execute('''select * from table''') data = cursor.fetchall() conn.close() # Write Data to Excel file wb = openpyxl.Workbook() contractors = {} for item in data: diff = item[6] - item[5] item = list(item) # print(item) if diff.days > 10: item.append('') else: item.append('') item = tuple(item) if item[0][:30] in contractors: contractors[item[0][:30]] += 1 else: wb.create_sheet(item[0][:30]) contractors[item[0][:30]] = 2 for i in range(1, len(headers) + 1): letter = openpyxl.utils.get_column_letter(i) wb[item[0][:30]][letter + '1'] = headers[i - 1] wb[item[0][:30]]['A' + str(contractors[item[0][:30]])] = contractors[item[0][:30]] - 1 for i in range(2, len(headers) + 1): letter = openpyxl.utils.get_column_letter(i) wb[item[0][:30]][letter + str(contractors[item[0][:30]])] = item[i] wb.save(excel_file) wb.remove(wb['Sheet']) wb.save(excel_file) # Compose attachment part = MIMEBase('application', "octet-stream") part.set_payload(open(excel_file, "rb").read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(excel_file)) # Compose message msg = MIMEMultipart() msg['From'] = mail_login msg['To'] = ', '.join(receiver) msg['Cc'] = ', '.join(cc) msg['Subject'] = excel_file msg.attach(part) # Send mail tosend = receiver + cc smtp = SMTP_SSL('smtp.gmail.com') smtp.connect(smtp_server) smtp.login(mail_login, mail_passwd) smtp.sendmail(mail_login, tosend, msg.as_string()) smtp.quit() # Wipe file os.remove(excel_file) if __name__ == '__main__': main() 

صنع ، بالطبع ، لم أفكر حقا المجد. ولكن كما يقولون: "آه ، وهكذا ستفعل".

كل صباح ، جاء Slava إلى العمل ، وقام بكتابة نصوص وإرسال بريد إلكتروني إلى الأطراف المعنية.
كانت الخطوة التالية إعداد الإرسال التلقائي. عملت شيء مثل هذا:

عامل بناء بناء - علامات = التقارير.
تشغيل عامل ميناء - تقارير - RM
وبكلمات في التاج:
0 8 * * * run doer run - rm foo

كل يوم في الساعة الثامنة صباحًا ، غادرت الرسالة. كانت الإدارة جميلة وحتى بدأت تعتقد أن سلافا كانت تعمل كل يوم في تمام الساعة الثامنة صباحًا ، وصاغت تقريرًا في Excel ، ثم أرسلته بالبريد إلى يديه. وفعل ذلك يوم السبت والأحد والثلج والمطر وفي الليل القطبي.

جيثب

في الوقت الحاضر ، لفترة من الوقت كان كل شيء على ما يرام والقيادة تحملت ، ولكن ليس لفترة طويلة. ذات مرة كان هناك اجتماع تم فيه الإعلان عن أمر جديد. اسمع ، اسمع ولا تقل أنك لم تسمع. سيم تعلن أن كل موظف ، كل يوم يجب أن يقدم تقريرا إلى رتبة أعلى ، وحتى أعلى. حسنا ، بشكل عام ، أنت تفهم.

"كل يوم؟" طلب المجد.
- كل يوم. - أجاب رئيس القسم الفني.
- أو ربما لا؟
- إنه ضروري المجد ، إنه ضروري.

كان لسلافا عدة أسئلة بخصوص هذا الموقف. كانت المسؤولية المباشرة هي وضع اللمسات الأخيرة على البرنامج وتقاريره يجب أن تتكون من شيء مثل هذا:
الفذ (الوحدة النمطية) إصلاح الخلل في NoteLineCount ... ليس بجدية ...
محدث (Module2) لا تولي اهتماما للرجل وراء الستار
ثابت (Module3) قيل لي أن أتركها وحدها ، ولكن لدي هذا الشيء يسمى الوسواس القهري ، كما ترى
* ملاحظة: يتم أخذ اسم الرسائل المطلوب تنفيذها من هنا

قرر المجد أنه سيعد تقريرًا بناءً عليه. لقد مر أسبوع. جرت محادثة جديدة حول المحتوى التالي:

- لذلك ترسل تقارير كل يوم ، ولكن لا يوجد تقدم واضح. ما على سبيل المثال: "تمت إضافة قناع عند إدخال رقم هاتف في الواجهة الأمامية".
- حسنا ، انظر. في السابق ، كان عليك إدخال رقم هاتفك والتحقق من عدد الأرقام وكان غير مريح. وهذا مناسب.
- جلالة الملك حسنا. انا ارى وكيف تفسر هذا: "إعادة تنظيم الكود في وحدة الطرف المقابل. وظيفة التحقق من الصحة هي بطريقة منفصلة. "
- حسنا ، كما ترى. يوجد مثل هذا النظام - إصدار نظام التحكم ، والذي يشير إلى من ومتى وماذا فعل. انظر هنا. فيما يلي الإرشادات ، وهنا الكود الذي تم تغييره. هنا هو رمز المضافة ، وهنا يتم حذف الرمز.
- جيد دعونا نفعل ذلك بعد ذلك. قم بعمل تقرير بناءً على هذه التعهدات الخاصة بك ، ومن ثم سنجتمع ونرى كيف نعم ما كتبته هناك.

في النهاية - هذا ما حدث:

جيثب

استغرق البرنامج تغييرات في المستودع وأرسل خطابًا حول ما تم وما لم يتم.

في وقت سابق ، كان سلافا محرجًا للإبلاغ عن أن هؤلاء الذين سيتحققون من أي شيء على الإطلاق لا يفهمون كيفية كتابة التعليمات البرمجية. ربما تتفهم الإدارة المبيعات والمشتريات وجميع أنواع الأشياء الأخرى وتدفع الأموال ، لكنك سترى أسطرًا معينة من التعليمات البرمجية بلغة غير مألوفة للغاية ، لاحظ كيف تومض الخطوط الخضراء والحمراء عند التبديل من الالتزام إلى الالتزام.

نعم ، سلافا شخص مسؤول وقد نجح العمل ، ولكن كانت هناك تلك الأيام التي كانت فيها اللمسات الأخيرة بالكاد أو كانت كسلًا. على أي حال ، بشكل عام ، كان النظام يعمل دون إخفاقات ولم يرغب في إضافة 15 طبقة أخرى من التجريد ، ولكن كان يتعين إرسال التقارير يوميًا.

لم يتبق شيء سوى أن تصبح ماياكوفسكي جديدة وأن تكتب هفوة مع سلم. لكنني لا أرغب كل يوم في ابتكار واحدة جديدة. ونتيجة لذلك ، بدأ فياتشيسلاف في تطوير الحل الأول الذي يتبادر إلى الذهن وتبين أنه رمز بسيط ، حيث تم تجميع تقرير في غياب أي عمل تم تنفيذه ودفعت به التغييرات. بدا الأمر مثل هذا:

جيثب

يبقى أن يتم ذلك بحيث تم تشكيل رمز وهمية مع ارتكاب اللاحقة. هل هناك أي حاجة للقيام بذلك؟ الوقت سوف اقول.

ملاحظة: لم تنته قصة المجد هناك. كان هناك العديد من الأحداث التي أثرت على مصيره ، لكن هذه قصة مختلفة تمامًا. من المثير للاهتمام أن نقرأ في التعليقات قصصًا مماثلة من الحياة والقرارات التي تم إنشاؤها على أساسها. من الممكن أن يتم تطوير المشروع على أساس هذه التعليقات.

Source: https://habr.com/ru/post/ar446740/


All Articles