برای اینکه ساختار گزارش پایه بهم نریزه ابتدا یک جدول با ساختار گزارش می سازیم :



Use reportBase.frx
COPY STRUCTURE TO rptstruct.dbf



اشیا اولیه مانند تنظیمات چاپگر و dataenvironment و خطوط عمودی و افقی را از گزارش پایه به این جدول کپی می کنیم :


APPEND FROM reportBase.frx FOR objtype=1 OR objtype=9 OR objtype=23 OR objtype=25


خب مسلما اگه گزارشتون متغیر هم داشته باشد کد 18 رو هم باید اضافه کنید و عر آنچه که می خواهید. ;-)


اگر یادتون باشه در بالا گفتم تنظیمات کاغذ در رکوردی انجام می شه که objType مقدار 1 را دارد.
پس بهتره در ابتدا ی کار نوع افق یا عمودی بودن کاغذ رو مشخص کنیم . چه بهتر که کاربر خودش انتخاب کنه.
مثلا قبل از گزاش یه فرمی داشته باشه که تعیین کنه می خواد گزارش افق چاپ بشه یا عمودی


IF amoodi = .t. && amodi papaer DEFAULT
REPLACE expr WITH ALLTRIM(expr)+"ORIENTATION=0"+CHR(13)
pwidth = 20
ELSE && ofoghi page
REPLACE expr WITH ALLTRIM(expr)+"ORIENTATION=1"+CHR(13)
pwidth = 29
ENDIF


حالا با استفاده از متغیر pwidth اندازه صفحه رو داریم