Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

子窗体有数据填充时怎么运行代码生成批次单号?

sunny  发表于:2010-01-29 17:51:07  
复制

点击下载此附件

 

 

Top
sunny 发表于:2010-01-30 00:08:10
是想按下新增按钮读取采购单里采购的物料过来后,批次号批量生成,怎么实现这个,如果我的思路不行,请提供个可行的方法,来个人帮忙解答下啊!

Kevin 发表于:2010-01-30 00:27:50

可以这样的思路实现:

在子窗体的Form里面写一个Function,然后

[新增]按下 -> 调用子窗体这个Function,然后

Function 应该可以有这样的思路:

先取得PO单号、物料编号

然后用一个 str 变量保存你的批次号

然后用一个 int 变量保存你的流水号,初始为 1

然后用 DCount 检查...

检查内容:PO单号 and 物料编号,看看有多少个

如果没有,str 后面加上 int,

如果有,即 int 加上这个数量,然后再放到 str 里面

然后这个Function返回结果就是这个 str



sunny 发表于:2010-01-30 11:54:13

写Function对我还是有难度,希望得到你的帮助!

 

试着把代码写在按钮事件里,但是结果不对,可能不可以这样写吧,

Private Sub 新增_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery "查询1"
DoCmd.SetWarnings True

If IsNull(DLookup("批次单号", "入库表", "[PO单号]+[物料编号]=forms!窗体2.出入库临时表!PO单号 + forms!窗体2.出入库临时表!物料编号")) Then
        Forms!窗体2.出入库临时表!批次单号 = Forms!窗体2.出入库临时表!PO单号 & "-" & Forms!窗体2.出入库临时表!物料编号 & "-01"
    Else
        Forms!窗体2.出入库临时表!批次单号 = Forms!窗体2.出入库临时表!PO单号 & "-" & Forms!窗体2.出入库临时表!物料编号 & "-" & Format(CStr(CInt(Right(DLast("批次单号", "入库表", "[PO单号] & [物料编号]=forms!窗体2.出入库临时表!PO单号 & forms!窗体2.出入库临时表!物料编号 "), 2) + 1)), "00")
    End If
   
    Me.出入库临时表.Requery
End Sub



Kevin 发表于:2010-01-30 13:26:55

private sub_新增()

   Forms!窗体2.出入库临时表!批次单号 = getseq()

end sub

 

private function getseq() as string

dim str1 as string    '存放po

dim str2 as string    '存放mo

 

str1 = Forms!窗体2.出入库临时表!PO单号

str2 = Forms!窗体2.出入库临时表!物料编号

 

dim i as integer    '存放流水号

'检查有没有重复的po+mo

i = dcount("*","入库表","po单号='" & str1 & "' and 物料编号='" & str2 & "'")

 

'根据情况重设流水号

if i > 0 then

  i = i + 1

else

  i = 1

end if

 

'最后输出结果

getseq = str1 & "-" & str2 & "-" & i

 

end function



sunny 发表于:2010-01-30 14:33:56

点击下载此附件

 

出现问题:

 

如果子窗体没有数据时按新增,提示

 

如果子窗体有数据时再执行function,只能生成一个批次单号

 



Kevin 发表于:2010-01-30 15:41:31

出现问题主要是因为你使用添加查询方式来操作,而之前的回答并没有考虑你这种情况

根据你附件的实际情况, 需要改动一下查询设计和代码

 

1.代码改成以下

Public Function getseq(po As String, mo As String) As String

Dim i As Integer    '存放流水号

'检查有没有重复的po+mo

i = DCount("*", "出入库临时表", "po单号='" & po & "' and 物料编号='" & mo & "'")

'根据情况重设流水号

If i > 0 Then

  i = i + 1

Else

  i = 1

End If

'最后输出结果

getseq = po & "-" & mo & "-" & i

End Function


2.将代码放在模块1里面,之前在窗体里面的可以不要了.

 

3.取消新增按钮事件里面的那个代码

 

4.在你的"采购单查询"里面增加一个字段如下:

   批次单号: getseq([PO单号],[物料编号])

 

5.在你的查询1里面,增加一个[批次单号]字段

 

OK!



总记录:6篇  页次:1/1 9 1 :