4-about controls

本文详细介绍了VB.NET中常用的控件及其属性、事件和方法,包括标签、文本框、按钮、图片框、列表框、组合框、滚动条、计时器、分组框等,并通过实例演示了控件的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

标签
⒈ 标签的属性
 常用属性:
 ⑴ Text      
 ⑵ TextAlign  
 ⑶ Autosize    
 ⑷ BorderStyle  
 ⑸ Enabled    
 ⑹ Image
 其他:BackColor、ForeColor、Font、Height、Left、Name、Top、Visible、Width等。
⒉ 标签的事件和方法:Click和DblClick事件。
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
文本框
⒈ 文本框属性
⑴ MaxLength    
⑵ Multiline
⑶ PassWordChar    
⑷ ScrollBars
⑸ Text    
⑹ Locked    
⑺ TextAlign
⑻ ReadOnly    
⑼ WordWrap
⒉ 文本框事件
⑴ TextChanged事件
⑵ LostFocus事件
⑶ GotFocus事件
⒊ 文本框方法
 Focus是文本框中常用的方法:[对象.]Focus


编写程序,用文本框检查口令输入。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        me.Show()
        me.Text = "输入口令"
        Button1.Text = "检查口令"
        TextBox1.Text = ""
        TextBox1.PasswordChar = "*"
        TextBox1.Focus()
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "123456" Then
            MsgBox("口令正确,继续执行", , "")
            End
        Else
            MsgBox("口令不对,请重新输入", , "")
            TextBox1.Text = "“
      TextBox1.Focus()
        End If
End Sub

'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
图形控件
图片框的主要属性
⒈ 与窗体属性相同的属性
⒉ Image属性
⒊ BorderStyle属性
⒋ SizeMode属性

图形文件的装入
⒈ 在设置阶段装入图形文件
      ⑴ 用属性窗口中的Image属性装入。
      ⑵ 利用剪贴板把图形粘贴(Paste)到图片框中。
⒉ 在运行期间装入图形文件
       可以用Image.FromFile方法把图形装入图片框中。Image.FromFile方法的功能与Image属性基本相同,即用来把图形文件装入图片框,其一般格式为:
   图片框名.Image=Image.FromFile(″文件名″)


编写程序,交换两个图片框中的图形。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
        PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage
        PictureBox3.SizeMode = PictureBoxSizeMode.StretchImage
        PictureBox1.Image = Image.FromFile("f:/vb.app/ch07/fll.jpg") '''''''''''''''''''''''''
        PictureBox2.Image = Image.FromFile("f:/vb.app/ch07/mll.jpg")''''''''''''''''''''''''
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox3.Image = PictureBox1.Image
        PictureBox1.Image = PictureBox2.Image
        PictureBox2.Image = PictureBox3.Image
        '隐藏第三个图片框
        PictureBox3.Visible = False
End Sub
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
按钮控件
属性和事件
⒈ Text属性
⒉ FlatStyle属性
⒊ Image属性
⒋ BackGroundlmage属性
⒌ ImageAlign属性
⒍ TextAlign属性

编写程序,模拟交通信号灯的切换。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox2.Visible = False
        PictureBox3.Visible = False
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        If PictureBox1.Visible = True Then
            PictureBox1.Visible = False
            PictureBox2.Visible = True
  ElseIf PictureBox2.Visible = True Then
            PictureBox2.Visible = False
            PictureBox3.Visible = True
        Else
            PictureBox3.Visible = False
            PictureBox1.Visible = True
        End If
End Sub
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
选择控件——复选框和单选按钮
 
复选框和单选按钮的属性和事件
⒈ 属性
⒉ CheckedState属性(用于复选框)
⒊ Checked属性(用于复选框和单选按钮)
⒋ Apperence属性(用于复选框和单选按钮):Normal常规外观/Button按钮式外观
⒌ FlatStyle属性(用于复选框和单选按钮)
事件:change事件和click事件

