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

برنامج الاكسس والفاتورة الإلكترونية لهيئة الزكاة والدخل ، وامثالها (معدل)


eissa_l
إذهب إلى أفضل إجابة Solved by د.كاف يار,

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

2 ساعات مضت, eissa_l said:

هل واجهات أكسس تدعم  واجهات ال 

API

وإذا أحد ممكن يعطينا نبذة عن طريقتها وتطبيقها على برنامج محاسبي واجهاتة بالأكسس

وضح قصدك "تدعم API" !

هل تقصد دوال الويندوز Windows API ؟

هل تقصد قراءة البيانات من موقع ويب عن طريق API ؟

او ماذا تقصد

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

5 ساعات مضت, eissa_l said:

هل واجهات أكسس تدعم  واجهات ال 

API

وإذا أحد ممكن يعطينا نبذة عن طريقتها وتطبيقها على برنامج محاسبي واجهاتة بالأكسس

لا يوجد واجهات API هي فقط خاصية

ما ذا تريد بالضبط ؟

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

اقصد API الذي يحتوي دوال البرنامج او الوسيط بين الواجهات وقاعدة البيانات 

هل يقبل مع واجهات الإكسس او لا 

واذا يقبل تتكرموا تشرحوا لي الطريقة 

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

4 دقائق مضت, eissa_l said:

اقصد API الذي يحتوي دوال البرنامج او الوسيط بين الواجهات وقاعدة البيانات 

هل يقبل مع واجهات الإكسس او لا 

واذا يقبل تتكرموا تشرحوا لي الطريقة 

كل شي يقبل لكن انت ايش تحتاج بالضبط

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

عندي برنامج محاسبي وشغالة علية كذا مؤسسة في السعودية

بس الان طلع قرار ان الدولة تحتاج يكون البرنامج يقبل ال API 

عشان حتنزل انتجريشنات تنربط بالبرنامج ويكون عندها اكسس 

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

  • أفضل إجابة
8 دقائق مضت, eissa_l said:

عندي برنامج محاسبي وشغالة علية كذا مؤسسة في السعودية

بس الان طلع قرار ان الدولة تحتاج يكون البرنامج يقبل ال API 

عشان حتنزل انتجريشنات تنربط بالبرنامج ويكون عندها اكسس 

اذا يلزم انك تحصل على المكتبة عشان تثبتها و تقدر من خلالها تستدعي API عشان تتصل بالسيرفر سواء كان في الزكاة و الدخل او غيره

لكن انصحك انك تشتغل على ASP.Net أو VB.Net أو #C

راح تجد سهولة في التعامل مع جميع خصائص API و سهلة في تثبيتها

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

15 ساعات مضت, eissa_l said:

ممكن تعطينا فكرة مختصرة عن طريقة استدعاء المكتبة 

وكيف ممكن استدعي او اتصل بالسيرفر !!

يختلف استدعاء المكتبة من لغة برمجة لأخرى..

وكذلك الإتصال، حدد اللغة التي تريد العمل عليها، ثم ابحث عن طريقة الاتصال واستدعاء المكتبة

فـ google سيعطيك الاجابات الكافية لذلك

تم تعديل بواسطه SEMO.Pa3x
  • Like 1
رابط هذا التعليق
شارك

17 ساعات مضت, د.كاف يار said:

اذا يلزم انك تحصل على المكتبة عشان تثبتها و تقدر من خلالها تستدعي API عشان تتصل بالسيرفر سواء كان في الزكاة و الدخل او غيره

هناك حوالي 3 - 4 اسأله حديثة عن هذا الموضوع ، ولم تلقى اجابة ، والجميع يبحث عن طريقة لربط برنامجهم المعمول بالاكسس ، بسيرفر هيئة الزكاة و الدخل

او

 

فياريت بستطيع تقديم شيء بالاكسس يخدم غرضهم 🙂

 

اخوي حسنين @SEMO.Pa3x ساعدني في بعض المواضيع بعمل وسيط بين الاكسس وبين البرنامج/الجهاز الاخر ، كالتالي:

  1. اخذ API او SDK البرنامج الاخر او الجهاز الاخر والمعمول على لغات dot net ، 
  2. عمل برنامج وسيط بين الاكسس والبرنامج/الجهاز الآخر ،
  3. نرسل متغيرات/parameter معينة الى هذا الوسيط عن طريق Shell و Command Line ، 
  4. ويقوم الوسيط بتمرير المتغيرات الى البرنامج/الجهاز ، ويعطينا النتيجة 🙂

