一张A4纸打印两张会计凭证水晶报表如何设计

yyj135 2007-04-28 08:26:44
目前正在做会计凭证的录入,现在碰到一个打印的问题.

要求:目前一般的会计凭证半张A4纸就够了,因此会计经常会在一张A4张上打印两张凭证.当然也有可能一张A4纸不够,可能要几页才能打印完.但为了将凭证便于存档.目前会计是这样要求的:每张会计凭证打印15条记录,不足部份补空行.一张A4纸打印两张凭证.当然有时候会连续打印预若干张凭证.

现在我将会计凭证的数据源写成了一个存储过程.一次可以处理多张凭证,并且在存储过程里面已经补空行.

问题:水晶报表如何将一张A4纸按上面的要求设计,就好像两个半张A4纸一样.

存储过程如下:
/*
PROC:SELECT_Voucher
USER:選擇傳票
PARA:@Fvoucherid (傳票內碼)
CREATE BY :MARK
CREATE DATE:2007/4/26
EXAM:SELECT_Voucher '10,11,12'
*/

ALTER PROC select_voucher(
@Fvoucherid NVARCHAR(4000))
AS
DECLARE
@COUNT INT, --共有多少行
@AddRec INT, --需追加的空白行數
@AddSN INT, --追加行的序號
@fbrno NVARCHAR(200), --公司名
@fdate DATETIME, --日期
@fyear INT, --年度
@fperiod INT, --期別
@fgroupid NVARCHAR(10) ,--傳票字
@fnumber INT, --傳票號
@fnumber2 NVARCHAR(50), --傳票字號
@fattachments INT, --附件張數
@FPosted NVARCHAR(50),
@FPreparerID NVARCHAR(50),
@FCheckerID NVARCHAR(50),
@FPosterID NVARCHAR(50),
@FCashierID NVARCHAR(50),
@FHandler NVARCHAR(50),
@FvoucherID2 NVARCHAR(50),
@id INT,
@Row INT, --每張傳票列印的行數
@RecCount INT --行數

SET @Row = 15

--將傳票內碼分離出來
CREATE TABLE #temp (
fvoucherid INT)

IF @Fvoucherid <> ''
BEGIN
IF ltrim(rtrim(@Fvoucherid)) <> ''
BEGIN
--如果只有一張傳票
IF len(@Fvoucherid) > 0
AND charindex(',',@Fvoucherid) = 0
INSERT INTO #temp(fvoucherid)
VALUES (Convert(INT,@Fvoucherid))





...全文
1525 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyiam_ 2012-02-14
  • 打赏
  • 举报
回复
有人解决有这个问题吗,我是被卡好久了%>_<%
FlyDragon_SUN 2007-04-30
  • 打赏
  • 举报
回复
mark!
CathySun118 2007-04-28
  • 打赏
  • 举报
回复
帮顶
yyj135 2007-04-28
  • 打赏
  • 举报
回复
TO:forgot(忘记forgot2000)
这样可以分页,但不是我想要的结果.谢谢!
forgot 2007-04-28
  • 打赏
  • 举报
回复
1、右键单击“详细资料”节的灰色横条,选择“节专家”,进入“节专家”对话框;
2、在“公用”选项卡,选中“在后面页新建页”复选框;
3、单击后面的“x+2”按钮,进入“公式工作室 - 格式公式编辑器”对话框;
4、输入“RecordNumber mod 15 = 0”,并单击左上角的“保存并关闭”按钮。
yyj135 2007-04-28
  • 打赏
  • 举报
