วันเสาร์ที่ 27 กันยายน พ.ศ. 2557

OpenERP : การใช้ Template ในการเขียน module ใน OpenERP

เราสามารถใช้ template เพื่อให้ง่ายต่อการเขียน code โดยสามารถ download ไฟล์ได้จาก link ด้านล่าง

http://openerp-eclipse-template.googlecode.com/svn/trunk/


วิธีการ import ไฟล์ template เข้ามาใช้งานตามด้านล่างครับ

Python
http://www.youtube.com/watch?v=kfMk31VKxrY

XML
http://www.youtube.com/watch?v=LCxYpofncKs

วันเสาร์ที่ 5 กรกฎาคม พ.ศ. 2557

OpenERP : การ Import Data เข้าไปใน Form

เริ่มต้นด้วยการไปตั้งค่าใน General Setting --> Import/Export-->เลือก Allow users to import data from CSV files


จากนั้นมาเตรียมไฟล์ CSV ดังรูป



ไปที่ Attendance --> Import-->Browse



จากนั้นให้ทำการเลือกไฟล์ แล้วจะได้หน้าจอดังรูปกด Validate เพื่อเป็นการตรวจสอบข้อมูล



 จากนั้นกด Import

วันพุธที่ 25 มิถุนายน พ.ศ. 2557

OpenERP : สร้าง Form จาก Interface

เป็นวิธีที่ง่ายที่สุดในการสร้าง Form ขึ้นมาเก็บข้อมูลการใช้งานตามที่เราต้องการ

1.Setting--> Database Structure --> Models --> Create




ในช่อง Model Description : nptech_info
          Model : x_nptech




จากนั้นไปที่ Tab : Fileds --> Add an item

ในช่อง Name : x_name
          Field Label : name
          Field Type : char
          เลือก Required
          Size : 64


จากนั้นกด Save & Close


หลังจากนั้นให้กด Save


ขั้นตอนต่อไปให้เรากด Create a Menu


ในช่อง Menu Name : nptech_infoในช่อง Parent Menu ให้คลิกที่ลูกศร แล้วไปที่ Create and Edit


ในช่อง Menu : nptech_info
          Action : ir.actions_act_window



 ในช่องที่สองให้คลิก  Create and Edit 


ในช่อง Action Name : nptech_info_action
          Object : x_nptech

จากนั้นให้กด Save จนกลับมาที่หน้า models


จากนั้นให้เรา Refresh หน้าจอ แล้วเราจะพบว่า form ที่เราสร้างปรากฏดังรูปด้านล่าง


หลังจากนั้นให้ไปที่ Setting --> User Interface --> View --> Create


View Name : nptech_info
Object : x_nptech

ใน Tab : Architecture ตรง

จากนั้นกด Save

เมื่อทำตามขั้นตอนด้านบนครบแล้วขั้นต่อไปเราจะทำการเพิ่ม Field เข้าไปอีก Field หนึ่งโดยไปที่

Model ที่เราสร้างไว้ คือ nptech_info  จากนั้นกด Edit



ไปที่ Tab : Fields --> Add an item



พิมพ์รายละเอียดตามรูปด้านล่าง แล้วกด Save


เสร็จแล้วให้ไปที่ View -->แล้วไปเพิ่ม field name ใน Architecture


Refresh หน้าจอ field ที่เราเพิ่มเข้าไปจะปรากฏดังรูปด้านล่าง


วันพุธที่ 18 มิถุนายน พ.ศ. 2557

OpenERP : ProgrammingError: column X does not exist

error ตัวที่สามของคืนนี้

ProgrammingError: column res_partner.last_reconciliation_date does not exist
LINE 1: ..."parent_id",res_partner."notification_email_send",res_partne...

หลังจากที่ผมทำการ uninstall module แล้วเกิดเหตุทำให้ไม่สามารถ login เข้าใช้งานได้ แล้วมี error ดังกล่าว ซึ้งมันฟ้องว่าหา field ที่ชื่อ last_reconciliation ใน table : res_partner ไม่เจอ ผมก็ทำการแก้ไขโดยวิธีง่ายๆคือ ทำการ add column ที่เกิด error เหล่านี้เข้าไปใน table โดยตรง ส่วน data type ผมก็เข้าไปหาใน module ที่อยู่ใน addon ว่ามันเก็บ data type เป็นอะไร

