كل الأنشطة
- الساعة الماضية
-
Alexis Togel18 اشترك بالأكاديمية
-
Awni Salamah اشترك بالأكاديمية
-
Esraa Ashraf2 اشترك بالأكاديمية
-
Hikmat Jaafer بدأ بمتابعة Time Series Analysis
-
Time series analysis is studying data points collected over time to identify trends, seasonality, and patterns for forecasting and decision-making we use it in data analysis for 4 points : Understand trends (e.g., sales growth). Detect seasonality (e.g., holiday sales spikes). Predict future values (e.g., stock prices). Spot anomalies (e.g., fraud detection). in Python we can use it in these ways: Load and visualize data (using Pandas and Matplotlib). Preprocess: Handle missing data, resample, make stationary. Decompose: Identify trend, seasonality, residuals (Statsmodels). Model: Use ARIMA, SARIMA, or ML models (e.g., Scikit-learn). Forecast and validate: Predict future points and evaluate performance. Key tools: Pandas, Statsmodels, Scikit-learn, Prophet, ARIMA.
-
اسامه صولان اشترك بالأكاديمية
-
محمد القباني بدأ بمتابعة دليل JavaScript الشامل - الجزء الأول
-
Mohamed Ramy4 اشترك بالأكاديمية
-
مشكلة تكمن عند تعديل فاتورة بحيث اضيف صنف جديد يظهر اعمدة جديده في داتا قريد فيو معا اعمدة التي به اصناف سابقة if (e.KeyCode == Keys.Enter) { // التحقق من وجود الصنف مسبقًا for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { if (itemcode.Text == dataGridView1.Rows[i].Cells[0].Value.ToString()) { MessageBox.Show("اسم الصنف موجود مسبقا", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } CalculateTotal(); // التحقق مما إذا كانت الأعمدة موجودة بالفعل قبل إضافتها // التأكد من أن الجدول يحتوي على الأعمدة المطلوبة if (!dt.Columns.Contains("رقم الصنف")) { dt.Columns.Add("رقم الصنف"); } if (!dt.Columns.Contains("اسم الصنف")) { dt.Columns.Add("اسم الصنف"); } if (!dt.Columns.Contains("السعر")) { dt.Columns.Add("السعر"); } if (!dt.Columns.Contains("الكمية")) { dt.Columns.Add("الكمية"); } if (!dt.Columns.Contains("الاجمالي")) { dt.Columns.Add("الاجمالي"); } // إنشاء صف جديد وإضافة البيانات DataRow r = dt.NewRow(); r["رقم الصنف"] = itemcode.Text; r["اسم الصنف"] = itemname.Text; r["السعر"] = price.Text; r["الكمية"] = qty.Text; r["الاجمالي"] = total_.Text; dt.Rows.Add(r); dataGridView1.DataSource = dt;
-
what are "Time Series Analysis in Python" ? and in data analysis , why and how to use them
- 1 جواب
-
- 1
-
محمد القباني اشترك بالأكاديمية
-
Amaal Abdullah اشترك بالأكاديمية
-
Mohammed Shaheen3 اشترك بالأكاديمية
- اليوم
-
Ahmed Elsharif اشترك بالأكاديمية
-
الجوهره الحربي3 اشترك بالأكاديمية
-
شكرا استاذي ولكن هذا ليس اختبار اقوم فقط بالتدريب علي leetcode
- 3 اجابة
-
- 1
-
وعليكم السلام ورحمة الله وبركاته. نحن هنا على موقع الأكاديمية لا نقوم بحل أسئلة الإختبارات ولكن نستطيع إرشادك إلى الحل الصحيح . لاحظ المشكلة لديك في الإستعلام أنك تقوم بوضع شرط إذا كان أقصى تاريخ للتعديل أقل من أو يساوي '2019-08-16' فهنا أنت ستأخذ قيمة new_price وإلا فسيتم وضع قيمة 10 تلقائيا . الخطأ في الشرط عندما يكون قيمة max(change_date) أكبر من '2019-08-16' ولكن المنتج لديه تعديل للسعر قبل هذا التاريخ هنا الإستعلام الخاص بك سيضع 10 بدلا من أخذ السعر قبل التاريخ '2019-08-16' . وأيضا يوجد خطأ أخر لديك أنه في MAX() تستخدمها لتحديد آخر تاريخ تعديل، ولكن العمود new_price غير مجمع أى أن mysql لا تستطيع التعامل معه وتجميعه إذا كان هناك أكثر من حقل له نفس ال product_id . و هذا يؤدي إلى نتائج غير متوقعة لأن قيمة new_price لن تتوافق مع تاريخ التعديل المحدد. لذلك يجب عليك في الحل أولا البحث عن التواريخ التي أقل من أو تساوي '2019-08-16' وحينها تأخذ قيمة new_price لأعلي تاريخ . أما إذا كان هنا منتج لا توجد لديه تعديلات قبل تاريخ '2019-08-16' فإذا تضع رقم 10.
- 3 اجابة
-
- 1
-
وعليكم السلام ورحمة الله وبركاته . إن المساهمات هي عدد التعليقات التي تم وضعها من قبلك . فمثلا بالنسبة لي فإن هذا التعليق يعتبر مساهمة لي . و سؤالك الحالي يعتبر مساهمة لكي. أما المتابعين فهي عدد الأشخاص الذين قاموا بمتابعة الحساب الخاص بكي . ستجدين أنه يمكنكي متابعة الأشخاص هنا على الأكاديمية وبمجرد متابعة شخص لكي ستجدين أنه تم إضافته إلى قائمة المتابعين الخاصة بكي . وبمتابعة أى شخص ستحصلين على إشعارات بمجرد قيام هذا الشخص بنشر مساهمة سواء كان سؤال أو تعليق . أما السمعة فهي عدد الإعجابات التي حصلتي عليها . فلاحظي مثلا أني قمت بالإعجاب بسؤالك وهكذا ستجدين أن السمعة لديكي قد زادت بمقدار 1 وهو الإعجاب الذي حصلتي عليه من هذا السؤال. أما الرتبة فهي حاليا عضو مبتدئ وبمجرد حصولك على سمعة كثيرة وعدد مساهمات أكثر ستحصلين على رتب أعلى مع الوقت.
-
Razan Razan3 بدأ بمتابعة السلام عليكم ورحمة الله وبركاته
-
السلام عليكم ورحمة الله وبركاته ممكن حد يفهمني شو يعني المساهمات والمتابعين وعضو مبتدئ والسمعة بالموقع
- 1 جواب
-
- 2
-
سنضيف في هذا المقال بعض الميزات المتقدمة الاختيارية لموقع مدونة جانغو Django الخاص بنا، والذي أنشأناه في المقالات السابقة من هذه السلسلة، بما في ذلك ميزة ترقيم الصفحات Pagination، والمنشورات ذات الصلة Related Posts، وميزة البحث Search. إنشاء ترقيم الصفحات Pagination في جانغو قد يكون إنشاء مرقّم صفحات فكرة جيدة عند إضافة الكثير من المنشورات إلى مدونتنا، فنحن لا نريد عرض عدد كبير جدًا من المنشورات في صفحة واحدة، لذا يجب إضافة شيفرة برمجية إضافية إلى دوال العرض view functions. لنأخذ على سبيل المثال عرض الصفحة الرئيسية home، حيث يجب أولًا أن نستورد بعض الحزم الضرورية لتفعيل الترقيم كما يلي: from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger نحدّث بعد ذلك العرض home كما يلي: def home(request): site = Site.objects.first() categories = Category.objects.all() tags = Tag.objects.all() featured_post = Post.objects.filter(is_featured=True).first() # إضافة مرقم الصفحات page = request.GET.get("page", "") # الحصول على رقم الصفحة الحالية posts = Post.objects.all().filter(is_published=True) paginator = Paginator(posts, n) # عرض n منشور لكل صفحة try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render( request, "home.html", { "site": site, "posts": posts, "categories": categories, "tags": tags, "featured_post":featured_post }, ) يجب مراعاة ثلاثة شروط مختلفة في الأسطر من 12 إلى 17 في الشيفرة البرمجية السابقة، فإذا كان رقم الصفحة عددًا صحيحًا، فيجب إعادة الصفحة المطلوبة، وإن لم يكن رقم الصفحة عددًا صحيحًا، فيجب إعادة الصفحة 1، وإذا كان رقم الصفحة أكبر من عدد الصفحات، فيجب إعادة الصفحة الأخيرة. بعد أن انتهينا من إعداد الترقيم في الكود البرمجي للعرض، يتوجب علينا إضافة مرقّم الصفحات في القالب Template لكي يظهر في صفحة قائمة المنشورات، أي سنضيفه في الملف templates/vendor/list.html كما يلي: <!-- مرقم الصفحات --> <nav class="isolate inline-flex -space-x-px rounded-md mx-auto my-5 max-h-10" aria-label="Pagination" > {% if posts.has_previous %} <a href="?page={{ posts.previous_page_number }}" class="relative inline-flex items-center rounded-l-md border border-gray-300 bg-white px-2 py-2 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20" > <span class="sr-only">Previous</span> <!-- Heroicon name: mini/chevron-left --> <svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" > <path fill-rule="evenodd" d="M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z" clip-rule="evenodd" /> </svg> </a> {% endif %} {% for i in posts.paginator.page_range %} {% if posts.number == i %} <a href="?page={{ i }}" aria-current="page" class="relative z-10 inline-flex items-center border border-blue-500 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-600 focus:z-20" >{{ i }}</a > {% else %} <a href="?page={{ i }}" aria-current="page" class="relative inline-flex items-center border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20" >{{ i }}</a > {% endif %} {% endfor %} {% if posts.has_next %} <a href="?page={{ posts.next_page_number }}" class="relative inline-flex items-center rounded-r-md border border-gray-300 bg-white px-2 py-2 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20" > <span class="sr-only">Next</span> <!-- Heroicon name: mini/chevron-right --> <svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" > <path fill-rule="evenodd" d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z" clip-rule="evenodd" /> </svg> </a> {% endif %} </nav> علينا تطبيق الشيء نفسه لجميع الصفحات التي تعرض قائمة منشورات مثل صفحة الوسوم والفئات وصفحة البحث. عرض المنشورات ذات الصلة Related Posts في جانغو نريد الآن إضافة ميزة عرض المنشورات ذات الصلة بالمنشور الحالي، أي المنشورات التي لها نفس وسوم هذا المنشور ويمكن القيام بذلك من خلال إضافة الشيفرة التالية: def post(request, slug): site = Site.objects.first() requested_post = Post.objects.get(slug=slug) categories = Category.objects.all() tags = Tag.objects.all() # المنشورات ذات الصلة ## الحصول على جميع الوسوم المتعلقة بهذا المقال post_tags = requested_post.tag.all() ## ترشيح جميع المنشورات التي تحتوي على وسوم متعلقة بالمنشور الحالي، واستبعاد المنشور الحالي related_posts_ids = ( Post.objects.all() .filter(tag__in=post_tags) .exclude(id=requested_post.id) .values_list("id") ) related_posts = Post.objects.filter(pk__in=related_posts_ids) return render( request, "post.html", { "site": site, "post": requested_post, "categories": categories, "tags": tags, "related_posts": related_posts, }, ) قد تكون الشيفرة البرمجية السابقة صعبة الفهم بعض الشيء، دعنا نحللها ونشرحها بالتفصيل، حيث يمثل السطر 3 الحصول على المنشور المطلوب باستخدام المتغير slug، ويمثل السطر 9 الحصول على جميع الوسوم Tags التي تعود إلى المنشور المطلوب. تصبح الأمور أعقد في الأسطر من 11 إلى 16، حيث يسترد التابع Post.objects.all() جميع المنشورات من قاعدة البيانات، ثم يسترد التابع filter(tag__in=post_tags) جميع المنشورات التي تحتوي على وسوم مرتبطة بالمنشور الحالي، ولكن لدينا مشكلتان، إذ سيُضمَّن المنشور الحالي في مجموعة الاستعلام، لذا سنستخدم التابع exclude(id=requested_post.id) لاستبعاد المنشور الحالي. لنبسّط الآن المشكلة الثانية، ولنفترض أن لدينا السيناريو التالي مع وجود ثلاث منشورات وثلاثة وسوم: معرّف الوسم Tag ID اسم الوسم Tag Name 1 Tag 1 2 Tag 2 3 Tag 3 معرّف المنشور Post ID اسم المنشور Post Name 1 Post 1 2 Post 2 3 Post 3 وتكون العلاقة بين المنشورات والوسوم علاقة متعدد إلى متعدد Many-to-Many. معرّف الوسم Tag ID معرّف المنشور Post ID 1 2 1 3 1 1 2 1 2 2 2 3 3 2 معرّف المنشور Post ID معرّف الوسم Tag ID 1 1 1 2 2 1 2 2 2 3 3 1 3 2 لنفترض أن المنشور الحالي هو المنشور 2، وبالتالي ستكون الوسوم المتعلقة به هي 1 و 2 و 3، حيث سيذهب جانغو أولًا إلى الوسم 1 عند استخدام التابع filter(tag__in=post_tags)، ثم سيجد المنشورات المتعلقة بالوسم 1، والتي هي المنشورات 2 و 3 و 1، ثم يذهب إلى الوسم 2، ويجد المنشورات المتعلقة بالوسم 2، وينتقل أخيرًا إلى الوسم 3. يعيد التابع filter(tag__in=post_tags) بعد ذلك في النهاية القائمة [2,3,1,1,2,3,2]، وستُعاد القائمة [3,1,1,3] بعد تنفيذ التابع exclude()، ولا نريد ذلك أيضًا، حيث نحتاج لإيجاد طريقة للتخلص من التكرارات، لذا يجب استخدام التابع values_list('id') لتمرير معرّفات المنشورات إلى المتغير related_posts_ids، ثم نستخدم هذا المتغير لاسترداد المنشورات ذات الصلة، وبذلك نتخلص من التكرار. يمكننا عرض المنشورات ذات الصلة في القالب المقابل كما يلي: <!-- المنشورات ذات الصلة --> <div class="grid grid-cols-3 gap-4 my-5"> {% for post in related_posts %} <!-- المنشور --> <div class="mb-4 ring-1 ring-slate-200 rounded-md h-fit hover:shadow-md"> <a href="{% url 'post' post.slug %}" ><img class="rounded-t-md object-cover h-60 w-full" src="{{ post.featured_image.url }}" alt="..." /></a> <div class="m-4 grid gap-2"> <div class="text-sm text-gray-500"> {{ post.created_at|date:"F j, o" }} </div> <h2 class="text-lg font-bold">{{ post.title }}</h2> <p class="text-base"> {{ post.content|striptags|truncatewords:30 }} </p> <a class="bg-blue-500 hover:bg-blue-700 rounded-md p-2 text-white uppercase text-sm font-semibold font-sans w-fit focus:ring" href="{% url 'post' post.slug %}" >Read more →</a > </div> </div> {% endfor %} </div> دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن تطبيق عملية البحث في جانغو سنعمل أخيرًا على إضافة ميزة البحث لمدونتنا، حيث نحتاج إلى استمارة بحث Search Form في الواجهة الأمامية، والتي ترسل استعلام بحث إلى العرض، تسترد دالة العرض السجلات الملائمة من قاعدة البيانات، وتعيد صفحة بحث تعرض النتيجة. استمارة البحث Search Form لنضيف أولًا استمارة بحث إلى الشريط الجانبي Sidebar في الملف templates/vendor/sidebar.html كما يلي: <div class="col-span-1"> <div class="border rounded-md mb-4"> <div class="bg-slate-200 p-4">Search</div> <div class="p-4"> <form action="{% url 'search' %}" method="POST" class="grid grid-cols-4 gap-2"> {% csrf_token %} <input type="text" name="q" id="search" class="border rounded-md w-full focus:ring p-2 col-span-3" placeholder="Search something..." /> <button type="submit" class="bg-blue-500 hover:bg-blue-700 rounded-md p-2 text-white uppercase font-semibold font-sans w-full focus:ring col-span-1" > Search </button> </form> </div> </div> . . . </div> لاحظ في الأسطر من 7 إلى 13 السمة name لحقل الإدخال input، حيث سنسميها q، سيُربط دخل المستخدم بالمتغير q ويُرسَل للواجهة الخلفية. إذا نقرنا على الزر في السطر 5، فسيُوجَّه المستخدم إلى عنوان URL بالاسم search، لذا يجب تسجيل نمط عنوان URL المقابل كما يلي: path('search', views.search, name='search'), عرض البحث Search View سيكون عرض البحث Search View كما يلي: def search(request): site = Site.objects.first() categories = Category.objects.all() tags = Tag.objects.all() query = request.POST.get("q", "") if query: posts = Post.objects.filter(is_published=True).filter(title__icontains=query) else: posts = [] return render( request, "search.html", { "site": site, "categories": categories, "tags": tags, "posts": posts, "query": query, }, ) قالب البحث Search Template لإنشاء قالب البحث لنكتب الكود التالي في الملف templates/search.html: {% extends 'layout.html' %} {% block title %} <title>Page Title</title> {% endblock %} {% block content %} <div class="grid grid-cols-4 gap-4 py-10"> <div class="col-span-3 grid grid-cols-1"> {% include "vendor/list.html" %} </div> {% include "vendor/sidebar.html" %} </div> {% endblock %} بعدها نحاول البحث عن شيء ما في استمارة البحث، ويجب إعادة المنشورات التي نطلبها فقط. الخلاصة بهذا نكون قد وصلنا لنهاية مقالنا الذي وضحنا فيه طريقة إضافة بعض الميزات المتقدمة الاختيارية لموقع مدونة جانغو Django الخاص بنا بما في ذلك مرقّم الصفحات Paginator والمنشورات ذات الصلة وميزة البحث، لتحسين تجربة المستخدم وتوفير طريقة أكثر تنظيمًا للوصول إلى محتوى المدونة. إذا كان لديكم أي استفسارات أو تعليقات حول هذا المقال أو حول جانغو بشكل عام، فلا تترددوا في طرحها في قسم المناقشة أسفل المقال أو في قسم الأسئلة والأجوبة في الأكاديمية. ترجمة -وبتصرّف- للمقال Django for Beginners #5 - Some Advanced Features لصاحبه Eric Hu. اقرأ أيضًا المقال السابق: إنشاء تطبيق مدونة كامل في جانغو استخدام عمليات CRUD لإدارة مدونة في جانغو مدخل إلى إطار عمل الويب جانغو Django البدء في إنشاء مدونة بسيطة في جانغو
-
إذا كان السؤال خاص بالدورة، ستجد أسفل الفيديو مكان للتعليق هناك أرجوا كتابة المشكلة في ذلك المكان حتى يكون فهمه أسهل بما يتناسب مع الدرس، أما هنا نقوم بطرح الأسئلة العامة فقط و التي ليس لها علاقة بالدرس.
-
Ahmed Av2 بدأ بمتابعة خطاء في اكواد سكراتش
-
عند كتابه كود اذا لمس اللون الاسود يتراجع خطوتان يتخطي الجدار حاولت معالجتها وجعلت السرعه 1 ترتب علي هذا انه بدا المجسم التحرك عكس الاتجاه عند ملامسه الون اريد حل لهذه المشكله باسرع وقت ارجوكم
- 1 جواب
-
- 1
-
المشكلة في استعلامك هو أنه يتحقق فقط من أقصى تاريخ، بينما المطلوب هو الحصول على آخر سعر قبل التاريخ المحدد لذا عدله للتالي: SELECT product_id, COALESCE( (SELECT new_price FROM Products p2 WHERE p2.product_id = p1.product_id AND p2.change_date <= '2019-08-16' ORDER BY change_date DESC LIMIT 1), 10 ) as price FROM Products p1 GROUP BY product_id; بحيث نستخدم استعلام فرعي للحصول على آخر سعر قبل '2019-08-16' و COALESCE يرجع 10 إذا لم يجد سعرا قبل التاريخ المحدد وأخيرا ORDER BY change_date DESC LIMIT 1 يجلب أحدث سعر.
- 3 اجابة
-
- 1
-
السلام عليكم هل يمكن المساعدة في فهم ال queries هنا المسالة في الصورة وهذا الكود الخاص بي ولكن لا يعمل مالسبب # Write your MySQL query statement below select product_id, IF ( max(change_date) <= '2019-08-16',new_price, 10) as price from Products group by product_id
- 3 اجابة
-
- 2
-
بالنسبة ل KaplanMeierFitter تستخدم هذه الطريقة لتقدير دالة البقاء بشكل غير مُعلَّم، حيث تعمل Kaplan-Meier على حساب احتمالية بقاء الأفراد في الدراسة لفترة زمنية معينة مع الأخذ في الاعتبار حالات الرقابة، وهي مناسبة لتحليل بيانات البقاء البسيطة عند عدم وجود متغيرات مستقلة. لدينا أيضا CoxPHFitter تعتمد هذه الطريقة على نموذج الانحدار النسبي للمخاطر، وهو نموذج شبه مُعلَّم يُستخدم لتقييم تأثير المتغيرات المستقلة على وقت البقاء، و يتيح هذا النموذج تحليل العلاقات بين الوقت والبقاء من جهة، والمتغيرات التفسيرية من جهة أخرى. أما logrank_test فتستخدم هذه الأداة لإجراء اختبار إحصائي لمقارنة دوال البقاء بين مجموعتين أو أكثر. يعمل الاختبار على تقييم الفرضية الصفرية التي تفترض عدم وجود فرق بين المجموعات من حيث دالة البقاء، و يتم استخدام هذا الاختبار عندما ترغب في مقارنة بيانات البقاء بين مجموعات دون الحاجة إلى نموذج أكثر تعقيدًا. لذا يمكن القول أن KaplanMeierFitter يستخدم لتقدير البقاء، CoxPHFitter لتحليل تأثير المتغيرات، و logrank_test للمقارنة الإحصائية بين المجموعات.
- 3 اجابة
-
- 1
-
السلام عليكم لدي كود تالي لتعديل بيانات في جدول فاتورة وتفاصيل فاتورة يتم تعديل بيانات في جدول فاتورة لكن تفاصيل فاتورة تظل اصناف كم هيا try { // تعريف المتغير للحصول على اسم المحل من عنصر التحكم string importerName = IMPORTERNAME.Text; // جملة الاستعلام باستخدام معلمة بدلاً من القيمة الثابتة string query = "SELECT IMPORTERNAME, SUM(DebtAmount) AS TotalDebt " + "FROM BUYBILL " + "WHERE IMPORTERNAME = @importerName AND DebtAmount > 0 " + "GROUP BY IMPORTERNAME"; // إنشاء SqlDataAdapter مع جملة الاستعلام والاتصال بقاعدة البيانات SqlDataAdapter a = new SqlDataAdapter(query, Class1.con); // إضافة المعلمة إلى SqlDataAdapter a.SelectCommand.Parameters.AddWithValue("@importerName", importerName); // إنشاء DataTable لملء البيانات المسترجعة DataTable d = new DataTable(); // ملء DataTable باستخدام SqlDataAdapter a.Fill(d); // عرض معلومات الدين if (d.Rows.Count > 0) { string tt = d.Rows[0]["TotalDebt"].ToString(); MessageBox.Show("دين المحل: " + tt); } // التحقق من اختيارات المستخدم if (IMPORTERNAME.SelectedIndex < 0) { MessageBox.Show("يرجى اختيار اسم الزبون", "تنبيه"); IMPORTERNAME.Select(); return; } if (BUYTYPE.SelectedIndex < 0) { MessageBox.Show("يرجى اختيار نوع الفاتورة", "تنبيه"); BUYTYPE.Select(); return; } if (dataGridView1.Rows.Count == 0) { MessageBox.Show("لا توجد أصناف لحفظها", "تنبيه"); return; } // التحقق من وجود الفاتورة DataTable dt = new DataTable(); SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM buybill WHERE buycode=@buycode", Class1.con); adp.SelectCommand.Parameters.AddWithValue("@buycode", BUYCODE.Text); adp.Fill(dt); if (dt.Rows.Count > 0) { // تحديث بيانات الفاتورة DataRow existingRow = dt.Rows[0]; existingRow["BUYTYPE"] = BUYTYPE.Text; existingRow["IMPORTERNAME"] = IMPORTERNAME.Text; existingRow["NOTES"] = NOTES.Text; existingRow["BUYDATE"] = BUYDATE.Value; existingRow["TOTAL"] = Convert.ToDecimal(total_.Text); existingRow["TOTAL_ARBIC"] = totalar.Text; existingRow["TOTALQTY"] = Convert.ToInt32(totalqty.Text); existingRow["DebtAmount"] = Convert.ToDecimal(total_.Text); SqlCommandBuilder save = new SqlCommandBuilder(adp); adp.Update(dt); // تحديث تفاصيل الفاتورة DataTable dtDetails = new DataTable(); SqlDataAdapter detailAdp = new SqlDataAdapter("SELECT * FROM BUY_DET WHERE BUYCODE=@buycode", Class1.con); detailAdp.SelectCommand.Parameters.AddWithValue("@buycode", BUYCODE.Text); detailAdp.Fill(dtDetails); // تحديث أو إضافة تفاصيل جديدة foreach (DataGridViewRow row in dataGridView1.Rows) { string itemCode = row.Cells[0].Value.ToString(); int qty = Convert.ToInt32(row.Cells[3].Value); // تحقق مما إذا كان العنصر موجود بالفعل في تفاصيل الفاتورة DataRow existingDetail = dtDetails.AsEnumerable() .FirstOrDefault(r => r.Field<string>("ITEMCODE") == itemCode); if (existingDetail != null) { // تحديث الكمية والسعر existingDetail["QTY"] = qty; existingDetail["PRICE"] = row.Cells[2].Value; existingDetail["TOTAL"] = Convert.ToDecimal(row.Cells[2].Value) * qty; } else { // إضافة تفاصيل جديدة DataRow newDetailRow = dtDetails.NewRow(); newDetailRow["BUYCODE"] = BUYCODE.Text; newDetailRow["ITEMCODE"] = itemCode; newDetailRow["ITEMNAME"] = row.Cells[1].Value; newDetailRow["PRICE"] = row.Cells[2].Value; newDetailRow["QTY"] = qty; newDetailRow["TOTAL"] = Convert.ToDecimal(row.Cells[2].Value) * qty; dtDetails.Rows.Add(newDetailRow); } UpdateItemQuantity(itemCode, qty); } SqlCommandBuilder detailCmd = new SqlCommandBuilder(detailAdp); detailAdp.Update(dtDetails); MessageBox.Show("تم تعديل بيانات الفاتورة بنجاح وتحديث كمية في المخزن", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information); button1_Click(null, null); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
-
هذا الخطأ يحدث أثناء بناء (build) تطبيق Flutter وتحديدا عند عملية إنشاء kernel snapshot وغالبا ما يكون السبب هو في مشاكل في الملفات المؤقتة للمشروع أو تعارض في الإصدارات أو مشكلة في تثبيت Flutter لذا أرجو أولا القيام بتنظيف المشروع: flutter clean ثم قم بحذف ملف pubspec.lock: rm pubspec.lock بعدها قم بتحديث التبعيات: flutter pub get وأعد تشغيل Android Studio أو VS Code أو أيا كان IDE الذي تستخدمه ثم حاول بناء المشروع مرة أخرى: flutter run إذا استمرت المشكلة يمكنك تجربة للتحقق من صحة تثبيت Flutter باستخدام الأمر: flutter doctor ثم تحديث Flutter إلى آخر إصدار: flutter upgrade
-
أيّة دروس تقصد إن كانت متعلقة بالدورات فأرجو طرح أسئلتك أسفل الدرس الخاص به في صندوق التعليقات المخصص لذلك. وفي حال كانت خارجية يمكنني توجيهك لكيفية حل المشكلة من خلال إنشاء صفحة HTML تحتوي على أقسام لكل مثال وكل قسم يحتوي على عنوان وكود برمجة داخل عنصر <pre> للحفاظ على التنسيق. مع إضافة أزرار نسخ بجانب كل كود ثم تفعيلها باستخدام JavaScript عبر وظيفة تستخرج النص وتنسخه إلى الحافظة باستخدام navigator.clipboard يمكن أيضا تنسيق الصفحة باستخدام CSS ثم اختبار الصفحة في المتصفح للتأكد من عرض الأكواد وعملية النسخ بشكل صحيح بعد ذلك يمكنك حفظ الملف وتشغيله للاستخدام أثناء الدروس.
-
بالنسبة للمشاريع فهو يتم عملها بالتزامن مع المدرب، كل ما عليك فعله هو متابعة الشروحات مع المدرب وعمل الواجبات والمشاريع ورفع الأكواد تلك وفقا لما تم شرحه من قبل يمكنك الاطلاع على الكيفية من هنا: بما أنك في بداياتك فأرجو التركيز على التطبيق العملي مع المدرب، يمكنك أخذ قسط من الراحة بين كل مسار وآخر للتأكد من أنك قد فهمته جيدا وفي حال لم تفهم شيء سيكون هنالك صندوق للتعليقات مثل الذي هنا أسفل كل درس يمكنك طرح أي استفسار أو مشكلة واجهتك وسنجيبك عليها.
-
تسلم وشكرا ع تعبك بس ملقتش اللينك وحتى مش عارف بصراحه اصلا احفظ الكود ازاي أو كيفية تنظيمه أنا فعلا اسف
- البارحة
-
ستجد رابط لاجابة هذا السؤال في الاجابة السابقة يمكنك الدخول عليها لمعرفة كيف ترفع مشاريعك . ولكن بما انك قد بدأت للتو فلاتشتت نفسك يكفي فقط تنظيم ملفاتك ويمكنك معرفة كيفية تنظيمها من خلال الاجابة السابقة ايضا . وقم بحفظ تلك الملفات على جهازك وعند الانتهاء من الدورة والتقدم للإختباريمكنك رفعها حينها. اما التمارين فكما وضحت لك ستجد اسفل الدرس صندوق للتعليقات كالموجود هنا يمكنك رفع الحل الخاص بك ليقوم المدربون بتقيمه لك
-
أنا لسه بادء وعرفت أن فيه معرض اعمال فا أنا مش عارف إبداء ازاي في رفع أعمالي فا ياريت معلش توضيح بالتفصيل عشان التعب مايروحش ع الفاضل يعني اول درس عمل الاختبار بس مش عارف ارفعه فين أو اعمل ايه
- 5 اجابة
-
- 1
-
يجب عليك التطبيق في الدرس خلف المدرب وحفظ تلك الاكواد لانه يجب ان يتم رفعها عند التقدم للإختبار ولن تستطيع التقدم للإختبار دون كتابة الاكواد والتطبيق مع المدرب ويمكنك قراءة الاجابة التالية لكيفية تنظيم ملفاتك : اما بخصوص التمارين التي يعرضها المدرب في نهاية فيمكنك وضعك حلك اسفل الدرس حيث ستجدصندوق للتعليقات كما هنا ويجب وضع حلك هناك لان هنا هو قسم الاسئلة العامة ولا نقوم بالاحابة على اسئلة الدورات هنا. وبعد وضع حلك سيقوم المدربين بتقيم الحل لك وإرشادك وتصحيح الاخطاء لك ان وجدت.
-
مرحباً @Batool Alshwiki الخطأ الذي تواجهه يشير إلى مشكلة أثناء عملية بناء تطبيق Flutter و غالباً يكون السبب متعلقاً بإعدادات المشروع، الإصدارات، أو التبعيات. لذلك ارجو التأكد وتطبيق الخطوات التالية : تحديث Flutter flutter upgrade تنظيف المشروع flutter clean flutter pub get flutter build apk تحديث Gradle ٫ تأكد من أن distributionUrl في gradle-wrapper.properties يشير إلى إصدار حديث. تمكين السجل التفصيلي flutter build apk --verbose في حال لم تنجح المحاولات السابقة ٫ يرجى مشاركة السجل التفصيلي.
-
كيفية عمل المشاريع وهل حل اختبار كل فيديو بيتعرض هنا وكيف
- 5 اجابة
-
- 2