28 فبراير 2026·5 دقيقة قراءة

نماذج بيانات الأب-الابن لنماذج الأسطر القابلة للتحرير

تعلّم نماذج بيانات الأب-الابن للعروض والطلبات وطلبات التعويض والقوائم، مع أنماط بسيطة لنماذج الأسطر القابلة للتحرير.

نماذج بيانات الأب-الابن لنماذج الأسطر القابلة للتحرير

لماذا سجل واحد لا يكفي

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

قد يبدو حقل نص طويل أبسط في البداية، لكنه يسبب مشاكل بسرعة. الناس لا يستطيعون إضافة بند واحد بشكل منظم، أو تعديل صف واحد دون التأثير على الباقي، أو إزالة معلومات قديمة بثقة. التحقق من الصحة يصبح أضعف أيضًا، لأن النظام يرى كتلة نصية واحدة بدلًا من عناصر واضحة ومفصّلة.

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

هنا يأتي دور نموذج الأب-الابن. يخزن السجل الأب التفاصيل المشتركة للنموذج ككل، مثل الطالب/الطالب، التاريخ، الإدارة، أو حالة الموافقة. تخزن السجلات الفرعية البنود. يمكن إضافة كل صف أو تعديله أو حذفه بمفرده دون إتلاف السجل الرئيسي.

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

نفس النمط يعمل للقوائم القابلة للتحرير. قد يكون للقائمة مالك واحد ومهلة واحدة، بينما كل مهمة لها تسمية، منفّذ، ملاحظة، وحالة مكتملة خاصة بها. تبقى التفاصيل المشتركة في مكان واحد، وتبقى تفاصيل البند حيث تنتمي.

كيف تعمل سجلات الأب والابن

من الأسهل إدارة نموذج الأسطر عندما تقسمه إلى جزئين: سجل رئيسي واحد والعديد من سجلات البنود المرتبطة.

يحمل السجل الأب المعلومات التي يجب أن تظهر مرة واحدة فقط. في عرض الأسعار، قد يكون العميل، تاريخ العرض، مسؤول المبيعات، والحالة الحالية. في طلب التعويض، قد يكون اسم الموظف، القسم، تاريخ التقديم، ومرحلة الموافقة.

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

أبسط طريقة للتفكير فيه هي:

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

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

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

استخدامات شائعة في العمل اليومي

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

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

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

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

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

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

خطط البنية قبل البناء

تبدأ النماذج الجيدة عادةً بسؤال واحد: ما الذي ينتمي إلى السجل بأكمله، وما الذي يتكرر في كل صف؟

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

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

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

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

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

قبل البناء، حدد كيف سيعمل الناس مع الصفوف. هل يمكنهم إضافة صف جديد، تكرار واحد، إزالته، إعادة ترتيبه، أو تصفية قائمة طويلة؟ كما يجب أن تقرر متى يجب أن تحدث تحديثات الإجماليات والحالات. تفضل بعض الفرق أن تتحدَّث الإجماليات فور تغيير الصف. يفضل آخرون التحديث فقط عند حفظ السجل أو تقديمه. أي نهج يمكن أن يعمل، لكن يجب أن يكون القاعدة متسقة.

قواعد الحالة مهمة أيضًا. إذا رُفض مصروف واحد، هل يعود الطلب بأكمله إلى المسودة، يبقى معلقًا، أم ينتقل إلى حالة موافقة جزئية؟ أسهل أن تجيب عن هذه الأسئلة مبكرًا بدلًا من بعد أن يبدأ المستخدمون بالاعتماد على النموذج.

سهّل التحرير على المستخدم

Go From Workflow to Apps
Use one core model for backend, web, and native mobile apps.
Start Now

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

هذا التصميم البسيط يقلل الأخطاء لأن الناس لا يضطرون للتنقّل بين شاشات فقط للتحقق مما يعدّلون.

احتفظ بالمهمة كاملة على شاشة واحدة

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

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

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

اعرض الأخطاء حيث تحدث

يجب أن تحفظ النماذج الطويلة العمل جزئيًا تلقائيًا أو على الأقل تتيح حفظ مسودة. فقدان عشرين دقيقة من تعديلات الصفوف لأن تبويب أغلق هو من أسرع الطرق لجعل نموذج يبدو غير موثوق.

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

إذا كانت سبعة خطوط مصاريف صحيحة وواحد مفقود رقم الإيصال، علّم ذلك الصف فقط. احتفظ ببقية الطلب سليمة ودع الشخص يصلح المشكلة في مكانها.

مثال: طلب تعويض يحوي مصاريف متعددة

Catch Errors on Each Row
Add row-level checks so people can fix issues where they happen.
Try Now

يوضح طلب التعويض تمامًا لماذا يعمل هذا النموذج جيدًا. يعمل الطلب كالسجل الأب، وكل مصروف يصبح صفًا فرعيًا.

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

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

