รูปภาพแจ้งข่าว ทางเว็บบอร์ด openerpthailand.org ได้เปลี่ยนระบบเว็บบอร์ด ใหม่เป็น phpBB 3.1
  1. บุคคลทั่วไป จะไม่สามารถเข้าอ่านกระทู้บางบอร์ด แนะนำให้ท่าน สมัครสมาชิกคลิกตามลิงค์นี้
  2. สมาชิกใหม่ ถ้ายังไม่ได้แนะนำตัวจะไม่สามารถ ตั้งกระทู้ และ ดาวน์โหลด ไฟล์จากเว็บบอร์ดได้ ท่านจำเป็นต้องแนะนำตัวที่หมวดนี้
  3. ถ้ามีปัญหาการใช้งาน หรือ ข้อเสนอแนะใดๆ แนะนำได้ที่นี่
  4. ปุ่มรูปหัวใจใต้โพส แต่ละโพส ท่านสามารถกดเพื่อสื่อถึงคนโพสนั้นถูกใจท่าน
  5. ห้ามลง E-mail, เบอร์โทรส่วนตัว, Line id หรือข้อมูลส่วนตัวอื่นๆ เพื่อป้องกันการแอบอ้างและโฆษณาแฝง โดยสามารถติดต่อสมาชิกท่านอื่นผ่านระบบ PM ของบอร์ด
  6. ท่านสามารถปิดการแจ้งนี้ได้ ที่มุมขวาของกล่องข้อความนี้

บุคคลทั่วไปสามาเข้าสู่ระบบ ด้วย Account ของ FaceBook ได้แล้ว คลิกที่นี่ได้เลย

วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

หมวดนี้สำหรับนักพัฒนา Customize & Develop ปรับแต่งแก้ไขโค้ด รายงาน พัฒนาโมดูล ปรึกษาโค้ด ได้ที่หมวดนี้
กฎการใช้บอร์ด
หมวดนี้สำหรับนักพัฒนา
ลงโค้ดอย่าลืมครอบโค้ด เพื่อการแสดงผลที่อ่านง่ายสำหรับคนตอบ
ntnw
โพสต์: 112
ลงทะเบียนเมื่อ: ศุกร์ 25 ก.ค. 2014 10:20 am

วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย ntnw » พฤหัสฯ. 28 พ.ค. 2015 11:27 am

รบกวนถาม ครับ
ลองเปิด Order แล้วใส่ Order Line เข้าไป ได้ข้อมูลตามรูปแนบ จะเห็นว่า Field Sequence มันไม่เพิ่มขึ้น ซึ่งถ้าอ่าน Code ดู เป้าหมายของ Sequence น่าจะเอาไว้ใช้จัดเรียง ซึ่งถ้าเป็น 10 ตลอด จะจัดเรียง ได้อย่างไร
ไม่แน่ใจเป็น Bug หรือว่าเราต้องเขียน Code เพิ่มเข้าไปแก้ไขเอง เห็นมีการเรียกใช้พวก ir.sequence ได้ ไม่แน่ใจนำมาใช้ได้ไหม ไม่ทราบใครเคยใช้บ้าง

หมายเหตุ : ตั้งใจจะใช้ Field นี้เป็น Sale Order Line Number เช่น

sale line product qty
SO001 10 AAA 5
SO001 20 BBB 10
SO002 10 AAA 2
SO002 20 BBB 5
SO002 30 CCC 10

ขอบคุณครับ
คุณไม่มีสิทธิ์ดูไฟล์ที่แนบมาในกระทู้

ภาพประจำตัวสมาชิก
chaiyapon
โพสต์: 397
ลงทะเบียนเมื่อ: จันทร์ 17 ธ.ค. 2012 1:36 pm

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย chaiyapon » พฤหัสฯ. 28 พ.ค. 2015 12:06 pm

ผมไปดูใน code มาครับ 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sales order lines.") น่าจะเป็นประโยชน์ของตัว sequence (แปลไม่ออกครับ) ครับ

ปล.ถ้าเป็นผมสร้าง Field ใหม่ดีกว่าครับ เพื่อความปลอดภัย อิอิอิ :D :D

ntnw
โพสต์: 112
ลงทะเบียนเมื่อ: ศุกร์ 25 ก.ค. 2014 10:20 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย ntnw » พฤหัสฯ. 28 พ.ค. 2015 1:48 pm

ผมดูใน Code มาเห็นมันมีบรรทัดนี้
_order = 'order_id desc, sequence, id'

แสดงว่ามันจะให้จัดเรียงตาม sequence ด้วย แต่ไหง มันดัน defaults ไว้เป็น 10 ตลอด

_defaults = {
'product_uom' : _get_uom_id,
'discount': 0.0,
'product_uom_qty': 1,
'product_uos_qty': 1,
'sequence': 10,
'state': 'draft',
'price_unit': 0.0,
'delay': 0.0,
}

ตอนนี้ไปเจอที่นึงเขาให้ทำตามนี้ แต่ยังไม่ได้ลองนะครับ

