List 6-161 Business.SlipコンポーネントのCancelConsentSlipメソッド
  1: Public Sub CancelConsentSlip(ByVal SlipID As Long)
  2:     '  指定された伝票を承認ずみから承認依頼中に戻す
  3:     '  【引数】
  4:     '    SlipID = 承認依頼中に戻したい伝票の伝票番号
  5:     '  【戻り値】
  6:     '    なし
  7:     Dim objContext As ObjectContext
  8:     Dim objDataSlip As DataObj.Slip
  9:     Dim objDataStock As DataObj.STOCK
 10:     Dim objRecStock As ADODB.Recordset
 11:     Dim SlipStatus As SlipStatus
 12:     Dim CONSENTEDUSER As Variant, CONSENTEDDATE As Variant, CONSENTEDCOMMENT As Variant
 13:     Dim old_REQDATE As Variant, old_REQUSER As Variant, old_REQCOMMENT As Variant
 14:     Dim old_CUSTOMERID As Variant, old_SUBTOTAL As Variant, old_TAX As Variant
 15:     Dim old_TOTAL As Variant, old_MADEDATE As Variant, old_MADEUSER As Variant
 16:     Dim old_LASTUSER As Variant, old_LASTDATE As Variant
 17:     
 18:     '  オブジェクトコンテキストの取得
 19:     Set objContext = GetObjectContext()
 20:     
 21:     '  エラーハンドラの設定
 22:     On Error GoTo ErrHandle
 23:     
 24:     '  DataObj.Slipコンポーネントを実体化
 25:     Set objDataSlip = CreateObject("DataObj.Slip")
 26:     
 27:     '  伝票が存在することを確認
 28:     If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
 29:         '  伝票が存在しない
 30:         Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
                       "指定された伝票は存在しません"
 31:     End If
 32:     
 33:     '  伝票の状態を取得
 34:     SlipStatus = objDataSlip.Get_SlipStatus(SlipID)
 35:     If (SlipStatus <> Consented) Then
 36:         '  伝票が承認ずみではない
 37:         Err.Raise BusinessError.ERR_CANTUPDATE, App.Title, _
                       "その伝票は承認ずみではありません"
 38:     End If
 39:     
 40:     '  権限の確認
 41:     If Not objContext.IsSecurityEnabled() Then
 42:         '  セキュリティ設定が無効
 43:         Err.Raise ERR_NOSECURE, App.Title, _
                       "セキュリティ機構が無効です"
 44:     End If
 45: 
 46:     '  現在の伝票の情報を取得
 47:     objDataSlip.GetRecord_Slip SlipID, old_CUSTOMERID, _
                                    old_SUBTOTAL, old_TAX, old_TOTAL, _
                                    old_MADEDATE, old_MADEUSER, _
                                    old_LASTDATE, old_LASTUSER
 48: 
 49:     '  承認したユーザー情報を取得
 50:     objDataSlip.GetRecord_Consented SlipID, CONSENTEDUSER, _
                                         CONSENTEDDATE, CONSENTEDCOMMENT
 51:     
 52:     '  起票者または承認したユーザーであるか
 53:     If Not (objContext.Security.GetOriginalCallerName() = old_MADEUSER Or _
            objContext.Security.GetOriginalCallerName() = CONSENTEDUSER) Then
 54:         '  一致しない
 55:         '  SalesAdminロール,AllAdminロールに属する
 56:         '  のであれば,一致しなくてもよいものとする
 57:         If Not (objContext.IsCallerInRole("SalesAdmin") Or _
                     objContext.IsCallerInRole("AllAdmin")) Then
 58:             '  SalesAdminロール,AllAdminロールに属さない
 59:             Err.Raise ERR_NOSECURE, App.Title, _
                           "他人が承認した伝票を元に戻すことはできません"
 60:         End If
 61:     End If
 62: 
 63:     '  CONSENTEDFLAGフィールドの値をFalseにする
 64:     objDataSlip.Set_CONSENTEDFLAG SlipID, False, Null
 65:     '  REQ_CONSENTFLAGフィールドの値をTrueにする
 66:     objDataSlip.GetRecord_Request SlipID, old_REQUSER, _
                                       old_REQDATE, old_REQCOMMENT
 67:     objDataSlip.Set_REQ_CONSENTFLAG SlipID, True, old_REQCOMMENT
 68: 
 69:     '  在庫情報テーブルに加えた出庫を示すレコードを削除する
 70:     '  この伝票から作られた出庫予定レコードを取得
 71:     '  DataObj.Stockコンポーネントの実体化
 72:     Set objDataStock = CreateObject("DataObj.Stock")
 73:     Set objRecStock = objDataStock.GetRecordsBySlipID(SlipID)
 74:     
 75:     While Not objRecStock.EOF
 76:         '  在庫情報テーブルの出庫予定レコードを削除する
 77:         objDataStock.DeleteRecord objRecStock.Fields("ID").Value
 78:         '  次のレコードに移動
 79:         objRecStock.MoveNext
 80:     Wend
 81:     
 82:     objRecStock.Close
 83:     Set objRecStock = Nothing
 84:     
 85:     '  各種コンポーネントの解放
 86:     Set objDataStock = Nothing
 87:     Set objDataSlip = Nothing
 88:     
 89:     '  コミットする
 90:     objContext.SetComplete
 91:     
 92:     '  オブジェクトコンテキストの解放
 93:     Set objContext = Nothing
 94:     
 95:     Exit Sub
 96:     
 97: ErrHandle:
 98:     '  エラーハンドラ
 99:     objContext.SetAbort
100:     Set objDataSlip = Nothing
101:     Set objDataStock = Nothing
102:     Set objRecStock = Nothing
103:     
104:     '  エラーの再発行
105:     Err.Raise Err.Number, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
106: End Sub