PDA

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



reza11_2005
دوشنبه 08 شهریور 1395, 17:35 عصر
باسلام
من یک مشکل دارم
من یک نرم افزار دارم شبکه است در قسمت شماره فاکتور به مشکل بر خوردکردام
وقتی هم زمان اطلاعات وارد می کنم میاد یک شماره فاکتور برای هر دوی ما ست می کند

حالا برای این مشکل باید چکار کنم

و مورد دوم

من الان از ردیف 500 تا 1000 شماره فاکتور تکراری دارم
می خواهم یک تکس باکس بگذارم و بگویم از ردیف 500 تا 1000 را اصلاح کنم
یعنی
1000 هر دفع یک واحد بهش اضافه کند

می خواستم بدانم چطوری می توانم این کار انجام بدهم با حلقه for میشه؟

ممون می شوم من راهنمایی کنید

reza11_2005
سه شنبه 09 شهریور 1395, 08:56 صبح
دوستان کس نیست به من کمک کنند

hamid_hr
سه شنبه 09 شهریور 1395, 09:22 صبح
الان میخوای شماره فاکتور ها رو اصلاح کنی یا مشکل تکراری بودن را حل کنی؟

barnamenevisjavan
سه شنبه 09 شهریور 1395, 09:23 صبح
سلام
کاری که خودم انجام میدم به این صورت هستش اول یه فیلد از نوع Nvarchar با طول 6 کاراکتر تعیین میکنم بعدش سمت سی شارپ تاریخ شمسی رو تولید میکنم و 2 رقم سال رو ازش میگیرم و بصورت 95-001 درش میارم حالا تنها کاری که برای جلوگیری از تکراری بودن میکنم این هستش که قبل از تعیین شماره فاکتور با استفاده از پروسیجر ها این فیلد رو سلکت میکنم و آخرین مقدار رو برمیگردونم به فرض باشه 95-005 داخل برنامه یه واحد بهش اضافه میکنم و به عنوان شماره فاکتور جدید ثبت میکنم (سمت پروسیجر هم میتونید موقع سلکت گرفتن یه واحد اضافه کنید) حالا کافیه یه شرط بزارید اگه شماره فاکتور دوباره موجود بود (با کمک پروسیجرها) دوباره یه واحد اضافه کنید.

reza11_2005
سه شنبه 09 شهریور 1395, 09:43 صبح
اول مشکل تکراری بودن
دوم مشکل قبلی ها که باید ویرایش بشن

hamid_hr
سه شنبه 09 شهریور 1395, 09:53 صبح
فیلد شمارهه فاکتورر رو توی دیتابیس از نوع int بگیرین و تنظیم کنید که به صورت identity خودکار عدد تولید کنه.
وقتی ثبت انجام شد شماره فاکتور رو به کاربر نمایش بدین.
در برنامه های تحت شبکه هر چی این شماره ها و کدها رو به سمت دیتابیس ببرین بهتر هست و دردسر تکراری بودن رو ندارین

reza11_2005
سه شنبه 09 شهریور 1395, 09:58 صبح
در مورد قسمت دوم چطور؟

hamid_hr
سه شنبه 09 شهریور 1395, 10:40 صبح
ساختار تیبل ها چطوری هستند؟

reza11_2005
سه شنبه 09 شهریور 1395, 12:18 عصر
اینطوری

ردیف شمارفاکتور مبلغ

hamid_hr
سه شنبه 09 شهریور 1395, 13:04 عصر
خب لیست اجناس فاکتور چی؟

davidrobert
سه شنبه 09 شهریور 1395, 14:36 عصر
دوست عزیز یه نکته رو تو ثبت اطلاعات دقت کن چون برنامه شبکه هستش با این مشکل بر خورد میکنی چون خودم با این مشکل بر خورد کردم اول ببین عددی که سیستم ثبت میکنم جفت سیستم یا هرچند تا از سیستم یکی باشه چون Unicode عدد فارسی با انگلیسی فرق میکنه ممکنه بزرگ ترین عدد تو سیستم اول 10 باشه و سیستم دوم هم 10 ولی وقتی داره ثبت میکنم مقدار 10 رو سیستم اول داره ثبت میشه و سیستم دوم هم داره ثبت میشه که نباید این طوری باشه ولی مقدار Unicode هر جفتشون فرق میکنه یکی عدد رو فارسی ثبت میکنه و دومی انگلیسی به همین دلیل سیستم ایراد نگرفته و جفت مقدار 10 که تکراری هستش رو ثبت میکنه. ولی وقتی حالت عدد هر جفت سیستم انگلیسی باشه مشکل بر طرف شده و عدد 10 که بزرگترین وقتی در سیستم اول ثبت بشه در سیستم دوم اتوماتیک 11 عدد بزرگ تر دیده میشه بدون هیچ مشکلی.
دومی مشکلی که برنامه نویس های شبکه دارن بحث تاریخ و زمان هستش که درست نباشه ایراد در ثبت اطلاعات انجام میده من روش گرفتن تاریخ و زمان اینترنتی رو گیر آوردم جواب میده و آقای محمد جواب دادن درست کار میکنه ولی من تاریخ و زمان جداگانه میخوام که در لینک زیر میتوانید ببنید.
http://barnamenevis.org/showthread.php?529188-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B3%D8%A7%D8%B9%D8%AA-%D9%88-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-web-server-%D9%88-TimeZone-%D9%87%D9%85-%D8%B2%D9%85%D8%A7%D9%86&p=2338163&viewfull=1#post2338163
اگر تاریخ سیستم اشتباه بود و سیستم اینترنت وصل بود خودش تاریخ صحیح میاره که شما تاریخ دقیق رو ثبت میکنه و برنامه شما از نظر تاریخ با مشکلی بر خورد نمیکنید.و همین طور زمان