โค้ด: เลือกทั้งหมด

step1:   pass your one2many field it self in property context from xml.

             <field name="ref_ids" context="{'ref_ids':ref_ids}"/>

step2:  override the name_get method of one2many field model

    def default_get(self, cr, uid, ids, context=None):
        res = {}
        if context:
            context_keys = context.keys()
            next_sequence = 1
            if 'ref_ids' in context_keys:
                if len(context.get('ref_ids')) > 0:
                    next_sequence = len(context.get('ref_ids')) + 1
        res.update({'sequence': next_sequence})
        return res


Note :consider line)ids is your one2many field name in your model you need to pass and use whatever your field you have used and sequence is field name for sequence in one2many fields' model. in your case might be different.

kitcle
โพสต์: 258
ลงทะเบียนเมื่อ: เสาร์ 22 ธ.ค. 2012 8:15 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย kitcle » พฤหัสฯ. 28 พ.ค. 2015 2:41 pm

เรื่องแบบนี้ เป็นปัญหาโลกแตก ปวดหัวของโปรแกรเมอร์ทุกโปรแกรม
-ลูกค้าอยากเห็นเลข Line no. ให้ปรากฏในหน้า UI โดยทันที +1 ไปเรื่อยๆ แต่ดันลืมนึกตอน delete record มันจะเกิดช่องว่างการ running no.
ถ้าอยากได้แบบ running ไปแบบนี้ก็ต้องยอมรับในขั้นตอนการ ลบ ได้ด้วย
-แต่ถ้าอยากให้มัน running +1 ทุกครั้งไม่ว่าจะลบ จะเพิ่ม line ก้ทำได้เช่นกันครับ คือการ วนลูป write +1 (ids) ทุกครั้งที่มีการ บันทึกเอกสาร
มันขี่ช้างจับตั๊กแตน input ใส่เข้าไป output ออกมาไม่คุ้มคับ ---สู้เอา line +1 นี้ไปแสดงในขั้นตอน การพิมพ์ line ในหน้ารายงานดีกว่า