اما اخوي حسين @د.كاف يار فله باع في هذه اللغة كذلك 🙂

ولا ننسى ان هناك طرق لإستعمال مكتبات Net. من داخل الاكسس كذلك 🙂

 

جعفر

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

40 دقائق مضت, jjafferr said:

هناك حوالي 3 - 4 اسأله حديثة عن هذا الموضوع ، ولم تلقى اجابة ، والجميع يبحث عن طريقة لربط برنامجهم المعمول بالاكسس ، بسيرفر هيئة الزكاة و الدخل

او

 

فياريت بستطيع تقديم شيء بالاكسس يخدم غرضهم 🙂

 

اخوي حسنين @SEMO.Pa3x ساعدني في بعض المواضيع بعمل وسيط بين الاكسس وبين البرنامج/الجهاز الاخر ، كالتالي:

  1. اخذ API او SDK البرنامج الاخر او الجهاز الاخر والمعمول على لغات dot net ، 
  2. عمل برنامج وسيط بين الاكسس والبرنامج/الجهاز الآخر ،
  3. نرسل متغيرات/parameter معينة الى هذا الوسيط عن طريق Shell و Command Line ، 
  4. ويقوم الوسيط بتمرير المتغيرات الى البرنامج/الجهاز ، ويعطينا النتيجة 🙂

اما اخوي حسين @د.كاف يار فله باع في هذه اللغة كذلك 🙂

ولا ننسى ان هناك طرق لإستعمال مكتبات Net. من داخل الاكسس كذلك 🙂

 

جعفر

للأسف المتطلبات كثيرة جدا و عشان اقدر اشتغل عليها لابد يكون معاي معلومات المنشأة الخاصة بالزكاة و الدخل

لأن الفاتورة النهائي لابد تكون بأحد الصيغتين XMIL أو PDF 

 

و هذا رابط مشروع الفوترة الالتكرونية

مشروع الضوابط والمتطلبات والمواصفات الفنية والقواعد الإجرائية اللازمة لتنفيذ أحكام لائحة الفوترة الإلكترونية

لكن في كل الأحوال كل الطرق سهلة بستثناء الأكسس و راح ابدء اشتغل على هذا النظام على C#.net

و راح اضيفه في المنتدى حال الانتهاء منه انشاء الله

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

9 دقائق مضت, د.كاف يار said:

و عشان اقدر اشتغل عليها لابد يكون معاي معلومات المنشأة الخاصة بالزكاة و الدخل

اذا ممكن تخبرنا شو البيانات المطلوبة ، حتى يوفرها المهتمين بربط برنامجهم الاكسس ، بهيئة الزكاة والدخل 🙂

 

13 دقائق مضت, د.كاف يار said:

و راح ابدء اشتغل على هذا النظام على C#.net

جميل جدا ،

ولكن رجاء حاول ان تجعل برنامجك يعمل كبرنامج مستقل ،

و

كبرنامج يمكن ان يتم التحكم به عن طريق Command line وارسال المتغيرات/Parameters عن طريق برنامج الاكسس او اي برنامج آخر 🙂

 

جعفر

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

58 دقائق مضت, jjafferr said:

هناك حوالي 3 - 4 اسأله حديثة عن هذا الموضوع ، ولم تلقى اجابة ، والجميع يبحث عن طريقة لربط برنامجهم المعمول بالاكسس ، بسيرفر هيئة الزكاة و الدخل

او

 

فياريت بستطيع تقديم شيء بالاكسس يخدم غرضهم 🙂

 

اخوي حسنين @SEMO.Pa3x ساعدني في بعض المواضيع بعمل وسيط بين الاكسس وبين البرنامج/الجهاز الاخر ، كالتالي:

  1. اخذ API او SDK البرنامج الاخر او الجهاز الاخر والمعمول على لغات dot net ، 
  2. عمل برنامج وسيط بين الاكسس والبرنامج/الجهاز الآخر ،
  3. نرسل متغيرات/parameter معينة الى هذا الوسيط عن طريق Shell و Command Line ، 
  4. ويقوم الوسيط بتمرير المتغيرات الى البرنامج/الجهاز ، ويعطينا النتيجة 🙂

