الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

مشكلة في تنقيص الكمية

Featured Replies

بتاريخ:

السلام وعليكم

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

ملاحظة انه كل جدول له فورم مستقل عن الاخر يعني عند تشغيل الفواتير يكون جدول المخازن ليس شغال طبعن وصلت الي بعض الاكوراد ولم يتنفذ معايا وهو عن طريق select وال update ولم يتنفذ معايا ارجو المساعدة ولكم جزيل الشكر

بتاريخ:

أخي الفاضل
لنفترض أن جدول المخزن إسمه stock_details والعمود الذي به رقم الصنف Item_no العمود الموجود بيه الرصيد هو item_balance
وأن جدول الفواتير يحتوى على العمود الذي به الكميةهوinv_item_qty وأيضا يحتوى على عمود رقم الصنف item_no

من الفورم الخاص بالفاتور
أضف الكود التالي عند الزناد Post-Insert

update stock_details
set itme_balance= item_balance-item_qty
where item_no = item_no;

وإن شاء الله هتشتغل معاك

بتاريخ:

الاخ الكريم
يمكن عمل ذلك عن طريق عمل trigger علي الداتاباس
علي كل اذن ادخال لكل سجل يقوم بزيادة الكمية الموجودة بالمخزن بالمقدار المضاف في السجل
ويتم تنفيذه في حالة الupdate and delete
وعمل واحد اخر في حالة الصرف مثل السابق
مع ملاحظة ان الفرق هو ان الاول يتم اضافة الكمية اما الثاني فيقوم بالخصم
اما بالنسبة للصرف فعند الرغبة في الاستعلام عن الكمية فسيكون التريجر قام بوضع القيمة الصحيحة وفي تلك الحالة نختارها من الجدول الاصناف ونقارنها بالكمية المدخلة من قبل المستخدم
سلام

بتاريخ:
  • كاتب الموضوع

اخواني مشكورين على الرد بس المشكلة انه عندما افعل هذا الكود مايتعرف على الترايجر حق المخازن
وبعدين يعطينا مشكلة يقول تسبب زنا Post-Insert في مشكلة عند حفظ الفاتورة

لان الترايجر مش نفس الفورم حق الفواتير يكون في فورم لوحدة ضروري استدعي الفورم بجملة SELECT ارجو المساعدة في الكود كامل

بتاريخ:

أخي
يمكنك عمل زر وليكن اسمه صرف بضاعة مثلا
وتضع تحته الكود التالي

DECLARE
A	 NUMBER;
B	 NUMBER;
D	 NUMBER;
E	 NUMBER;
F	 NUMBER;
X	 NUMBER;
T	TIMER;
BEGIN

SET_ALERT_PROPERTY('ALERT1',ALERT_MESSAGE_TEXT,هل تريد صرف الكميات المذكورة);
SET_ALERT_BUTTON_PROPERTY('ALERT1',ALERT_BUTTON1,LABEL,'نعم');
SET_ALERT_BUTTON_PROPERTY('ALERT1',ALERT_BUTTON2,LABEL,'لا');
SET_ALERT_BUTTON_PROPERTY('ALERT1',ALERT_BUTTON3,LABEL,NULL);
A:=SHOW_ALERT('ALERT1');
IF A=ALERT_BUTTON1 THEN 
	
SELECT COUNT(*) 
INTO  B
FROM INVOICE_MASTER
WHERE INV_MAS_ID=:INVOICE_MASTER.INV_MAS_ID;
IF B=1 THEN 
SELECT COUNT(*) 
INTO  D
FROM INVOICE_MASTER
WHERE INV_MAS_ID=:INVOICE_MASTER.INV_MAS_ID AND POST=0;
IF D=1 THEN 
	T:=CREATE_TIMER('ASHRAF',100,NO_REPEAT);
UPDATE INVOICE_MASTER 
 SET POST=1
 WHERE INV_MAS_ID=:INVOICE_MASTER.INV_MAS_ID;
 GO_BLOCK('INVOICE_MASTER');
SET_ITEM_PROPERTY('IT1',NAVIGABLE,PROPERTY_FALSE);
SET_ITEM_PROPERTY('IT1',enabled,PROPERTY_FALSE);
DECLARE 
	CURSOR  ASH  IS 
	SELECT ITEM_SERIAL,UNIT_PRICE,AMOUNT,P_PRICE
	FROM INVOICE_DETAILS
	WHERE invoice_details.inv_mas_id=:invoice_master.inv_mas_id;
BEGIN
	------------------------------------------------------------------------
	IF :GLOBAL.RAM IN (1,3) THEN
FOR I IN ASH LOOP
	UPDATE ITEM_tree 
	SET AMOUNT=AMOUNT-I.AMOUNT
WHERE ITEM_ID=I.ITEM_SERIAL;		
END LOOP;
ELSIF :GLOBAL.RAM IN (2,4) THEN
	FOR I IN ASH LOOP 
		-------------------------------	 
		UPDATE ITEM_TREE 
		SET AMOUNT=NVL(AMOUNT,0)+I.AMOUNT , P_PRICE=I.UNIT_PRICE ,S_PRICE=I.P_PRICE
		WHERE ITEM_ID=I.ITEM_SERIAL;
	END LOOP;
	
	END IF;
--------------------------------------------------------------------------------------
exception
	when others then 
	declare serv_err	number :=abs(dbms_error_code);
			  serv_msg	varchar2(200):=dbms_error_text;
	begin 
		rollback;
		message('Error during update'||''||to_char(serv_err)||'-'||serv_msg);
		--raise form_trigger_failure;
	end; 
	-------------------------------------------------------------------
	END;
 
 COMMIT;

ELSE  message('عفواً: هذه الفاتورة تم ترحيلها من قبل ');
RAISE FORM_TRIGGER_FAILURE;
BELL;
END IF;
ELSE   
message('عفواً: يجب حفظ الفاتورة قبل عمل ترحيل لها ');
BELL;
RAISE FORM_TRIGGER_FAILURE;
END IF;

ELSIF A=ALERT_BUTTON2 THEN 
NULL;
END IF;
END;



اعزرني اخي لأني أخدت الكود نسخ ولصق من برنامج أنا عاملة وشغال تمام
جرب وان شاء الله يشتغل معاك
ولو فيه أي استفسار أنا في الخدمة
تقبل تحياتي

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.