แต่ถ้าอยากได้จริงๆ จะเขียนแชร์ให้ใช้กันครับ
[b][color=#008000]รับปรึกษาปัญหาเทคนิค[/color] *** สายเซ็นผิดกฏ *** [/b]

ภาพประจำตัวสมาชิก
chbbk
โพสต์: 1362
ลงทะเบียนเมื่อ: จันทร์ 08 ก.ย. 2014 10:42 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย chbbk » พฤหัสฯ. 28 พ.ค. 2015 4:13 pm

sequence ตัวนั้นมันเอาไว้จัดลำดับความสำคัญว่าอันไหนจะได้ขึ้นแสดงใน order line ก่อนนี่คะ
ถ้าสร้างพร้อมกันลำดับความสำคัญมันก็เป็น 10 เท่ากันก็น่าจะถูกแล้ว
แต่ที่มันยังเรียงลำดับก่อนหลังถูกต้องได้เพราะว่านอกจากจะ order by sequence แล้วก็ยังมี order by id ด้วย
ถ้าอยากเห็น sequence เป็นเลขอื่นที่ไม่ใช่ 10 ก็ลองสร้างแค่บรรทัดเดียวแล้วค่อยไปแก้ไขเพิ่ม order line มาอีกบรรทัดดูสิคะ แล้วจะพบความแตกต่าง :D

อีกอย่าง sequence อันนี้กับ ir sequence มันก็คนละตัวกันไม่ใช่เหรอคะ :shock:

ภาพประจำตัวสมาชิก
chaiyapon
โพสต์: 397
ลงทะเบียนเมื่อ: จันทร์ 17 ธ.ค. 2012 1:36 pm

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย chaiyapon » พฤหัสฯ. 28 พ.ค. 2015 6:15 pm

หมวด Develop เริ่มสนุกแล้วครับ อิอิอิ แสดงว่ามีนัก Develop แอบอยู่เยอะเหมือนกัน :D :D :D

ปล. อย่าลืมตามไปที่กระทู้ผมด้วยนะครับ

ntnw
โพสต์: 112
ลงทะเบียนเมื่อ: ศุกร์ 25 ก.ค. 2014 10:20 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย ntnw » พฤหัสฯ. 28 พ.ค. 2015 9:47 pm

ตอนแรกกะจะใช้ ir sequence ช่วย แต่ดูแล้วยาก เพราะ ir sequence มันไม่ reset เป็น 0 ให้เมื่อขึ้น order ใหม่ เลยใช้ไม่ได้
ตอนนี้ไปได้ code มาจาก community ดังนี้

class sale_order_line(osv.osv): ให้เพิ่ม fields temp ที่ related กับ sequence เข้าไป

โค้ด: เลือกทั้งหมด

_columns = {
        'sequence2': fields.related(
            'sequence', type='integer', relation='sale.order.line',
            string='Sequence',
            help='Field to show the number of sequence in line')
    }


class sale_order(osv.osv): ให้เพิ่ม function เข้าไป

โค้ด: เลือกทั้งหมด

    def create(self, cr, uid, values, context=None):

        new_id = super(sale_order, self).create(
            cr, uid, values, context=context)

        if values.get('order_line'):
            self._get_order_line_categ(cr, uid, new_id, context=context)

        return new_id

    def write(self, cr, uid, ids, vals, context=None):
        if isinstance(ids, (int, long)):
            ids = [ids]

        res = super(sale_order, self).write(
            cr, uid, ids, vals, context=context)

        if 'order_line' in vals:
            self._get_order_line_categ(cr, uid, ids, context=context)

        return res

    def _get_order_line_categ(self, cr, uid, ids, context=None):
        o_line_obj = self.pool.get('sale.order.line')

        if isinstance(ids, (int, long)):
            ids = [ids]

        for order_id in ids:

            cr.execute(
                """ SELECT id, name FROM sale_order_line
                WHERE order_id = %s
                ORDER BY name  """, (order_id, ))
            dat = cr.dictfetchall()

            o_sequence = 0

            for o_line in dat:
                o_line_obj.write(cr, uid, o_line['id'],
                                 {'sequence': o_sequence+1})
                o_sequence += 1

        return True


ผลที่ได้ตามรูปแนบ ใช้ได้ในระดับนึงครับ เอาไปลองปรับเปลี่ยนกันดู สำหรับผมที่อยากได้เพราะ งานของผม Product เดียวกันแต่ต่างขนาด ทำให้เวลาดู list view ถ้าไม่มี seq ช่วยมันจะงง
คุณไม่มีสิทธิ์ดูไฟล์ที่แนบมาในกระทู้

ภาพประจำตัวสมาชิก
chbbk
โพสต์: 1362
ลงทะเบียนเมื่อ: จันทร์ 08 ก.ย. 2014 10:42 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย chbbk » ศุกร์ 29 พ.ค. 2015 12:09 am

product เดียวกันต่างขนาดก็ไปเพิ่ม field เป็น size of product ดีกว่าป่าวคะ
เวลาจะดูก็ใช้ filter ตาม product กับ size
ใน product เองจะเซ็ทได้โดยไม่ต้องเพิ่ม field มั้ยก็ไม่รู้ ใช้ไม่ค่อยเป็นเหมือนกันค่ะ ฮ่าๆ
แต่ยังไงก็คิดว่า sequence ใน sale order line ไม่น่าจะตอบโจทย์ความต้องการนี้ค่ะ :P

kitcle
โพสต์: 258
ลงทะเบียนเมื่อ: เสาร์ 22 ธ.ค. 2012 8:15 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย kitcle » ศุกร์ 29 พ.ค. 2015 2:46 am

คำตอบแนวทาง ของคุณ ntnw
cr.execute(
""" SELECT id, name FROM sale_order_line
WHERE order_id = %s
ORDER BY name """, (order_id, ))
dat = cr.dictfetchall()

นำ Recordset ที่ได้จาก การ Select ... From ...Where... มาบวก +1 ไปเรื่อยๆ ทุกครั้งเมื่อฟังกชั่นตรวจเจอว่ามีการ Create และ Delete (write)
ถือว่าเป็นวิธีที่ถูกต้องและใช้งานได้จริงครับ
..ที่ผมเคยเกริ่นก่อนหน้าว่า Input ที่เขียนเข้าไปคุ้มกับการ output หรือไม่ ? เพราะตัว coding ตัวนี้ หน่วง database ไปพอควรเมื่อ db ใช้ไปในระยะเวลานึง
เพราะทางเทคนิคมันจะมีการ execute คำสั่ง sql ตลอดเมื่อมีการ create/write แต่เมื่อเจ้าของกระทู้บอกว่า เลข sequence จำเป็นในระบบงาน ก็ถือว่าคุ้มค่าครับ
[b][color=#008000]รับปรึกษาปัญหาเทคนิค[/color] *** สายเซ็นผิดกฏ *** [/b]

ntnw
โพสต์: 112
ลงทะเบียนเมื่อ: ศุกร์ 25 ก.ค. 2014 10:20 am

Re: วิธีทำให้ ลำดับที่ ใน Sale Order Line เพิ่ม ทีละ 10

โพสต์โดย ntnw » ศุกร์ 29 พ.ค. 2015 8:38 am

มันเกิดเคสนี้นะครับ

id sequence name
9 2 [All]TP10
10 3 [All]TP10
11 1 [All]FL10

เมื่อมีการลบหรือเพิ่ม record ใหม่เข้าไป แล้วชื่อ มันเป็นตัวอักษรที่เรียง ASC ทำให้ sequence ที่มาทีหลัง จัดลำดับใหม่ จริง ๆ ควรจะได้ดังนี้

id sequence name
9 1 [All]TP10
10 2 [All]TP10
11 3 [All]FL10

น่าจะเกิดจาก sql ที่สั่ง order by name ก่อน ต้องเปลี่ยนเป็น order by id


ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 0 และ บุคคลทั่วไป 0 ท่าน