اما اخوي حسين @د.كاف يار فله باع في هذه اللغة كذلك 🙂

ولا ننسى ان هناك طرق لإستعمال مكتبات Net. من داخل الاكسس كذلك 🙂

 

جعفر

حسناً، سأجيب على الأسئلة قدر استطاعتي وسيكون الشرح على Visual Studio .NET

اقتباس

اخذ API او SDK البرنامج الاخر او الجهاز الاخر والمعمول على لغات dot net

الـ SDK هو عبارة عن reference يتم اضافته لمشروع الـ NET. على هيئة ملف dll.

كيف نقوم بإضافته لمشروعنا ؟

image.png.62840e96496f6f46756697bbcfd5c206.png

image.png.1e4094fd3819160eba986b2d28514eb4.png

وسيصبح بجانب البرنامج عند عمل Compile أي إن البرنامج لن يعمل بدون هذه المكتبة.

وهذه المكتبات التي قلنا انها ملفات dll. تكون مكتوبة حصراً بلغة NET. وهي عبارة عن classes / modules

تمرر لها مدخلاتك تقوم هية بالفلترة وتعطيك المخرجات وانت بدورك ستقوم بإستقبالها بحسب اللغة المقابلة.

 

اقتباس

عمل برنامج وسيط بين الاكسس والبرنامج/الجهاز الآخر

حسناً، عمل الوسيط وإرسال المعلومات له ليس بالشيء الصعب لكن الصعب هو استلام البيانات من الوسيط..

أولا: نقوم بعمل الوسيط...

سنقوم بعمل تطبيق وظيفته نرسل له عبارة معينة فيرد علينا بعبارة أخرى بلغة NET.

image.png.06c6c13eacb447702b16a35121b8554c.png

 

Module Module1

    Sub Main()
        For Each arg As String In My.Application.CommandLineArgs
            Select Case arg
                Case "hi"
                    Console.WriteLine("Hi, How are you !")
                Case "how old are you"
                    Console.WriteLine("i'm 25 years old")
                Case Else
                    Console.WriteLine("ask me !")
            End Select
        Next
    End Sub

End Module

لاحظ الحلقة Select Case اذا قلنا Hi يجيبنا Hi, How are you ..الخ من باقي التخمينات في الحلقة.

السطر الأهم هو Console.WriteLine هو سيقوم بكتابة الإجابة على الكونسول وسنقوم بقراءتها

المشكلة ان الكونسول ( cmd.exe ) لا يدعم اللغة العربية ! ممكن نقوم بحل المشكلة بإستبدال الحروف العربية

بإنكليزية مثال ( A = أ ) وسنقوم بالأكسس باستبدال الأنكليزي بالعربي وارجاع الحروف لإصلها

اضن ان الفكرة وصلت..

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

الآن مرحلة ارسال وإستقبال البيانات في الأكسس

والطريقة الأفضل هي Windows API والدوال المطلوبة هي:

CreatePipe

CreateProcessA

ReadFile

CloseHandle

WaitForSingleObject

GetExitCodeProcess

GetStartupInfo

GetFileSize

لتفاصيل أكثر، اضغط على إسم الدالة أرفقت لكم مصادر من MSDN

Option Compare Database
Option Explicit

'--------------------------------------------------------
'c0ded bY  : SEMO.Pa3x
'telegram  : semo_pa4x
'facebook  : https://www.facebook.com/Nisr.Aln3jaf
'last edit : 26/4/2019
'--------------------------------------------------------

Private Type SECURITY_ATTRIBUTES
    nLength    As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

Private Type PROCESS_INFORMATION
    hProcess   As Long
    hThread    As Long
    dwProcessId As Long
    dwThreadId As Long
End Type

Private Type STARTUPINFO
    cb         As Long
    lpReserved As Long
    lpDesktop  As Long
    lpTitle    As Long
    dwX        As Long
    dwY        As Long
    dwXSize    As Long
    dwYSize    As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags    As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput  As Long
    hStdOutput As Long
    hStdError  As Long
End Type