在窗体建立一个文本框和两个复选框,其标题分别为“体育”和“音乐” 。
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
        If CheckBox1.Checked And CheckBox2.Checked = False Then
            TextBox1.Text = "我的爱好是体育"
        End If
        If CheckBox2.Checked And CheckBox1.Checked = False Then
            TextBox1.Text = "我的爱好是音乐"
        End If
        If CheckBox1.Checked And CheckBox2.Checked Then

  TextBox1.Text = "我的爱好是体育和音乐"
        End If
        If CheckBox1.Checked = False And CheckBox2.Checked = False Then
            TextBox1.Text = ""
        End If
    End Sub
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
选择控件——列表框和组合框
1.列表框属性
⑴ Items:该属性用来列出表项的内容。
⑵ Items.Count:该属性列出列表框中表项的数量。
⑶ SelectedIndex:该属性的设置值是已选中的表项的位置。
⑷ SelectionMode:该属性用来设置一次可以选择的表项数。
⑸ GetSelected:当一个元素的值为True时,表明选择了该项;如果为False则表明未选择。
⑹ Sorted:该属性用来确定列表框中的项目是否按字母数字升序排列。
⑺ Text:该属性的值为最后一次选中的表项的文本,不能直接修改Text属性。
⑻ MultiColumn:该属性用来设定列表框中项目的显示方式,即以多列方式显示或以单列方式显示。
⑼ ColumnWidth:当MultiColumn属性被设置为True时,可以用该属性设定列表框的列宽度,以像素为单位。

⒉ 列表框事件:Click、DblClick、GotFocus和LostFocus事件。

⒊ 列表框方法
⑴ Items.Add。该方法用来在列表框中插入一行文本。
⑵ Items.Clear。该方法用来清除列表框的全部内容 。
⑶ Items.Remove。用该方法可以删除列表框中指定的项目。
⑷ Items.RemoveAt。该方法用来删除列表框中指定的项目。

交换两个列表框中的项目。其中一个列表框中的项目按字母升序排列,另一个列表框中的项目按加入的先后顺序排列。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim a As Integer
        ListBox1.Items.Add("IBM")
        ListBox1.Items.Add("Compaq")
        ListBox1.Items.Add("HP")
        ListBox1.Items.Add("FUJI")
        ListBox1.Items.Add("Digital")
        ListBox1.Items.Add("长城")
        ListBox1.Items.Add("联想")
        ListBox1.Items.Add("Canon")
 ListBox1.Items.Add("四通")
        ListBox1.Items.Add("Acer")
        ListBox1.Items.Add("Nec")
        ListBox1.Items.Add("NCR")
End Sub
Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
        ListBox2.Items.Add(ListBox1.Text)
        ListBox1.Items.Remove(ListBox1.SelectedItem)
End Sub
Private Sub ListBox2_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox2.DoubleClick
        ListBox1.Items.Add(ListBox2.Text)
        ListBox2.Items.Remove(ListBox2.SelectedItem)
End Sub


复选列表框CheckedListBox。
是对标准列表框的扩展,其功能和用法基本相同,主要有以下两点区别:
⑴ 在表项的左侧显示复选框标记。
⑵ 在复选列表框中不能使用多选方式,即只能选择一项或没有任何选择。只有加了选择标记的才是被选中的项。
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
组合框(Combo Box)是组合列表框和文本框的特性而成的控件。
⒈ 组合框属性:列表框的属性基本上都可用于组合框,此外它还有自己的一些属性。
⑴ DropDownStyle:DropDown下拉式组合框/Simple简单组合框/DropDownList下拉式列表框
⑵ Text。该属性值是用户所选择的项目的文本或直接从编辑区输入的文本。
⒉ 组合框事件:单击组合框中向下的箭头时,将触发Dropdown事件,该事件实际上对应于向下箭头的单击(Click)事件。
⒊ 组合框方法:Items.Add、Items.Clear和Items.Remove、Items.RemoveAt用法与在列表框中相同 。


