المشاركات : 199
المواضيع 72
الإنتساب : Sep 2016
السمعة :
0
الشكر: 31
تم شكره 31 مرات في 26 مشاركات
14-02-18, 10:16 AM
(آخر تعديل لهذه المشاركة : 14-02-18, 10:23 AM {2} بواسطة السيد الجوهري.)
2015.rar (الحجم : 679.55 ك ب / التحميلات : 127)
مرفق ميزان مراجعة احترافي مطلوب التعديل علية
يقراء البيانات من ستورد بروسيدجر
المطلوب
ظهور الارصدة الافتتاحية اما مدينة او دائنة ولايجوز مدين ودائن معا
كذلك ظهور الارصدة الحالية اما مدينة او دائنة ولايجوز مدين ودائن معا
ارجو المساعدة فى رفع كفاءة ميزان المراجعة
وهذا الميزان سيصبح ملك المنتدي بعد التعديل علية
بحيث فى النهاية يكون بهذا الشكل
وشكرا للجميع
المشاركات : 199
المواضيع 72
الإنتساب : Sep 2016
السمعة :
0
الشكر: 31
تم شكره 31 مرات في 26 مشاركات
14-02-18, 07:13 PM
(آخر تعديل لهذه المشاركة : 14-02-18, 07:27 PM {2} بواسطة السيد الجوهري.)
فى المثال المرفق والسابق ارفاقة بنفس البيانات فى المشاركة السابقة
نجد انه تم تحميل الارصدة الافتتاحية مدين ودائن
وبالنظر الي حساب الصندوق نجد التالي مدين ودائن به مبالغ
والتعديل المطلوب هو ان المدين اكبر من الدائن لذا وجب ان ايكون الرصيد الافتتاحى مدين بمبلغ 3471.363
وان تكون الخلية المقابله فى الدائن تساوي صفر
وهذا هو البروسيدجر
كود :
ALTER proc [dbo].[get_mizan]
@B_DATE DATE,
@E_DATE DATE,
@TYPE_PR int
as
begin
declare @Debit decimal(18, 0)
declare @Credit decimal(18, 0)
DECLARE @ID INT
DECLARE @CODE NVARCHAR(MAX)
DECLARE @ACCOUNT NVARCHAR(MAX)
DECLARE @BD decimal(18,3)
DECLARE @BC decimal(18,3)
DECLARE @D decimal(18,3)
DECLARE @C decimal(18,3)
DECLARE @TD decimal(18,3)
DECLARE @TC decimal(18,3)
DECLARE @GUID uniqueidentifier
DECLARE @PARENT uniqueidentifier
DECLARE @END_ACCOUNT INT
CREATE TABLE [dbo].[ggg](
[guid] [nvarchar](50) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[MIZAN](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CODE] [nvarchar](max) NULL,
[NAME] [nvarchar](max) NULL,
[BD] [decimal](18, 3) NULL,
[BC] [decimal](18, 3) NULL,
[D] [decimal](18, 3) NULL,
[C] [decimal](18, 3) NULL,
[TD] [decimal](18, 3) NULL,
[TC] [decimal](18, 3) NULL,
[GUID] [uniqueidentifier] NULL,
[PARENT] [uniqueidentifier] ROWGUIDCOL NULL,
[END_ACCOUNT] [int] NULL
) ON [PRIMARY]
delete from MIZAN
declare @result bit
set @result = (SELECT CAST(CASE WHEN EXISTS(select guid from ACCOUNT where ParentGUID in (select GUID from acc) and guid not in (select GUID from acc)) THEN 1 ELSE 0 END AS BIT ))
while(@result = 1)
begin
insert into acc select guid from ACCOUNT where ParentGUID in (select GUID from acc) and guid not in (select guid from acc)
set @result = (SELECT CAST(CASE WHEN EXISTS(select guid from ACCOUNT where ParentGUID in (select GUID from acc) and guid not in (select GUID from acc)) THEN 1 ELSE 0 END AS BIT ))
IF @result = 0
BREAK;
end
IF(@TYPE_PR=0)
BEGIN
INSERT INTO [dbo].[MIZAN] SELECT CODE ,NAME ,0,0,0,0,0,0,GUID,GUID,1 FROM ACCOUNT
END
IF(@TYPE_PR=1)
BEGIN
INSERT INTO [dbo].[MIZAN] SELECT CODE ,NAME ,0,0,0,0,0,0 ,GUID,GUID,1 FROM ACCOUNT WHERE GUID IN (SELECT GUID FROM ACC)
END
declare c cursor for
SELECT [ID]
,[CODE]
,[NAME]
,[BD]
,[BC]
,[D]
,[C]
,[TD]
,[TC]
,[GUID]
,[PARENT]
,[END_ACCOUNT]
FROM [dbo].[MIZAN] ORDER BY CODE
open c
fetch next from c
into @ID,@CODE,@ACCOUNT,@BD,@BC,@D,@C,@TD,@TC,@GUID,@PARENT,@END_ACCOUNT
while @@FETCH_STATUS=0
begin
DECLARE @SEARSH_BD decimal(18,3)
SET @SEARSH_BD=(SELECT ISNULL( SUM(DEBIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (DAY2.ACCOUNT_GUID = @GUID) AND (DAY1.DATE < CONVERT(DATE, @B_DATE, 102)))
DECLARE @SEARSH_BC decimal(18,3)
SET @SEARSH_BC=(SELECT ISNULL( SUM(CREDIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (DAY2.ACCOUNT_GUID = @GUID) AND (DAY1.DATE < CONVERT(DATE, @B_DATE, 102)))
DECLARE @SEARSH_D decimal(18,3)
SET @SEARSH_D=(SELECT ISNULL( SUM(DEBIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (day2.ACCOUNT_GUID = @GUID) AND (day1.DATE BETWEEN CONVERT(DATE, @B_DATE, 102) AND CONVERT(DATE, @E_DATE, 102)))
DECLARE @SEARSH_C decimal(18,3)
SET @SEARSH_C=(SELECT ISNULL( SUM(CREDIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (day2.ACCOUNT_GUID = @GUID) AND (day1.DATE BETWEEN CONVERT(DATE, @B_DATE, 102) AND CONVERT(DATE, @E_DATE, 102)))
delete from ggg
insert into ggg select @GUID from ACCOUNT where GUID = @GUID
declare @result1 bit
set @result1 = (SELECT CAST(CASE WHEN EXISTS(select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select GUID from ggg)) THEN 1 ELSE 0 END AS BIT ))
print @result1
while(@result1 = 1)
begin
insert into ggg select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select guid from ggg)
set @result1 = (SELECT CAST(CASE WHEN EXISTS(select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select GUID from ggg)) THEN 1 ELSE 0 END AS BIT ))
IF @result1 = 0
BREAK;
end
update MIZAN set BD=BD+@SEARSH_BD,BC=BC+@SEARSH_BC,D=D+@SEARSH_D,C=C+@SEARSH_C ,TD=TD+@SEARSH_BD + @SEARSH_D,TC=TC+@SEARSH_BC + @SEARSH_C where GUID in (select GUID from ggg)
fetch next from c
into @ID,@CODE,@ACCOUNT,@BD,@BC,@D,@C,@TD,@TC,@GUID,@PARENT,@END_ACCOUNT
end
close c
deallocate c
SELECT CODE AS [رقم الحساب], NAME AS [اسم الحساب], BD AS [افتتاحي مدين], BC AS [افتتاحي دائن], D AS المدين, C AS الدائن, TD AS [مجموع المدين], TC AS [مجموع الدائن]
FROM dbo.MIZAN
ORDER BY [رقم الحساب]
drop table ggg
drop table MIZAN
end
[/code]
[/code]
المشاركات : 199
المواضيع 72
الإنتساب : Sep 2016
السمعة :
0
الشكر: 31
تم شكره 31 مرات في 26 مشاركات
هذة هى الجملة المسئولة عن ضبط العمليات الحسابية داخل الميزان
كيف يتم التعديل عليها لتحل المشكلة
وشكرا جزيلا
كود :
update MIZAN set BD=BD+@SEARSH_BD ,
BC=BC+@SEARSH_BC,
D=D+@SEARSH_D,
C=C+@SEARSH_C ,
TD=TD+@SEARSH_BD + @SEARSH_D,
TC=TC+@SEARSH_BC + @SEARSH_C where GUID in (select GUID from ggg)
المشاركات : 40
المواضيع 2
الإنتساب : Jan 2016
السمعة :
0
الشكر: 2
تم شكره 10 مرات في 9 مشاركات
يعني بدك تعمل طرح للمدين من الدائن والنتيجة اذا كان المدين اكبر من الدائن يوضعها في المدين واذا كان الدائن اكبر من المدين يوضعها في الدائن النتيجة فقط في الآفتتاحي وان لا يظهر في جانب الآفتتاحي مدين ودائن ؟
المشاركات : 199
المواضيع 72
الإنتساب : Sep 2016
السمعة :
0
الشكر: 31
تم شكره 31 مرات في 26 مشاركات
(14-02-18, 11:32 PM)spoony كتب : يعني بدك تعمل طرح للمدين من الدائن والنتيجة اذا كان المدين اكبر من الدائن يوضعها في المدين واذا كان الدائن اكبر من المدين يوضعها في الدائن النتيجة فقط في الآفتتاحي وان لا يظهر في جانب الآفتتاحي مدين ودائن ؟
بالضبط اخى العزيز
المشاركات : 40
المواضيع 2
الإنتساب : Jan 2016
السمعة :
0
الشكر: 2
تم شكره 10 مرات في 9 مشاركات
تفضل أخي هي هادا مجرب وكل شي تمام
بس صديقي جرب وشوف وانا جربت كل شي تمام
طبعا
الآفتتاحي اذا كان المدين اكبر من الدائن بحط المدين القيمة والدائن 0
والعكس كذالك جرب صديقي طبعا انا جربت وزبط معي
بس انت جرب وشوف ازا كل شي تمام علشان نكمل التطوير
طبعا ركز اهم شي على الآخر لانو التعديل بلآخر زبط الآقواس
وفي اهم شي نهاية If
علامة ;
زبطها اوك صديققي بستنى ردك حتى نكمل تطوير
DECLARE @SEARSH_BD decimal(18,3)
SET @SEARSH_BD=(SELECT ISNULL( SUM(DEBIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (DAY2.ACCOUNT_GUID = @GUID) AND (DAY1.DATE < CONVERT(DATE, @B_DATE, 102)))
DECLARE @SEARSH_BC decimal(18,3)
SET @SEARSH_BC=(SELECT ISNULL( SUM(CREDIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (DAY2.ACCOUNT_GUID = @GUID) AND (DAY1.DATE < CONVERT(DATE, @B_DATE, 102)))
DECLARE @SEARSH_D decimal(18,3)
SET @SEARSH_D=(SELECT ISNULL( SUM(DEBIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (day2.ACCOUNT_GUID = @GUID) AND (day1.DATE BETWEEN CONVERT(DATE, @B_DATE, 102) AND CONVERT(DATE, @E_DATE, 102)))
DECLARE @SEARSH_C decimal(18,3)
SET @SEARSH_C=(SELECT ISNULL( SUM(CREDIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (day2.ACCOUNT_GUID = @GUID) AND (day1.DATE BETWEEN CONVERT(DATE, @B_DATE, 102) AND CONVERT(DATE, @E_DATE, 102)))
delete from ggg
insert into ggg select @GUID from ACCOUNT where GUID = @GUID
declare @result1 bit
set @result1 = (SELECT CAST(CASE WHEN EXISTS(select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select GUID from ggg)) THEN 1 ELSE 0 END AS BIT ))
print @result1
while(@result1 = 1)
begin
insert into ggg select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select guid from ggg)
set @result1 = (SELECT CAST(CASE WHEN EXISTS(select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select GUID from ggg)) THEN 1 ELSE 0 END AS BIT ))
IF @result1 = 0
BREAK;
end
if @SEARSH_Bd > @SEARSH_Bc
update MIZAN set BD=@SEARSH_BD-@SEARSH_BC, BC=0,D=D+@SEARSH_D,C=C+@SEARSH_C ,TD=TD+@SEARSH_BD + @SEARSH_D,TC=TC+@SEARSH_BC + @SEARSH_C where GUID in (select GUID from ggg) ;
if @SEARSH_Bd < @SEARSH_Bc
update MIZAN set BD=0, BC=@SEARSH_BC-@SEARSH_BD,D=D+@SEARSH_D,C=C+@SEARSH_C ,TD=TD+@SEARSH_BD + @SEARSH_D,TC=TC+@SEARSH_BC + @SEARSH_C where GUID in (select GUID from ggg) ;
المشاركات : 199
المواضيع 72
الإنتساب : Sep 2016
السمعة :
0
الشكر: 31
تم شكره 31 مرات في 26 مشاركات
15-02-18, 12:05 AM
(آخر تعديل لهذه المشاركة : 15-02-18, 09:44 AM {2} بواسطة السيد الجوهري.)
تحية عطرة لك اخى العزيز
فلنكمل
نفس الشي فى الارصدة الحالية
وجزاك الله كل خير
المشاركات : 40
المواضيع 2
الإنتساب : Jan 2016
السمعة :
0
الشكر: 2
تم شكره 10 مرات في 9 مشاركات
15-02-18, 12:06 AM
(آخر تعديل لهذه المشاركة : 15-02-18, 12:06 AM {2} بواسطة spoony.)
هي الكود عن طريق ألاداة وكل شي تمام وجاهزة هيك بتكون
كود :
DECLARE @SEARSH_BD decimal(18,3)
SET @SEARSH_BD=(SELECT ISNULL( SUM(DEBIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (DAY2.ACCOUNT_GUID = @GUID) AND (DAY1.DATE < CONVERT(DATE, @B_DATE, 102)))
DECLARE @SEARSH_BC decimal(18,3)
SET @SEARSH_BC=(SELECT ISNULL( SUM(CREDIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (DAY2.ACCOUNT_GUID = @GUID) AND (DAY1.DATE < CONVERT(DATE, @B_DATE, 102)))
DECLARE @SEARSH_D decimal(18,3)
SET @SEARSH_D=(SELECT ISNULL( SUM(DEBIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (day2.ACCOUNT_GUID = @GUID) AND (day1.DATE BETWEEN CONVERT(DATE, @B_DATE, 102) AND CONVERT(DATE, @E_DATE, 102)))
DECLARE @SEARSH_C decimal(18,3)
SET @SEARSH_C=(SELECT ISNULL( SUM(CREDIT) ,0) FROM dbo.DAY1 INNER JOIN dbo.DAY2 ON dbo.DAY1.GUID = dbo.DAY2.PAENT_GUID WHERE (day2.ACCOUNT_GUID = @GUID) AND (day1.DATE BETWEEN CONVERT(DATE, @B_DATE, 102) AND CONVERT(DATE, @E_DATE, 102)))
delete from ggg
insert into ggg select @GUID from ACCOUNT where GUID = @GUID
declare @result1 bit
set @result1 = (SELECT CAST(CASE WHEN EXISTS(select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select GUID from ggg)) THEN 1 ELSE 0 END AS BIT ))
print @result1
while(@result1 = 1)
begin
insert into ggg select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select guid from ggg)
set @result1 = (SELECT CAST(CASE WHEN EXISTS(select ParentGUID from ACCOUNT where GUID in (select GUID from ggg) and ParentGUID not in (select GUID from ggg)) THEN 1 ELSE 0 END AS BIT ))
IF @result1 = 0
BREAK;
end
if @SEARSH_Bd > @SEARSH_Bc
update MIZAN set BD=@SEARSH_BD-@SEARSH_BC, BC=0,D=D+@SEARSH_D,C=C+@SEARSH_C ,TD=TD+@SEARSH_BD + @SEARSH_D,TC=TC+@SEARSH_BC + @SEARSH_C where GUID in (select GUID from ggg) ;
if @SEARSH_Bd < @SEARSH_Bc
update MIZAN set BD=0, BC=@SEARSH_BC-@SEARSH_BD,D=D+@SEARSH_D,C=C+@SEARSH_C ,TD=TD+@SEARSH_BD + @SEARSH_D,TC=TC+@SEARSH_BC + @SEARSH_C where GUID in (select GUID from ggg) ;
كيف يعني الحسابات الختامية ؟
المشاركات : 199
المواضيع 72
الإنتساب : Sep 2016
السمعة :
0
الشكر: 31
تم شكره 31 مرات في 26 مشاركات
عفوا اقصد
الارصدة النهائية او الحالية
جاري تجربة اخر كود
وشكرا
المشاركات : 40
المواضيع 2
الإنتساب : Jan 2016
السمعة :
0
الشكر: 2
تم شكره 10 مرات في 9 مشاركات
في تعديل لازم ايكون على المجموع المدين والمجموع الدائن النهائي لآنو بجمع بنائن على البحث مو بنائن على النتيجة
|