PDA

View Full Version : نحوه ساخت يك شماره سند - برنامه حسابداري



hentjanson
دوشنبه 24 تیر 1387, 16:55 عصر
سلام چطور ميشه يك شماره سند ايجاد كرد طوري كه يك edit باشه كه كاربر اخرين شماره سند رو ببينه موقع ثبت سند جديد و اين شماره تكراري ثبت نشه .
در اين رابطه اساتيد ميشه كمك كنند ؟

Touska
دوشنبه 24 تیر 1387, 17:50 عصر
اگر براتون شماره های حذف شده مهم نباشه Max شماره سند رو نشون کار بدید.

البته در صورتی که برنامه تحت شبکه نیست :

با برای هر کاربر شماراه سندشو رزرو کنید.

یا اینکه نزدیکترین و کوچکترین شماره حذف شده را اگر بخواهید جایگزین نمایید.

البته در حسابداری حذف نداریم بلکه تعدیل داریم.

merced
دوشنبه 24 تیر 1387, 17:56 عصر
اول بايد سيستم كدينگت رو مشخص كني.
معمولاً براي سطوح مختلف كدهايي با تعداد ارقام مشخص وجود داره.
و هر كدوم از اين سطوح شامل چند تا حساب هستند.
هر حسابي رو با يك كد مشخص2 مي كنند.
مثلاً
شماره سند - شماره فاكتور - خريداران - ...
يا تو حسابداري
تفصيلي - معين - كل

حالا .
براي هر كدوم از اين سطوح يه جدول در نظر مي گيريم.
موقع ثبت سند جديد اول بايد سطوح بالايي رو انتخاب كرد . و روي جدول سطح آخر بر حسب انتخاب هاي سطح بالا فيلتر كرد. حالا روي باقيمانده ركورد ها يه اس كيو ال ساده (MAX) روي فيلد شماره لازم داره كه در آخر با يك جمع بشه تا يك شماره سند جديد بده
------
اگه تحت شبكه قراره اجرا شه بايد يه راهكار براي ثبت نشدن دوبله تومسط دو كاربر كه همزمان سند وارد مي كنن در بياري .

hentjanson
دوشنبه 24 تیر 1387, 18:00 عصر
در اين رابطه ميشه مثالي هم بزنيد .
كه من هم در روند كار قرار بگيرم

hentjanson
دوشنبه 24 تیر 1387, 18:03 عصر
من فقط مي خوام شماره سند داشته باشم نيازي به شماره فاكتور ندارم نميدونم چطور از تكرار اين شماره جلوگيري كنم و چطور براي كاربر اخرين شماره سند رو نشون بدم ميشه در اين رابطه كمكم كنيد ؟
فيلد هاي من
شماره سند . نام خريدار. نام كالا

merced
دوشنبه 24 تیر 1387, 18:13 عصر
يه ADOQuery ميذاري و كدي مشابه زير توش مي نويسي


Select Max (شماره سند) From Table1


حالا وقتي اين Query رو باز مي كني فيلد شماره يك از ركورد اول يك اون بزرگترين شماره سند رو بهت نشون ميده. اونو با يك جمع كن و به كاربر نشون بده. براي اولين با چون هيچ ركوردي نداري مقدار اون فيلد از ركورد null خواهد بود. و يه if هم براي اين حالت در نظر بگير

hentjanson
دوشنبه 24 تیر 1387, 19:38 عصر
منظورت اينه اين كد رو اينطوري بنويسم براي نشون دادن اينطوري عمل كنم .


Select Max (number) From Table1

number نام فيلدي هست كه در اون رقم سند قرار ميگيره ميشه در اين مورد راهنمايي كني اينكه چطور اين عدد رو در يك label نشون بدم ؟

delphiprog3000
دوشنبه 24 تیر 1387, 19:59 عصر
با سلام.
نمونه این کد رو فکر کنم قبلا دیده باشید.

ابتدا کد رو به شی ارتباطی پاس میدید و سپس حاصل نتیجه رو به لیبل یا ادیت خود ارسال میکنید

delphiprog3000
دوشنبه 24 تیر 1387, 20:05 عصر
دوست من اگه به سورسی که در این تاپیک گذاشتم نگاه کنی متوجه میشه این کد رو به چه حالت بنویسی.


http://barnamenevis.org/forum/showthread.php?t=110757

موفق باشید...............................