从屏幕上选择微机的配置,并显示出来。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("IBM")
        ComboBox1.Items.Add("Compaq")
        ComboBox1.Items.Add("方正")
        ComboBox1.Items.Add("联想")
        ComboBox1.Items.Add("HP")
        ComboBox1.Items.Add("Acer")
        ComboBox1.Items.Add("DEC")
        ComboBox2.Items.Add("奔腾4 1.0G")
        ComboBox2.Items.Add("奔腾4 1.2G")
        ComboBox2.Items.Add("奔腾4 1.4G")
        ComboBox2.Items.Add("奔腾4 1.5G")
        ComboBox2.Items.Add("奔腾4 1.7G")
        ComboBox2.Items.Add("奔腾4 1.8G")
        ComboBox2.Items.Add("奔腾4 2.0G")
        ComboBox3.Items.Add("128MB SDRAM")
        ComboBox3.Items.Add("256MB DDR")
        ComboBox3.Items.Add("256MB DDR 333")
        ComboBox3.Items.Add("512MB SDRAM")
  ComboBox4.Items.Add("20GB")
        ComboBox4.Items.Add("32GB")
        ComboBox4.Items.Add("40GB")
        ComboBox4.Items.Add("60GB")
        ComboBox4.Items.Add("80GB")
End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim S, c1 As String
        c1 = Chr(13) & Chr(10)
        S = "所选择的配置为:″"
        S = S & c1 & "机型:″ & ComboBox1.Text"
        S = S & c1 & "CPU:" & ComboBox2.Text
        S = S & c1 & "内存:" & ComboBox3.Text
        S = S & c1 & "硬盘:" & ComboBox4.Text
        MsgBox(S, , "微机配置")
End Sub
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
滚动条:水平滚动条和垂直滚动条。滚动条的两端各有一个滚动箭头,在滚动箭头之间有一个滚动框。
⒈ 滚动条属性
⑴ Value。该属性值表示滚动框在滚动条上的当前位置。
⑵ Maximum。滚动条所能表示的最大值,取值范围为-32768~32767,默认值为100。
⑶ Minimum。滚动条所能表示的最小值,取值范围同Maximum,默认值为0。
⑷ LargeChange。当单击滚动条中滚动框前面或后面的部位,或者按下PAGE UP键或PAGE DOWN键时,Value属性值将根据LargeChange属性的设置值而更改。
⑸ SmallChange。单击滚动条两端和箭头时,Value属性值将根据SmallChange属性的设置值而更改。

⒉ 滚动条事件:Scroll和ValueChanged。


把水平滚动条的属性设置为:
LargeChange        10
Maximum            200
Minimum            0
SmallChange        2

Private Sub HScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar1.ValueChanged
        TextBox1.Text = Str(HScrollBar1.Value)
End Sub
Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll
        Label4.Text = "移动到:" & Str(HScrollBar1.Value)
End Sub

'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
计时器
Visual Basic.NET中的大多数控件都是用来建立用户界面的,程序运行后,这些控件出现在窗体上,构成了用户界面。而有些控件不用来构成用户界面,程序运行后消失,这类控件称为非用户界面控件,计时器就是一种非用户界面控件。

属性
Name
Enabled
Interval以毫秒为单位,其值Integer类型。

事件
Tick。对于一个含有计时器控件的窗体,每经过一段由属性Interval指定的时间间隔,就产生一个Tick事件。

用计时器实现控件的移动。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 1000
        Label1.Text = "Visual Studio.NET"
        Button1.Text = "移动/停止"
        Button2.Text = "退出"
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label1.Left += 10
        Label1.Left = Label1.Left Mod Me.Width
        Beep()                  '响铃
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = Not Timer1.Enabled
End Sub
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
分组框控件
分组框(GroupBox)是一个容器控件,用于将屏幕上的对象分组。可以把不同的对象放在一个分组框中,分组框提供了视觉上的区分和总体的激活/屏幕特性。
属性:Enabled、Font、Height、Left、Top、Visible、Width、Name、Text。

编写一个“选举投票”程序。参加选举的人对候选人投票,程序统计每个候选人的标数,并输出显示结果。
Dim Num_Z, Num_L, Num_W As Integer (该语句放在窗体层)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "选举投票"
        GroupBox1.Text = "候选人"
        GroupBox2.Text = "操作"
        GroupBox3.Text = "显示结果"
        RadioButton1.Text = "王祖英“
 RadioButton2.Text = "张丽媛"
        RadioButton3.Text = "江朗才子"
        Button1.Text = "投票"
        Button2.Text = "显示结果"
        Button3.Text = "退出"
        TextBox1.Text = ""
        Num_Z = 0
        Num_L = 0
        Num_W = 0