طلب بسيط قد يشمل ثلاثة صفوف:

  • City Taxi، 3 مايو، 28$، سفر، إيصال مرفق
  • Grand Hotel، 4 مايو، 180$، إقامة، إيصال مرفق
  • Corner Cafe، 4 مايو، 14$، وجبات، لا يوجد إيصال

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

لا ينبغي لصف مرفوض أن يفسد الطلب بأكمله. يجب أن يُعوَّض الموظف عن البنود المعتمدة، ويظل السطر المرفوض ظاهرًا مع سببه مرفقًا. هذا يجعل العملية أسهل للفهم وأسهل للمراجعة لاحقًا.

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

الإجماليات، الموافقات، وتغييرات الحالة

يبدأ نموذج الأسطر بالشعور بالموثوقية عندما تتحدَّث الأرقام والحالات في الوقت المناسب.

إذا غيّر المستخدم كمية أو سعرًا أو مبلغ مصروف، يجب أن تُعاد حسابات الإجماليات بناءً على ذلك التغيير. الانتظار حتى الإرسال النهائي غالبًا يخلق ارتباكًا، خاصة عند وجود خصومات أو ضرائب أو حدود موافقة. في معظم الحالات، يجب أن يكون مجموع السجل الأب محسوبًا، لا قابلاً للتحرير.

تحتاج قواعد الموافقة لنفس مستوى الوضوح. بعد الموافقة الكاملة على سجل، قرِّر ما إذا كان ينبغي قفل الصفوف. إذا بقيت الصفوف المعتمدة قابلة للتحرير، قد ينحرف البيانات عما وقَّع عليه المدير فعليًا.

في أحيانٍ كثيرة تتم الموافقة صفًا بصف بدلًا من دفعة واحدة. التعويضات مثال جيد. قد يُعتمد السفر، تُرفض الوجبات جزئيًا، ويُعاد بند آخر للمراجعة. في هذه الحالة يحتاج كل صف فرعي إلى حالته الخاصة بينما يحتفظ السجل الأب بالحالة العامة.

مجموعة قصيرة من الحالات العامة عادةً كافية:

  • مسودة
  • قيد المراجعة
  • موافق جزئيًا
  • موافق
  • مرفوض

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

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

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

أخطاء تضعف الثقة

Make Row Editing Simple
Let users add, duplicate, delete, and fix items on one screen.
Open Builder

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

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

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

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

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

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

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

اختبر قبل الإطلاق

Build Internal Tools Visually
Create approval forms for sales, support, operations, or admin work.
Build Tool

قبل نشر نموذج يحتوي صفوف متكررة، اختبره بالطريقة التي سيستخدمه بها المستخدمون الحقيقيون.

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

ثم اختبر ماذا يحدث بعد التغييرات. حدِّث كمية، احذف سطرًا، كرر بندًا، وغيّر حالة. بعد كل إجراء، تأكد أن السجل الأب لا يزال يعرض الإجماليات، العدّات، وحالة الملخص الصحيحة.

اختبر أيضًا الحالات الحديّة التي تكشف عادة عن نقاط الضعف: حذف كل الصفوف، صف غير صالح وسط عدة صفوف صالحة، إدخالات مكررة، مبالغ صفر، ملاحظات طويلة، وتعديلات بعد الإرسال.

يكون النموذج جاهزًا عندما يظل واضحًا في الاستخدام العادي ويستمر في التصرف بشكل متوقع في ظروف الاستخدام اليومي الفوضوي.

انشئه في تطبيق بدون كود

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

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

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

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

الأسئلة الشائعة

Why not keep everything in one record?

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

What should go in the parent record and what should go in the child records?

ضع القيم في السجل الرئيسي إذا وصفت الوثيقة كاملة، مثل الطالب/الطالب/المرتّب، العميل، التاريخ، القسم، أو حالة الموافقة العامة. ضع القيم في السجلات الفرعية إذا كانت تختلف من صف لآخر، مثل الكمية، المبلغ، التصنيف، الملاحظة، أو تاريخ الاستحقاق.

When should I use a parent-child structure?

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

Do line items need their own IDs?

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

Should users type totals by hand?

Usually yes. The safer default is to calculate totals from the child rows and keep the parent total read-only. That avoids mismatches and makes approvals easier to trust.

How should validation work in a line-item form?

اعرض الخطأ في الصف والحقل المحدد الذي تسبّب به. إذا كان عنصر واحد خاطئًا، يجب أن يتمكن المستخدمون من إصلاح ذلك الصف في مكانه دون فقدان بقية النموذج.

Do approvals belong only on the parent record?

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

Should deleted rows be removed completely?

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

What makes a line-item form easier to use?

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

How can I build this in a no-code tool like AppMaster?

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

من السهل أن تبدأ
أنشئ شيئًا رائعًا

تجربة مع AppMaster مع خطة مجانية.
عندما تكون جاهزًا ، يمكنك اختيار الاشتراك المناسب.

البدء