اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

التطبيق اهداء الى منتدانا الحبيب ورواد المنتدى 

العمل حتى يخرج بهذه الصورة يعلم الله وحده الجهد المبذول به اسال الله تعالى ان يتقبل هذا العمل صدقة جارية الى ما شاء الله تعالى 

ms access becomes an authorized e-invoicing solution provider in Saudi Arabia by www.officena.net
Start your e-invoicing journey

حسب متطلبات هيئة الزكاة والضريبة والجمارك السعودية

يتم قراءة الرمز الناتج ان شاء الله عبر القارىء الرسمي الخاص بالهيئة ( تطبيق جوال ) حمل من هنا : التطبيق الرسمي لهيئة الزكاة والضريبة والجمارك
يتم قراءة الرمز الناتج ان شاء الله عبر قارىء خاص ( تطبيق جوال ) حمل من هنا تطبيق قرائة رمز الاستجابة طبقات لمتطلبات هيئة الزكاة والضريبة والجمارك

التطبيق المقدم لكم تمت تجربته وهو متوافق مع النواتين 32 , 64 

تم تصميم الاكواد داخل روتين عام ليسهل التعامل معها بكل سهولة ممكنة

حاولت جاهدا جمع الاكواد المستخدمة فى موديول ليسهل نقله

يتم التعامل مع الروتين باسناد فقط اسماء الحقول من النموذج المستخدم والتى يمكن تغير اسمائها تبعا لتصميمك كالاتى 

Call CreateInvoice(ID, SellerName, VatNo, TimeStamp, InvoiceWithVat, VatTotal)

ID                          >>-----> اسم الحقل الدال على رقم الفاتورة وهذا ليتم تسمية ملف رمز الاستجابة الناتج بناء عليه

SellerName           >>-----> اسم الحقل الدال على اسم البائع

VatNo                    >>-----> اسم الحقل الدال على  الرقم الضريبي

TimeStamp           >>-----> اسم الحقل الدال على الوقت وتاريخ انشاء الفاتورة

InvoiceWithVat    >>-----> اسم الحقل الدال على القيمة الاجمالية للفاتورة

VatTotal                 >>-----> اسم الحقل الدال على القيمة الاجمالية لمبلغ الضريبة فقط

بعد تشفير البيانات يتم اسناد الشفرة الى متغير عام باسمstrHashCode  والذى من خلاله يت حفظ البيانات المشفرة داخل الجدول تبعا لكل سجل 

----------------------------------------------

الية العمل

بعد اسناد اسماء الحقول الى الروتين يتم تمرير البيانات من تلك الحقول الى الملف التنفيذى الملحق مع القاعدة والذى بدورة يقوم بانشاء كل من 

1- رمز الاستجابة السريع بعد تشفير البيانات طبقا للمطلبات from string to hex to base64

2- انشاء ملف نص به تشفير البيانات 

بعد ذلك تقوم باقى الاكواد بجلب البيانات المشفرة من ملف النص واسنادها الى المتغير الذى تم تخصيصه لذلك

---------------------------------------------

تفاصيل الاكواد داخل الموديول كالتالى 

الروتين MkDir لعمل المجلدات عند الحاجة 

دوال الـ API الخاصة بـ ShellWait والمتوافقة مع كلتا النواتان 32 , 64 وتمت التجربة بنجاح على اوفيس 32 تارة واوفيس 64 تارة اخرى بفضل الله بنجاح

حيث يتم ارسال البيانات من الحقول الى الملف التنفيذى الملحق من خلال الروتين Shell_n_Wait ليتم انشاء رمز الاستجابة السريع من خلال الروتين الخاص به وهو CreateInvoice

وانشاء الملف النصى بجوار الملف التنفيذى فى نفس المسار لالحاق البيانات المشفرة طبقا للمطلبات from string to hex to base64

وبعد ذلك يتم جلب البيانات المشفرة من خلال الروتين ReadFileToText ولابد من استخلاص التشفير من خلال الروتين StripSpChars للاحتفاظ بالنص دون اى زيادات

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

 

الملف التنفيذى تم عمله من خلال الفيجوال دوت نت ليقوم بتحويل النص طبقا للمطلبات from string to hex to base64 وتم دمج ملفات الـ Dll الخاصة بانشاء رمز الاستجابة بداخل الملف التنفيذى لسهولة التعامل معه من خلال الاكسس ليكون ملف تنفيذى واحد فقط يتم التعامل معه من خلال الـ  Command Line دون الحاجة لتثبيت او تسجيل او الاستعانة بأى مكتبات خارجية او حتى ملحقة بالاكسس وذلك لسهولة نقل الموديول الى اى قاعدة دون التقيد باى مكتبات 

---------------------------------------------

تنبيه هام جدا جدا جدا

  • بجوار قاعدة البيانات فى نفس مسارها مجلد باسم  KSA-QR-Tool  لايمكن تغيير اسم المجلد والا يحدث خلل وان استدعت الحاجة تغيير الاسم يجب ذلك داخل المدويول
  • يتم كذلك انشاء ملف نصى اليا داخل المجلد KSA-QR-Tool لذلك يجب تحرى الحذر عند محاولة تغيير اسم المجلد داخل الموديول لذلك يرجى عدم محاولة تغير اسم المجلد
  • كذلك داخل المجلد السابق ذكرة الملف التنفيذى KSAQR.exe لا تحاول تغيير اسم الملف لان الاكواد كذلك تتعامل مع هذا الملف من خلال اسمه
  • كذلك لا يمكن نقل المجلد او الملف من مسار قاعدة البيانات الا بالتعديل على الاكواد

