برمجةحماية الدفعالتفاصيل
- التعديلات ضمن الباقة مجانية.
- إذا لم تردّ خلال 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 واحدًا يضم كل المبيعات وورقة بالإجماليات حسب المتجر.
العميل وجميع التفاصيل افتراضية.
عن هذه الخدمة
بعض أعضاء المشروع يعملون في Airtable، وآخرون في جداول بيانات Google فقط، ونسخ السجلات بين الاثنين يخطئ عاجلًا أو آجلًا. يقرأ سكربت Google Apps Script هذا قاعدة Airtable لديك عبر الـ API الرسمية برمز الوصول الشخصي الخاص بك، ويكتب السجلات التي تختارها في جدول: جدول واحد أو طريقة عرض، والحقول التي تحتاجها كأعمدة. بدءًا من الباقة القياسية يحتفظ بمعرّف السجل في كل صف، فيحدّث التشغيل الثاني الصفوف بدلًا من تكرارها، ويعرض السجلات المرتبطة بأسمائها. وفي الباقة المميزة يرسل التعديلات من الجدول إلى Airtable وفق القاعدة التي تحددها لأي الطرفين تكون له الغلبة. يوضع رمزك في خصائص السكربت التي تملؤها أنت، ولا يوضع أبدًا في الكود. يعمل بالوتيرة التي تسمح بها API الخاصة بـ Airtable؛ وتُنقل المرفقات كروابط.
ما المشمول
- ما الذي تحصل عليهأرشيف ZIP يضم كود Apps Script وملف README يوضح كيفية إضافته إلى جدولك ووضع رمزك وتشغيله؛ ويُعرض الكود أيضًا في صفحة الطلب.
- API رسميةWeb API الخاصة بـ Airtable نفسها برمزك
- حقول تختارهاجدول أو طريقة عرض، والحقول التي تحتاجها فقط
- بلا تكراربدءًا من الباقة القياسية، تُطابَق الصفوف حسب معرّف السجل
- الرمز خارج الكودتضعه في خصائص السكربت
- كود مقروءمع تعليقات، ليسهل إضافة حقل لاحقًا
كيف يعمل
- 1المهمةتصف القاعدة والجداول واتجاه المزامنة
- 2الكودنكتب السكربت وفق وثائق Airtable ودليل التثبيت
- 3جرّبهتشغّله على نسخة من القاعدة أو طريقة عرض تجريبية
- 4التعديلاتتطلب التعديلات ضمن باقتك وترسل أي رسالة خطأ
ما نحتاجه منك
جداول Airtable أو طرق العرض المطلوب مزامنتها ولقطة شاشة لحقولها مع أنواعها (نص، رقم، تاريخ، اختيار مفرد، سجل مرتبط، مرفق)، والجدول الذي تذهب إليه وكيف تُسمّى الأعمدة وتُرتب. الاتجاه الذي تحتاجه، وللمزامنة باتجاهين (الباقة المميزة) أي الطرفين تكون له الغلبة حين يتغير السجل نفسه في المكانين. كم مرة يجب أن يعمل. أنشئ رمز الوصول الشخصي في حسابك على Airtable؛ ولا ترسله إلينا أبدًا.
سنسألك:
- ما الذي في قاعدة Airtable؟
- أي اتجاه تحتاج؟
- ما الحقول التي يجب نقلها؟
- كم مرة يجب أن يعمل؟
قارن بين الباقات
| الباقات | الأساسيةمن Airtable إلى جداول بيانات Google16 US$ | القياسيةالمزامنة مع الإعدادات33 US$ | المميزةأداة المزامنة باتجاهين67 US$ |
|---|---|---|---|
| مدة التنفيذ | 1 يوم | 2 يوم | 3 أيام |
| التعديلات | 1 | 2 | 3 |
| الكود | حتى 150 سطرًا | حتى 400 سطر | حتى 1,000 سطر |
| ملفات الكود | 1 | حتى 3 | حتى 8 |
| ملف الإعدادات | لا | نعم | نعم |
| رسائل خطأ واضحة وسجل | لا | نعم | نعم |
| خيارات التشغيل ودليل لتشغيله وفق جدول زمني | لا | لا | نعم |
| دليل التثبيت والتشغيل (README) | نعم | نعم | نعم |
| اللغة | Google Apps Script | Google Apps Script | Google Apps Script |
| اطلب الأساسية | اطلب القياسية | اطلب المميزة |
حماية الدفع
تدفع عند الطلب، لكن المبلغ لا يُحوَّل إلا مقابل عمل قبلته.
- سعر ثابتلا يتغير سعر الباقة بعد الدفع.
- المبلغ محجوزعند الدفع، يُحجز المبلغ فقط. ولا يُحوَّل إلى Dleex إلا بعد قبولك العمل.
- فحص قبل التسليمتخضع كل نتيجة لفحص الجودة قبل أن تصل إليك، وتراها في صفحة الطلب قبل قبولها.
- تعديلات مجانيةاطلب تعديلات ضمن متطلبات طلبك بالعدد الذي تسمح به الباقة.
- القبول بعد 3 أيامإذا لم تقبل العمل ولم تطلب تعديلات خلال 3 أيام من التسليم، يُقبل تلقائيًا. وإذا كتبت في محادثة الطلب بعد التسليم، يبقى الطلب قيد الانتظار؛ وبعد ردّنا، قد نعيد بدء مهلة 3 أيام وسنُعلمك بذلك في المحادثة.
- إعادة التنفيذ أو استرداد المبلغ كاملًاإذا لم تطابق النتيجة متطلبات طلبك ولم تُصلحها التعديلات، أو استغرق العمل أكثر من ضعف مدة التنفيذ، فاكتب في محادثة الطلب: سنعيد تنفيذ العمل أو نردّ إليك المبلغ كاملًا.
الأسئلة والأجوبة
هل هي مزامنة فورية؟
لا. ينسخ حين يعمل: بزر، أو بمشغّل زمني باتباع دليل الباقة المميزة، مثلًا كل 15 دقيقة. التغييرات التي تحدث بين التشغيلين تظهر في التشغيل التالي.
ماذا يحدث للمرفقات والسجلات المرتبطة؟
تُنقل المرفقات كروابط إلى الملفات. وتظهر السجلات المرتبطة بأسمائها بدءًا من الباقة القياسية؛ وفي الأساسية تأتي كمعرّفات سجلات.
هل يمكن أن تكتب التعديلات في الجدول فوق Airtable؟
في الباقة المميزة فقط وفي الحقول التي تسمح بها فقط، وفق قاعدتك لأي الطرفين تكون له الغلبة. جرّب ذلك على نسخة من القاعدة أولًا.
هل تحصلون على وصول إلى قاعدتي؟
لا. تنشئ الرمز وتضيف السكربت في حساباتك الخاصة. نعمل من لقطات الشاشة التي ترسلها ووثائق Airtable.
لم تجد إجابتك؟