End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        If RadioButton1.Checked Then
            Num_Z = Num_Z + 1
        End If
        If RadioButton2.Checked Then
            Num_L = Num_L + 1
        End If
        If RadioButton3.Checked Then
            Num_W = Num_W + 1
        End If
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim cl As String = Chr(13) & Chr(10)
        Dim S As String = "选择结果:" & cl
        S = S & cl & RadioButton1.Text & Str(Num_Z) & "票"
        S = S & cl & RadioButton2.Text & Str(Num_L) & "票"
        S = S & cl & RadioButton3.Text & Str(Num_W) & "票"
        TextBox1.Text = S
End Sub
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
焦点与Tab顺序
焦点:接收用户鼠标或键盘输入的能力。当一个对象个有焦点时,它可以接收用户的输入。
      当对象得到焦点时,会产生GotFocus事件;而当对象失去焦点时,将产生LostFocus事件。

可以用下而的方法设置一个对象的焦点:
?在运行时单击该对象。
?运行时用快捷键选择该对象。
?在程序代码中使用Focus方法。

可以获得焦点的控件都有一种称为“TabStop”的属性,用它可以控制焦点的移动。该属性的默认值为True,如果把它设置为False,则在用Tab移动焦点时会跳过该控件。TabStop属性为False的控件,仍然保持它在实际的Tab顺序中的位置,只不过在按Tab键时这个控件被跳过。

在设计阶段,可以通过属性窗口的TabIndex属性来改变Tab顺序。不能获得焦点的控件以及无效的和不可见的控件不具有Tabindex属性,因而不包含在Tab顺序中,按Tab键时,这样的控件将被跳过。
'
'---------------------------------|||无敌分割线|--------------------------------------------------------------------
'
键盘和鼠标

1.KeyPress事件
       KeyPress事件只对会产生ASCII码的按键有反应,包括数字、大小写字母、Enter、BackSpace、Esc、Tab等键。
       KeyPress事件处理程序接收一个KeyPressEventArgs类型的参数(参数e),它含有与此事件相关的数据。在KeyPress事件中,主要使用KeyPressEventArgs的KeyChar属性。当执行KeyPress事件过程时,KeyChar是与按键所对应的字符。 

编写口令程序。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "输入口令"
        Label1.Text = ""
        Label1.BorderStyle = BorderStyle.Fixed3D
End Sub
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        Static pword As String
        Static counter As Short
        Static number As Short
        number += 1

  If number = 12 Then End
        counter = counter + 1
        pword = pword + e.KeyChar
        Label1.Text += "*"
        If LCase(pword) = "abcd" Then
            Label1.Text = ""
            pword = 0
            MsgBox("口令正确,继续...", , "")
            counter = 0
            MsgBox("Continue......", , "")
        ElseIf counter = 4 Then
            counter = 0
            pword = ""
            Label1.Text = ""
            MsgBox("口令不对,请重新输入", , "")
        End If
  End Sub

 

⒉ KeyUp和KeyDown事件
       当控制焦点在某个对象上,同时用户按下键盘上的任一键,便会引发该对象的KeyDown事件,释放按键便触发KeyUp事件。
       两个事件过程的参数相同,其中第二个参数用来测试按键,该参数的类型为KeyEventArgs,它含有与此事件相关的数据。包括:
⑴ Alt:是否按下ALT键。
⑵ Control:是否按下Ctrl键。
⑶ Handled:是否处理过此事件。
⑷ KeyCode:按键实际的ASCII码。
⑸ KeyData:获取键数据。
⑹ KeyValue:获取键值。
⑺ Modifiers:获取转换标志,用来确定是否按了转换键Ctrl、Shift或Alt。
⑻ Shift:判断是否按下Shift键。
       KeyDown是当一个键被按下时所产生的事件,而KeyUp是松开被压下的键所产生的事件。利用参数e,可以判断按下的具体的键,如果不使用参数e,则泛指键盘上的任何键。


编写一个程序,当按下键盘上的某个键时,输出该键的KeyCode码。
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        Static i As Short
        i = i + 1
        If i Mod 10 = 0 Then
            Debug.Write(Chr(e.KeyCode) & "-" & Hex(e.KeyCode) & "    ")
            Debug.WriteLine("")
            Debug.WriteLine("")
        ElseIf e.KeyCode = 13 Then
            i = 0
            Debug.WriteLine("")
      Debug.WriteLine("")
        Else
            Debug.Write(Chr(e.KeyCode) & "-" & Hex(e.KeyCode) & "    ")
        End If
  End Sub