回复
ELSE
BEGIN --先插入第1張傳票號
SELECT @FvoucherID2 = Left(@Fvoucherid,Charindex(',',@Fvoucherid) - 1)
INSERT INTO #temp(fvoucherid)
VALUES (Convert(INT,@FvoucherID2))
SELECT @Fvoucherid = Substring(@Fvoucherid,Charindex(',',@Fvoucherid) + 1,
Len(@Fvoucherid) - Charindex(',',@Fvoucherid))
WHILE @Fvoucherid <> ''
BEGIN
IF len(@Fvoucherid) > 0
AND charindex(',',@Fvoucherid) = 0
BEGIN
INSERT INTO #temp(fvoucherid)
VALUES (Convert(INT,@Fvoucherid))
SELECT @Fvoucherid = ''
END
IF len(@Fvoucherid) > 0
AND charindex(',',@Fvoucherid) > 0
BEGIN
SELECT @FvoucherID2 = Left(@Fvoucherid,Charindex(',',@Fvoucherid) - 1)
INSERT INTO #temp(fvoucherid)
VALUES (Convert(INT,@FvoucherID2))
SELECT @Fvoucherid = Substring(@Fvoucherid,Charindex(',',@Fvoucherid) + 1,
Len(@Fvoucherid) - Charindex(',',@Fvoucherid))
END
IF @Fvoucherid = ''
BREAK
ELSE
CONTINUE
END
END
END
END

--選擇所有符合條件的記錄
SELECT fbrno = c.fcname,
fdate,
fyear,
fperiod,
fgroupid = d.lista,
a.fnumber,
fnumber2 = d.lista + '字第' + Ltrim(Str(a.fnumber)) + '號',
a.fattachments,
b.fvoucherid,
fentryid = b.fentryid + 1,
b.fexplanation,
faccountid = CASE
WHEN Len(f.fcheckcase) = 0 THEN f.ffullname
ELSE f.ffullname + ' ' + b.fcheckcasedetail
END,
fdc = CASE b.fdc
WHEN 1 THEN '借'
ELSE '貸'
END,
fmeasureunitid = h.lista,
b.funitprice,
b.fquantity,
b.famountfor,
fcurrencyid = g.lista,
b.fexchangerate,
fdebittotal = CASE b.fdc
WHEN 1 THEN b.famount
ELSE 0
END,
fcredittotal = CASE b.fdc
WHEN -1 THEN b.famount
ELSE 0
END,
fposted,
fpreparerid,
fcheckerid,
fposterid,
fcashierid,
fhandler
INTO #aa
FROM t_voucher a
LEFT JOIN t_voucherentry b
ON a.fvoucherid = b.fvoucherid
LEFT JOIN bsc_dept c
ON a.fbrno = c.fcode
LEFT JOIN (SELECT listcode,
lista
FROM dbo.bsc_otherdefineb
WHERE itemno = (SELECT Top 1 id
FROM dbo.bsc_otherdefinea
WHERE itemcode = 'VoucherType')) d
ON a.fgroupid = d.listcode
LEFT JOIN (SELECT listcode,
lista
FROM dbo.bsc_otherdefineb
WHERE itemno = (SELECT Top 1 id
FROM dbo.bsc_otherdefinea
WHERE itemcode = 'BillstatusDefine')) e
ON a.billstatusid = e.listcode
LEFT JOIN t_account f
ON b.faccountid = f.faccountid
LEFT JOIN (SELECT listcode,
lista
FROM dbo.bsc_otherdefineb
WHERE itemno = (SELECT Top 1 id
FROM dbo.bsc_otherdefinea
WHERE itemcode = 'CurrencyDefine')) g
ON b.fcurrencyid = g.listcode
LEFT JOIN (SELECT listcode,
lista
FROM dbo.bsc_otherdefineb
WHERE itemno = (SELECT Top 1 id
FROM dbo.bsc_otherdefinea
WHERE itemcode = 'UnitDefin')) h
ON b.fmeasureunitid = h.listcode
LEFT JOIN t_account i
ON b.faccountid = i.faccountid
WHERE a.fvoucherid IN (SELECT fvoucherid
FROM #temp)
ORDER BY a.fvoucherid,
a.fentryid

--補空行
DECLARE cur CURSOR FOR
SELECT fvoucherid
FROM #temp
ORDER BY fvoucherid
OPEN cur
FETCH NEXT FROM cur
INTO @ID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT TOP 1 @fbrno=fbrno,
@fdate=fdate,
@fyear=fyear,
@fperiod=fperiod,
@fgroupid=fgroupid,
@fnumber=fnumber,
@fnumber2=fnumber2,
@fattachments=fattachments,
@FPosted = fposted,
@FPreparerID = fpreparerid,
@FCheckerID = fcheckerid,
@FPosterID = fposterid,
@FCashierID = fcashierid,
@FHandler = fhandler
FROM #aa
WHERE fvoucherid = @ID
SELECT @COUNT = Count(* )
FROM #aa
WHERE fvoucherid = @ID
SELECT @AddRec = @Row - (@COUNT%@Row)
SET @AddSN = 1
IF @AddRec <> @Row
BEGIN
WHILE @AddRec > 0
BEGIN
INSERT INTO #aa(fbrno,
fdate,
fyear,
fperiod,
fgroupid,
fnumber,
fnumber2,
fattachments,
fdc,
fentryid,
fposted,
fpreparerid,
fcheckerid,
fposterid,
fcashierid,
fhandler,
fvoucherid,
fdebittotal,
fcredittotal)
VALUES (@fbrno,
@fdate,
@fyear,
@fperiod,
@fgroupid,
@fnumber,
@fnumber2,
@fattachments,
'',
@COUNT + @AddSN,
@FPosted,
@FPreparerID,
@FCheckerID,
@FPosterID,
@FCashierID,
@FHandler,
@ID,0,0)
SET @AddRec = @AddRec - 1
SET @AddSN = @AddSN + 1
END
END
FETCH NEXT FROM cur
INTO @ID
END
CLOSE cur
DEALLOCATE cur


