1 金币
本帖最后由 zhangliklmyt 于 2020-7-1 09:40 编辑
问题:因为是个升级项目,所以逻辑处理上没动,他的整体数据实在明细format的时候在取的,ActiveReportV2.0中,GH_Type能正常分组,但在ActiveReportV11.0中GH_Type的format只能走一次,没法正常分组。GH_Type有一个RepeatStyle属性,每一个值也试了还是只走一次。所以我有点怀疑,是不是因为在reportstart的时候没绑定数据,而是在明细里取数据,账票没法正常去判断分组了。很疑惑,求各位大神帮助
附代码:[VB.NETマイグレーション対応]注释的地方是本次升级的。
---------------------------------------------------------------------------------------
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Private Sub Detail_Format()
Private Sub Detail_Format(sender As Object, e As EventArgs) Handles Detail.Format
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
On Error GoTo CERROR
'' レポートが開始してはじめての Detail_Format イベントのとき、
If mbPrim = False Then
'' 明細書の印字データを取得する。
giRet = ReadSeikyuMeisai()
If giRet = -1 Then
Call CPutMessage(goOraDB, "CDB010E", vbOKOnly, "")
'2020/06/17 VB.NETマイグレーション対応 DELETE START
'Unload Me
'2020/06/17 VB.NETマイグレーション対応 DELETE END
End If
mbPrim = True
'' データが存在しなかった場合、フラグをON。
If mrRecset Is Nothing Then
'' 空白行を印字。
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
End If
Else
'' 印字データが取得できなかった場合、
If mrRecset Is Nothing Then
'' 出力区分を全て(00 ~ 03 まで)印字し終えたら、次の販売店の印字データを抽出する。
If miOutKBN = 4 Then
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'GH_Type.GroupValue = 5
GH_Type.DataField = "5"
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntNum = 5
If miCntRow < 40 Then
fldSyubetu.Text = ""
fldTani.Text = ""
Field1.Text = ""
fldTanka.Text = ""
fldKingaku.Text = ""
fldBikou.Text = ""
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
Else
miCntNum = 6
'' 全ての販売店を印字が終了していたら、処理を抜ける。
If miHanbaiCD_cntidx = miHanbaiCD_maxidx Then
miHanbaiCD_cntidx = miHanbaiCD_cntidx + 1
Exit Sub
End If
miHanbaiCD_cntidx = miHanbaiCD_cntidx + 1 '' カウントアップ
miOutKBN = 0 '' 出力区分を0に戻す。
'' 明細書の印字データを取得する。
giRet = ReadSeikyuMeisai()
If giRet = -1 Then
Call CPutMessage(goOraDB, "CDB010E", vbOKOnly, "")
'2020/06/17 VB.NETマイグレーション対応 DELETE START
'Unload Me
'2020/06/17 VB.NETマイグレーション対応 DELETE END
End If
'' グループプロパティを更新
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'GH_Hanbai.GroupValue = miHanbaiCD_cntidx
GH_Hanbai.DataField = miHanbaiCD_cntidx.ToString()
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
'' データが存在しなかった場合、テキストをクリアして空白行を印字。
If mrRecset Is Nothing Then
fldSyubetu.Text = ""
fldTani.Text = ""
Field1.Text = ""
fldTanka.Text = ""
fldKingaku.Text = ""
fldBikou.Text = ""
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
End If
End If
Else
'' 出力区分(SQLの条件にて使用)のカウント。
miOutKBN = miOutKBN + 1
'' 明細書の印字データを取得する。
giRet = ReadSeikyuMeisai()
If giRet = -1 Then
Call CPutMessage(goOraDB, "CDB010E", vbOKOnly, "")
'2020/06/17 VB.NETマイグレーション対応 DELETE START
'Unload Me
'2020/06/17 VB.NETマイグレーション対応 DELETE END
End If
miCntNum = miCntNum + 1
'' グループプロパティを更新(出力区分グループセクション)
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'GH_Type.GroupValue = miCntNum
GH_Type.DataField = miCntNum.ToString()
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
'' データが存在しなかった場合、テキストをクリアして空白行を印字。
If mrRecset Is Nothing Then
fldSyubetu.Text = ""
fldTani.Text = ""
Field1.Text = ""
fldTanka.Text = ""
fldKingaku.Text = ""
fldBikou.Text = ""
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
End If
End If
Else
'' レコードセットがEOFに達していたら、
If mrRecset.EOF Then
'' 出力区分を全て(00 ~ 03 まで)印字し終えたら、次の販売店の印字データを抽出する。
If miOutKBN = 4 Then
If miCntRow < 40 Then
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'GH_Type.GroupValue = 5
GH_Type.DataField = "5"
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntNum = 5
fldSyubetu.Text = ""
fldTani.Text = ""
Field1.Text = ""
fldTanka.Text = ""
fldKingaku.Text = ""
fldBikou.Text = ""
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
Else
miCntNum = 6
'' 全ての販売店を印字が終了していたら、処理を抜ける。
If miHanbaiCD_cntidx = miHanbaiCD_maxidx Then
miHanbaiCD_cntidx = miHanbaiCD_cntidx + 1
Exit Sub
End If
miHanbaiCD_cntidx = miHanbaiCD_cntidx + 1 '' カウントアップ(販売店コード)
miOutKBN = 0 '' 出力区分を0に戻す。
'' 明細書の印字データを取得する。
giRet = ReadSeikyuMeisai()
If giRet = -1 Then
Call CPutMessage(goOraDB, "CDB010E", vbOKOnly, "")
'2020/06/17 VB.NETマイグレーション対応 DELETE START
'Unload Me
'2020/06/17 VB.NETマイグレーション対応 DELETE END
End If
'' グループプロパティを更新(販売店コードグループセクション)
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'GH_Hanbai.GroupValue = miHanbaiCD_cntidx
GH_Hanbai.DataField = miHanbaiCD_cntidx.ToString()
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
'' データが存在しなかった場合、テキストをクリアして空白行を印字。
If mrRecset Is Nothing Then
fldSyubetu.Text = ""
fldTani.Text = ""
Field1.Text = ""
fldTanka.Text = ""
fldKingaku.Text = ""
fldBikou.Text = ""
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
End If
End If
Else
'' 出力区分(SQLの条件にて使用)のカウント。
miOutKBN = miOutKBN + 1
'' 明細書の印字データを取得する。
giRet = ReadSeikyuMeisai()
If giRet = -1 Then
Call CPutMessage(goOraDB, "CDB010E", vbOKOnly, "")
'2020/06/17 VB.NETマイグレーション対応 DELETE START
'Unload Me
'2020/06/17 VB.NETマイグレーション対応 DELETE END
End If
miCntNum = miCntNum + 1
'' グループプロパティを更新(出力区分グループセクション)
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'GH_Type.GroupValue = miCntNum
GH_Type.DataField = miCntNum.ToString()
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
'' データが存在しなかった場合、テキストをクリアして空白行を印字。
If mrRecset Is Nothing Then
fldSyubetu.Text = ""
fldTani.Text = ""
Field1.Text = ""
fldTanka.Text = ""
fldKingaku.Text = ""
fldBikou.Text = ""
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntRow = miCntRow + 1
Exit Sub
End If
End If
End If
End If
End If
'' データの印字
'' レコードセットのフィールドをワーク変数へセット。
lsOutKBN = mrRecset.Fields("出力区分").Value
lsTensyuCD = mrRecset.Fields("店主コード").Value
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'lsKasiCD = IIf(IsNull(mrRecset.Fields("貸付コード").Value), "", mrRecset.Fields("貸付コード").Value)
lsKasiCD = IIf(IsDBNull(mrRecset.Fields("貸付コード").Value), "", mrRecset.Fields("貸付コード").Value)
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'lsSeikyutuki = Format(mrRecset.Fields("請求月").Value, "YYYY/MM/DD")
lsSeikyutuki = VB6Format(CDate(mrRecset.Fields("請求月").Value), "YYYY/MM/DD")
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
lsKomokName = mrRecset.Fields("請求項目名").Value
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'lsKasiFlag = IIf(IsNull(mrRecset.Fields("貸付フラグ").Value), "", mrRecset.Fields("貸付フラグ").Value)
lsKasiFlag = IIf(IsDBNull(mrRecset.Fields("貸付フラグ").Value), "", mrRecset.Fields("貸付フラグ").Value)
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
lsSuryo = mrRecset.Fields("数量").Value
lsTani = mrRecset.Fields("単位").Value
lcTankagaku = mrRecset.Fields("単価額").Value
lcKingaku = mrRecset.Fields("金額").Value
mrRecset.MoveNext()
miCntRow = miCntRow + 1
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Detail.PrintSection
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
GF_Type_Format()
Exit Sub
CERROR:
'' エラーログ出力
gsMsg = "ERROR : Detail_Format( " & Err.Number & " " & Err.Description & " )"
Call CLogPut(giFileNum, gsMsg)
End Sub
'-----------------------------------------------------------------------------
' @(f)
'
' 関数名 : ReadSeikyuMeisai
'
' 機能 : 印字データの取得
'
' 機能説明 : 請求管理(明細)データよりデータを取得する。
'
' 備考 : ただし、1販売店の1出力区分分に対するデータを抽出する。
'-----------------------------------------------------------------------------
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Private Function ReadSeikyuMeisai()
Private Function ReadSeikyuMeisai() As Short
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
On Error GoTo CERROR
'' ログファイル書き込み
gbRet = CLogPut(giFileNum, "FUNCTION:ReadSeikyuMeisai")
ReadSeikyuMeisai = 0
With frmSMsaiL09
gsSQL = "SELECT KANRI.販売店コード, "
gsSQL = gsSQL & "KANRI.店主コード, "
gsSQL = gsSQL & "MEISAI.請求項目コード, "
gsSQL = gsSQL & "KANRI.請求月, "
gsSQL = gsSQL & "KANRI.賦課金, "
gsSQL = gsSQL & "KANRI.関係費, "
gsSQL = gsSQL & "KANRI.請求合計額, "
gsSQL = gsSQL & "HANBAI.入金予定日, "
gsSQL = gsSQL & "HANBAI.販売店名, "
gsSQL = gsSQL & "TENSYU.店主名, "
gsSQL = gsSQL & "MEISAI.出力区分, "
gsSQL = gsSQL & "KOMOKU.請求項目名, "
gsSQL = gsSQL & "KOMOKU.単位, "
gsSQL = gsSQL & "MEISAI.数量, "
gsSQL = gsSQL & "MEISAI.単価額, "
gsSQL = gsSQL & "MEISAI.金額, "
gsSQL = gsSQL & "MEISAI.貸付フラグ, "
gsSQL = gsSQL & "MEISAI.貸付コード,"
gsSQL = gsSQL & "MEISAI.請求区分 "
gsSQL = gsSQL & "FROM 請求管理データ KANRI, "
gsSQL = gsSQL & "販売店マスタ HANBAI, "
gsSQL = gsSQL & "店主マスタ TENSYU, "
gsSQL = gsSQL & "請求明細データ MEISAI,"
gsSQL = gsSQL & "請求項目マスタ KOMOKU "
' gsSQL = gsSQL & "WHERE TO_CHAR(KANRI.請求月,'YYYY/MM') = '" & Format(.txtInput(0).Text & "01日", "YYYY/MM") & "' "
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'gsSQL = gsSQL & "WHERE CONVERT(varchar,KANRI.請求月,111) = '" & Format(.txtInput(0).Text, "YYYY/MM") & "/01' "
gsSQL = gsSQL & "WHERE CONVERT(varchar,KANRI.請求月,111) = '" & VB6Format(CDate(.txtInput(0).Text), "YYYY/MM") & "/01' "
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
gsSQL = gsSQL & "AND KANRI.販売店コード = '" & msHanbaiCD(miHanbaiCD_cntidx) & "' "
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'gsSQL = gsSQL & "AND HANBAI.入金予定日 BETWEEN '" & CInt(.txtInput(1).ClipText) & "' AND '" & CInt(.txtInput(2).ClipText) & "' "
gsSQL = gsSQL & "AND HANBAI.入金予定日 BETWEEN '" & CInt(.txtInput(1).Text) & "' AND '" & CInt(.txtInput(2).Text) & "' "
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
'2000/7/17
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'gsSQL = gsSQL & "AND MEISAI.出力区分 = '" & Format(miOutKBN, "00") & "' "
gsSQL = gsSQL & "AND MEISAI.出力区分 = '" & VB6Format(miOutKBN, "00") & "' "
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
' If miOutKBN <> 3 Then
' gsSQL = gsSQL & "AND MEISAI.出力区分 = '" & Format(miOutKBN, "00") & "' "
' Else
' gsSQL = gsSQL & "AND MEISAI.出力区分 >= '" & Format(miOutKBN, "00") & "' "
' End If
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'If .Combo1.ListIndex = 0 Then
If .Combo1.SelectedIndex = 0 Then
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
gsSQL = gsSQL & "AND KANRI.関係費 <> 0 "
End If
gsSQL = gsSQL & "AND HANBAI.販売店コード = KANRI.販売店コード "
gsSQL = gsSQL & "AND TENSYU.店主コード = KANRI.店主コード "
gsSQL = gsSQL & "AND MEISAI.販売店コード = KANRI.販売店コード "
gsSQL = gsSQL & "AND MEISAI.店主コード = KANRI.店主コード "
gsSQL = gsSQL & "AND MEISAI.請求月 = KANRI.請求月 "
gsSQL = gsSQL & "AND KOMOKU.請求項目コード = MEISAI.請求項目コード "
'2000/8/9
'gsSQL = gsSQL & "ORDER BY KOMOKU.単位 DESC,MEISAI.請求項目コード ASC"
gsSQL = gsSQL & "ORDER BY KOMOKU.出力順番,MEISAI.請求項目コード"
'' ログファイル書き込み
gbRet = CLogPut(giFileNum, "SQL:" & gsSQL)
End With
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Set mrRecset = COraSelect(goOraDB, gsSQL)
mrRecset = COraSelect(goOraDB, gsSQL)
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
Exit Function
CERROR:
ReadSeikyuMeisai = -1
'' エラーログ出力
gsMsg = "ERROR : ReadSeikyuMeisai( " & Err.Number & " " & Err.Description & " )"
Call CLogPut(giFileNum, gsMsg)
End Function
'-----------------------------------------------------------------------------
' @(f)
'
' 関数名 : GF_Type_Format
'
' 機能 : グループフッターの設定
'
' 機能説明 : 小計印字
'
' 備考 :
'-----------------------------------------------------------------------------
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
Private Sub GF_Type_Format()
'Private Sub GF_Type_Format(sender As Object, e As EventArgs) Handles GF_Type.Format
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
On Error GoTo CERROR
'' ログファイル書き込み
gbRet = CLogPut(giFileNum, "EVENT : GF_Type_Format")
miCntRow = miCntRow + 1
If miCntNum = 6 Then
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Label3.Caption = " 関 係 費 合 計( ②+③+④+⑤ )"
Label3.Text = " 関 係 費 合 計( ②+③+④+⑤ )"
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
mcSubTotal = GetSubTotal()
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Field2.Text = Format(mcSubTotal, "#,##0")
Field2.Text = VB6Format(mcSubTotal, "#,##0")
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
miCntNum = 0
Else
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Label3.Caption = GetSequenceNum(miCntNum)
Label3.Text = GetSequenceNum(miCntNum)
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
mcSubTotal = GetSubTotal()
'2020/06/17 VB.NETマイグレーション対応 UPDATE START
'Field2.Text = Format(mcSubTotal, "#,##0")
Field2.Text = VB6Format(mcSubTotal, "#,##0")
'2020/06/17 VB.NETマイグレーション対応 UPDATE END
mcTotal = mcTotal + mcSubTotal
End If
LayoutAction = GrapeCity.ActiveReports.LayoutAction.PrintSection Or GrapeCity.ActiveReports.LayoutAction.MoveLayout
Exit Sub
CERROR:
'' エラーログ出力
gsMsg = "ERROR : GF_Type_Format( " & Err.Number & " " & Err.Description & " )"
Call CLogPut(giFileNum, gsMsg)
End Sub
我来回答