鼠标事件
除了Click(单击)和Dblclick(双击)之外,重要的鼠标事件还有:
⒈ 压下、松开和移动鼠标
    MouseDown事件:当鼠标的任意一个按钮按下时被触发。
    MouseUp事件:当鼠标的任意一个按钮释放时被触发。
    MouseMove事件:当鼠标移动时被触发。

三个鼠标事件过程具有相同的参数,鼠标的当前状态由第二个参数 e的属性决定。
鼠标位置由参数e的X、Y属性确定,这两个属性都是Integer值,其中e.X用来获取鼠标单击时的X坐标,而e.Y用来获取鼠标单击时的Y坐标。这里的X、Y不需要给出具体的数值,它随鼠标光标在窗体上的移动而变化。

编写程序,在窗体上移动鼠标,如果压下鼠标按钮,则在文本框中显示鼠标光标的当前位置;如果不压下鼠标按钮,则在移动鼠标时不显示鼠标当前位置。
在窗体上画一个文本框,然后编写如下事件过程:
Dim paintnow As Boolean      '窗体层变量
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        paintnow = True
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        paintnow = False
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If paintnow Then
            TextBox1.Text = "鼠标当前位置是:" & Str(e.X) & "," & Str(e.Y)
        End If
End Sub

⒉ MouseEnter和MouseLease事件
       当鼠标光标移入一个控件时,发生该控键的MouseEnter事件;当鼠标光标移出一个控件时,将发生该控件的MouseLease事件。
       在Windows的各种工具栏中,当鼠标光标位于某个工具按钮上时,将显示该按钮的名称或简要说明。利用MouseEnter和MouseLease事件,可以很容易地实现类似操作。本书限于篇幅,我们这里不再举例说明。


 

