หน้า 1 จากทั้งหมด 1

การลบข้อมูล

โพสต์แล้ว: อังคาร 06 ม.ค. 2015 2:55 pm
โดย chaiyapon
เนื่องช่วงนี้เจอปัญหาเกี่ยว Error ตามด้านล่าง บ่อยมากจึงมานั่งหาสาเหตุว่าเกิดจากอะไร
เท่าที่เจอนะครับ เกิดจาก User มีการแก้ไขข้อมูลที่มีการบันทึกไปแล้ว และลบข้อมูลออก ทำให้ความสัมพันธ์ของข้อมูลผิดพลาด
เบื้องต้นแก้ปัญหาด้วย Block สิทธิในการแก้ไขของ User ไปก่อน
ตอนนี้ต้องมานั่ง เช็คข้อมูลที่ละจุดเยอะมาก พอจะมีวิธีแก้หรือเปล่าครับ หรือวิธีดึงเอาเฉพราะข้อมูลที่ต้องแล้วไปสร้าง database ใหม่ ถ้าเยอะๆ คงแก้ ไม่ไหว :( :(

OpenERP Server Error
Client Traceback (most recent call last):
File "/opt/openerp70/web/addons/web/http.py", line 204, in dispatch
response["result"] = method(self, **self.params)
File "/opt/openerp70/web/addons/web/controllers/main.py", line 1051, in search_read
return self.do_search_read(req, model, fields, offset, limit, domain, sort)
File "/opt/openerp70/web/addons/web/controllers/main.py", line 1086, in do_search_read
records = Model.read(ids, fields or False, req.context)
File "/opt/openerp70/web/addons/web/session.py", line 42, in proxy
result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
File "/opt/openerp70/web/addons/web/session.py", line 30, in proxy_method
result = self.session.send(self.service_name, method, *args)
File "/opt/openerp70/web/addons/web/session.py", line 103, in send
raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)


Server Traceback (most recent call last):
File "/opt/openerp70/web/addons/web/session.py", line 89, in send
return openerp.netsvc.dispatch_rpc(service_name, method, args)
File "/opt/openerp70/server/openerp/netsvc.py", line 296, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
File "/opt/openerp70/server/openerp/service/web_services.py", line 626, in dispatch
res = fn(db, uid, *params)
File "/opt/openerp70/server/openerp/osv/osv.py", line 190, in execute_kw
return self.execute(db, uid, obj, method, *args, **kw or {})
File "/opt/openerp70/server/openerp/osv/osv.py", line 132, in wrapper
return f(self, dbname, *args, **kwargs)
File "/opt/openerp70/server/openerp/osv/osv.py", line 199, in execute
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
File "/opt/openerp70/server/openerp/osv/osv.py", line 187, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/opt/openerp70/server/openerp/osv/orm.py", line 3679, in read
result = self._read_flat(cr, user, select, fields, context, load)
File "/opt/openerp70/server/openerp/osv/orm.py", line 3800, in _read_flat
res2 = self._columns[f].get(cr, self, ids, f, user, context=context, values=res)
File "/opt/openerp70/server/openerp/osv/fields.py", line 1145, in get
result = self._fnct(obj, cr, uid, ids, name, self._arg, context)
File "/opt/openerp70/server/openerp/osv/fields.py", line 1211, in _fnct_read
value = value[field] or False
File "/opt/openerp70/server/openerp/osv/orm.py", line 432, in __getitem__
raise KeyError('Field %s not found in %s'%(name, self))
KeyError: 'Field product_id not found in browse_record(mrp.production, 19494)'

Re: การลบข้อมูล

โพสต์แล้ว: อังคาร 06 ม.ค. 2015 8:35 pm
โดย openerpthailand
เป็นปัญหา กับ Module ไหนครับ

Re: การลบข้อมูล

โพสต์แล้ว: อังคาร 06 ม.ค. 2015 9:40 pm
โดย kitcle
ตามปกติการลบข้อมูล ที่ dependecy data ในระบบ ERP นั้นจะมีคำสั่งการป้องกันเบื้องต้นไว้แล้ว
เพราะถ้าหากปล่อยให้มีกาลบข้อมูลที่ปราศจากการตรวจสอบแล้ว วุ่นวายแน่นอนครับ
เอาแค่เรื่องระบบบัญชี โกงกันมโหฬารแน่ๆ ใครจะลบก็ลบ ใครจะแก้ก็แก้ เพราะฉะนั้น ตัดประเด็นของบั๊กโค๊ดออกได้เลย

น่าจะมาจากระบบฐานข้อมูลของเราครับ วิธีแก้ ไปแก้ใน pgsql ใช้คำสั่ง Not IN ในการตรวจสอบ
SELECT field1 FROM tbl1 WHERE eventid NOT IN (SELECT field2 FROM tbl2)
ดูจาก KeyError: 'Field product_id not found น่าจะมาจาก โมดูล product .product นะครับ

น่าจะมีการลืมเขียนโค๊ดกำกับใน ฟิลด์ many2one ondelete='cascade'

Re: การลบข้อมูล

โพสต์แล้ว: พุธ 07 ม.ค. 2015 8:07 am
โดย chaiyapon
ตามที่คุณ kitcle เลยครับ น่าจะมีการลืมเขียนโค้ดในบางโมดูลครับ เพราะผมลองแล้วบางโมดูลที่มี ฟิลด์ เป็น many2one จะไม่สามารถลบได้แต่งบางโมดูลสามารถลบได้ เบื้องต้นตามบล็อกสิทธิการลบในหลายโมดูลเพื่อป้องกันปัญแล้วกำลังตามแก้ตัวที่ Error ครับ

ปล.Error เยอะมากมาย

Re: การลบข้อมูล

โพสต์แล้ว: พฤหัสฯ. 08 ม.ค. 2015 5:21 pm
โดย chaiyapon
แก้ Error เรียบร้อย ขอบคุณคำแนะนำ คุณ kitcle ครับ จะว่า bug จากโปรแกรมก็ไม่ได้ต้องบอกว่า ลืมเขียนโค๊ดกำกับใน ฟิลด์ many2one ซึ่งจากการตรวจเช็คมีหลายโมดูลพอสมควรครับ ยังไงก็ระวังกันด้วยนะครับ

ตอนผมก็หลังจะแก้ไข Work Center ให้สามารถปรับเปลี่ยนได้ หลังจากมีการ Save Manufacturing Orders ไปแล้วเพื่อนเพิ่มความยืดยุ่นในเวลาทำงาน ยังไงรบกวนผู้รู้แนะนำแนวทางด้วยนะครับ