Group Details Private

administrators

  • Odoo对临近保质期的产品如何提醒

    Odoo系统自带产品的保质期管理。当产品需要进行保质期管理时,只要在库存设置里激活”批号/条码跟踪“ 和 ”保质期管理“即可:
    New_-_Odoo.png
    然后在需要进行保质期管理的产品维护界面里选择“批号或条码跟踪”,并配置产品的保质期期限。这样在产成品入库或者采购产品入库时输入的批次号上就自动包含了产品的保质期到期日,警告日等信息。可是估计很少有人知道到期前提醒是如何执行的。

    事实上在每个批次号上除了保质期到期日以外,还有一个保质期告警日期,这两个日期都是可以根据产品上的日期期限自动生成,也可以手动设定。到了某个产品批次的告警日期,系统会自动会为该批次打上报警标签,并向该产品的负责人发送提醒信息。

    所以,如果希望收到及时的保质期报警信息请在产品的维护界面为产品设置“产品负责人”

    Odoo.png

    posted in Odoo 培训
  • RE: 想在阿里云部署odoo,不知道需要选择什么配置,求大神指导

    很古老的提问了,链接一个答案:https://odoo.net.cn/topic/5707/odoo部署的服务器配置选择

    posted in Odoo 开发与实施交流
  • Odoo部署的服务器配置选择

    Odoo默认工作在“线程”模式下。当并发用户增加时,线程模式因为Python的GIL全局锁的限制,导致它无法分配现今多核服务器的其它内核来处理运算请求。所以,当有比较多的并发用户时,我们要将Odoo设置为“多进程”的模式,以充分利用服务器多核的计算资源。

    所谓让Odoo工作在“多进程模式“,就是给启动参数workers设置一个非0的数值,那设多少合适呢?

    首先,我们要知道:一个worker大致能并发处理6~10用户请求,所以比如60用户并发,那就大致需要配置10个worker

    Odoo的worker的值的设置还与服务器的内核数量有关,因为这些worker的负载最后是要由CPU内核运算单元来消化的。所以比如一个普通的单CPU,4核服务器,可以支持的workers的数量就是 2 * Cores + 1 = 9, 8个http worker, 1个cron job worker。 与上面的10个worker的需求接近,所以处理60用户并发我们可以选一台拥有4核的服务器,Odoo配置:

    workers = 8
    max_cron_threads = 1
    

    那么内存应该配置多少呢?一般一个任务繁重的worker占用1G内存,而大多数轻载的worker占用内存为150M左右。而在实际的应用中遵守2/8法则,即重载worker和轻载worker的存在比例时20%/80%, 所以9个worker的内存需求为:
    9 * (0.8 * 150 + 0.2 * 1024)≂ 3 G RAM

    由此可以看出,Odoo还是一个并不怎么消耗服务器资源的平台。

    posted in Odoo 培训
  • RE: Odoo的XML-ID

    哈哈,还真有人回应我的问题。
    这句话是关键:

    事实上你所定义的模型和字段也有自己的XML-ID的

    你的截图中的XML-ID对应的是保存在res_partner表中的一条记录。而sale.field_sale_order__partner_id 对应的是保存在ir_model_fields表中的一条记录。
    你现在应该能说得清这条记录的含义了吧?

    posted in Odoo 培训
  • RE: windows环境下__manifest__.py中文字符报错

    👍 感谢分享🙏

    posted in Odoo 开发与实施交流
  • Odoo多计量单位之发货篇

    上回我们介绍了OCA的多计量单位模块,以及在销售订单上可以灵活选择主/辅两种计量单位下单的模块:https://shine-it.net/topic/5678/odoo的多计量单位
    最近我们又把OCA的 sale_stock_secondary_unit 成功升级到了12.0。这个模块的用处是:当在订单中选择了辅助计量,则在对应发货单中可以使用辅助计量单位来发货。并且该模块的依赖模块:stock_secondary_unit 可以让你在查看库存时同时显示主、辅计量单位对应的库存量。

    posted in Odoo 培训
  • Odoo 错误:Exception("bus.Bus unavailable") 是什么鬼?

    我们在测试或部署Odoo的时候会经常在log中看到标题中的这个错误:

    Exception("bus.Bus unavailable")
    

    到底这是一个什么鬼呢?看起来似乎也不大影响操作。
    bus.Bus主要用于即时消息通知,所以如果只是用于测试,你完全可以无视这个错误。如果想眼睛清静,你可以不要用“多进程”的模式测试,就是那个workers的启动参数设为零,即:workers=0就可以了。这样Odoo就工作在“线程”模式下了。线程模式下的消息通知,不使用多进程模式下的长连接的方式。

    如果你因为性能要求,需要在Odoo部署中使用“多进程模式”,也就是workers不为0的情况。那你就需要设置反向代理,比如使用nginx并作这样的设置:

    location /longpolling {
        proxy_pass http://127.0.0.1:8072;
    }
    location / {
        proxy_pass http://127.0.0.1:8069;
    }
    
    posted in Odoo 培训
  • RE: 怎么自定义一个widget

    你用不到10个字提了问题,我也希望能用10个字回答,但是做不到,所以放弃了...
    建议看一下:https://shine-it.net/topic/4425/提问的智慧

    posted in Odoo 开发与实施交流
  • Odoo的Binary字段如何设置默认值?

    Odoo的Binary字段默认保存的是Base64转码后的字符串。那么我们该如何为Binary字段设置默认值呢?比如一个默认的图片。答案当然是将图片文件的内容用Base64转码后赋给这个字段的default属性。

    方法1 :

    1. 比如你可以把一个图片用在线工具转码为Base64格式字符串:
    data:image/png;base64,iVRORw0KGgoBBBNSUhEUgAAAAEAAAABCAIAAACQd1PeAAAA.....................
    
    1. 去掉头部的data:image/png;base64,信息,把剩余的内容保存为默认值
    DEFAULT_IMG = 'iVRORw0KGgoBBBNSUhEUgAAAAEAAAABCAIAAACQd1PeAAAA.....................'
    
    class MyModel(models.Model):
        _name = 'my.model'
    
        field_binary = fields.Binary(default=DEFAULT_IMG)
    

    方法2:

    1. 将图片文件保存在模块目录下,比如:
      /my_module/static/img/my_image.png

    2. 设置默认值:

    import base64
    from odoo import models, fields
    from odoo import modules
    
    def get_default_img():
        with open(modules.get_module_resource('my_module', 'static/img', 'my_image.png'),
                  'rb') as f:
            return base64.b64encode(f.read())
    
    class MyModel(models.Model):
        _name = 'my.model'
    
        field_binary = fields.Binary(default=get_default_img())
    
    posted in Odoo 培训
  • Odoo的Binary字段如何保存文件名

    我们定义一个fields.Binary类型的字段就可以上传文件并保存。但是,这仅仅保存了文件的内容,下载时的文件的名称为该模型的名称而不是原上传文件的文件名。我们在代码中也无法引用该上传文件的文件名。那我们如何才能做到既保存上传文件的文件内容又保存其文件名呢?

    首先, 我们要另外定义一个保存文件名的字符字段,比如

    test_img = fields.Binary('Test Image')
    test_img_file_name = fields.Char('File name')
    

    然后在视图中跟Binary字段做关联:

    <field name="test_img" filename="test_img_file_name"/>
    <field name="test_img_file_name" invisible="1"/>
    
    posted in Odoo 培训