Access交流中心

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

关于根据预算来自动随机分配的问题

子煜  发表于:2020-06-22 09:45:25  
复制

表一

客户名称 预算金额
阿里 8000
腾讯 12000
华为 24000

表二

物品 数量 单价
太空杯 870 16.00
手机 5 1999.00
自拍云台 4 988.00

如何根据公司预算金额,随机分配物品;

1.随机分配物品,例:阿里公司,可能只分配手机,当然也有可能所有物品都分配,这是随机的;

2.公司分配的所有物品总计金额不能超过公司预算金额;

3.分配的物品数量应考虑其他公司也有分配,所有公司分配的物品数量应不能超过实际物品数量。

想了几天也没想出好的解决方法,求助大神,谢谢!

点击下载此附件


 

Top
张志 发表于:2020-06-23 09:20:22

学习一下这个课程:https://m.qlchat.com/wechat/page/topic-intro?topicId=2000009371318113

里面有如何分配库存,可以借鉴一下。



西出阳关无故人 发表于:2020-06-23 17:53:21
Private Sub Command0_Click()
    Dim a As Integer
    Dim i As Long, j As Long, k As Long
    Dim ys As Double, je As Double, khid As Integer
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("select * from t_tbl02 order by 单价 desc") '先分配贵重的,便于均衡,补差
    rst.MoveFirst
    Debug.Print rst.RecordCount
    CurrentDb.Execute "delete * from t_tbl03"
    For i = 1 To rst.RecordCount
        For j = 1 To rst.Fields("数量")
            For k = 1 To 3    '3为客户的数量
                a = CInt(100 * Rnd())
                khid = 1 + (a Mod 3)
                ys = DLookup("预算金额", "t_tbl01", "id=" & khid) '获取随机id的单位的预算控制金额
                je = Nz(DSum("金额", "分配查询", "单位id=" & khid), 0) '获取随机id的单位的已分配金额
                If je + rst.Fields("单价") <= ys Then '已分配和马上要分配的金额之和,在预算范围内
                    SQL = "insert into t_tbl03(物品id,物品,数量,单价,单位id) select id,物品,1,单价," & khid & " as 单位id from t_tbl02 where id=" & rst.Fields("id")
                    CurrentDb.Execute SQL
                    Exit For
                End If
            Next k
        Next j
        rst.MoveNext
    Next i
End Sub



西出阳关无故人 发表于:2020-06-23 17:55:22
点击下载此附件

要新建表:t_tbl03(id,物品id,物品,数量,单价,单位id)

新建查询:分配查询(SELECT t_tbl03.单位id, Sum([数量]*[单价]) AS 金额 FROM t_tbl03 GROUP BY t_tbl03.单位id;)


用文字说话,就是

1,从待分配的物品,按照价值贵贱的方式一件一件的取出来,

2,用rnd函数生成100以内的随机数,把随机数与单位的数量进行 整除,余数就是单位的id编号.

3,用这个单位的id编号到已分配的表格中统计已分配金额和查找预算金额

4,如果没有超出预算,这件物品就分配给这个单位,如果达到预算了,就重复2~4的动作k次,(可能k值有点小,不一定覆盖所有的单位id).


关于k循环,似乎可以不用随机数,而用原有的随机数+1,+2这样的方式去进行第3~4的操作,可能更好.



子煜 发表于:2020-06-24 15:10:56
厉害了,大神。

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