اذهب الي المحتوي
أوفيسنا

Foksh

أوفيسنا
  • Posts

    4163
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    179

كل منشورات العضو Foksh

  1. فيما يخص هذا الجزء، حتى الآن أمورك تمام ، ولكن فيما بعد ان إضطررنا للتعديل فالأمر بسيط ويسير ان شاء الله . هنا سأقدم لك نصيحة من واقع التصميم ، وهي حاول السير على خطوات تصميم واحد يتوافق ويتجانس مع باقي النماذج . فمثلاً زر التراجع هل يعمل ؟؟ ما فائدة النموذج الفرعي الذي يتم فيه عرض الجنسيات على سبيل المثال ؟ ما تبقى فأنت صاحب المشروع ولك نظرتك وحاجتك وليس لنا إلى ابداء الرأي وعليك الإختيار .
  2. أخي الكريم ، عمر آخر مشاركة تقريباً 7 سنوات ، لذا أنصحك بفتح موضوع جديد مستقل وشرح طلبك بالتفصيل ، وبإذن الله ستحصل على جواب من الأخوة والأساتذة الكرام ,,
  3. العفو يا صديقي ، ولا يهمك ,, لك مني نصيحة وهي الابتعاد عن التسميات العربية للحقول أو الجداول أو النماذج أو مكوناتها .. لذا قمت بتغيير اسم مربع النص الخاص بالحالة = Tx_Status . وعليه فقد استخدمت التنسيق الشرطي لتنفيذ طلبك مع دالة جديدة لإضافة كلمة Expired أو Current ,, حيث الدالة الجديدة :- Function GetDurationStatus(StartDate As Variant, EndDate As Variant) As String Dim diff As Integer If IsNull(StartDate) Or IsNull(EndDate) Then GetDurationStatus = "" Exit Function End If diff = DateDiff("yyyy", StartDate, EndDate) If Month(EndDate) < Month(StartDate) Or _ (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then diff = diff - 1 End If If diff < 1 Then GetDurationStatus = "Expired" Else GetDurationStatus = "Current" End If End Function صورة توضيحية :- الملف المرفق :- تفقيط التاريخ 1.accdb
  4. اعتذر عن التأخير .. في مديول جديد ، الصق الكود التالي :- Function DurationToWords(StartDate As Variant, EndDate As Variant) As String Dim diff As Integer If IsNull(StartDate) Or IsNull(EndDate) Then DurationToWords = "لم يتم إدخال تاريخين للمقارنة" Exit Function End If diff = DateDiff("yyyy", StartDate, EndDate) If Month(EndDate) < Month(StartDate) Or _ (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then diff = diff - 1 End If Select Case diff Case Is < 0 DurationToWords = "تاريخ غير صالح" Case 0 DurationToWords = "أقل من سنة" Case 1 DurationToWords = "سنة واحدة" Case 2 DurationToWords = "سنتان" Case 3 To 10 DurationToWords = NumberToArabicWords(diff, True) & " سنوات" Case Else DurationToWords = NumberToArabicWords(diff, True) & " سنة" End Select End Function Function NumberToArabicWords(ByVal Number As Long, Optional IsFeminine As Boolean = False) As String Dim UnitsMasc, UnitsFem, Tens, TeensMasc, TeensFem, Hundreds UnitsMasc = Array("", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة") UnitsFem = Array("", "واحدة", "اثنتان", "ثلاث", "أربع", "خمس", "ست", "سبع", "ثمان", "تسع") TeensMasc = Array("عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر") TeensFem = Array("عشرة", "إحدى عشرة", "اثنتا عشرة", "ثلاث عشرة", "أربع عشرة", "خمس عشرة", "ست عشرة", "سبع عشرة", "ثماني عشرة", "تسع عشرة") Tens = Array("", "عشرة", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون") Hundreds = Array("", "مئة", "مئتان", "ثلاثمئة", "أربعمئة", "خمسمئة", "ستمئة", "سبعمئة", "ثمانمئة", "تسعمئة") Dim Words As String Dim n As Long Dim h, t, u As Integer If Number = 0 Then NumberToArabicWords = "صفر" Exit Function End If If Number = 10 Then NumberToArabicWords = IIf(IsFeminine, "عشر", "عشرة") Exit Function End If If Number > 999 Then Dim Thousands As Long Thousands = Number \ 1000 Words = NumberToArabicWords(Thousands, False) & " ألف" n = Number Mod 1000 If n > 0 Then Words = Words & " و" & NumberToArabicWords(n, IsFeminine) NumberToArabicWords = Words Exit Function End If h = Number \ 100 t = (Number Mod 100) \ 10 u = Number Mod 10 If h > 0 Then Words = Hundreds(h) If (Number Mod 100) >= 11 And (Number Mod 100) <= 19 Then If Words <> "" Then Words = Words & " و" If IsFeminine Then Words = Words & TeensFem((Number Mod 100) - 10) Else Words = Words & TeensMasc((Number Mod 100) - 10) End If Else Dim UnitsArray UnitsArray = IIf(IsFeminine, UnitsFem, UnitsMasc) If t > 1 Then If u > 0 Then If Words <> "" Then Words = Words & " و" Words = Words & UnitsArray(u) & " و" & Tens(t) Else If Words <> "" Then Words = Words & " و" Words = Words & Tens(t) End If ElseIf u > 0 Then If Words <> "" Then Words = Words & " و" Words = Words & UnitsArray(u) End If End If NumberToArabicWords = Words End Function وفي حدث بعد التحديث لمربعي نص التاريخ :- Private Sub date2_AfterUpdate() Me.mo = DurationToWords([date1], [date2]) End Sub Private Sub date1_AfterUpdate() Me.mo = DurationToWords([date1], [date2]) End Sub تفقيط التاريخ 1.accdb
  5. وعليكم السلام ورحمة الله وبركاته .. لدي ملف يهتم بهذا الخصوص في مكتبتي ، ولكن اعطني بعض الوقت حتى أصل العمل وسأرفقه هنا ان شاء الله .
  6. العفو اخي الكريم 😇 بعد 4 أسابيع ارجو منك اغلاق الموضوع باختيار أفضل إجابة.
  7. وعليكم السلام ورحمة الله وبركاته اخي الفاضل لأن Date هي دالة مضمنة لا تتطلب أقواس إذا لم تكن تُستدعى كجزء من تعبير داخل دالة أخرى . وهذا طبيعي وسليم وصحيح 100% وعادة لا يتم حذف القوسين عند استدعاء دالة عامة باسمها الصريح باستخدام call هذا رأيي والله أعلم
  8. نعم اخي الكريم ، في العام الجديد سيبدأ الترقيم من جديد
  9. أشكرك أخي @kkhalifa1960 على الإلتفاتة الجميلة ، ولكن اسمح لي بمداخلة متفرعة . اذا كان طلب الأخ @حافظ التونسي هو وجود 0000 بعد رقم السنة ثم يبدأ الترقيم دون التأثير على الـ 0000 بحيث النتيجة تكون بهذا الشكل :- 202500001 ، 202500002 ، .... 2025000010 ، 2025000011 .... 2025000099999 = فإن اقتراحك جميل ويلبي الغرض . أما اذا كانت الفكرة كما تم تحديدها "رقم التسلسلي يتكون من رقم يحتوي على السنة الحالية و معها 5 ارقام ك 202500001" بحيث تكون بهذا الشكل :- 202500001 ، 202500002 ، 202500003 ، .... 202500010 ، 202500011 .... إلخ .... 202599999 = فأن التعديل الصحيح من جهتي سيكون للسطر الأخير بالشكل التالي :- GenerateID = CLng(yearPrefix & Format(serialPart + 1, "00000")) هنا سأضمن لك أن يكون الترقيم مكوناً من 5 خانات ، بوساطة دالة Format .. ويقبل التعديل حسب عدد الخانات التي يريدها صاحب الطلب بتغيير عدد الأصفار فقط . إلا أنني تجاهلت التقيد بعدد خانات محددة مثل ( 00000 ) . فنهاية الترقيم ستكون 202599999 . ولكن ماذا لو كان هناك سجل جديد وما زال العام 2025 لم ينتهي !؟!؟ لذا لم أقم بإضافتها أو التقيد بها أخي العزيز خليفة .
  10. وعليكم السلام ورحمة الله وبركاته .. الأمر بسيط أخي الكريم إن شاء الله . اولاً سننشئ الدالة التالية في مديول :- Public Function GenerateID(TableName As String, fieldName As String) As Long Dim currentYear As Integer Dim yearPrefix As String Dim maxID As Long Dim serialPart As Long currentYear = Year(Date) yearPrefix = currentYear & "" maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00") serialPart = CLng(Mid(maxID, Len(yearPrefix) + 1)) GenerateID = CLng(yearPrefix & (serialPart + 1)) End Function ثم في مربع النص داخل النموذج سنقوم بجعل القيمة الإفتراضية لهذا المربع النصي = الإستدعاء التالي ( على اعتبار ان الجدةل اسمه Tbl_Cust والحقل الرقمي الخاص بالترقيم = ID ) .. =GenerateID("Tbl_Cust","ID") المرونة في الإستدعاء ستكون انه يمكنك استخدام الترقمي لأكثر من جدول . فقط بتغيير اسم الجدول وحقل الترقيم . وهذا مثال في ملف مرفق :- GenerateID.accdb
  11. وعليكم السلام ورحمة الله وبركاته .. 💢 أخي الكريم ان كنت تبحث عن النصيحة والإرشادات التي تجعل من مشروعك ناجحاً ، عليك الإبتعاد عن ما يلي أولا ً :- التسميات العربية للجداول والحقول ؛ والنماذج والعناصر المكونة لها . الابتعاد عن استخدام الأسماء المكونة من مقطعين يفصل بينها فراغ ، بل الأفضل استخدام إشارة "_" بدلاً من المسافة . الإبتعاد عن التسميات المحجوزة للآكسيس . أي لا تقم بتسمية حقل أو عنصر في أي مكان مثل ( Date,Name,From,To, .... الخ ). في النماذج يوجد بعض النواقص الغير موجودة في مشروعك ( ان كان هذا المشروع كاملاً طبعاً ) . مثل نموذج الاعدادات حيث جميع الأزرار لم تعمل لدي . في الحقول التي تقوم وظيفتها على رقم فريد بالطلبية على سبيل المثال ، لديك الكثير من الطرق لإدراج ترقيم تلقائي خاص للطلبية مثل الدالة (DMAX) أو أي ترقيم تلقائي خاص بك من خلال كود أو دالة ... إلخ . 💢 أما فيما يخص فكرة المشروع فليس لي أدنى فكرة عن هذا المجال وحتى كيفية التعامل مع هكذا أفكار .
  12. يا عم أنا آسف ، كل ده مني هههههههه لا والله انت عارف اني بحب أناكش حضرتك والمثل بيقول ( هز الوردة علشان تشم ريحتها ) .. انا كنت أقصد على سبيل المثال كمثال تطبيقي على FIFO مثلاً :- منتج رقم: 101 الدفعة 1 : 5 قطعة – سعر البيع 120 الدفعة 2 : 10 قطع – سعر البيع 130 نريد بيع 8 قطع في فاتورة واحدة ببند واحد ، فأنه من المفترض أن يتم بيع 5 قطع من الدفعة الأولى ، و 3 قطع من الدفعة الثانية . صحيح ؟ الآن سيكون الناتج المالي = (5 × 120) + (3 × 130) = 990 وطبعاً لن يتم إدخال سعر يدوي لكل قطعة ، بل يحسب النظام المتوسط تلقائيًا . ألى الآن صحيح ولا غبار عليها كفكرة . لكن !!!!! في الفاتورة لن يتم اعتماد اي سعر من السعرين في خانة سعر البيع , صح كده ولا أنا فهمت غلط ؟؟؟ يعني لو عندك زبون اسئلته كتيرة زي حالاتي ورخم كدة وسأل الكاشير عن الفاتورة بعد البيع ولقي ان الصنف اللي اشتراه مكتوب عليه ليبل تسعيره 130 ، ولكن على الفاتورة سيكون سعر البيع للصنف المتوسط وتقريباً هيكون = 123.75 صح !؟!؟!؟!؟!؟!؟!؟!؟ طبعاً ناهيك عن مشكلة الأصناف المرتجعة ، يعني لو جيتك وقلت لك بعد نص ساعة عايز ارجع قطعتين من أصل الـ 8 اللي اشتريتهم ، أو استبدلهم بصنف تاني على سبيل المثال . هيكون شكل الدنيا هنا عامل ايه ؟؟؟ ( ده مجرد سؤال جاي في الطريق وعدى عليه ) . بس يا سيدي ومش هتكلم تاني .. انا كنت بستفسر بس لأن تصميم نظام صرف المخزون بهذه الطريقة المتقدمة فيه كثير من التفاصيل الدقيقة ، وأي خطأ بسيط ممكن يؤثر على دقة الحسابات أو على المخزون نفسه .
  13. لدي فكرة ( اقتراح ) !! في حال تعدد السعر لمنتج واحد . لم لا يتم فتح نموذج يحتوي ( اسم الصنف وسعر الشراء والكمية المتاحة منه ) بحيث يختار البائع أو الكاشير السعر الذي يريد بيعه لهذه الفاتورة . فأولاً وآخراً يجب بيع جميع الأصناف كل حسب قيمته الشرائية . مثلاً المنتج مروحة تورنيدو يتم الكشف عن وجود سعر متعدد له فيتم عرض نافذة (نموذج ) يعطي البائع اسعار الشراء والبيع لهذا الصنف كما تم تسجيلها عند عملية الشراء لهذا الصنف في فاتورة شراءه . وهنا سيتحكم البائع بادخال الصنف حسب السعر الذي يريد أن يبيع به هذا الصنف . لا أعلم إن كنت قد أوصت الفكرة بشكل صحيح 😅 .
  14. ما شاء الله , أفكار مفيدة لذوي الإختصاص والمهتمين .. أولا لنفترض انني اشتريت مثلاً صنف لأول مرة بسعر 10 جنيه عدد 24 قطعة ، وبعد ايام ( وطبعاً لم يتم بيعهم كلهم ) اشتريت نفس الصنف بسعر 12 جنيه وبعدد 24 قطعة أيضاً وقد تم بيع 4 قطع منالسعر الأول . الآن سيكون في مخزني 44 قطعة من الصنف نفسه بسعرين ( 10 جنيه و 12 جنيه ) صحيح ؟؟ الآن لنفرض جدلاً انني بعد شهر من البيع ( تم بيع 14 قطعة مثلاً ) بقي لدي 30 قطعة ، وقد حصلت على عرض بسعر 9 جنيه عند شراء 24 قطعة لنفس المنتج !!!!!! الآن بأي سعر سيتم البيع ( 9 أو 10 أو 12 ) . قمت بتجربة شراء نفس المنتج بسعر 100 جنيه والبيع بسعر 105 جنيه عدد 5 قطع . الآن اضافة الى ما في المخزن من نفس المنتج اصبح لدي 20 قطعة بأسعار شراء وبيع مختلفات . الآن قمت بعملية بيع لنفس الصنف أكثر من مرة وبأكثر من عدد وقد تجاوزت العدد 20 ، وتم حفظ الفاتورة . ولكن عند عودتي لها تم تحديد سعر البيع 109 ،ولا أعتقد انه متوسط سعر البيع للصنف إن لم أكن مخطئاً !!! الصورة المرفقة قد توضح مقصدي 😅 .
  15. نعم .. في جدول التقدير على سبيل المثال :- 1 = مقبول 2 = جيد 3 = جيد جداً 4 = ممتاز في الكومبوبوكس سيكون مصدر جدول التقديرات وسيتم اضافة العمودين ( صحيح ؟ ) الآن في النموذج سيكون مصدر بيانات الكومبوبوكس حقل التقدير في جدول الموظفين الرئيسي ، وستكون القيمة على سبيل المثال = 4 ( رقم التقدير = ممتاز ) ولن تكون كلمة ممتاز . وطبعاً سيكون مصدر الصف للكومبوبوكس الجدول الخاص بالتقدير ( اعتقد ها ما تم تطبيقه في مثالك .. صحيح ؟ ) إن كان هذا ما تم فعله فهو ممتاز وأحسنت التطبيق .
  16. بالضبط ، بحيث يتم تخزين رقم الجنسية او رقم التقدير .... الخ في الجدول الرئيسي للمعلومات الشخصية او اي حقل كان * ملاحظة :- الكومبوبوكس سيكون من عمودين ( رقم الجنسية او المؤهل كما في مثالك والقيمة الخاصة بالمؤهل ... الخ ) واجعل حقل الجنسية كمثال في جدول المعلومات الشخصية = رقمي بحيث يأخذ رقم ID الخاص بالجنسية
  17. نعم يا صديقي ، أحسنت إلى الآن . اللي عملته صحيح تماماً بنسبة كبيرة جداً ، بل هو من أساسيات التصميم السليم لقواعد البيانات – خاصة لما المشروع بيكبر وبيحتاج لإحصائيات واستعلامات وتقارير معقدة . ولكن هي فقط النقطة التي ذكرتها لك فيما يتعلق باستخدام الكومبوبوكس داخل الجدول وليس في النموذج .. ولو النقطة غير واضحة لك احكيلي .
  18. إذاً وعليه فأن تعديل الدالة في المديول يصبح كالآتي .. Public Function Horizontal(tabelle As String, Feld1 As String, Feld2 As String, valFeld1, Optional sortField As String = "workdate") On Error GoTo ErrorHandler Dim DB As DAO.Database, rs As DAO.Recordset Dim sql As String Dim isFirst As Boolean Dim lastValue As String Dim fldType As Integer ' قائمة الحقول التي نريد منع تكرارها Dim noRepeatFields As Variant noRepeatFields = Array("name", "Committee", "Job", "school", "Governorate", "Management") Set DB = CurrentDb fldType = DB.TableDefs(tabelle).Fields(Feld1).Type If fldType = dbText Or fldType = dbMemo Then sql = "SELECT [" & Feld2 & "] FROM [" & tabelle & "] WHERE [" & Feld1 & "]='" & valFeld1 & "'" Else sql = "SELECT [" & Feld2 & "] FROM [" & tabelle & "] WHERE [" & Feld1 & "]=" & valFeld1 End If On Error Resume Next Dim testFld As DAO.Field Set testFld = DB.TableDefs(tabelle).Fields(sortField) If Err.Number = 0 Then sql = sql & " ORDER BY [" & sortField & "]" End If On Error GoTo ErrorHandler Set rs = DB.OpenRecordset(sql) Horizontal = "" isFirst = True lastValue = "~|~" ' التحقق إذا كان الحقل الحالي في قائمة Dim isNoRepeatField As Boolean isNoRepeatField = False Dim i As Integer For i = LBound(noRepeatFields) To UBound(noRepeatFields) If Feld2 = noRepeatFields(i) Then isNoRepeatField = True Exit For End If Next i Do While Not rs.EOF Dim currentValue As String currentValue = Nz(rs(Feld2), "") If isNoRepeatField Then If currentValue <> lastValue Then If isFirst Then Horizontal = "*" & currentValue isFirst = False Else Horizontal = Horizontal & vbCrLf & currentValue End If lastValue = currentValue End If Else If isFirst Then Horizontal = "*" & currentValue isFirst = False Else Horizontal = Horizontal & vbCrLf & currentValue End If End If rs.MoveNext Loop rs.Close Set rs = Nothing Set DB = Nothing Exit Function ErrorHandler: Horizontal = "!ERROR: " & Err.Description If Not rs Is Nothing Then rs.Close Set rs = Nothing End If Set DB = Nothing End Function تم إضافة أسلوب لتحديد الحقول التي تريد دمج تكراراتها في النتيجة باستخدام مصفوفة بسيطة .. أما في الإستعلام ، فهو كالآتي بعد إعادتك لتغيير أسماء بأسلوب خاطئ مثل الحقل ( Name ) فهو اسم محجوز لآكسيس وليس من المنطقي تسمية حقل أو عنصر بأسماء محجوزة . SELECT DISTINCT basic.id2, Horizontal("basic","id2","name",[basic].[id2]) AS name, Horizontal("basic","id2","school",[basic].[id2]) AS school, Horizontal("basic","id2","Job",[basic].[id2]) AS [work], Horizontal("basic","id2","Committee",[basic].[id2]) AS Committee, Horizontal("basic","id2","taref",[basic].[id2]) AS taref, Horizontal("basic","id2","Governorate",[basic].[id2]) AS Governorate, Horizontal("basic","id2","Management",[basic].[id2]) AS Management FROM basic; for send (3).accdb
  19. أخي الكريم .. تماشياً مع سياسة المنتدى وقواعد المشاركات ، أنصحك بفتح موضوع جديد عند تعدد الطلبات .. فهذا كفيل بمن يبحث عن نفس مشكلتك كي يحصل على إجابة محددة في موضوع محدد لا إجابات متعددة لأكثر من موضوع في موضوع واحد . كما أرجو منك محاولة التوضيح أكثر في موضوعك الجديد لاحقاً مع الدعم بالصور إن شئت . أيضاً متابعة مواضيعك كل على حدة بإغلاقها بأختيار أفضل إجابة كل لا يبقى الموضوع معلقاً 😊 على العموم هل هذه النتيجة التي تريدها ؟
  20. 🔹 قبل أن نصل إلى نقطة إدخال البيانات ، هناك بعض الأمور التي من الأفضل تجنبها لضمان تصميم سليم وقابل للتطوير . 1️⃣ استخدام مربعات التحرير والسرد داخل الجداول بشكل مباشر ليس فكرة جيدة ( من وجهة نظري وهي غير ملزمة طبعاً ) . 🔴 لماذا ؟ عند تخزين قيمة مثل "مصري" مباشرة داخل الجدول ، فإن أي استعلام أو كود VBA سيتعامل مع النصوص بشكل مباشر ، مما قد يبطئ عمليات البحث والاستعلامات . والأسباب التالية كفيلة بتغيير وجهة نظرك 😉 :- 1️⃣ يؤدي إلى تخزين القيم النصية بدلاً من القيم الرقمية المترابطة الى عدة مشاكل منها :- عند إدخال "مصري" مباشرةً داخل الحقل ، يصبح التعامل مع البيانات أبطأ عند تنفيذ الاستعلامات ، مقارنةً بتخزين رقم معرف (ID) وربطه بجدول منفصل يضم الجنسيات . فالأفضل هو تخزين القيم كأرقام مرجعية ( مثلاً ، 1 = مصري ، 2 = غير مصري ... إلخ ) وجلب النص عند الحاجة عبر الاستعلامات . 2️⃣ صعوبة في عمليات الفلترة والاستعلامات المتقدمة فعند الحاجة إلى إجراء استعلامات تعتمد على الجنسية ، مثلاً "كم عدد الموظفين المصريين؟" ، سيكون من الأفضل البحث باستخدام القيمة الرقمية (مثلاً gnsya = 1) بدلاً من البحث عن النصوص ( gnsya = "مصري" ) . فالبحث بالأرقام أسرع وأكفأ مقارنة بالبحث باستخدام النصوص . 3️⃣ تقييد التحديثات وإدارة البيانات عند الحاجة إلى تعديل اسم جنسية معينة ( مثلاً تغيير "مصرى" إلى "مصري" ) ، سيكون عليك تحديث جميع السجلات في الجدول ، مما يزيد من مخاطر الأخطاء . أما عند استخدام جدول منفصل للجنسيات ( كما فعلت ) ، فيكفي تحديثه في مكان واحد فقط وسينعكس التغيير تلقائيًا على جميع السجلات . 🎯 الخلاصة باختصار :- 1️⃣ التعامل مع الأرقام أكثر كفاءة في العمليات الحسابية ، الفلترة ، والبحث ... إلخ 2️⃣ عند الحاجة إلى تغيير اسم جنسية ، يتم تعديله في مكان واحد فقط وليس في جميع السجلات . 3️⃣ يتيح لك إنشاء علاقات أكثر قوة بين الجداول ويسهل بناء التقارير المستقبلية .
  21. المشكلة قد تكون بسبب إعدادات الطباعة في Paint ، حيث يقوم البرنامج بطباعة الصورة بحجمها الأصلي دون تكبيرها لتناسب الورقة
  22. حسناً جرب الملف المرفق وأخبرني بالنتيجة ،، وغير اسمها الى اي اسم تريده
  23. توهتني .. اسم الصورة في المرفق ليست ASD كما أشرت . أذاكنت تفضل تحديداسم صورة الاستمارة من خلال الكود فهو سهل ، لكن اذا كانت الصورة وحيدة ولا وجود لملفات أخرى غيرها في المجلد فالكود في المرفق يلبي حاجتك بدون تحديد اسم صورة الاستمارة . والكود ايضاً يدعم حالتين إما المجلد الي بجانب قاعدة البيانات بغض النظر عن مساره أو ذلك الموجود في المسار الذي ذكرته لنا سابقاً في القرص D ... جربه واخبرنا بالنتيجة بعد الطباعة ؟؟؟
  24. اذاً هل تريد للكود ان يتم تحديد مسار واسم ملف الاستمارة ؟؟ أم تبقى على هذه الفكرة كما شاركتها سابقاً بحيث ان الكود يقوم بطباعة أول صورة يجدها في المجلد ؟؟؟
×
×
  • اضف...

Important Information