ตัวอย่างนะครับ


หลังจากนั้นก็เข้าไปใน pgAdmin ทำการ connect database แล้วใช้คำสั่ง add columns ต่อไปนี้ครับ

alter table res_partner add column last_reconciliation_date date;

add column ;

หลังจากนั้นเราก็สามารถ login เข้าใช้งานได้ตามปกติ

สำหรับผมเจอฟ้อง error เข้าไป 3 column กว่าจะหาว่า data type เป็นอะไรบ้างเล่นเอาตาลายกันทีเดียว การหาเราควรสังเกตุว่า inherit class ชื่อที่ใกล้เคียงกับ error ที่ฟ้อง


มันก็จะมี field ที่ฟ้องประมาณนี้ครับ



โอเคครับ ขอตัวดูบอลโลก 2014 ก่อนนะครับ

ref :https://answers.launchpad.net/openobject-server/+question/241239
      https://bugs.launchpad.net/openobject-server/+bug/1155102
      http://forum.openerp.com/forum/topic32504.html
      https://doc.openerp.com/v6.1/developer/03_modules_2.html/

OpenERP : Constraint Error You can not have two users with the same login !

หลังจาก Uninstall Module ก็เจอหลายเหตุการณ์จริงๆ แก้ไขเรื่อง ClientWidget is null ไปแล้วก็มาเจอว่าไม่สามารถ Install บาง Module กลับไปได้ มันจะฟ้องเราว่า มี User 2 คน login อยู่ในเวลาเดียวกัน

วิธีแก้ไข : ให้เข้าไปที่ pgAdmin จากนั้น connect ไปที่ database ของเรา

ใช้ sql : select * from res_user;

จากนั้นกด F5


ให้ทำการลบ user ที่ระบบสร้างขึ้นเองครับ

delete from res_users
where login = 'portaltemplate';

จากนั้นให้ทำการ login เข้าใช้งาน OpenERP ใหม่ แล้วทำการไปแก้ไขการ Re-Install ใน Setting อีกที เท่านี้ Error : Constraint Error  You can not have two users with the same login ! ก็จะหมดไปครับ

OpenERP : TypeError: ClientWidget is null

สำหรับใครที่เจอเหตุการณ์  TypeError: ClientWidget is null  ก็ไม่ต้องตกใจนะครับ
ให้เราคลิกขวาแล้ว Open New Tab เพื่อไป Re-Install Module ใหม่ แค่นี้เราก็สามารถเข้าใช้งาน OpenERP ได้ตามปกติครับ 

ปล.ผมเจอบ่อยมาเวลาผม Uninstall Module

Ref:http://stackoverflow.com/questions/18122538/openerp-facing-typeerror-clientwidget-is-null

วันศุกร์ที่ 13 มิถุนายน พ.ศ. 2557

OpenERP : การสร้าง New Module ใน OpenERP ตอนที่ 1

จากการอ่านบทความทั้งสองผมว่าค่อนข้างชัดเจนในวิธีการสร้าง New Module ผมจะพยายาม capture รูปมาเพื่ออธิบายให้เห็นชัดเจนอีกทีหนึ่ง

http://openerpdev.wordpress.com/2012/01/31/minimal-openerp-module-example/

http://acespritechblog.wordpress.com/2012/05/22/how-to-create-a-module-in-openerp/

ขั้นตอนที่ 1 : โครงสร้างของ Module

เราต้องสร้าง ชื่อ module ของเราใน addone/ชื่อ module ที่เราต้องการสร้าง

ในที่นี้เราสร้าง ชื่อว่า dev ตามลิงค์ด้านบน



โครงสร้างในการสร้าง module จะต้องมีดังต่อไปนี้

 1. __openerp__.py
 2. __init__.py
 3. Python files
 4. XML Files
        1. Actions
        2. Menu Entries
        3. Reports
        4. Wizards



 ขั้นตอนที่ 2 : Code

1. __init__.py



import dev




2. __openerp__.py



# -*- coding: utf-8 -*-

{
    "name" : "Dev module",
    "version" : "0.1",
    "author" : "Dev",
    'complexity': "easy",
    "description" : """
    """,
    "website" : "http://www.openerp.com",
    "depends" : [],
    "category" : "Dev",
    "sequence": 16,
    "init_xml" : [],
    "demo_xml" : [],
    "update_xml" : ["dev_view.xml",],
    'test': [],
    'installable': True,
    'application': True,
    'active': False,
}