وفى الختام فضلا وكرما وليس امرا الرجاء الاهتمام بالرد بما يفيد نتيجة تجربتكم الشخصية وتقييم تلك التجربة

فلا تبخلوا علينا بذلك... لكم منا خالص الشكر واتمنى لكم تجربة ممتعة

ومن يريد طريقتى والتى احبها وافضلها وتعلمتها من استاذى الجليل ومعلمى الجليل الاستاذ @jjafferr :fff: بتحميل الملف التنفيذى داخل القاعدة للتأكد دائما من عدم حذفه لا يتردد فى طلب ذلك فقط حاولت تقديم القاعدة بأبسط شكل حتى يقف كل من يريد استخدامها او نقلها الى تطبيقه الخاص على الاكواد المهمة فقط من خلال موديول واحد فقط تيسيرا وتسهيلا عليه

1088272705_Screenshot_------_com.zatca_vat.jpg.d25b3d9d2280e6243880072f440f4bda.jpg

 وحتى تعم الفائدة هذه الاكواد المستخدمة فى الملف التنفيذى الذى تم انشاؤه من خلال الـ فيجوال دوت نت 

بناء على رغبة استاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ @ابوخليل :fff: لمن يريد التعلم من اكواد التشفير

وبناء على طلب استاذى القدير @ابوآمنة 

Imports System.Drawing
Imports System.IO
Imports System.Text
Imports QRCoder

Module Module1

    Sub Main()
        Try
            Dim sellerName As String = ""
            Dim vatNumber As String = ""
            Dim timeStamp As String = ""
            Dim invoiceTotal As String = ""
            Dim vatTotal As String = ""
            Dim imagePath As String = ""
            Dim filePath As String = ""

            If My.Application.CommandLineArgs.Count >= 6 Then
                sellerName = My.Application.CommandLineArgs(0)
                vatNumber = My.Application.CommandLineArgs(1)
                timeStamp = My.Application.CommandLineArgs(2)
                invoiceTotal = My.Application.CommandLineArgs(3)
                vatTotal = My.Application.CommandLineArgs(4)
                imagePath = My.Application.CommandLineArgs(5)
                filePath = My.Application.CommandLineArgs(6)
            Else
                Environment.Exit(0)
            End If


            If Not String.IsNullOrEmpty(filePath) Then
                File.WriteAllText(filePath, String.Join(" ", sellerName, vatNumber, timeStamp, invoiceTotal, vatTotal), Encoding.UTF8)
            End If
            End


            Dim tlvInvoice = CreateInvoice(sellerName, vatNumber, timeStamp, invoiceTotal, vatTotal)
            Dim qrGenerator As New QRCodeGenerator()
            Dim qrData As QRCodeData = qrGenerator.CreateQrCode(tlvInvoice, QRCodeGenerator.ECCLevel.Q)
            Dim qrCode As QRCode = New QRCode(qrData)
            Dim qrCodeImage As Bitmap = qrCode.GetGraphic(20)
            qrCodeImage.Save(imagePath)
            If Not String.IsNullOrEmpty(filePath) Then
                File.WriteAllText(filePath, tlvInvoice, Encoding.UTF8)
            End If
        Catch ex As Exception
        End Try
    End Sub

    Function CreateInvoice(sellerName As String, vatNumber As String, timeStamp As String, invoiceTotal As String, vatTotal As String) As String
        Dim invoiceHex As String = ""
        For i = 1 To 5
            Dim txt As String = ""
            Select Case i
                Case 1
                    txt = sellerName
                Case 2
                    txt = vatNumber
                Case 3
                    txt = timeStamp
                Case 4
                    txt = invoiceTotal
                Case 5
                    txt = vatTotal
            End Select
            Dim hexTxt As String = StringToHex(txt)
            Dim hexLen As String = Hex(Encoding.UTF8.GetBytes(txt).Length)
            If hexLen.Length = 1 Then
                hexLen = "0" & hexLen
            End If
            invoiceHex = invoiceHex & "0" & i & hexLen & hexTxt
        Next
        Return HexToBase64(invoiceHex)
    End Function

    Function StringToHex(txt As String) As String
        Dim b As Byte() = Encoding.UTF8.GetBytes(txt)
        Return BitConverter.ToString(b).Replace("-", "")
    End Function

    Function HexToBase64(txt As String) As String
        Dim bytes = New Byte((txt.Length \ 2) - 1) {}
        For i = 0 To bytes.Length - 1
            Dim mi = txt.Substring(i * 2, 2)
            bytes(i) = Convert.ToByte(mi, 16)
        Next i
        Return Convert.ToBase64String(bytes)
    End Function

End Module

 

E-Invoicing.zip

Ksa Qr 32x 64x 2007 to 2021 _Last Version.zip

  • Like 10
  • Thanks 4
رابط هذا التعليق
شارك

  • 3 months later...
  • 7 months later...

السلام عليكم اخي ابو جودي 🙂

 

تم فتح موضوع جديد للمرحلة الثانية من متطلبات الفاتورة الالكترونية في المملكة العربية السعودية ، فرجاء المشاركة بإثراء الموضوع ووضع حلول له 🙂

 

.

جعفر

رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
×
×
  • اضف...

Important Information