Private Const WAIT_INFINITE         As Long = (-1&)
Private Const STARTF_USESHOWWINDOW  As Long = &H1
Private Const STARTF_USESTDHANDLES  As Long = &H100
Private Const SW_HIDE               As Long = 0&

Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long

Private Function Redirect(szBinaryPath As String, szCommandLn As String) As String

    Dim tSA_CreatePipe              As SECURITY_ATTRIBUTES
    Dim tSA_CreateProcessPrc        As SECURITY_ATTRIBUTES
    Dim tSA_CreateProcessThrd       As SECURITY_ATTRIBUTES
    Dim tSA_CreateProcessPrcInfo    As PROCESS_INFORMATION
    Dim tStartupInfo                As STARTUPINFO
    Dim hRead                       As Long
    Dim hWrite                      As Long
    Dim bRead                       As Long
    Dim abytBuff()                  As Byte
    Dim lngResult                   As Long
    Dim szFullCommand               As String
    Dim lngExitCode                 As Long
    Dim lngSizeOf                   As Long

    tSA_CreatePipe.nLength = Len(tSA_CreatePipe)
    tSA_CreatePipe.lpSecurityDescriptor = 0&
    tSA_CreatePipe.bInheritHandle = True
    
    tSA_CreateProcessPrc.nLength = Len(tSA_CreateProcessPrc)
    tSA_CreateProcessThrd.nLength = Len(tSA_CreateProcessThrd)
    
    If (CreatePipe(hRead, hWrite, tSA_CreatePipe, 0&) <> 0&) Then
        tStartupInfo.cb = Len(tStartupInfo)
        GetStartupInfo tStartupInfo
        
        With tStartupInfo
            .hStdOutput = hWrite
            .hStdError = hWrite
            .dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
            .wShowWindow = SW_HIDE
        End With
        
        szFullCommand = """" & szBinaryPath & """" & " " & szCommandLn
        lngResult = CreateProcess(0&, szFullCommand, tSA_CreateProcessPrc, tSA_CreateProcessThrd, True, 0&, 0&, vbNullString, tStartupInfo, tSA_CreateProcessPrcInfo)
        
        If (lngResult <> 0&) Then
            lngResult = WaitForSingleObject(tSA_CreateProcessPrcInfo.hProcess, WAIT_INFINITE)
            lngSizeOf = GetFileSize(hRead, 0&)
            If (lngSizeOf > 0) Then
                ReDim abytBuff(lngSizeOf - 1)
                If ReadFile(hRead, abytBuff(0), UBound(abytBuff) + 1, bRead, ByVal 0&) Then
                    Redirect = StrConv(abytBuff, vbUnicode)
                End If
            End If
            Call GetExitCodeProcess(tSA_CreateProcessPrcInfo.hProcess, lngExitCode)
            CloseHandle tSA_CreateProcessPrcInfo.hThread
            CloseHandle tSA_CreateProcessPrcInfo.hProcess
            
            If (lngExitCode <> 0&) Then Err.Raise vbObject + 1235&, "GetExitCodeProcess", "Non-zero Application exist code"
            
            CloseHandle hWrite
            CloseHandle hRead
        Else
            Err.Raise vbObject + 1236&, "CreateProcess", "CreateProcess Failed, Code: " & Err.LastDllError
        End If
    End If
End Function