SYNDROME
دوشنبه 24 تیر 1387, 20:06 عصر
منظورت اينه اين كد رو اينطوري بنويسم براي نشون دادن اينطوري عمل كنم .


Select Max (number) From Table1

number نام فيلدي هست كه در اون رقم سند قرار ميگيره ميشه در اين مورد راهنمايي كني اينكه چطور اين عدد رو در يك label نشون بدم ؟
دستور خود به این شکل بنویسید.


ADO.SQL.Text := 'Select Max(Number) As MaxNumber From Table';
ADO.Open;
Label1.Caption := IntotoStr(ADO.FieldByName('MaxNumber').Asinteger+1 )

موفق باشید

hentjanson
دوشنبه 24 تیر 1387, 20:26 عصر
ADO.SQL.Text := 'Select Max(Number) As MaxNumber From Table';
ADO.Open;
Label1.Caption := IntotoStr(ADO.FieldByName('MaxNumber').Asinteger+1 )


سلام دوست من من اين كد رو در form crate بنويسم

merced
دوشنبه 24 تیر 1387, 21:22 عصر
نه. هر وقت بخواي شماره سند رو به كابربر نشون بدي
احتمالاً FormShow

hentjanson
دوشنبه 24 تیر 1387, 21:28 عصر
سلام دوست من
اين كد رو در form show قرار دادم جواب نگرفتم .
ميشه راهنماييم كنيد .
نام فيلد من number و adotable1

delphiprog3000
سه شنبه 25 تیر 1387, 09:18 صبح
نه. هر وقت بخواي شماره سند رو به كابر نشون بدي
احتمالاً FormShow

همونطور که دوستمون گفت. میتونه در رویدادهایی بزاری که بعد اون میخوای شماره سند به شما نمایش داده شه.

شما خودت میخوای بعد از چه رویدادی یا چه فرمی این کد اجرا شه؟

در ضمن در On Show فرم که قرار دادی چه مشکلی داشتی؟

موفق باشید.................

hentjanson
سه شنبه 25 تیر 1387, 09:44 صبح
ببين من مي خوام از همان اول اخرين عدد ثبت شده در بانك در maskedit1 به نمايش در بياد .
نام فيلدي كه اين عدد در ان ذخيره ميشه number هستش با اطلاعات فوق فكر كنم منظورم حرفمو رسونده باشم تا حدودي ؟

delphiprog3000
سه شنبه 25 تیر 1387, 10:01 صبح
دوست من این کد رو در
on show
فرمی که میخواهید در آن نمایش داده بشه



ADO.SQL.Text := 'Select Max(Number) As MaxNumber From Table';
ADO.Open;
if not isempty then
begin
maskedit1.text := IntotoStr(ADO.FieldByName('MaxNumber').Asinteger+1 );
end;
امیدوارم کارت راه بیوفته.
موفق باشید....

Touska
سه شنبه 25 تیر 1387, 10:01 صبح
از همان اول یعنی چه ؟

خوب شما تو فرمی که می خواهید سند رو ثبت کنید شماره سند رو تو Onshow صدا بزنید.

و برای بعد از ثبت باز هم صداش بزنید. اگر Error ی در کد نویسی شما می دهد بنویسد تا به جواب برسید.

موضوع به این سادگی رو دارید می پیچونید.

hentjanson
سه شنبه 25 تیر 1387, 10:14 صبح
سلام نميدونم شما درست ميفرماييد دارم پيچيدش ميكنم در شرايطي كه دوستمون گفتند .
بايد بگم من كد رو گزاشتم ولي به جوابي نرسيد براي رفع اشكال برنامه رو ميزارم براي مشاهده اينطور فكر كنم بهتره ؟

Parial
سه شنبه 25 تیر 1387, 12:55 عصر
دوست عزيز كدي كه delphiprog3000 ذكر كرده اند را در OnShow فرم خود قرار بده نه OnCreate حتماً درست مي شود

SYNDROME
سه شنبه 25 تیر 1387, 13:05 عصر
دوست عزيز كدي كه delphiprog3000 ذكر كرده اند را در OnShow فرم خود قرار بده نه OnCreate حتماً درست مي شود
اصولاً شماره سند را زمانی باید ایجاد کرد که کاربر دکمه ثبت را بزند.
شما بعد از ورود اطاعات و همینکه کاربر دکمه تایید را زد کد فوق را اجرا کرده و عدد به دست آمده را در فیلد شماره سند قرار دهید.
موفق باشید

