View Full Version : select برای گزارش یکپارچه مالی
sadaf_
سه شنبه 24 آبان 1390, 14:09 عصر
سلام
من 2 تا table دارم
1- تعریف کدینگ حسابداری
2- ثبت اسناد حسابداری
حالا می خوام یک گزارشی رو نمایش بدم به اسم یکپارچه مالی
در گزارش همه کدینگ حسابداری نمایش داده می شه و هر کدی که دارای مبلغ در سند حسابداری هست رو جمع همه مبالغی که با آن کد زده شده را نمایش می دیم
من یک select تو در تو استفاده کردم که table کدینگ رو select کردم و در داخل این select مبلغ بدهکار را براساس کد sum کردم
جوابی که می ده درسته اما خیلی زمانبر شده کند شده سیستم هنگ می کنه
چه روشی بهتر سراغ دارین؟
ممنون
mina_ghorbani
سه شنبه 24 آبان 1390, 16:00 عصر
به جای select تو در تو از join استفاده کن و group by بزن روی کدها و sum بدهکار و بستانکار رو بگیر
sadaf_
سه شنبه 24 آبان 1390, 16:19 عصر
بله از این روش هم می شه ولی یه مشکلی هست
مثلا من حساب کل رو 101 دادم
معین رو 001
و تفضیل یک رو 0001
و تفضیل دو رو 0002
حالا من باید جمع هر سطح رو به دست بیارم یعنی از پایین به بالا
هر تفضیل جمع خودش رو داره
معین جمع دوتا تفضیل رو داره
کل هم که جمع معین رو داره
این رو بدون تو در تو چطوری می شه به دست آورد؟
ممنون
mina_ghorbani
سه شنبه 24 آبان 1390, 16:39 عصر
یعنی یه گزارش می خوای که توش هم جمع کل ها باشه هم معین و... همه با هم باشند؟
می شه مدل گزارش که می خوای رو بنویسی( اینکه می خوای چه شکلی باشه)
مثلا این طوری:؟؟(اسم ستون هات اینطور باشه؟)
کل معین تفضیلی بدهکار بستانکار
بعد اینکه اطلاعات چه جوری توش قرار بگیره؟
sadaf_
سه شنبه 24 آبان 1390, 16:45 عصر
اسم گزارش یکپارچه مالی هستش
کد حسابداری شرح حساب بدهکار بستانکار
101-------------- کل --------1000 -------0
101001 ---------معین-------1000 -------0
1010010001--- تفضیل یک --200 -------0
1010010002 ---تفضیل دو ---800 --------0
خط فاصله ها را خط تیره گذاشتم به خاطر اینکه به هم نچسبند
مشاهده می شه که جمع تفضیل ها در معین قرار داره و جمع معین در کل
mina_ghorbani
سه شنبه 24 آبان 1390, 16:59 عصر
نمی دونم این راه که به ذهنم می رسه بهتر از SUB QUERY هست یا نه
رو جدول کدینگ SELECT یزن و چند بار JOIN بزن با جدول سندحسابداری یکی با شرط (از جدول کدینگ)کد= کدکل(از جدول سند)
یکی دیگه کد= معین و همین طور تفضیلی ها
sadaf_
سه شنبه 24 آبان 1390, 17:03 عصر
اما کدینگ من شناور هستش
یعنی یک حساب ممکنه که فقط کل داشته باشه
یک حساب ممکنه که 4 تا سطح حساب باشه و ...
به نظرتون این روش منطقیه؟
mina_ghorbani
سه شنبه 24 آبان 1390, 18:05 عصر
با JOIN که گفتم نمی شه این طور
بهش فکر کردم چیزی به ذهنم نمی رسه
اگر راهی به ذهنم برسه می گم
sadaf_
جمعه 27 آبان 1390, 10:40 صبح
کسی نبود یک راهنمایی بهم بده
یوسف زالی
جمعه 27 آبان 1390, 13:23 عصر
سلام.
دوست من سلکتتون رو بذارید تا شاید کمکی بشه کرد
sadaf_
شنبه 28 آبان 1390, 08:59 صبح
select strcode,strcomment
(select sum(bedehcar)from Document where strCode Like Coding.strCode +%)
from Coding
Document اسناد در اون ذخیره می شوند
Coding کدهای حسابداری
با این دستور همه کدهای جسابداری select می شوند و طبق مثالی که در پست های قبلی گفتم دقیقا عمل می کنه
و طبق این دستور همه کدهاایی که در سند استفاده شده اند جمع همه آنها محاسبه می شود
ولی بزرگترین مشکل اینه که این گزارش حداقل یک دقیقه طول می کشه و اطلاعات زیادی هم در دیتابیس نیست اگر سنگین تر بشه مطمئنم این گزارش اصلا کار نمی ده لطفا یه راهنمایی بدید
اگر یک روشی باشه که نیازی به Select تودرتو نباشه خیلی عالی می شه
ممنون
یوسف زالی
شنبه 28 آبان 1390, 10:50 صبح
علت اصلی وجود لایک هست.
در ضمن خطر ارور >=< هم دارید.
بهتره در طراحی جداول تحدید نظز کنید.
به جای کد حساب آی دی درخت حساب رو ذخیره کنید.
sadaf_
شنبه 28 آبان 1390, 10:58 صبح
من هم آی دی رو ذخیره کردم اما از view کد حسابداری رو به دست میارم
و از view کد حسابداری رو می گیرم و مقدارش رو فیلتر می کنم و ...
طبق کوئری که نوشتم عمل می کنم
یوسف زالی
شنبه 28 آبان 1390, 11:10 صبح
حب در ساب سلکت به روی آی دی join کنید.
sadaf_
شنبه 28 آبان 1390, 11:14 صبح
حب در ساب سلکت به روی آی دی join کنید.
متوجه منظورتون نشدم
می شه واضح تر بگید
یوسف زالی
شنبه 28 آبان 1390, 11:20 صبح
مگه نمی گید آی دی رو ذخیره کردید؟
select strcode,strcomment
(select sum(bedehcar)from Document where CodingID = Coding.ID)
from Coding
sadaf_
شنبه 28 آبان 1390, 11:31 صبح
اینجا یک مشکلی هست و اون اینکه
در سند حسابداری کاربر فقط آخرین کد حسابداری رو می تواند انتخاب کنه یعنی مثلا اگر حسابی به این صورت باشد
کل 01
معین 001
تفضیل یک 0001
تفضیل دو 0002
باشد کاربر فقط مجاز به استفاده از تفضیل یک و تفضیل دو می باشد
و من باید در گزارش بتونم جمع حساب ها رو بدم یعنی
جمع کل که یک معین دارد
جمع معین که دو تفضیل دارد
و هر تفضیل جمع خودش رو دارد
با این دستوری که شما گفتین فقط جمع تفضیل ها کار می کنه
یه جورایی select پدر فرزندی نیاز دارم که همه رو حساب کنه
یوسف زالی
شنبه 28 آبان 1390, 11:37 صبح
در این صورت بهتره کدینگتون رو استاندارد کنید.
مثلا همیشه 3 رقم برای تفضیلی باشه. اونوقت به جای لایک از substring استفاده کنید.
(راستی حواسم نبود گروپ ندارید. خطر >=< منتفیه)
baktash.n81@gmail.com
شنبه 28 آبان 1390, 12:09 عصر
سلام
روشی که انتخاب کردید یعنی سادگی در طراحی احتمالا این مشکلات رو هم خواهد داشت یعنی کند می شه !
روی فیلدهایی که داری دو طرف Like تفاده می کنی Index بزار ...
ولی اگه می خوای می تونی روش های دیگه ایی هم برای طراحی انتخاب کنی مثلا hierarchyid که تو sql 2008 اضافه شده و برای پیاده سازی ساختار های درختیه ...
یا روش استفاده از فیلدهای ID و ParentID که این هم روش خوبیه برای پیاده سازی درختی ...
یا اینکه ستون های مربوط به کل, معین و تفضیل رو از هم جدا کنی ...
sadaf_
شنبه 28 آبان 1390, 12:41 عصر
روی فیلدهایی که داری دو طرف Like تفاده می کنی Index بزار ...
hierarchyid که تو sql 2008 اضافه شده و برای پیاده سازی ساختار های درختیه ...
یا اینکه ستون های مربوط به کل, معین و تفضیل رو از هم جدا کنی ...
می شه لطف کنید در مورد این سه روش توضیحاتی به من بدید
دیتابیس sql 2005
ممنون
baktash.n81@gmail.com
یک شنبه 29 آبان 1390, 09:58 صبح
برای Index گزارشتن که از روی Table می تونی این کارو انجام بدی احتیاجی به کد نویسی نداره اما سرعتت رو خیلی بهتر می کنه ... Table مورد نظر رو Expand کن (روی اون + کنارش کلیک کن) تو قسمت Index کلیک راست کن بعد New Index و ...
در مورد روش های دیگه که باید تحلیل انجام بشه ... اما در مورد کار شما می تونید به جای اینکه عددی مثل 1010010001 رو توی یک فیلد نگهداری 3 تا فیلد درست کن که 101 و 001 و 0001 رو جدا از هم نگهداری ... این ساده ترین روشیه که با اطلاعاتی که بهم دادی میتونم بهت بگم اما مطمئا بهترین نیست ... اگه DBیی که روش کار می کنی رو بفرستی شاید بتونم بیشتر کمکت کنم ...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.