reza11_2005
چهارشنبه 10 شهریور 1395, 00:13 صبح
من الان مشکل حسابی دارمبا این
:
از ردیف 500 تا 1000 شماره فاکتور تکراری دارم
می خواهم یک تکس باکس بگذارم و بگویم از ردیف 500 تا 1000 را اصلاح کنم
یعنی
1000 هر دفع یک واحد بهش اضافه کند

می خواستم بدانم چطوری می توانم این کار انجام بدهم با حلقه for میشه؟

ژیار رحیمی
چهارشنبه 10 شهریور 1395, 01:47 صبح
شماره فاکتورهای تکراری رو میشه اصلاح کرد مشکل اصلی اینه که شما به این شیوه ادامه بدی باز شماره فاکتور های تکرای خواهید داشت.به نظر من شماره فاکتور رو قبل از درج در جدول بوسیله یک تابع یا پروسیجر که شماره فاکتور رو براساس آخرین رکورد ثبت شده در جدول مربوطه بدست میاره مقدار دهی کن(داخل خود sql نه در برنامه).سپس عملیات درج رو در جدول انجام بده.
با حلقه for هم داخل برنامه و هم داخل sql با کویری می تونی از شماره رکورد(Id سطر) 500 به بعد شماره فاکتور اصلاح و رکورد رو update کنی

reza11_2005
چهارشنبه 10 شهریور 1395, 09:08 صبح
میشه یک نمونه ذکر بفرمایید

ژیار رحیمی
چهارشنبه 10 شهریور 1395, 11:06 صبح
فرض میکنیم فاکتور شماره 500 دارای Id=515 هست (به دلیل حذف شماره فاکتور با شماره Id رکورد همخوانی نداره) و برای شماره رکوردهای 516 تا 1016 حلقه for را بصورت زیر میتونی بنویسی

int currentCode=501;
for(int i=516,i<1016,i++)
{
//1-خواندن رکورد با آیدی i
//2-بروز رسانی کد فاکتور با مقدار currentCode
//3- currentCode++
}

ASKaffash
جمعه 12 شهریور 1395, 10:44 صبح
سلام
اول باید مشکل داده های تکراری را حل کنید هم درون C# می شود هم داخل SQL من پیشنهاد میکنم داخل SQL اینکار را انجام دهید بصورت ذیل :
- یک کرسر طراحی کنید که Select آن روی شماره فاکتور مرتب شده و شرط آن بین 500 و 1000 است حالا با یک SubQuery مقدار Max فاکتور را پیدا کرده و درون یک حلقه که کرسر را پیمایش میکند Max + شمارنده را با دستور Update به آن فاکتور نسبت دهید
دوم :
به مشکل تکراری شدن در شبکه را همزمانی می گویند راه حل فنی :
1- پس از حل مشکل مرحله اول یک ایندکس یونیک روی فیلد فاکتور ایجاد کنید
2- در ابتدای برنامه Max+1 برای فاکتور را به هر تعداد کاربر فقط نمایش دهید
3- در هنگام ثبت اطلاعات توسط کاربر مجدد Max+1 را بدست آورید
4- اگر خطا دریافت نکردید این عدد شماره فاکتور کاربر است
5- اگر خطا از سمت SQL دریافت کردید مجدد Max+1 را بدست آورید و مرحله 4و5 را در یک حلقه آنقدر ادامه دهید تا بر همزمانی غلبه کنید
دقت کنید همیشه پس از پایان عملیات ذخیره فاکتور مقدار شماره فاکتور نهائی را به کاربر نمایش دهید و اگر فکر می کنید کاربران شما حساسیت خاصی دارند مرحله 2 را کلا" انجام ندهید