حماية الدفعالتفاصيل
- التعديلات ضمن الباقة مجانية.
- إذا لم تردّ خلال 3 أيام من التسليم، يُقبل العمل تلقائيًا.
يُحجز المبلغ عند الدفع ولا يُحوَّل إلا بعد قبولك العمل.

مثال على النتيجة
دمج ملفات المبيعات الشهرية لـ 9 متاجر في تقرير Excel واحد
طريقة التشغيل
python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO المجلد: sales/2026-10، عُثر على 9 ملفات
2026-11-02 09:14:03 INFO shop-01.csv: 1,284 صفًا
2026-11-02 09:14:04 INFO shop-02.xlsx: 967 صفًا
2026-11-02 09:14:04 WARN shop-07.csv: تُخطّيت 3 صفوف بلا سعر (الأسطر 88، 412، 913)
2026-11-02 09:14:05 INFO تم: 10,412 صفًا -> report-2026-10.xlsx (الورقتان «المبيعات» و«الإجماليات»)
إعدادات لا كود
أسماء أعمدة كل متجر موجودة في settings.ini، فالمتجر الجديد أو العمود الذي تغيّر اسمه يعني سطرًا واحدًا هناك:
[columns]
date = التاريخ, تاريخ البيع, اليوم
product = المنتج, الصنف, الاسم
quantity = الكمية, العدد, قطع
price = السعر, سعر الوحدة
جزء من الكود
def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
"""يقرأ ملف متجر واحد ويمنح أعمدته أسماء أعمدة التقرير."""
table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
renamed = {}
for name, variants in columns.items():
found = next((c for c in table.columns if c.strip() in variants), None)
if found is None:
raise ReportError(f"{path.name}: لا يوجد عمود لـ «{name}» (جرى البحث عن: {', '.join(variants)})")
renamed[found] = name
table = table.rename(columns=renamed)[list(columns)]
table["shop"] = path.stem
return table
الملفات: أرشيف ZIP يضم merge_sales.py (310 أسطر)، وsettings.ini، وrequirements.txt، وملف README يشرح تثبيت Python وتشغيل السكربت ومعنى كل رسالة في السجل. يشغّله العميل على كمبيوتره الخاص.
العميل: سلسلة صغيرة من 9 متاجر للأدوات المكتبية؛ يرسل كل متجر مبيعاته الشهرية في ملف CSV أو Excel، بأسماء أعمدة تختلف قليلًا من متجر إلى آخر. المهمة: سكربت واحد يقرأ كل ملف في مجلد، ويوحّد الأعمدة في شكل واحد، ويكتب تقرير Excel واحدًا يضم كل المبيعات وورقة بالإجماليات حسب المتجر.
العميل وجميع التفاصيل افتراضية.
عن هذه الخدمة
جهات الاتصال المصدَّرة من متجر أو نظام CRM أو تسجيلات الفعاليات نادرًا ما تطابق ما تريد خدمة القوائم البريدية استيراده: أسماء أعمدة أخرى، والاسم الأول والأخير في خلية واحدة، ووسوم في أماكن غريبة، وأشخاص ألغوا الاشتراك ولا يزالون في القائمة. يقرأ سكربت Python هذا تصديراتك ويكتب ملف CSV واحدًا نظيفًا بتنسيق الاستيراد الخاص بخدمتك: يفصل الأسماء عند الحاجة، ويربط الحقول والوسوم، ويستبعد عناوين البريد المعيبة والتكرارات، وبدءًا من الباقة القياسية لا يحتفظ إلا بمن لديهم علامة موافقة ويزيل من ألغوا الاشتراك، مع ملف بالصفوف المستبعدة لتراجعها. إنه لجهات اتصالك الخاصة التي وافقت على تلقي رسائلك، ولا يُستخدم أبدًا مع قوائم مشتراة أو مجموعة من الإنترنت. يعمل على جهازك ولا يتصل بالخدمة؛ وتستورد الملف بنفسك.
ما المشمول
- ما الذي تحصل عليهأرشيف ZIP يضم سكربت Python وملف README بتعليمات خطوة بخطوة، ومن الباقة القياسية ملف إعدادات بربط الحقول والوسوم؛ ويُعرض الكود أيضًا في صفحة الطلب.
- تنسيق خدمتكوفق قالب الاستيراد الخاص بها أو ملف نموذجي
- احترام الموافقةبدءًا من الباقة القياسية، فقط من وافقوا، بلا من ألغوا الاشتراك
- إزالة التكرارات والأخطاء الإملائيةاستبعاد العناوين المعيبة والمكررة
- الاحتفاظ بالصفوف المستبعدةملف منفصل يوضح ما استُبعد ولماذا
- كود مقروءمع تعليقات، ليسهل إضافة حقل لاحقًا
كيف يعمل
- 1النماذجترسل صفوفًا مختلقة من كل تصدير وتنسيق الاستيراد الخاص بخدمتك
- 2الكودنكتب السكربت ودليل تشغيله
- 3جرّبهتشغّله وتراجع الصفوف المستبعدة وتستورد قائمة تجريبية صغيرة
- 4التعديلاتتطلب التعديلات ضمن باقتك وترسل أي رسالة خطأ
ما نحتاجه منك
العناوين و10-20 صفًا من كل تصدير بأسماء وعناوين بريد مختلقة لكن بالتنسيق نفسه، وأي عمود يوضح الموافقة وأيها يوضح إلغاء الاشتراك، وخدمة القوائم البريدية التي تستخدمها وقالب الاستيراد الخاص بها أو رابط إلى صفحة المساعدة في الاستيراد، وكيف تُضبط الوسوم أو الشرائح. كيف جُمعت جهات الاتصال (متجرك، نموذج تسجيل، فعاليات). لا ترسل القائمة الحقيقية أبدًا.
سنسألك:
- من أين تأتي جهات الاتصال؟
- إلى أي خدمة قوائم بريدية ستستورد؟
- كيف تُسجَّل الموافقة؟
- هل تحتاج إلى وسوم أو شرائح؟
قارن بين الباقات
| الباقات | الأساسيةتصدير واحد، تنسيق واحد16 US$ | القياسيةالتصدير مع الإعدادات33 US$ | المميزةأداة جهات الاتصال67 US$ |
|---|---|---|---|
| مدة التنفيذ | 1 يوم | 2 يوم | 3 أيام |
| التعديلات | 1 | 2 | 3 |
| الكود | حتى 150 سطرًا | حتى 400 سطر | حتى 1,000 سطر |
| ملفات الكود | 1 | حتى 3 | حتى 8 |
| ملف الإعدادات | لا | نعم | نعم |
| رسائل خطأ واضحة وسجل | لا | نعم | نعم |
| خيارات التشغيل ودليل لتشغيله وفق جدول زمني | لا | لا | نعم |
| دليل التثبيت والتشغيل (README) | نعم | نعم | نعم |
| اللغة | Python | Python | Python |
| اطلب الأساسية | اطلب القياسية | اطلب المميزة |
حماية الدفع
تدفع عند الطلب، لكن المبلغ لا يُحوَّل إلا مقابل عمل قبلته.
- سعر ثابتلا يتغير سعر الباقة بعد الدفع.
- المبلغ محجوزعند الدفع، يُحجز المبلغ فقط. ولا يُحوَّل إلى Dleex إلا بعد قبولك العمل.
- فحص قبل التسليمتخضع كل نتيجة لفحص الجودة قبل أن تصل إليك، وتراها في صفحة الطلب قبل قبولها.
- تعديلات مجانيةاطلب تعديلات ضمن متطلبات طلبك بالعدد الذي تسمح به الباقة.
- القبول بعد 3 أيامإذا لم تقبل العمل ولم تطلب تعديلات خلال 3 أيام من التسليم، يُقبل تلقائيًا. وإذا كتبت في محادثة الطلب بعد التسليم، يبقى الطلب قيد الانتظار؛ وبعد ردّنا، قد نعيد بدء مهلة 3 أيام وسنُعلمك بذلك في المحادثة.
- إعادة التنفيذ أو استرداد المبلغ كاملًاإذا لم تطابق النتيجة متطلبات طلبك ولم تُصلحها التعديلات، أو استغرق العمل أكثر من ضعف مدة التنفيذ، فاكتب في محادثة الطلب: سنعيد تنفيذ العمل أو نردّ إليك المبلغ كاملًا.
الأسئلة والأجوبة
هل يمكنني استخدامه على قائمة اشتريتها؟
لا. إنه لجهات اتصالك الخاصة التي وافقت على تلقي رسائلك. القوائم المشتراة أو المجموعة من الإنترنت تخالف قواعد خدمات القوائم البريدية والقانون في بلدان كثيرة.
هل يرفع جهات الاتصال إلى الخدمة؟
لا. يُنشئ الملف؛ وتستورده في حسابك لدى خدمة القوائم البريدية، حيث تطلب منك أيضًا تأكيد موافقة جهات الاتصال.
هل سيتحقق من وجود عناوين البريد الإلكتروني؟
يتحقق من أن كل عنوان مكتوب بشكل صحيح ويميّز الأخطاء الإملائية الشائعة في النطاق. أما وجود صندوق البريد فلا تعرفه إلا خدمة البريد، وتبلّغ خدمة القوائم البريدية عن الرسائل المرتدة بعد الإرسال.
هل قائمة جهات الاتصال لديّ آمنة؟
تبقى على جهازك: تشغّل السكربت بنفسك، ولا نرى إلا الصفوف المختلقة التي ترسلها.
لم تجد إجابتك؟