PDA

View Full Version : حرفه ای: کمک در بدست آوردن شماره فاکتور



mortezasar
شنبه 18 مرداد 1393, 01:43 صبح
سلام دوستان من جدول های فاکتورم رو طراحی کردم که دوتا جدول هست یکی جدول سربرگ و یکی جدول توضیحات فاکتور
اما مشکلم اینه که چه جور اطلاعات هدر رو که ثبت کردم شماره فاکتور رو بدست بیارم که بعد اقلام رو برای اون شماره فاکتور ثبت کنم و یک مشکل دیگه ام اینه که امکان داره دوتا سیستم کار ثبت فاکتور رو انجام بدن
اگه راهنمایی کنید ممنون میشم

danialafshari
شنبه 18 مرداد 1393, 02:55 صبح
با سلام
برای اینکار ابتدا سربرگ فاکتور رو ذخیره کنید بعد group رو Disable و ID آخرین رکورد رو دریافت و Group توضیحات رو Enable می کنید

mojtaba0912433
شنبه 18 مرداد 1393, 08:43 صبح
اگه 2 تا كاربر ممكنه ثبت كنن ميتوني آخر كار موقعي كه مخواي فاكتور را ثبت دائم كني شماره فاكتور صادر كني .يا اينكه ابتداي كار يه شماره فاكتور ذخيره كني كه اگه كاربر دوم خواست فاكتور بزنه شماره تكراري نشه .البته راه دوم منطقي نيست

mortezasar
شنبه 18 مرداد 1393, 12:29 عصر
با سلام
برای اینکار ابتدا سربرگ فاکتور رو ذخیره کنید بعد group رو Disable و ID آخرین رکورد رو دریافت و Group توضیحات رو Enable می کنید

سلام میشه بیشتر توضیح بدین دقیق نگرفتم که باید چیکار کنم

mortezasar
شنبه 18 مرداد 1393, 12:31 عصر
اگه 2 تا كاربر ممكنه ثبت كنن ميتوني آخر كار موقعي كه مخواي فاكتور را ثبت دائم كني شماره فاكتور صادر كني .يا اينكه ابتداي كار يه شماره فاكتور ذخيره كني كه اگه كاربر دوم خواست فاكتور بزنه شماره تكراري نشه .البته راه دوم منطقي نيست

چطور موقع ثبت دائم ، شماره فاکتور رو از جدولم بگیرم منم مشکلم همینه

mojtaba0912433
شنبه 18 مرداد 1393, 15:46 عصر
در سربرگ فاكتور ها شماره فاكتور قبلي را ثبت كردي .ميتوني با دستور اس كيوال برزگترين شماره را به اضافه يك كني و براي فاكتور جديد استفاده كني.اگر قبلا فاكتوري ثبت نكردي كه شماره فاكتورت ميشه يك

danialafshari
شنبه 18 مرداد 1393, 16:02 عصر
چطور موقع ثبت دائم ، شماره فاکتور رو از جدولم بگیرم منم مشکلم همینه

با سلام
بعد از ثبت می تونید با Query زیر آخرین رکورد رو برگردونید
SELECT MAX(ID_PFactor) AS Expr1 FROM tbl_PrimaryFactor WHERE (Code_Contacts = @Code_Contacts)
موفق باشید

mortezasar
شنبه 18 مرداد 1393, 16:03 عصر
ببینید من الان یک فاکتور ثبت میکنم شماره اش میشه 10 همزمان با من یک نفر دیگه هم فاکتور ثبت می کنه شمارش میشه 11 حالا من چه جوری این دو شماره رو از هم تفکیک کنم یا بدونم فاکتوری که من ثبت کردم شمارش چند هست

danialafshari
شنبه 18 مرداد 1393, 16:16 عصر
ببینید من الان یک فاکتور ثبت میکنم شماره اش میشه 10 همزمان با من یک نفر دیگه هم فاکتور ثبت می کنه شمارش میشه 11 حالا من چه جوری این دو شماره رو از هم تفکیک کنم یا بدونم فاکتوری که من ثبت کردم شمارش چند هست