hentjanson
سه شنبه 25 تیر 1387, 13:29 عصر
دوست من .
اين كد رو در onshow كوپي كردم بازم نشد


ADO.SQL.Text := 'Select Max(Number) As MaxNumber From Table1';
ADO.Open;
if not isempty then
begin
maskedit2.text := IntotoStr(ADO.FieldByName('MaxNumber').Asinteger+1 );
end;

اين خط رو پيغام خطا ميده


ADO.SQL.Text := 'Select Max(Number) As MaxNumber From Table1';

Touska
سه شنبه 25 تیر 1387, 17:19 عصر
شما لطف کنید عنوان خطا رو اینجا بگذارید ، ما که علم غیب نداریم که شما چی کار کردید.

که بخواهیم نظری بدیم.


Ado.Close;
Ado.Sql.Clear;
ADO.SQL.Add ('Select Max(Number) As MaxNumber From Table1');
ADO.Open;
IF Not Ado.IsEmpty Then
Maskedit2.text := IntotoStr(ADO.FieldByName('MaxNumber').Asinteger+1 );

hentjanson
سه شنبه 25 تیر 1387, 17:45 عصر
سلام من اين كد رو در برنامه وارد كردم ولي قابل اجرا نيست برنامه يعني فايل اجرايشو نميسازه ؟‌
نميدونم مسلما من منظور شما رو نفهميدم واسه اينكه به اين تايپيك پايان بدم برنامه رو ميزارم در صورت امكان در وقت آزادتان يك نگاهي بهش بكنيد و اشكال كار منو بهم بگيد .
متشكر از همه اساتيد از اينكه براي اين موضوع وقت گذاشتند .
در پست 18 اين تايپيك برنامه قابل دسترس اساتيد هستش . ضميمه شده

Touska
سه شنبه 25 تیر 1387, 18:08 عصر
شما توقع دارید با کامپوننتی به نام Ado که اصلا وجود خارجی نداره برنامه کار کنه.

و سپس شما باید از یک AdoQuery استفاده کنید برای اجرای Query نه از AdoTable

و اینکه شما احتیاج نیست Exe ساخته بشه خطای داده شده توسط دلفی را اینجا بنویسید.

ورژن Persian.Dll تون رو هم خیلی قدیمی است ورژن جدیدشو دانلود کنید از همین سایت.

موفق باشید :)

hentjanson
سه شنبه 25 تیر 1387, 21:29 عصر
تشكر دوست من از كمكتون .
در شرايط فعلي اگه يك سند پاك بشه چه اتفاقي ميوفته اينطوري هميشه بعضي اسناد و شماره ها نيست نميشه كاري كرد اگه شماره سندي پاك شد بشه از شمارش بعدها استفاده كرد ؟

nightHunter
چهارشنبه 26 تیر 1387, 09:12 صبح
تشكر دوست من از كمكتون .
در شرايط فعلي اگه يك سند پاك بشه چه اتفاقي ميوفته اينطوري هميشه بعضي اسناد و شماره ها نيست نميشه كاري كرد اگه شماره سندي پاك شد بشه از شمارش بعدها استفاده كرد ؟

در حسابداری شما مجاز به انجام چنین کاری نیستید . مگر اینکه کلیه شماره سندها رو مجددا اصلاح کنید ، برای اینکار میتونید پروسه ای را ایجاد کنید که بطور اتوماتیک شماره اسناد را مرتب کند .

فرض کنید شما 100 سند حسابداری در سال مالی جاری ثبت نموده اید ، کاربر سند شماره 25 را حذف میکند ، کاربر پس از انجام عملیات حذف سند ، سند جدیدی را ثبت میکند ، اگر شما این شماره سند را 25 شماره گذاری کنید ممکن است تاریخ ثبت سند بعد از تاریخ ثبت سند شماره 26 الی 100 باشد که این موضوع در حسابداری قابل قبول نیست . شما میبایست طی یک پروسه خودکار کلیه شماره سندها را از 26 الی 100 یه شماره به عقب برگردانید .

موفق باشید .

hentjanson
چهارشنبه 26 تیر 1387, 09:23 صبح
اين عمل بايد دستي صورت بگيره يا روشي براي اين كار وجود داره كه بشه اين اعداد رو مرتب كرد ؟