سؤال

أنا بحاجة إلى توليد الفواتير دفعة كبيرة والتي سوف تتحول إلى EDI ونقلها إلى المقر الرئيسي.هناك أمر الجدول مع جميع الأوامر القادمة.في بعض نقطة في اليوم يجب أن الاستيلاء على مجموعة (حوالي 1 كيلو) و توليد الفواتير.

  1. حيث سيكون أفضل مكان لإنشاء فاتورة الأرقام ؟ على SQL Server الخلفية ؟ أو الاستيلاء على دفعة في .صافي التطبيق ومن ثم توليد أرقام الفواتير هناك ؟ أرقام الفواتير يمكن أن تكون عشوائية ولكن يجب عدم تكرار (3-4 سنوات).لدي ماكس من 12 رقما للعب مع ويمكن ألفا رقمية.أين يمكنني العثور على معلومات حول توليد أرقام الفواتير.

ملاحظة:بينما أنا توليد الفواتير لا تحتاج إلى حساب النظام المجاميع و الضرائب.

وأود أن نقدر المدخلات الخاصة بك.

هل كانت مفيدة؟

المحلول

أرقام الفواتير يمكن أن ينظم المطالب القانونية (حيث أعيش أنهم بحاجة إلى أن تكون في تسلسل ، و لا أعتقد أنه قد يكون هناك ثغرات في تسلسل).

كنت كثيرا ما نرى أن الأرقام تشمل عنصر من شأنها أن نطاق عليها في الوقت المناسب (مثل السنة: 200903472).وبهذه الطريقة يمكنك تقليل المخاطر من استخدام نفس الرقم مرتين.

يقول لك ~1K الفواتير في اليوم.وهذا يعني أن الرقم 6-رقم الفاتورة سوف تغطي الاحتياجات الخاصة بك.حتى 4 أرقام العام تليها صفر-مبطن 6-الرقم رقم الفاتورة ربما ينبغي أن تحصل على الذهاب.

ربما أنا يجب قاعدة البيانات تولد لهم لضمان أن تكون فريدة من نوعها.

نصائح أخرى

إضافة جدول إلى قاعدة البيانات الذي يخزن قيمة آخر فاتورة رقم استخدامها إجراء مخزن إلى زيادة هذه القيمة والعودة قيمة جديدة يمكنك استخدامها في إنشاء الفاتورة.

عند حفظ فاتورة جديدة, الاتصال بـ SP للحصول على التالي رقم الفاتورة واحدة من آخر الأشياء التي يمكنك القيام به - بعد التحقق من صحة مرت ولكن immdiately قبل الكتابة إلى القرص - في محاولة للحد من خطر "الثقوب" في تسلسل الترقيم.

باستخدام متسلسلة معرفات هو على الارجح أفضل إلا إذا كنت تريد لها أن تكون عشوائية لسبب ما (مثل لأن الزبائن لن يكون قادرا على تخمين معرف الطلب من أمر آخر من تقريبا نفس الفترة الزمنية).باستخدام متسلسلة معرفات يسمح لك لقراءة الحالي ماكس ثم تحقق من أن لا شيء قد كتب في النطاق كنت أريد أن أكتب فقط قبل ارتكاب الأوامر من عملية دفعية.

إذا كنت لا تريد عبء التحقق من قاعدة البيانات و يمكن أن تكون على يقين من أن العمليات الأخرى لن تتدخل كنت قد تكون قادرة على الاستفادة من التاريخ والوقت.UtcNow و Base64 التحويل.حقا عالي الكعب التوضيح قد يكون شيئا مثل:

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Year, 
                                    (byte)DateTime.UtcNow.Month,
                                    (byte)DateTime.UtcNow.Day,
                                    (byte)DateTime.UtcNow.Hour,
                                    (byte)DateTime.UtcNow.Minute,
                                    (byte)DateTime.UtcNow.Second,
                                    (byte)DateTime.UtcNow.Millisecond })

أو

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Ticks })

كنت ربما يكون أكثر اهتماما في Base32 التحويل (يستخدم الحروف A-Z و الأرقام 2-7), على الرغم من عدم وجود الأم .صافي التحويل لذا يجب عليك البحث عن واحد.

أعتقد إذا كان هناك أي قوانين للحد من القواعد حول توليد فاتورة id, يمكن أن تكون ما تريد أن تكون.

الآن لدي مثال جيد عن:

في الحقيقة أنا برمجة نظام الفاتورة و كان بتوليد رمز معرف بالتتابع و لدي بعض الثغرات ، لأن عند العميل على سبيل المثال إلغاء العقد مع الشركة ، و كنت قد تولد 12 الفواتير مرة واحدة من قبل.

(لأن نحن هنا ISP شركة العقد يجب أن يكون 6 أو 12 أو 24 شهرا)

حصلت الفجوة في قاعدة البيانات الخاصة بي ، لأن مستخدمي النظام حذف إلغاء الفواتير.إذا كنت حقا بحاجة رقم تسلسلي لدي مشكلة مع القانون.و لدي العديد من الحالات الأخرى هنا أن أعطاني فجوة في متسلسلة رقم الفاتورة.

أنا حقا لا أعرف كيفية تجنب هذا النوع من المشاكل يسبب وهناك العديد من الحالة التي يكون فيها ذلك.أي فكرة ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top