سلام
کد SQl بالا همون شماره 10 یا 11 (که شماره فاکتور) هست رو بدست میاره
شما بعد از Insert این شماره رو درون یک متغیر int قرار میدید تا ازش استفاده کنید
حالا در جدول ریزه فاکتور شما یک فیلد دارین به نام شماره فاکتور که هر رکوردی که بعد از این ثبت میشه شماره فاکتورش همون int ای که توسط کد بالا بدست اومده
شما از چه روشی استفاده می کنید؟
Stored Procedure ? Sql Command? یا ... ؟
اگه متوجه نشید بگید تا براتون سورس قرار بدم

موفق باشید

mortezasar
شنبه 18 مرداد 1393, 16:20 عصر
سلام ممنونم اما راستش متوجه نشدم از اس کیو ال کامند استفاده می کنم اگه یه نمونه بذارید ممنون میشم من منظورم اینه که اگر همزمان دو نفر یک هدر در جدول فاکتور ثبت کنند شماره فاکتوری که من ثبت کرده ام 10 است اما اخرین رکورد 11 هست و حالا من که بخوام کالا برای فاکتور ثبت کنم کالا برای فاکتور شماره 11 ثبت خواهد شد گیج شدم فک کنم قاطی کردم

danialafshari
شنبه 18 مرداد 1393, 16:25 عصر
سلام ممنونم اما راستش متوجه نشدم از اس کیو ال کامند استفاده می کنم اگه یه نمونه بذارید ممنون میشم من منظورم اینه که اگر همزمان دو نفر یک هدر در جدول فاکتور ثبت کنند شماره فاکتوری که من ثبت کرده ام 10 است اما اخرین رکورد 11 هست و حالا من که بخوام کالا برای فاکتور ثبت کنم کالا برای فاکتور شماره 11 ثبت خواهد شد گیج شدم فک کنم قاطی کردم

نه دیگه !
وقتی PC1 شماره 10 رو ثبت کنه توی اون متغیر 10 ثبت میشه و دیگه با اون کار داریم
در اون لحظه آخرین رکورد 10 هست در لحظه سریع پس از Insert در متغیر ما ذخیره میشه و ما دیگه با 10 کار داریم و هر چند تا رکوردی که بعدش ثبت میشه ربطی به حال حاضر نداره

چند ثانیه بعد PC2 یک شماره ثبت می کنه میشه 11 و همش با اون کار میکنه

در عکس بالا مورد استفاده قرار میگیره
متوجه شدید؟

mortezasar
شنبه 18 مرداد 1393, 16:32 عصر
یعنی اول insert من انجام میشه و پشت سر اون چون من دوباره کامند select رو فرستادم هنوز میشه گفت بانک با من کار میکنه و 10 رو به من بر میگردونه و دیگه مشکل همزمانی رو نداریم اگه واستون مقدوره سورس رو هم بذارین ممنون

mortezasar
شنبه 18 مرداد 1393, 16:35 عصر
یه سوال دیگه اگه دوتا همزمان هم ثبت کنن بازم مشکل پیش میاد یا نه؟

محمد آشتیانی
شنبه 18 مرداد 1393, 16:39 عصر
سلام
دوست عزیز نگران نباش ، مشکل همزمانی که میفرمائید پیش نمیاد ،حقیقت اینه که تمام مراحلی که آقای افشاری فرمودند ظرف چند صدم ثانیه انجام میشه و تداخل پیش نمیاد در عمل.

danialafshari
شنبه 18 مرداد 1393, 18:08 عصر
یعنی اول insert من انجام میشه و پشت سر اون چون من دوباره کامند select رو فرستادم هنوز میشه گفت بانک با من کار میکنه و 10 رو به من بر میگردونه و دیگه مشکل همزمانی رو نداریم اگه واستون مقدوره سورس رو هم بذارین ممنون

التماس دعا

Mahmoud.Afrad
سه شنبه 21 مرداد 1393, 21:38 عصر
همه درج ها رو در یک تراکنش انجام بدید.
به جای بدست آوردن max میتونید از SCOPE_IDENTITY() برای بدست آوردن آیدی که درج شده استفاده کرد.

در مورد همزمانی در تالار sqlserver جستجو کنید نتایج خوبی داره که میتونید مطالعه کنید.

ma.darklight
دوشنبه 07 مهر 1393, 15:03 عصر
سلام
میتونی برای جدولت یه فیلد کاربر هم ایجاد کنی . بعد برای دستورت بخای آخرین شماره فاکتوری که با این کاربر ایجاد شده رو بهت برگردونه که البته خودت ایجادش کردی.