Public Function MainRedirect(param As String)
    Dim resp As String
    resp = Redirect(CurrentProject.Path & "\" & "app.exe", param)
    MainRedirect = resp
End Function

 

طبعاً app.exe هو اسم التطبيق الذي قمنا بعمله في الأعلى ووضعناه بجانب قاعدة بيانات الأكسس.

الإستدعاء:

Private Sub cmd_send_Click()
    MsgBox MainRedirect("hi")
End Sub

النتيجة:

image.png.e28ab9bcb82fb349feb9fcd355a13d8e.png

 

وأخيراً، استميحك عذراً في الإجابة عن هذا السؤال الموجه لأخي @د.كاف يار

اقتباس

ولا ننسى ان هناك طرق لإستعمال مكتبات Net. من داخل الاكسس كذلك 🙂

أغلب الطرق فاشلة وغير فعالة وهي بتحويل البرامج المكتوبة في الدوت نت الى مكتبات بصيغة tlb.

لكن أؤكد لك انها طرق فاشلة وغير فعالة، هناك طريقة وجدتها سابقا وهي

تحميل مكتبة دوت نت في لغات غير الدوت نت - Load vb.net to unmanaged process

https://www.dev-point.com/vb/threads/389438

هذا هو الدرس، لمن يريد قراءته..

وأخيراً، ارجو ان اكون قد وفقت بإيصال الفكرة ولو بالشيء اليسير

تحياتي لك يا مُعلمي @jjafferr

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

1 ساعه مضت, eissa_l said:

يعني الأن من الأسهل لي انة انقل واجهات قاعدتي على لغة الفيجول بيسك او c# او php

همممم

طبعا اذا عملت هذا ، فلا حاجة لك بالاجابات التي سنحصل عليها من هذه الموضوع 🙂

ولكني ارى اننا اصبحنا خطوة اقرب الى المطلوب ، طبعا للذين يريدون ان يستخدمون برنامجهم الاكسس للتخاطب مع موقع هيئة الزكاة والدخل 🙂

 

1 ساعه مضت, SEMO.Pa3x said:

المشكلة ان الكونسول ( cmd.exe ) لا يدعم اللغة العربية

ممكن ان نرسل النتائج الى ملف txt ، ومنه الى نأخذ البيانات بالعربي ،

او نعمل دالة تأخذ النتائج الحروف بصيغة AscW ومن ثم الى ChrW في برنامجنا 🙂

 

1 ساعه مضت, SEMO.Pa3x said:

وأخيراً، ارجو ان اكون قد وفقت بإيصال الفكرة ولو بالشيء اليسير

شكرا جزيلا اخوي حسنين على هذا الاسهاب في التوضيح ، ولا غنى لنا عنك في المستجدات هنا ، ان شاء الله 🙂

 

جعفر

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

12 ساعات مضت, jjafferr said:

ن نرسل النتائج الى ملف txt ، ومنه الى نأخذ البيانات بالعربي ،

او نعمل دالة تأخذ النتائج الحروف بصيغة AscW ومن ثم الى ChrW في برنامجنا 🙂

لا حاجة لـ AscW دعنا نستخدم الفنكشنات التي تم طرحها في موضوع الترجمة هنا:

'فنكشن فك التشفير
Function DecodeQP2(s As String) As String
    Dim i As Long
    Dim p1 As Long
    Dim p2 As Long
    Dim r As String
    i = 2
    Do While i < Len(s)
        Select Case Mid(s, i, 1)
            Case "0" To "7"
            r = r & Chr(CLng("&H" & Mid(s, i, 2)))
            Case "C", "D"
            p1 = CLng("&H" & Mid(s, i, 2)) - 192
            i = i + 3
            p2 = CLng("&H" & Mid(s, i, 2)) - 128
            r = r & ChrW(64 * p1 + p2)
            Case Else
            ' Not handled
        End Select
        i = i + 3
    Loop
    DecodeQP2 = r
End Function

'فنكشن التشفير
Function EncodeQP2(s As String) As String
    Dim i As Long
    Dim p1 As Long
    Dim p2 As Long
    Dim r As String
    Dim n As Long
    For i = 1 To Len(s)
        n = AscW(Mid(s, i, 1))
        If n < 128 Then
            r = r & "%" & Hex(n)
        ElseIf n < 2048 Then
            p1 = n \ 64
            r = r & "%" & Hex(p1 + 192)
            p2 = n Mod 64
            r = r & "%" & Hex(p2 + 128)
        Else
            
        End If
    Next i
    EncodeQP2 = r
End Function

 

الـ Module في الأكسس:

Option Compare Database
Option Explicit

'--------------------------------------------------------
'c0ded bY  : SEMO.Pa3x
'telegram  : semo_pa4x
'facebook  : https://www.facebook.com/Nisr.Aln3jaf
'last edit : 26/4/2019
'--------------------------------------------------------

Private Type SECURITY_ATTRIBUTES
    nLength    As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

Private Type PROCESS_INFORMATION
    hProcess   As Long
    hThread    As Long
    dwProcessId As Long
    dwThreadId As Long
End Type

Private Type STARTUPINFO
    cb         As Long
    lpReserved As Long
    lpDesktop  As Long
    lpTitle    As Long
    dwX        As Long
    dwY        As Long
    dwXSize    As Long
    dwYSize    As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags    As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput  As Long
    hStdOutput As Long
    hStdError  As Long
End Type

Private Const WAIT_INFINITE         As Long = (-1&)
Private Const STARTF_USESHOWWINDOW  As Long = &H1
Private Const STARTF_USESTDHANDLES  As Long = &H100
Private Const SW_HIDE               As Long = 0&

Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long

Private Function Redirect(szBinaryPath As String, szCommandLn As String) As String
    
    Dim tSA_CreatePipe              As SECURITY_ATTRIBUTES
    Dim tSA_CreateProcessPrc        As SECURITY_ATTRIBUTES
    Dim tSA_CreateProcessThrd       As SECURITY_ATTRIBUTES
    Dim tSA_CreateProcessPrcInfo    As PROCESS_INFORMATION
    Dim tStartupInfo                As STARTUPINFO
    Dim hRead                       As Long
    Dim hWrite                      As Long
    Dim bRead                       As Long
    Dim abytBuff()                  As Byte
    Dim lngResult                   As Long
    Dim szFullCommand               As String
    Dim lngExitCode                 As Long
    Dim lngSizeOf                   As Long
    
    tSA_CreatePipe.nLength = Len(tSA_CreatePipe)
    tSA_CreatePipe.lpSecurityDescriptor = 0&
    tSA_CreatePipe.bInheritHandle = True
    
    tSA_CreateProcessPrc.nLength = Len(tSA_CreateProcessPrc)
    tSA_CreateProcessThrd.nLength = Len(tSA_CreateProcessThrd)
    
    If (CreatePipe(hRead, hWrite, tSA_CreatePipe, 0&) <> 0&) Then
        tStartupInfo.cb = Len(tStartupInfo)
        GetStartupInfo tStartupInfo
        
        With tStartupInfo
            .hStdOutput = hWrite
            .hStdError = hWrite
            .dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
            .wShowWindow = SW_HIDE
        End With
        
        szFullCommand = """" & szBinaryPath & """" & " " & szCommandLn
        lngResult = CreateProcess(0&, szFullCommand, tSA_CreateProcessPrc, tSA_CreateProcessThrd, True, 0&, 0&, vbNullString, tStartupInfo, tSA_CreateProcessPrcInfo)
        
        If (lngResult <> 0&) Then
            lngResult = WaitForSingleObject(tSA_CreateProcessPrcInfo.hProcess, WAIT_INFINITE)
            lngSizeOf = GetFileSize(hRead, 0&)
            If (lngSizeOf > 0) Then
                ReDim abytBuff(lngSizeOf - 1)
                If ReadFile(hRead, abytBuff(0), UBound(abytBuff) + 1, bRead, ByVal 0&) Then
                    Redirect = StrConv(abytBuff, vbUnicode)
                End If
            End If
            Call GetExitCodeProcess(tSA_CreateProcessPrcInfo.hProcess, lngExitCode)
            CloseHandle tSA_CreateProcessPrcInfo.hThread
            CloseHandle tSA_CreateProcessPrcInfo.hProcess
            
            If (lngExitCode <> 0&) Then Err.Raise vbObject + 1235&, "GetExitCodeProcess", "Non-zero Application exist code"
            
            CloseHandle hWrite
            CloseHandle hRead
        Else
            Err.Raise vbObject + 1236&, "CreateProcess", "CreateProcess Failed, Code: " & Err.LastDllError
        End If
    End If
End Function

Public Function MainRedirect(param As String)
    Dim resp As String
    resp = Redirect(CurrentProject.Path & "\" & "app.exe", EncodeQP2(param))
    MainRedirect = DecodeQP2(resp)
End Function

Function DecodeQP2(s As String) As String
    Dim i As Long
    Dim p1 As Long
    Dim p2 As Long
    Dim r As String
    i = 2
    Do While i < Len(s)
        Select Case Mid(s, i, 1)
            Case "0" To "7"
            r = r & Chr(CLng("&H" & Mid(s, i, 2)))
            Case "C", "D"
            p1 = CLng("&H" & Mid(s, i, 2)) - 192
            i = i + 3
            p2 = CLng("&H" & Mid(s, i, 2)) - 128
            r = r & ChrW(64 * p1 + p2)
            Case Else
            ' Not handled
        End Select
        i = i + 3
    Loop
    DecodeQP2 = r
End Function

Function EncodeQP2(s As String) As String
    Dim i As Long
    Dim p1 As Long
    Dim p2 As Long
    Dim r As String
    Dim n As Long
    For i = 1 To Len(s)
        n = AscW(Mid(s, i, 1))
        If n < 128 Then
            r = r & "%" & Hex(n)
        ElseIf n < 2048 Then
            p1 = n \ 64
            r = r & "%" & Hex(p1 + 192)
            p2 = n Mod 64
            r = r & "%" & Hex(p2 + 128)
        Else
            
        End If
    Next i
    EncodeQP2 = r
End Function

 

الإستدعاء:

Private Sub cmd_send_Click()
    MsgBox MainRedirect("السلام عليكم")
End Sub

 

لاحظ ان النص تم تشفيره وفكه في الـ Module وليس في الإستدعاء..

 

التطبيق المساعد بلغة NET.

Module Module1

    Sub Main()

        For Each arg As String In My.Application.CommandLineArgs
            Select Case DecodeQP2(arg)
                Case "السلام عليكم"
                    Console.WriteLine(EncodeQP2("عليكم السلام ورحمة الله وبركاته"))
                Case "كيف حالك"
                    Console.WriteLine(EncodeQP2("الحمدلله"))
                Case Else
                    Console.WriteLine(EncodeQP2("لم تقم بإرسال سؤال"))
            End Select
        Next
    End Sub

    Function DecodeQP2(s As String) As String
        Dim i As Long
        Dim p1 As Long
        Dim p2 As Long
        Dim r As String
        i = 2
        Do While i < Len(s)
            Select Case Mid(s, i, 1)
                Case "0" To "7"
                    r = r & Chr(CLng("&H" & Mid(s, i, 2)))
                Case "C", "D"
                    p1 = CLng("&H" & Mid(s, i, 2)) - 192
                    i = i + 3
                    p2 = CLng("&H" & Mid(s, i, 2)) - 128
                    r = r & ChrW(64 * p1 + p2)
                Case Else
                    ' Not handled
            End Select
            i = i + 3
        Loop
        DecodeQP2 = r
    End Function

    Function EncodeQP2(s As String) As String
        Dim i As Long
        Dim p1 As Long
        Dim p2 As Long
        Dim r As String
        Dim n As Long
        For i = 1 To Len(s)
            n = AscW(Mid(s, i, 1))
            If n < 128 Then
                r = r & "%" & Hex(n)
            ElseIf n < 2048 Then
                p1 = n \ 64
                r = r & "%" & Hex(p1 + 192)
                p2 = n Mod 64
                r = r & "%" & Hex(p2 + 128)
            Else

            End If
        Next i
        EncodeQP2 = r
    End Function

End Module

 

النتيجة:

تغلبنا على مشكلة اللغة العربية في الكونسول..

image.png.ed5610fe97eb52903215eb81d36a2d99.png

ملاحظة مهمة:

أغلق الأنتي فايروس قبل التجربة لإن الدالة ( CreateProcessA ) يصنفها الأنتي فايروس كدالة مشبوهة لإنها تقوم بإنشاء عملية في النظام

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

تحياتي لكم..

 

app.rar

تم تعديل بواسطه SEMO.Pa3x
  • Thanks 2
رابط هذا التعليق
شارك

8 ساعات مضت, SEMO.Pa3x said:

اغلق الأنتي فايروس قبل التجربة

انا استخدم كاسبرسكاي Kaspersky وما اعطاني اي خطأ 🙂

 

8 ساعات مضت, SEMO.Pa3x said:

تغلبنا على مشكلة اللغة العربية في الكونسول

جميل جدا ، الدالة MainRedirect ربطت جميع مكونات المشروع ، ويتم وضع المتغيرات/Parameters والمسار للملف التنفيذي ، جميع هذا في سطر واحد 🙂

والملف التنفيذي app.exe () يأخذ/يرسل قيمة واحدة ، وبكل بساطة يمكن اعطائه اكثر من قيمة ، مثل رقم الشركة/المؤسسة/المدرسة واسم المستخدم وكلمة المرور/السر وووو ، ومن ثم يُرجع اكثر من قيمة (كمصفوفة مثلا) ومنها رقم الفاتورة الالكترونية 🙂

 

يعني الآن ادوات التواصل بين ملف Net. والاكسس اصبحت شبة جاهزة ، شكرا اخوي حسنين 🙂 ، ومربط الفرس (البرنامج) الآن في يدي اخونا حسين 🙂 (قد تستطيع عمل برويمج "تصغير برنامج 🙂" للمتغيرات المطلوبة لفريق الاكسس ، على ان تواصل برنامجك المتكامل بطريقة متوازية 🙂 ، خصوصا واننا المبرمجين نتعامل مع الكود كمرحلة اولى ، تاركين الواجهات واصطياد اخطاء ادخالات المستخدم كمرحلة تالية 🙂)

 

جعفر

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

السلام عليكم 🙂

 

اخي حسنين  @SEMO.Pa3x

19 ساعات مضت, SEMO.Pa3x said:

عليكم السلام..

انا لم اجرب ربط الأكسس اون لاين بمؤسسة او شركة او غيره

لكن اذا كانت تلك المؤسسة وفرت لك Web API سيمكنك ذلك من قراءة وارسال البيانات عبر الـ HTTP REQUEST

اخونا حسين @د.كاف يار وضع رابط مشروع الضوابط والمتطلبات والمواصفات الفنية والقواعد الإجرائية اللازمة لتنفيذ أحكام لائحة الفوترة الإلكترونية

والذي قد تجد فيه المكتبات و API و SDK المطلوبة للبدء في تحليل الامر 🙂

 

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

 

جعفر

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

  • 4 weeks later...

السلام عليكم ورحمة الله وبركاتة
بخصوص موضوع الفاتورة الاليكترونية والتعامل مع API  الخاصة بها فالموضوع يحتاج الى التالى :-
1- استخدام لغة برمجة قوية ويفضل C# .NET Core

2 - معرفة بمبادئ التعامل مع ال API

3 - بيانات فعلية لشركة لها السماحية للوصول لموقع الهيئة 

4 - عملية توقيع الفواتير تحتاج الى Token  وهو عبارة عن USB Device مخزن عليها بيانات الشركة 

5 - معرفة ايضا بعمليا الارسال POST  والاستقبال GET

6- معرفة تفاصيل الفاتورة المطلوبة من الهيئة لأنة يتم إضافة بنود جديدة بخلاف الفاتورة العادية

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

فى حالة االرغبة فى الاستفسار انا موجود

 

 

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

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

اخواني الكرام 

تابعت معكم كل المواضيع المذكوره أعلاه   ولا كن هناك نقطه لام تتطرقو لها  وهو الشرط الثالث في هيئة الزكاة والدخل 

وها ان يكون متوافق مع نضام الأمن السيبراني 

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

هذا وجهت نضري فشاركوني رايكم. 

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

السلام عليكم ورحمة الله وبركاتة
اعتقد ان عملية الامان لا دال فيها ولكن .. المقصود بها ليس امان تخزين البيانات ولكن امان ارسال البيانات 
وهو بالفعل يتم عن طريق تشفير محتوى الفاتورة وايضا استخام التوقيع الاليكترونى للتاكد من سلامة البيانات المرسلة

هذا ما لاحضناه فى الفاتورة المصرية

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

  • 2 weeks later...
On 7/7/2021 at 5:09 PM, moh_prof said:

السلام عليكم ورحمة الله وبركاتة
بخصوص موضوع الفاتورة الاليكترونية والتعامل مع API  الخاصة بها فالموضوع يحتاج الى التالى :-
1- استخدام لغة برمجة قوية ويفضل C# .NET Core

2 - معرفة بمبادئ التعامل مع ال API

3 - بيانات فعلية لشركة لها السماحية للوصول لموقع الهيئة 

4 - عملية توقيع الفواتير تحتاج الى Token  وهو عبارة عن USB Device مخزن عليها بيانات الشركة 

5 - معرفة ايضا بعمليا الارسال POST  والاستقبال GET

6- معرفة تفاصيل الفاتورة المطلوبة من الهيئة لأنة يتم إضافة بنود جديدة بخلاف الفاتورة العادية

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

فى حالة االرغبة فى الاستفسار انا موجود

 

 

اخي الغالي

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

تم تعديل بواسطه العارف بالله
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information