SELECT ROW_NUMBER() OVER (ORDER BY fvoucherid,fentryid) as SN ,
(ROW_NUMBER() OVER (ORDER BY fvoucherid,fentryid)-1)/@Row+1 AS Page, *
FROM #aa
ORDER BY fvoucherid,
fentryid

forgot 2007-04-28
  • 打赏
  • 举报
回复
你需要一張紙打印兩頁原來一頁的記錄(就好像FinePrint)一樣,那麼你需要在節專家的設定裡,詳細資料節裡選多列格式化。我用的是繁體版,可能有些術語不一樣,但道理是相同的。
當您選取細目區段,並且已核取 [一般] 索引標籤中的 [設定多重資料行的格式] 方塊的,便會顯示出 [配置] 索引標籤。

使用 [配置] 索引標籤可將報表設定成多重資料行格式,也就是說,不必將資料從頁面上方一直印到底,而是設定多重資料行,讓資料以一個資料行接著一個資料行的方式列印,您也可以使資料橫向向下列印,在每一個資料行列印一個資料錄,然後在每一個資料行列印第二個資料錄,然後第三個,依此類推。這個對話方塊分成四個小方塊。

細目大小
這個方塊可用來指定一個細目的維度 (高度和寬度)。請決定每一個細目的寬度 (根據字元數目、字型大小等),然後將該值輸入 [寬度] 編輯方塊中。

再決定每一個細目的高度 (根據字元數目、字型大小等),然後將該值輸入 [高度] 編輯方塊中。

細目之間的間距
這個方塊可用來指定細目之間允許的空白區域 (間距、裝訂邊等)。水平 = 細目在頁面橫向之間的距離,垂直 = 細目在頁面上下之間的距離。

請決定所允許的間距,在 [水平] 編輯方塊中輸入水平間距,以在 [垂直] 編輯方塊中輸入垂直間距。

列印方向
在報表頁面中列印細目時,[列印方向] 方塊可讓您指定程式遵循的路徑,選項如下:

橫向
以橫向列印資料行的細目,先是第一個資料行的細目、下一個資料行的細目、再下一個,依此類推。然後,當所有的資料行都有細目時,程式會向下移動頁面,並列印第一個資料行的第二個細目,然後第二個,依此類推。

縱向
從上到下列印第一個資料行的細目,然後第二個資料行,依此類推。

設定多重資料行群組的格式
如果希望程式使用指定給選取區段的 [寬度]、[細目之間的間距] 及 [列印方向],設定多重資料行群組的格式,請選取這個核取方塊。

4,820

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