هل يمكن إعادة تعيين إجمالي الصفحات في تقرير VFP 8.0 عن طريق تجميع البيانات؟

StackOverflow https://stackoverflow.com/questions/2536753

  •  22-09-2019
  •  | 
  •  

سؤال

لدي تقرير (باستخدام VFP 8.0) مع تجميع البيانات حسب رقم الفاتورة، ولست بحاجة إلى إعادة تعيين إجمالي الصفحات عن طريق تغيير رقم الفاتورة.

لقد فشلت في القيام بذلك، لأن _pagetotal سيعرض دائمًا إجمالي الصفحات لجميع الفواتير المحددة.

من فضلك النصيحة.

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

المحلول

بناءً على الوصف، يبدو أن ما تريده هو حسب تعليقي السابق...تحتوي كل فاتورة على سياق الصفحة X من Y الخاصة بها حيث تحتوي بعض "المجموعات" على صفحات أكثر من غيرها.للقيام بما تريده يتطلب عادةً إنشاء التقرير مرتين.مرة واحدة للتشغيل والتقاط عدد الصفحات في نهاية كل مجموعة.المثيل الثاني هو "النهائي".وفيما يلي عينة بسيطة حول كيفية القيام بذلك.

قم بإنشاء نتائج الاستعلام الخاصة بك، ولكن أضف عمودًا إضافيًا "OfPages" (أو أي شيء تريد تمثيل عدد الصفحات لكل "مجموعة") في مؤشر القراءة والكتابة.

SELECT YourIDGroup, OtherColumns, 000 as OfPages;
    FROM YourTable;
    ORDER BY 1;
    INTO CURSOR C_YourReportCursor readwrite


REPORT FORM TmpPages

REPORT FORM TmpPages preview  (or to printer)

بعد ذلك، في برنامجك، لديك وظيفة "التقاط" رقم الصفحة الموجود في تذييل المجموعة لأي كان معرفك الحالي.

FUNCTION CatchOfPages
   LPARAMETERS CurrentID, LastPg

   UPDATE DBF( "C_YourReportCursor" );
      SET OfPages = LastPg;
      WHERE YourIDGroup = CurrentID

   */ Return empty space so nothing is actually printed in the report
   RETURN ""
ENDFUNC 

الآن، الحيلة.في تقريرك، اجعل مجموعة البيانات الخاصة بك بناءً على معرف الفاتورة.في رأس المجموعة، بدلاً من القيام بالصفحة x من y باستخدام _pageno و_pagetotal، ستستخدم _pageno والعمود "ofPages" بالمؤشر...نظرًا لأن التمرير الأول سيتم تحديث قيمته المناسبة عبر استدعاء الوظيفة أعلاه ويتم تعيينه في المرة الأولى التي يتم فيها إنشاء التقرير ولكن بدون نافذة إخراج أو طابعة، فقط قم بتشغيله في الخلفية.

الآن، في المجموعة FOOTER، في الأسفل، أضف عنصر تحكم مربع نص (تمامًا كما لو كان هناك أي مخرجات حقل بيانات أخرى)، وقم بتعيين Expression = استدعاء الوظيفة مع المعلمات المحترمة...السابق:

CatchOfPages( YourIDGroup, _PageNo )

سيقوم بتحديث المؤشر المؤقت (أو جدول النتائج الخاص بك) مهما كان رقم الصفحة الفعلي لتلك الصفحة الأخيرة للمجموعة، وتحديث جميع السجلات الخاصة بمجموعة معرف الفاتورة المرتبطة، بحيث تعرف الصفحة 1 أن OfPages = 2 أو 3 أو 4 أو أيا كان.

لإخفاء / إخفاء المثيل الأول للتقرير من الظهور، قم بإخفائه في نافذة أخرى، مثل

DEFINE WINDOW WinTempReport FROM 0, 0 TO 1, 1
REPORT FORM YourReport IN WINDOW WinTempReport
RELEASE WINDOWS WinTempReport

ثم قم بعمل تقريرك على الإخراج العادي.

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