你还在狡辩,再给你完整SAP note 1854763: Symptom Material number or Quantity is not updated in FI document because you have set up summarization procedure from the documents coming from MM module. Environment Financial Accounting (FI) SAP ERP SAP ERP Central Component SAP enhancement package for SAP ERP SAP enhancement package for SAP ERP, version for SAP HANA SAP R/3 SAP R/3 Enterprise SAP S/4HANA Finance SAP S/4HANA Reproducing the Issue Create MM document BSEG-MATNR or BSEG-MENGE in accounting document is not updated Cause Please have a look at the reference procedure of the affected FI document (-> BKPF-AWTYP), and have a look at transaction OBCY, whether a summarization is defined in FI for this reference procedure (AWTYP). If field BSEG-MATNR, BSEG-MENGE etc. is contained in transaction OBCY for this reference procedure (AWTYP), the content in field BSEG-MATNR is deleted in FI for summarization reasons. Please refer to note 36353 which has very good information about summarisation. If you have summarization activated, the contents of the field are deleted in every document for the respective reference procedure and the document line items are summarized. Resolution Please check table TTYPV (in transaction OBCY): if you want to get the field material, quantity etc. in the accounting document, this field must NOT be in the table TTYPV, because FI is deleting all fields of TTYPV to make the summarization. First please remove the material field from the table TTYPV so that it can pass from MM to FI. For the historical data, please first add a document change rule to make the field BSEG-MATNR, BSEG-MENGE etc. modifiable by path SPRO -> FI ->Global Settings -> Document -> Line item -> Controls -> Document change rule. Then make sure it is visible in the line item and add it to the posted documents.
最新发布
08-02
<think>嗯,用户遇到了SAP系统中一个典型的财务与物料模块集成问题:当MM模块使用汇总流程时,FI凭证中的物料编号或数量未更新。这个问题涉及SAP核心的跨模块集成逻辑,需要从系统配置和业务逻辑两个层面分析。 用户可能是SAP运维顾问或财务关键用户,正在处理月结异常。ta的提问非常专业,直接指向"summarization procedure"这个关键配置点,说明对MM-FI集成有一定了解。但可能忽略了汇总凭证的设计初衷——系统为减少FI凭证量,会按周期汇总生成凭证而非逐单更新。 从技术角度看,这个问题需要分三层排查: 首先是配置层,检查OBYC自动过账科目是否关联了正确移动类型,特别是OBYR的汇总设置里是否包含物料相关字段。很多企业会遗漏"Material"字段的勾选,导致汇总时丢失明细。 其次是操作层,用户可能误以为MM过账后FI应立即更新明细,实际上汇总凭证需要等待T-CODE MRRL执行后才生成。这里需要提醒用户注意定时作业的设置频率。 最后是数据层,如果物料主数据未维护评估分类账或价格控制类型错误,也会导致数量无法传递。特别是当物料采用移动平均价时,数量更新是成本计算的前提。 考虑到用户需要立即解决方案,应该优先提供分步检查清单:从SPRO配置路径到MFN1报表查看汇总结果。同时必须警告直接修改汇总配置的风险——可能影响历史凭证一致性。 相关问题的设计要覆盖延伸场景:比如用户后续可能遇到汇总凭证冲销问题,或需要部分物料保持明细过账的特殊需求。这些在制造业月结时都是高频问题。</think>在SAP系统中,当MM模块(物料管理)使用汇总流程(Summarization Procedure)时,FI模块(财务会计)凭证中物料编号或数量未更新是**预期行为**,而非系统错误。以下是详细分析和解决方案: --- ### 一、问题原因 1. **汇总流程的核心逻辑** MM模块的汇总流程(如T-CODE `MRRL`)会将多个物料移动(如发货、收货)**合并生成单个FI凭证**,以简化凭证量。此时: - FI凭证仅显示**汇总的金额**(如总库存价值变化) - **物料编号和数量**因合并而丢失明细,仅保留在MM原始凭证中[^1] 2. **配置关联性** 自动过账配置(OBYC)中,若移动类型(如601/261)关联的科目设置为**汇总科目**(通过OBYR配置),则FI凭证必然不显示物料明细[^2]。 --- ### 二、解决方案 #### 方法1:禁用汇总流程(适用新业务) ```abap SPRO路径: 物料管理 > 评估和科目设置 > 科目确定 > 自动过账 > 配置汇总 ``` - 在OBYR中删除相关移动类型的汇总配置 - **风险**:FI凭证量可能剧增,需评估系统性能 #### 方法2:通过子分类账获取明细 1. **使用报表`MB5B`/`S_P99_41000062`** - 输入会计期间和物料范围 - 输出结果包含:**物料号、数量、移动类型、关联FI凭证号** ![MB5B示例](https://example.com/sap_mb5b_screenshot.png) [^3] 2. **启用物料分类账(激活后不可逆)** ```abap SPRO路径: 控制 > 产品成本控制 > 实际成本核算 > 物料分类账 > 激活 ``` - 优点:按物料+数量+金额实时更新 - 缺点:需迁移所有评估范围,增加系统负载 #### 方法3:自定义增强(需开发支持) 在汇总凭证生成时,通过BAdI `MB_DOCUMENT_BADI`: ```abap METHOD if_ex_mb_document_badi~document_update DATA: lt_items TYPE TABLE of bapi2017_gm_item_create. LOOP AT material_movements INTO movement. APPEND VALUE #( material = movement-matnr quantity = movement-menge plant = movement-werks ) TO lt_items. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ... TABLES goodsmvt_item = lt_items. ENDMETHOD. ``` > **注**:需测试对性能的影响 --- ### 三、关键配置检查点 | 事务码 | 检查内容 | 标准路径 | |--------|---------------------------|------------------------------| | OBYR | 汇总科目是否包含"Material"字段 | 会计科目未勾选物料明细 | | OMJJ | 移动类型是否启用汇总 | 移动类型配置页签"Create FI Doc" | | OMWB | 凭证分割规则 | 确保物料字段包含在分割特征中 | --- ### 四、最佳实践建议 1. **业务场景适配** - 生产月结:保留汇总流程+用MB5B对账 - 零售业实时跟踪:禁用汇总或激活物料分类账 2. **权限控制** 通过SU24将`MRRL`限制为后台作业,避免人工误操作: ```abap SM36设置定时任务: Program: RMMMDSUM Variant: 按工厂/期间 ``` > ⚠️ **警告**:修改汇总配置需在测试系统验证,历史数据可能需重新汇总[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值