⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 age.cls

📁 金算盘软件代码
💻 CLS
📖 第 1 页 / 共 5 页
字号:
            Else
                strField1 = strField1 & strTemp1
            End If
           
            If ColIsChoosed(intI) Then
                If ColType(intI) = 1 Then
                    ColGrouped(intI) = True                                         '分组
                Else
                    ColGrouped(intI) = False
                End If
            End If
            If (ColOrderType(intI) <> 0) And (ColIsChoosed(intI)) Then              '排序字段
    
                If mstrOrderBy = "" Then                                '用别名组织排序子句
                    mstrOrderBy = " ORDER BY " & IIf(colDesc(intI) = "帐龄天数", strS1, ColName(intI))
                Else
                    mstrOrderBy = mstrOrderBy & " , " & IIf(colDesc(intI) = "帐龄天数", strS1, ColName(intI))
                End If
                If ColOrderType(intI) = 2 Then
                    mstrOrderBy = mstrOrderBy & " DESC "
                End If
            End If
        End If
    Next intI
    For intI = 0 To ColNumber - 1                                   '注:用别名
'        strTemp1 = IIf(ColIsChoosed(intI), IIf(colDesc(intI) = "帐龄天数", "Decode(sign(" & strZLTSField & "-0),1,TO_NUMBER(" & strS1 & "),0)", ColName(intI)) & " AS " & """" & colDesc(intI) & """", "")
        If mblnIsHeadCol(intI) Then
            strTemp1 = IIf(ColIsChoosed(intI), IIf(colDesc(intI) = "帐龄天数", "TO_NUMBER(" & strS1 & ")", ColName(intI)) & " AS " & """" & colDesc(intI) & """", "")
             
            If ColIsChoosed(intI) And colDesc(intI) = "应收帐龄天数" And (AgeViewID = 610 Or AgeViewID = 1005) Then
                mHaveChooseZLTS = True
            End If
            
            If strField1 <> "" And strTemp1 <> "" Then
                strField1 = strField1 & "," & strTemp1
            Else
                strField1 = strField1 & strTemp1
            End If
'
'            If ColIsChoosed(intI) Then
'                If ColType(intI) = 1 Then
'                    ColGrouped(intI) = True                                         '分组
'                Else
'                    ColGrouped(intI) = False
'                End If
'            End If
'            If (ColOrderType(intI) <> 0) And (ColIsChoosed(intI)) Then              '排序字段
'
'                If mstrOrderBy = "" Then                                '用别名组织排序子句
'                    mstrOrderBy = " ORDER BY " & IIf(colDesc(intI) = "帐龄天数", strS1, ColName(intI))
'                Else
'                    mstrOrderBy = mstrOrderBy & " , " & IIf(colDesc(intI) = "帐龄天数", strS1, ColName(intI))
'                End If
'                If ColOrderType(intI) = 2 Then
'                    mstrOrderBy = mstrOrderBy & " DESC "
'                End If
'            End If
        End If
    Next intI
    
    '区间字段
    
    strTemp1 = ""
    strAgePeriod1 = ""
    
'*************      金额计算公式(按“应收”+“应付”分析时)        ***************************
'
'
'查询结果 = IIF( 区间条件,应收 - 应付 ,0 )
'
'************************************************************************************************
    If Not IsGrouped Then                                      '按明细数据分析
        strTemp = "("
        strTemp2 = ")"
    Else
        strTemp = "(Sum("                                '按汇总数据分析
        strTemp2 = "))"
    End If
        
    strAmount1 = Me.Currencys
    If IsGrouped Then           '增加百分比字段(不是真实数据)
        strPercent = ",sum(dblRate) AS "
    Else
        strPercent = ",dblRate AS "
    End If
    
    For intI = 0 To PeriodNumber - 1
        strTemp1 = ""
        strTemp3 = ""

        If intI <> PeriodNumber - 1 Then
            strTemp1 = "DECODE(SIGN(" & strS1 & "-(" & str(PeriodDay(intI)) & ")),-1,0,(DECODE(SIGN(" & strS1 & "-(" & str(PeriodDay(intI + 1)) & _
                    ")),-1," & strAmount1 & ",0)))"
        Else
            strTemp1 = "DECODE(SIGN(" & strS1 & "-(" & str(PeriodDay(intI)) & ")),-1,0," & strAmount1 & ")"
        End If
        
        If strAgePeriod1 <> "" Or strField1 <> "" Then
            strAgePeriod1 = strAgePeriod1 & "," & strTemp & strTemp1 & strTemp2       '& " AS [" & PeriodName(inti) & "]"
        Else
            strAgePeriod1 = strTemp & strTemp1 & strTemp2
        End If
        If IsGrouped Then
            strAgePeriod1 = strAgePeriod1 & strPercent & """" & "%" & String(intI, "%") & """"
        End If
    Next intI
    
    If IsGrouped Then          ' 合计字段(不是真实数据)
        strSum = ",abs(sum(dblCurrPaymentAmount)) as " & """合计"""
    Else
        strSum = ",abs(dblCurrPaymentAmount) AS " & """合计"""
    End If
    
    strAgePeriod1 = strAgePeriod1 & strSum
    
'    mstrSelect1 = "SELECT " & strField1 & strAgePeriod1
        '**********************
    '计算帐龄天数的期间条件
     '是否已选应收帐龄天数,仅当应收帐龄汇总表
    If mHaveChooseZLTS Then
        GetYearMonth
        strAmount1 = Me.Currencys
        Select Case AgeViewID
            Case 610
                strS1 = "ARRQuery." & mvarAgeStartDate
                strAmount1 = "Decode(ARRQuery.blnIsDebit,1," & strAmount1 & ",0)"
            Case Else
                strS1 = "ARRQuery2." & mvarAgeStartDate
                strAmount1 = "Decode(ARRQuery2.blnIsDebit,1," & strAmount1 & ",0)"
        End Select
        strAgeYearMonth = ""
        For intI = 0 To mvarYearMonthNumber - 1
            strTemp1 = ""
            strTemp3 = ""
    
            If intI <> mvarYearMonthNumber - 1 Then
                strTemp1 = "SUM(Decode(Sign(To_Date(" & strS1 & ",'yyyy-mm-dd')-To_Date('" & mvarYearMonth(intI) & "','yyyy-mm-dd')),-1,0,1)* Decode(Sign(To_Date( " & strS1 & ",'yyyy-mm-dd')-To_Date('" & mvarYearMonth(intI + 1) & "','yyyy-mm-dd')),-1,1,0)*" & _
                          strAmount1 & ")"
            Else
                strTemp1 = "SUM(Decode(Sign(To_Date(" & strS1 & ",'yyyy-mm-dd')-To_Date('" & mvarYearMonth(intI) & "','yyyy-mm-dd')),-1,0,1)* Decode(Sign(To_Date( " & strS1 & ",'yyyy-mm-dd')-To_Date('JZRQ','yyyy-mm-dd')),-1,1,0)*" & _
                          strAmount1 & ") "
            End If
            
            If strAgeYearMonth <> "" Or strTemp1 <> "" Then
                strAgeYearMonth = strAgeYearMonth & "," & strTemp1 & " as " & """" & mvarYearMonth(intI) & """"
            Else
                strAgeYearMonth = "," & strTemp1 & " as " & """" & mvarYearMonth(intI) & """"
            End If
        Next
    End If
    
    '
    If mHaveChooseZLTS Then
        mstrSelect1 = "SELECT " & strField1 & strAgePeriod1 & strAgeYearMonth
    Else
        mstrSelect1 = "SELECT " & strField1 & strAgePeriod1
    End If

    SetAgeSelect = True
    
End Function

'设置 FROM 子句
'根据视图ID读出 View 数据表中的 SQL
Private Function SetAgeSQLFrom(ByVal lngViewId As Long) As Boolean
    Dim strSelect, strWhere As String
    Dim rstRecord As rdoResultset
    Dim strTemp As String
    
    strSelect = "SELECT * FROM view1 "
    
    If AgeViewID <> 0 Then
        strWhere = " WHERE lngViewID = " & AgeViewID
    Else
        strWhere = " WHERE lngViewID = " & lngViewId
    End If
    
    Set rstRecord = gclsBase.BaseDB.OpenResultset(strSelect & strWhere, rdOpenDynamic, 4)
    
    If rstRecord.EOF Then
        SetAgeSQLFrom = False
        Exit Function
    End If
    
    With rstRecord
        If Not .EOF Then
            .MoveLast
            .MoveFirst
            strTemp = !strViewSQL
            mstrWhereJoin = !StrViewWhere
        End If
        .Close
    End With
    mstrFrom1 = "FROM " & strTemp     '在 View 中,FROM 子句用“,”分隔为 3 个
    SetAgeSQLFrom = True
    mstrWhere1 = " where " & mstrWhereJoin & mstrWhere1
End Function

'设置汇总栏目,即 GROUP BY 子句
Private Function SetGroups() As Boolean
    Dim intI As Integer
    Dim strTemp As String
    Dim strStr1, strStr2, strStr3 As String
    
    strTemp = "GROUP BY "
    strStr1 = ""
    For intI = 0 To ColNumber - 1
        If IsGrouped Then
            If (ColType(intI) = 5 Or ColType(intI) = 1) And ColIsChoosed(intI) Then
                If ColOrderType(intI) = 0 Then ColOrderType(intI) = 1       '汇总字段必须排序
                
                If strStr1 = "" Then
                    strStr1 = ColName(intI) ' "[" & ColDesc(intI) & "]"
                Else
                    strStr1 = strStr1 & "," & ColName(intI) ' ColDesc(intI) & "]"
                End If
                
            Else
'                ColIsChoosed(intI) = False
            '************
'                If AgeViewID <> 610 And AgeViewID <> 1005 Then
'                    ColIsChoosed(intI) = False
'                End If
            '************
            End If
        End If
        
    Next intI
    
    mstrGroupBy1 = IIf(Len(strStr1) < 2, "", strTemp & strStr1)
    
    SetGroups = True
    
End Function

'存贮帐龄区间
Private Function SaveAgePeriod() As Boolean
    Dim strStr As String
    Dim rstRecord As rdoResultset
    Dim intI As Integer
    
    strStr = "DELETE  FROM AgePeriod  WHERE lngReportID = " & AgeReportID
    gclsBase.BaseDB.Execute (strStr)
    
    strStr = "SELECT * FROM AgePeriod"
    Set rstRecord = gclsBase.BaseDB.OpenResultset(strStr, rdOpenDynamic, rdConcurRowVer)
    
    With rstRecord
        For intI = 1 To PeriodNumber - 1
            .AddNew
            !LNGAGEPERIODID = GetNewID("AgePeriod")
            !strAgePeriodName = Trim(PeriodName(intI))  '区间描述
            !intDay = PeriodDay(intI)                   '天数
            !lngReportID = AgeReportID
            .Update
        Next intI
        .Close
    End With
    
    SaveAgePeriod = True
    
End Function

'释放类
Private Sub Class_Terminate()

    Erase mvarColDesc()         '栏目字段描述
    Erase mvarColTable()        '栏目字段所在表名
    Erase mvarColName()         '栏目字段名称
    Erase mvarColType()         '栏目字段类型
    Erase mvarColIsChoosed()    '栏目选择标志
    Erase mvarColWidth()        '栏目显示宽度
    Erase mvarColVersionType()  '栏目版本号
    Erase mvarColOrderType()    '栏目排序方式
    Erase mvarColIsFixed()      '是否固定栏目
    Erase mvarColFieldID()      '栏目ID
    Erase mvarColFieldSize()    '栏目字段宽度
    Erase mvarColGrouped()


    Erase mvarPeriodName()      '帐龄区间名称
    Erase mvarPeriodDay()       '帐龄区间天数
    
End Sub

'仅修改了日期条件,在报表显示窗体直接调用
Public Function GetReportSQL(Optional ByVal blnDate As Boolean = True) As Boolean
    Dim strSql1 As String
    
    If AgeReportID = 0 Then
        GetReportSQL = False
        Exit Function
    End If
    
    mblnOnlyDateChanged = blnDate
    
    GetAgeConditions AgeReportID, AgeViewID
    
    If SetGroups And SetAgeSelect And SetAgeSQLFrom(AgeViewID) Then     'And SetConditions(AgeViewID)
        strSql1 = mstrSelect1 & " " & mstrFrom1 & " " & mstrWhere1 & " " & mstrGroupBy1 & " " & mstrOrderBy
        SQLString = strSql1

    End If
    
    If UCase(AgeStartDate) = UCase("strReceiptDate") Then
        AgeDateDesc = "开票日"
    ElseIf UCase(AgeStartDate) = UCase("strDueDate") Then
        AgeDateDesc = "到期日"
    End If
    
    If blnDate Then
        SaveReport
    End If
        
    GetReportSQL = True
End Function

'取表头表尾栏目
Private Sub GetHeadTail(ByVal lngID As Long)
    Dim intCount As Integer
    Dim rstReport As rdoResultset
    '取表头栏目
    Set rstReport = gclsBase.BaseDB.OpenResultset("SELECT * FROM ReportHeadTail WHERE lngReportID=" _
                    & lngID & " AND bytFieldType=1 ORDER BY intFieldNO ", rdOpenDynamic)
    With rstReport
       If Not .EOF Then
         .MoveLast
         .MoveFirst
         HeadColumns = .RowCount
         For intCount = 0 To mvarHeadColumns - 1
           mvarHeadDesc(intCount) = !strFieldDesc
           mvarHeadFuncIndex(intCount) = !intFuncIndex
           mvarHeadWidth(intCount) = !lngFieldWidth
           mvarHeadHeight(intCount) = !lngFieldHeight
           mvarHeadLeft(intCount) = !lngFieldLeft
           mvarHeadTop(intCount) = !lngFieldTop
           mvarHeadAlign(intCount) = IIf(IsNull(!intAlign), 9, !intAlign)
           .MoveNext
         Next
      End If
   End With
   '取表尾栏目
   Set rstReport = gclsBase.BaseDB.OpenResultset("SELECT * FROM ReportHeadTail WHERE lngReportID=" _
                    & lngID & " AND bytFieldType=2 ORDER BY intFieldNO ", rdOpenDynamic)
    With rstReport
       If Not .EOF Then
         .MoveLast
         .MoveFirst
         TailColumns = .RowCount
         For intCount = 0 To mvarTailColumns - 1
           mvarTailDesc(intCount) = !strFieldDesc
           mvarTailFuncIndex(intCount) = !intFuncIndex
           mvarTailWidth(intCount) = !lngFieldWidth
           mvarTailHeight(intCount) = !lngFieldHeight
           mvarTailLeft(intCount) = !lngFieldLeft
           mvarTailTop(intCount) = !lngFieldTop
           mvarTailAlign(intCount) = IIf(IsNull(!intAlign), 9, !intAlign)
           .MoveNex

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -