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

📄 mainmodule.bas

📁 针对农资系统的商品进销存管理系统软件
💻 BAS
📖 第 1 页 / 共 3 页
字号:
Attribute VB_Name = "MainModule"
Option Explicit
Public Const SYSTEM_SECTION = "SystemInfo"

'///////////////////////////////////////////
'//StockUp表中FType定义:
Public Const STOCKUP_INVOICE = 0        '购进单
Public Const INFORMAL_INVOICE = 1       '估进单
Public Const RETURN_INVOICE = 2         '进货退还单

'///////////////////////////////////////////
'//WaresIn表中FType定义:
Public Const INIT_INVOICE = 0           '期初库存
Public Const IN_INVOICE = 1             '验收入库单
Public Const SURROGATE_INVOICE = 2      '代管入库单
Public Const WASTAGE_INVOICE = 3        '盘点单
Public Const BACK_INVOICE = 4           '商品退还单

'///////////////////////////////////////////
'//Warehouse表中FHouseAttrib定义:
Public Const INNER_HOUSE = 0            '内库
Public Const OUTER_HOUSE = 1            '外库

'///////////////////////////////////////////
'//Sell表中FType定义:
Public Const SELL_INVOICE = 0           '销售单
Public Const SELFUSE_INVOICE = 1        '领用单
Public Const REDSELL_INVOICE = 2        '销售退货单

'///////////////////////////////////////////
'//WaresOut表中FType定义:
Public Const OUT_SELL = 0               '出库单
Public Const OUT_OTHER = 1              '代管出库单
Public Const OUT_RED = 2                '退库单

'///////////////////////////////////////////
'//Depart表中FDepartAttrib定义:
Public Const COMPANY_DEPART = 0         '总公司
Public Const STOCKUP_SELL_DEPART = 1    '采购兼销售
Public Const STOCKUP_DEPART = 2         '采购
Public Const SELL_DEPART = 3            '销售
Public Const HOUSE_DEPART = 4           '库房

'///////////////////////////////////////////
'//WaresList表中FPriceMode定义:
Public Const FIFO_MODE = 0              '先进先出
Public Const WEIGHT_AVER_MODE = 1       '加权平均
Public Const MOVE_AVER_MODE = 2         '移动平均
Public Const LIFO_MODE = 3              '后进先出

'///////////////////////////////////////////
'//库存明细帐Ledger表中FFlag定义:
Public Const PREV_YEAR_CLOSE As Integer = 0     '上年结转
Public Const PREV_MONTH_CLOSE As Integer = 1    '上月结转

Public Const IN_HOUSE_DETAIL As Integer = 2     '入库明细
Public Const IN_WASTAGE_DETAIL As Integer = 3   '盘点溢损明细
Public Const IN_BACK_DETAIL As Integer = 4      '入库退还
Public Const OUT_HOUSE_DETAIL As Integer = 5    '出库明细
Public Const OUT_RETURN_DETAIL As Integer = 6   '出库退货

Public Const THIS_DAY_SUM As Integer = 13       '本日合计
Public Const THIS_MONTH_SUM As Integer = 14     '本月合计
Public Const THIS_SEASON_TOTAL As Integer = 15  '本季累计
Public Const THIS_YEAR_TOTAL As Integer = 16    '本年累计
Public Const THIS_SEASON_SUM As Integer = 17    '本季合计
Public Const THIS_YEAR_SUM As Integer = 18      '本年合计
Public Const CLOSE_NEXT_YEAR As Integer = 19    '结转下年

'///////////////////////////////////////////
'//选择商品
Public Const SELECT_DETAIL As Integer = 0       '选择商品明细
Public Const SELECT_TYPE As Integer = 1         '选择商品类别
Public Const SELECT_DETAIL_TYPE As Integer = 2  '选择商品明细或类别

'///////////////////////////////////////////
'//当前操作员级别定义:
Public Const SUPPER_MANAGER As Integer = 0      '系统主管
Public Const DEPART_MANAGER As Integer = 1      '部门主管
Public Const GENERAL_OPERATOR As Integer = 2    '普通操作员

'///////////////////////////////////////////
'//
Global m_gSeriesNum As Integer                  '商品代码总级数
Global m_gSeriesLen() As Integer                '商品代码级长数组
Global CHARGE_CODE As String                    '经营费用一级代码

'///////////////////////////////////////////
'//
Global m_gMainForm As frmMain
Global m_gsConnection As String
Global m_gDBCnn As ADODB.Connection
Global m_gsDBName As String
Global m_gsIniFile As String