3. Python Files (dev.py)



# -*- coding: utf-8 -*-
from osv import fields, osv

class dev_person(osv.osv):
    _name = "dev.person"
    _description = "Person"
    _columns = {
        'person_name': fields.char('Name', size=128, required=True, help=""),
    }

dev_person()




4. XML Files (dev_view.xml)







dev_person
dev.person










**** ระวังเรื่อง Permission ของไฟล์ด้วยนะครับ ****

หลังจากที่เราสร้างไฟล์ต่างๆเสร็จแล้ว ให้เราไปที่ OpenERP Application ของเรา

Module-->Update Modules List-->Update  (ถ้าเราไม่มี ลิงค์ Update Modules List ให้เราไปที่ User-->เลือก Administrator-->Edit-->Access Right-->ตรง Technical Features หลังจากนั้นให้ทำการ Restart Application ใหม่)



หลังจากนั้นในกล่อง Search ให้คลิก installed ออก เราจะเจอ module ที่ยังไม่ได้ install ต่างๆ



เราจะเห็น module : Dev module ที่เราสร้าง จากนั้นให้เรา install เราจะเห็นว่า module ที่เราสร้างมี menu ชื่อว่า person แสดงขึ้นมา



การสร้าง module ใหม่อย่างง่ายก็จบเพียงเท่านี้ครับบบบบบบบ

วันจันทร์ที่ 9 มิถุนายน พ.ศ. 2557

OpenERP : การสร้าง Report ใน OpenERP ตอนที่ 2 (สร้าง New Report)

ขั้นตอนในการสร้าง report ใน OpenERP อย่างง่ายมีอยู่ 3 ขั้นตอนดังนี้ครับ

1.สร้างไฟล์ RML (ใช้ OpenERP Plugin ชื่อว่า bass report designer + Open Office)
2.สร้างไฟล์ .py
3.Config OpenERP

ขั้นตอนที่ 1 : สร้างไฟล์ RML

1.เปิด Open Office แล้ว ไปที่ OpenERP Report Designer แล้ว connect เข้าไปที่ OpenERP Server



2.ไปที่ OpenERP Report Designer-->Open a new report


3.ทำการเลือก Module ที่ต้องการทำ Report ในที่นี้ผมเลือก Account


4.พิมพ์ ABC ลงไปแล้วทำการ Save ไฟล์เป็น .sxw



5.  ไปที่ OpenERP Report Designer --> Send to server


6. ทำการ Generate ไฟล์ RML โดยไปที่ OpenERP Report Designer--> Export to RML


10. เมื่อได้ไฟล์ .sxw และ .rml แล้วให้นำไปวางใน module : account ตาม path ที่ติดตั้ง



ขั้นตอนที่ 2 : สร้าง .py

1. สร้างไฟล์ account_print_invoice_example.py ขึ้นมา แล้ว copy code ไปวาง



import time
from openerp.report import report_sxw

class account_invoice(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(account_invoice, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({
            'time': time,
        })
report_sxw.report_sxw(
    'report.account.invoice_example',
    'account.invoice_example',
    'addons/account/report/account_print_invoice_example.rml',
    parser=account_invoice
)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:



การสร้าง report_sxw.report_sxw('attribute1','attribute2','attribute3','attribute')

attribute1 = report name
attribute2 = object name
attribute3 = path name
attribute4 = optional

ref::
https://www.odoo.com/forum/Help-1/question/what-attributes-should-be-put-in-report_sxwreport_sxw-36741


2. เพิ่ม report เข้าไปในไฟล์ __iniy__.py (*** เราไม่ต้องเพิ่มตรงนี้ก็ได้ครับ เป็นการเพิ่มชื่อ module เข้าไป ในที่นี้เราจะทดลองสร้างแค่ report เพราะหลังจากที่เรา restart แล้วจะทำให้ไม่สามารถเข้ามาใช้งาน OpenERP ได้ เพราะว่ามันหา module : account_print_invoice_example ไม่เจอ ***)





ขั้นตอนที่ 3 : Config OpenERP

1.ไปที่ Setting-->Technical-->Action-->reports



ทดสอบการเข้าใช้งาน