Global m_sUnitName As String
Global m_gLoginDate As Date
Global m_gnYear As Integer
Global m_gbyMonth As Byte

Global m_gsDepartCode As String             '当前操作员所属部门
Global m_gnDepartAttrib As Integer          '当前操作员部门属性
Global m_gsOperator As String               '当前操作员姓名
Global m_gsPassword As String               '当前操作员口令
Global m_gnLevel As Integer                 '当前操作员级别

Global m_gnMoneyDecimal As Integer          '金额保留小数位数
Global m_gnPriceDecimal As Integer          '单价保留小数位数
Global m_gnQuantityDecimal As Integer       '数量保留小数位数

Global ShowRate As Single
Global m_gbSellMoney As Boolean             '贷方是否写销售金额

Sub Main()
    frmSplash.Show
    frmSplash.Refresh
    
    m_gsDBName = App.Path & "\Warehouse.mdb"
    m_gsConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source= " & m_gsDBName
    m_gsIniFile = App.Path & "\" & App.EXEName & ".INI"
    
    Set m_gDBCnn = New ADODB.Connection
    m_gDBCnn.ConnectionString = m_gsConnection
    m_gDBCnn.CursorLocation = adUseClient
    m_gDBCnn.Open
    Dim SystemRs As ADODB.Recordset
    Set SystemRs = New ADODB.Recordset
    With SystemRs
        .Open "Select * From System", m_gDBCnn
        If .EOF And .BOF Then
           DlgInit.Show vbModal
           If Not DlgInit.m_bOK Then
              End
           End If
           Unload DlgInit
       End If
    End With
    frmLogin.SetMeCaption = "系统登录"
    frmLogin.Show vbModal, frmSplash
    If Not frmLogin.OK Then
        End
    End If
    Unload frmLogin
    
    Dim bFirst As String
    bFirst = GetPrivateSetting(SYSTEM_SECTION, "FirstRun", "")
    If UCase(bFirst) <> UCase("False") Then
        SavePrivateSetting SYSTEM_SECTION, "FirstRun", "FALSE"
        frmSeriesDef.Show vbModal
    End If
    '初始商品代码级数和级长
    InitSeries
    
    Set m_gMainForm = New frmMain
    Load m_gMainForm
    m_gMainForm.Show
    
    ShowRate = 1#
    m_gbSellMoney = GetPrivateSetting(SYSTEM_SECTION, "SellMoney", "False")
    Unload frmSplash
End Sub
    
Private Sub InitSeries()
    Dim rst As ADODB.Recordset
    Dim i As Integer
    
    Set rst = New ADODB.Recordset
    rst.Open "select FseriesNum, FSeriesLength From Seriesdef", m_gDBCnn, adOpenStatic, adLockReadOnly
    
    If Not (rst.EOF And rst.BOF) Then
        rst.MoveLast
        m_gSeriesNum = rst.RecordCount
        rst.MoveFirst
        ReDim m_gSeriesLen(m_gSeriesNum)
        i = 0
        
        Do While Not rst.EOF
            m_gSeriesLen(i) = rst![FSeriesLength]
            i = i + 1
            rst.MoveNext
        Loop
        CHARGE_CODE = String(m_gSeriesLen(0), "A")
    Else
        MsgBox "级数表有误,请与维护人员联系", vbOKOnly + vbExclamation, "提示:"
    End If
    rst.Close
    
    m_gnMoneyDecimal = GetPrivateSetting(SYSTEM_SECTION, "MoneyDecimal", 2)
    m_gnPriceDecimal = GetPrivateSetting(SYSTEM_SECTION, "PriceDecimal", 2)
    m_gnQuantityDecimal = GetPrivateSetting(SYSTEM_SECTION, "QuantityDecimal", 2)
End Sub
'/////////////////////////////////////////////////
'//
Public Function GetDepartFunctionField() As String
    Dim sField As String
    
    Select Case m_gnDepartAttrib
        Case COMPANY_DEPART
            sField = "FCompanyItem"
        Case STOCKUP_SELL_DEPART
            sField = "FStockupSellItem"
        Case STOCKUP_DEPART
            sField = "FStockupItem"
        Case SELL_DEPART
            sField = "FSellItem"
        Case HOUSE_DEPART
            sField = "FHouseItem"
        Case Else       '超级主管登录(部门代码='', 部门属性=-1)
            sField = "FSupperItem"
    End Select
    GetDepartFunctionField = sField
End Function

Public Function GetLastVisibleCol(Grd As DataGrid) As Integer
    Dim i As Integer
    With Grd
        For i = .Columns.Count - 1 To 0 Step -1
            If .Columns(i).Visible And .Columns(i).Width >= 61 And Not .Columns(i).Locked Then
                GetLastVisibleCol = i
                Exit Function
            End If
        Next
    End With
    GetLastVisibleCol = -1
End Function

Public Function RsIsEmpty(sSqlStr As String) As Boolean
    Dim TempRs As ADODB.Recordset
    Set TempRs = New ADODB.Recordset
    TempRs.Open sSqlStr, m_gDBCnn
    
    With TempRs
        If .EOF And .BOF Then
            RsIsEmpty = True
        Else
            RsIsEmpty = False
        End If
    End With
    Set TempRs = Nothing
End Function

'////////////////////////////////////////////////////////////////////
'//FindRs为与DataGrid绑定记录集的复制, 且尚未对当前记录执行Update!
Public Function FieldIsRepeat(FindRs As ADODB.Recordset, sFindStr As String) As Boolean
    With FindRs
        If .RecordCount = 1 Then
            FieldIsRepeat = False
        Else
            ' 新创建副本的当前记录将设置为首记录。
            .Find sFindStr
            If .EOF Then
                FieldIsRepeat = False
            Else
                FieldIsRepeat = True
            End If
        End If
    End With
    Set FindRs = Nothing
End Function

'//////////////////////////////////////////////////////////
'//SQL格式: Select Max(KeyField) From TableName Where ...
'//若返回空串, 则表示数据宽度已超出有效范围
Public Function GetNewInvoiceNo(sSqlStr As String, nKeyIndex As Integer) As String
    Dim TempRs As ADODB.Recordset
    Dim sNo As String, nLen As Integer
    
    Set TempRs = New ADODB.Recordset
    TempRs.Open sSqlStr, m_gDBCnn
    
    With TempRs
        If IsNull(.Fields(nKeyIndex).Value) Then
            sNo = "1"
        Else
            sNo = Trim(Str(Val(.Fields(nKeyIndex).Value) + 1))
        End If
        
        'nLen = .Fields(nKeyIndex).DefinedSize - Len(sNo)
        nLen = 10 - Len(sNo)
        If nLen < 0 Then
            GetNewInvoiceNo = ""
        Else
            GetNewInvoiceNo = String(nLen, "0") & sNo
        End If
    End With
    Set TempRs = Nothing
End Function

'//////////////////////////////////////////////////////////
'//SQL格式: Select Max(KeyField) From TableName Where ...
Public Function GetNewIndex(sSqlStr As String, nKeyIndex As Integer) As Long
    Dim TempRs As ADODB.Recordset
    Dim nIndex As Long
    
    Set TempRs = New ADODB.Recordset
    TempRs.Open sSqlStr, m_gDBCnn
    
    With TempRs
        If IsNull(.Fields(nKeyIndex).Value) Then
            nIndex = 0
        Else
            nIndex = .Fields(nKeyIndex).Value + 1
        End If
        
        GetNewIndex = nIndex
    End With
    Set TempRs = Nothing
End Function

Public Function GetSelectWaresCode(sFilter As String, Optional ByRef bSelectWares As Boolean, Optional nType As Integer = SELECT_DETAIL) As String
    bSelectWares = True
    Dim f As frmSelectWares
    Set f = New frmSelectWares
    f.SqlFilter(sFilter) = nType
    f.Show vbModal
    GetSelectWaresCode = f.SelectWaresCode
    Unload f
    bSelectWares = False
End Function

'////////////////////////////////////////////
'//金额、单价、数量格式串
Private Function GetNumericFromat(nDecimal As Integer) As String
    GetNumericFromat = "#########0" & IIf(nDecimal = 0, "", "." & String(nDecimal, "0"))
End Function

Public Function MoneyFormat() As String
    MoneyFormat = GetNumericFromat(m_gnMoneyDecimal)
End Function

Public Function PriceFormat() As String
    PriceFormat = GetNumericFromat(m_gnPriceDecimal)
End Function

Public Function QuantityFormat() As String
    QuantityFormat = GetNumericFromat(m_gnQuantityDecimal)
End Function

'/////////////////////////////////////////////////
'//
Public Sub FindRecord(ByRef AdoRs As ADODB.Recordset, sNo As String)
    Dim nRet As Integer

⌨️ 快捷键说明

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