3/06/2024

Alfresco มีปัญหา Load CPU เยอะค้นหาไม่ได้ Error

Alfresco มีปัญหา Run CPU เยอะค้นหาไม่ได้ Error
แก้ปัญหาโดย
ใช้วิธีตั้ง Crontab ให้ Restart service ตอน 8.40 น. แต่บางวันก็ต้อง Restart Manual อีกรอบ เป็นทุกวันตอนเช้า หลังจาก Restart ไป ก็ใช้งานได้ทั้งวันและจะเป็นอีกทีในตอนเช้าของวันต่อไป
Error ค้นหาไฟล์ไม่พบ

search failed due to system error: 0822154976 request failed 500 /solr/alfresco/alfresco?wt=json&fl=dbid%2cscore&rows=500&df=text&start=0&locale=en_us&fq=%7b%21afts%7dauthority_filter_from_json&fq=%7b%21afts%7dtenant_filter_from_json

ส่งผลให้ กิน CPU ที่ตัว Server Alfresco และตัว VMware

มี Process JAVA run CPU สูงผิดปกติ

Process บางตัว Run เป็นเวลานาน กว่า Process อื่น ๆ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3703 52.5 18.7 2161208 1533760 ? Sl Mar05 372:14 /DATA/alfresco/java/bin/java -Djava.util.logging.config.file=/DATA/alfresco/tomcat/conf/logging.properties -XX:MaxPermSize=512m -Xms128m -Xmx1024m -XX:-DisableExplicitGC -D

เมื่อ Restart service Alfresco process นี้จะเริ่ม Run ใหม่
ทดลองวันที่ 20240306
แก้ปัญหาโดย
แก้ไฟล์ ctl.sh เพิ่ม MaxPermSize , Xms, Xmx
nano /DATA/alfresco/tomcat/scripts/ctl.sh
เดิม
#export JAVA_OPTS="-XX:MaxPermSize=512m -Xms128m -Xmx1024m -XX:-DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home=/DATA/alfresco -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true"
แก้ใหม่
export JAVA_OPTS="-XX:MaxPermSize=1024m -Xms512m -Xmx2048m -XX:-DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home=/DATA/alfresco -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true"
และ
เดิม
#export JAVA_OPTS="-XX:MaxPermSize=512m -Xms128m -Xmx1024m -XX:-DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home=/DATA/alfresco -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true"
แก้ใหม่
export JAVA_OPTS="-XX:MaxPermSize=1024m -Xms512m -Xmx2048m -XX:-DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home=/DATA/alfresco -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true"


กลับไปใช้ Crontab restart ทุกเช้า 5.30 น. เหมือนเดิม

https://hub.alfresco.com/t5/alfresco-content-services-forum/java-heap-space-issue-on-solr4/m-p/57364#M3201

2/08/2024

jquery-ui ให้ข้อความแสดงด้านบน Texbox เมื่อพิ่มพ์ autocomplete

 jquery-ui ให้ข้อความแสดงด้านบน Texbox เมื่อพิ่มพ์ autocomplete ถ้าไม่แก้ข้อความจะอยู่ข้างหลัง Box
ต้องแก้ ไฟล์ css ของ jquery-ui เช่น
jquery-ui-1.13.1-Custom.css
เพิ่ม z-index

  1. .ui-autocomplete {
  2.     position: absolute;
  3.     top: 0;
  4.     left: 0;
  5.     cursor: default;
  6.     z-index: 1500
  7. }

12/25/2023

Ping Check Internet Switch Network Notification Line.

Ping Check Internet Switch Network Notification Line.

1. ใช้งานที่ เครื่อง VMware .2.99
1.1.ลากสายจาก Router wifi Fttx เข้า VMware
1.2.ตั้งค่า Virtual switches ชื่อ FttxWifi
1.3.ตั้งค่า Add port group ชื่อ FttxWifi

2. ติดตั้ง 22.04 add network 2 Adapter
- วง 2 DMZ
- และ FTTX รับ DHCP จาก FttxWifi
- update upgrade ตั้ง Time zone
set-timezone Asia/Bangkok

3. config ip
nano /etc/netplan/00-installer-config.yaml

network:
ethernets:
ens160: # Fix .2
dhcp4: false
addresses: [192.168.2.8/24]
nameservers:
addresses: [192.168.2.2,8.8.8.8]
routes:
- to: default
via: 192.168.2.2
ens192: # DHCP form fttx TOT.
dhcp4: true
version: 2



3.1. fix ip .2
3.2. fttx รับ DHCP จาก FttxWifi Network (ข้อ 1.3)

4. นำไปใช้ด้วยคำสั่ง หรือ reboot เครื่อง
netplan apply

5. ตรวจเช็ค IP ดูว่าได้ IP ทั้งสองหรือไม่
ifconfig


(ขั้นตอนนี้อาจจะไม่ได้ใช้งาน)
ติดตั้ง network-manager แล้ว Reboot เครื่อง
apt-get install network-manager

6. Code เช็ค และแจ้งเตือน XXXXXXXXXX คือ ID ของ Line ที่ต้องการส่งเข้า
CheckNet.sh
  1. #!/bin/bash
  2.         ping -c 1 -t 116 http://www.google.com
  3.         if [[ "$?" == "1" ]] # 1 is internet is down.
  4.         then
  5.                 # Net fttx down. change up to .2
  6.                 ifconfig ens160 up  # .2
  7.                 ifconfig ens192 down # fttx
  8.                 sleep 5 # Wait switch network.
  9.                
  10.                 ################## Test To Line ###############################
  11.                 #curl -X POST -H 'Authorization: Bearer XXXXXXXXXX' -F 'message=Internet FTTX down.Please check! From IP 192.168.2.8' https://notify-api.line.me/api/notify
  12.                 ################## To It Group ################################
  13.                 curl -X POST -H 'Authorization: Bearer XXXXXXXXXX' -F 'message=Internet FTTX down.Please check! From IP 192.168.2.8' https://notify-api.line.me/api/notify
  14.         #else
  15.                 # Net fttx up. down .2
  16.                 #ifconfig ens192 up  # fttx
  17.                 #ifconfig ens160 down # .2
  18.         fi
  19.  

7. Code เมื่อตรวจสอบเสร็จแล้วกลับไปใช้ Network FttxWifi
  1. SwitchToFttx.sh
  2. #!/bin/bash
  3.         # Net fttx up. down .2
  4.         ifconfig ens192 up  # fttx
  5.         ifconfig ens160 down # .2


8. Code สำหรับปิด DMZ เพื่อให้ใช้งาน FttxWifi
DownDMZ.sh
  1. #!/bin/bash
  2.         ifconfig ens160 down # .2


9. ใส่ ไว้ใน cron เพื่อให้ทำตอนเปิดเครื่อง
crontab -e เมื่อเปิดเครื่องให้ปิด DMZ เพื่อใช้ Network FttxWifi.
#Down DMZ Network When Start.
@reboot /home/sa/DownDMZ.sh

#Check internet Fttx Wifi.
5 8-18 * * 1-6 bash /home/sa/CheckNet.sh

# 1 Hour switch to fttx wifi disable dmz. For check Fttx again.
0 8-18 * * 1-6 bash /home/sa/SwitchToFttx.sh



การทำงาน
1. เปิดเครื่อง ปิด Network .2 เปิดใช้เฉพาะ FTTX
2. เช็ค Ping ทุก 5 นาที วันจันทร์ - เสาร์ เวลา 8 - 18 น. ถ้า เน็ตเสีย ปิด Network FTTX เปิด Network .2 เพื่อส่งแจ้งเตือนทาง Line คำสั่ง Check
bash CheckNet.sh
เมื่อได้รับเตือนต้องเข้าเช็ค ว่า Fttx เสียหรือไม่ ถ้าเช็ค Fttx ใช้งานได้แล้ว ให้ Run คำสั่ง
bash SwitchToFttx.sh
เพื่อกลับไปใช้ Network Fttx และปิด Network .2
3. กรณีไม่ได้เข้าเช็ครออีก 1 ชั่วโมง จะทำ Auto Switch
bash SwitchToFttx.sh
เพื่อกลับไปใช้เน็ต FTTX ปิดวง .2
และเช็คซ้ำอีกครั้งและแจ้งเตือนถ้าเน็ต Fttx ยังเสียอยู่

Axapta กู้คืนข้อมูลบางส่วนย้อนหลัง

 Axapta กู้คืนข้อมูลบางส่วนย้อนหลัง เช่น 30/11/2023 ปิด Inventory แล้วข้อมูลมีปัญหา ต้องเอาข้อมูลย้อนหลัง 1 อาทิตย์ มากู้ แล้วทำการคีย์เอกสารใหม่

โดยใช้วิธีดึงข้อมูลจาก Database ที่ต้องการมาใส่ Database ก้อนที่ใช้อยู่ปัจจุบัน ทำใน Local ก่อนแล้วค่อยดึงข้ามเครื่องทำในของจริง
เช่น Database AC_Local คือข้อมูลที่ต้องการเอา , Suwit_Local คือข้อมูลที่ใช้ปัจจุบัน
โดยฐานข้อมูลที่ใช้จะมี 2 ตัว
A. Database ที่จะนำจะเอาข้อมูล AC_Local คือข้อมูลที่ใช้งาน ถึงวันที่ 11/12/2023 เป็นข้อมูลที่ Inventory ไม่ถูกต้อง แต่ต้องการนำข้อมูลบางส่วนมาใช้เพื่อไม่ต้องคีย์เอกสารใหม่ทั้งหมด
B. Database จริง Suwit_Local คือข้อมูลวันที่ 1/12/2023 สั่งปิด Inventory ใหม่ ให้ข้อมูลถูกต้อง พร้อมที่จะดึงข้อมูลมาใส่เพิ่ม


***** สำคัญ ******
A. จะให้ดีควรหยุดสร้างเอกสาร หยุด Post ทุกอย่างก่อน เลขที่ และ RecId จะได้ไม่ซ้ำ
B. แต่ถ้าจะมีการคีย์เอกสารเพิ่มเติม ต้องไปเปลี่ยน Number sequence เพื่อให้เลขที่สร้างมาใหม่ไม่ซ้ำกับเลขเดิม
เช่น เลขที่เอกสาร Movemenet, Transfer , PO, PD
IV_03 : Inventory jouranal number
PO_01 : Purchase order
PD_PD : Production order number
โดยดูข้อมูลจาก Database AC_Local ว่าเลขที่ของแต่ละเอกสาร Run ถึงไหนแล้ว + เพิ่มนิดหน่อย เพื่อไม่ให้เลขซ้ำกัน
C. แต่ถ้าทำไปแล้วต้องกรองเอกสารที่เลขที่ซ้ำออกไม่ต้องนำเข้าเพราะจะ Error แล้วให้คีย์เพิ่มเอง
เช่น เอกสาร Movement, Transfer มีการคีย์ Run ไปก่อนจึงต้องกรองออกใน Code

วิธี Import Data โดยใช้ SQL Server Enterprise Manager
ข้อมูลที่ต้องนำคืน คือช่วงวันที่
'2023-12-02 00:00:00'
'2023-12-11 00:00:00'
โดย

1. คลิ๊กขวาที่ ฐานข้อมูลปัจจุบัน เลือก All Tasks --> Import Data กด Next
2. เลือก Source ใส่ user : password กด Next

3. เลือก Destination

4. เลือกรูปแบบที่ต้องการใช้งาน

จะใช้ 2 ข้อนี้
หัวข้อที่ 1
Copy table : สำหรับ Copy Table ทั้งหมดและ ข้อมูลไปอีก Table ใหม่ Table ที่จะรับข้อมูลต้องไม่มีข้อมูลหรือว่าง

หัวข้อที่ 2
Use a query : สำหรับใช้ query กรองข้อมูลบางส่วนที่เราต้องการ ไม่ได้เอาไปทั้งหมด
5. จะใช้ Query Builder หรือ เขียนคำสั่ง SQL ก็ได้แล้วใช้ปุ่ม Parse เพื่อเช็คความถูกต้อง กด Next


6. เลือก Table ที่ต้องการเก็บข้อมูล เช่น InventTable, PurchTable หรือ Table อื่น ๆ ตามที่ต้องการ กดปุ่ม Preview เพื่อดูข้อมูลบางส่วน ว่าถูกหรือไม่ แล้วกด Next

8. ดูข้อมูลว่าถูกต้องตามที่เราต้องการหรือไม่ เลือกจาก Database ไหน ไป ไหน Table อะไร แล้วกด Finish

ดูข้อมูลถ้าผ่านจะแสดงจำนวนที่นำเข้าข้อมูลได้

แต่ถ้า Error ต้องตรวจสอบว่า Error อะไรเช่น Key ซ้ำ หรือสาเหตุอื่น ๆ


ข้อมูลที่จะนำเข้า
A. Item : InventTable เอาเข้าเฉพาะ Item ส่วน Bom ให้ ฝอบ. คีย์เพิ่มเติม
ต้องเอาเข้า 3 Table
InventTable, InventTableModule, InventItemLocation
ทำตามข้อ 1 - 6
ข้อ 4 ใช้วิธี Query
RECID นำมาจากข้อมูลที่มีใน Database จริง เทียบกับ Database ที่จะเอาข้อมูล ใช้ RecId เพราะไม่มี Field CreateDate
Code Query Prodtable

  1. SELECT [INVENTTABLE].[ITEMGROUPID], [INVENTTABLE].[ITEMID], [INVENTTABLE].[ITEMNAME], [INVENTTABLE].[ITEMTYPE], [INVENTTABLE].[PURCHMODEL], [INVENTTABLE].[HEIGHT], [INVENTTABLE].[WIDTH], [INVENTTABLE].[SALESMODEL], [INVENTTABLE].[COSTGROUPID], [INVENTTABLE].[REQGROUPID], [INVENTTABLE].[PRIMARYVENDORID], [INVENTTABLE].[NETWEIGHT], [INVENTTABLE].[DEPTH], [INVENTTABLE].[UNITVOLUME], [INVENTTABLE].[BOMUNITID], [INVENTTABLE].[DENSITY], [INVENTTABLE].[DEL_SCRAPTYPEID], [INVENTTABLE].[DIMENSION], [INVENTTABLE].[DIMENSION2_], [INVENTTABLE].[DIMENSION3_], [INVENTTABLE].[COSTMODEL], [INVENTTABLE].[USEALTITEMID], [INVENTTABLE].[ALTITEMID], [INVENTTABLE].[INTRACODE], [INVENTTABLE].[BOMMANUALCONSUMP], [INVENTTABLE].[BOMMANUALRECEIPT], [INVENTTABLE].[STOPEXPLODE], [INVENTTABLE].[DEL_COVPERINVENTLOCATION], [INVENTTABLE].[PHANTOM], [INVENTTABLE].[INTRAUNIT], [INVENTTABLE].[BOMLEVEL], [INVENTTABLE].[BATCHNUMGROUPID], [INVENTTABLE].[AUTOREPORTFINISHED], [INVENTTABLE].[ORIGCOUNTRYID], [INVENTTABLE].[STATISTICSFACTOR], [INVENTTABLE].[ALTCONFIGID], [INVENTTABLE].[STANDARDCONFIGID], [INVENTTABLE].[DEL_CONFIGACTIVE], [INVENTTABLE].[PRODPOOLID], [INVENTTABLE].[PROPERTYID], [INVENTTABLE].[ABCTIEUP], [INVENTTABLE].[ABCREVENUE], [INVENTTABLE].[ABCVALUE], [INVENTTABLE].[ABCCONTRIBUTIONMARGIN], [INVENTTABLE].[COMMISSIONGROUPID], [INVENTTABLE].[DEL_BARCODE], [INVENTTABLE].[DEL_BARCODETYPE], [INVENTTABLE].[CONFIGURABLE], [INVENTTABLE].[SALESPERCENTMARKUP], [INVENTTABLE].[SALESCONTRIBUTIONRATIO], [INVENTTABLE].[SALESPRICEMODELBASIC], [INVENTTABLE].[MINAVERAGESETTLE], [INVENTTABLE].[NAMEALIAS], [INVENTTABLE].[PRODGROUPID], [INVENTTABLE].[GROSSDEPTH], [INVENTTABLE].[GROSSWIDTH], [INVENTTABLE].[GROSSHEIGHT], [INVENTTABLE].[SORTCODE], [INVENTTABLE].[CONFIGSIMILAR], [INVENTTABLE].[SERIALNUMGROUPID], [INVENTTABLE].[DIMGROUPID], [INVENTTABLE].[MODELGROUPID], [INVENTTABLE].[ITEMBUYERGROUPID], [INVENTTABLE].[TAXPACKAGINGQTY], [INVENTTABLE].[DEL_TEMPLATE], [INVENTTABLE].[ORIGSTATEID], [INVENTTABLE].[STOPEXPLODEPRICE], [INVENTTABLE].[TARAWEIGHT], [INVENTTABLE].[PACKAGINGGROUPID], [INVENTTABLE].[SCRAPVAR], [INVENTTABLE].[SCRAPCONST], [INVENTTABLE].[STANDARDINVENTCOLORID], [INVENTTABLE].[STANDARDINVENTSIZEID], [INVENTTABLE].[ITEMDIMCOMBINATIONAUTOCREATE], [INVENTTABLE].[ITEMDIMCOSTPRICE], [INVENTTABLE].[ALTINVENTSIZEID], [INVENTTABLE].[ALTINVENTCOLORID], [INVENTTABLE].[INVENTADJUSTNO], [INVENTTABLE].[BODYMARK], [INVENTTABLE].[SALESID], [INVENTTABLE].[ITEMESTWEIGHT], [INVENTTABLE].[SALESITEMTYPE], [INVENTTABLE].[SALESITEMSIZE], [INVENTTABLE].[CASTMETHOD], [INVENTTABLE].[INVENTPOSITIONID], [INVENTTABLE].[SANDPROCESS], [INVENTTABLE].[CORETYPE], [INVENTTABLE].[DEPOSITNOYES], [INVENTTABLE].[PAINTING], [INVENTTABLE].[PTMATERIAL], [INVENTTABLE].[PTLIFETIME], [INVENTTABLE].[PTPIECE], [INVENTTABLE].[PTRECORD], [INVENTTABLE].[HASDRAWING], [INVENTTABLE].[USEREDITDRW], [INVENTTABLE].[LASTDATEEDITDRW], [INVENTTABLE].[STANDARDID], [INVENTTABLE].[MAXPO], [INVENTTABLE].[REMARKITEMONHAND], [INVENTTABLE].[DATELASTWEIGHT], [INVENTTABLE].[WEIGHTLAST], [INVENTTABLE].[ITEMCORE], [INVENTTABLE].[MATERIALGROUPID], [INVENTTABLE].[ASTRAITEMTYPE], [INVENTTABLE].[DRWNO], [INVENTTABLE].[PURCHWEIGHT], [INVENTTABLE].[INVENTADJUSTDATE], [INVENTTABLE].[INVENTCOUNTDATE], [INVENTTABLE].[FILENO], [INVENTTABLE].[DATAAREAID], [INVENTTABLE].[RECID]
  2. FROM [INVENTTABLE]
  3. WHERE [INVENTTABLE].[RECID]>180919242
  4. ORDER BY [INVENTTABLE].[ITEMGROUPID], [INVENTTABLE].[ITEMID], [INVENTTABLE].[ITEMNAME], [INVENTTABLE].[ITEMTYPE], [INVENTTABLE].[PURCHMODEL], [INVENTTABLE].[HEIGHT], [INVENTTABLE].[WIDTH], [INVENTTABLE].[SALESMODEL], [INVENTTABLE].[COSTGROUPID], [INVENTTABLE].[REQGROUPID], [INVENTTABLE].[PRIMARYVENDORID], [INVENTTABLE].[NETWEIGHT], [INVENTTABLE].[DEPTH], [INVENTTABLE].[UNITVOLUME], [INVENTTABLE].[BOMUNITID], [INVENTTABLE].[DENSITY], [INVENTTABLE].[DEL_SCRAPTYPEID], [INVENTTABLE].[DIMENSION], [INVENTTABLE].[DIMENSION2_], [INVENTTABLE].[DIMENSION3_], [INVENTTABLE].[COSTMODEL], [INVENTTABLE].[USEALTITEMID], [INVENTTABLE].[ALTITEMID], [INVENTTABLE].[INTRACODE], [INVENTTABLE].[BOMMANUALCONSUMP], [INVENTTABLE].[BOMMANUALRECEIPT], [INVENTTABLE].[STOPEXPLODE], [INVENTTABLE].[DEL_COVPERINVENTLOCATION], [INVENTTABLE].[PHANTOM], [INVENTTABLE].[INTRAUNIT], [INVENTTABLE].[BOMLEVEL], [INVENTTABLE].[BATCHNUMGROUPID], [INVENTTABLE].[AUTOREPORTFINISHED], [INVENTTABLE].[ORIGCOUNTRYID], [INVENTTABLE].[STATISTICSFACTOR], [INVENTTABLE].[ALTCONFIGID], [INVENTTABLE].[STANDARDCONFIGID], [INVENTTABLE].[DEL_CONFIGACTIVE], [INVENTTABLE].[PRODPOOLID], [INVENTTABLE].[PROPERTYID], [INVENTTABLE].[ABCTIEUP], [INVENTTABLE].[ABCREVENUE], [INVENTTABLE].[ABCVALUE], [INVENTTABLE].[ABCCONTRIBUTIONMARGIN], [INVENTTABLE].[COMMISSIONGROUPID], [INVENTTABLE].[DEL_BARCODE], [INVENTTABLE].[DEL_BARCODETYPE], [INVENTTABLE].[CONFIGURABLE], [INVENTTABLE].[SALESPERCENTMARKUP], [INVENTTABLE].[SALESCONTRIBUTIONRATIO], [INVENTTABLE].[SALESPRICEMODELBASIC], [INVENTTABLE].[MINAVERAGESETTLE], [INVENTTABLE].[NAMEALIAS], [INVENTTABLE].[PRODGROUPID], [INVENTTABLE].[GROSSDEPTH], [INVENTTABLE].[GROSSWIDTH], [INVENTTABLE].[GROSSHEIGHT], [INVENTTABLE].[SORTCODE], [INVENTTABLE].[CONFIGSIMILAR], [INVENTTABLE].[SERIALNUMGROUPID], [INVENTTABLE].[DIMGROUPID], [INVENTTABLE].[MODELGROUPID], [INVENTTABLE].[ITEMBUYERGROUPID], [INVENTTABLE].[TAXPACKAGINGQTY], [INVENTTABLE].[DEL_TEMPLATE], [INVENTTABLE].[ORIGSTATEID], [INVENTTABLE].[STOPEXPLODEPRICE], [INVENTTABLE].[TARAWEIGHT], [INVENTTABLE].[PACKAGINGGROUPID], [INVENTTABLE].[SCRAPVAR], [INVENTTABLE].[SCRAPCONST], [INVENTTABLE].[STANDARDINVENTCOLORID], [INVENTTABLE].[STANDARDINVENTSIZEID], [INVENTTABLE].[ITEMDIMCOMBINATIONAUTOCREATE], [INVENTTABLE].[ITEMDIMCOSTPRICE], [INVENTTABLE].[ALTINVENTSIZEID], [INVENTTABLE].[ALTINVENTCOLORID], [INVENTTABLE].[INVENTADJUSTNO], [INVENTTABLE].[BODYMARK], [INVENTTABLE].[SALESID], [INVENTTABLE].[ITEMESTWEIGHT], [INVENTTABLE].[SALESITEMTYPE], [INVENTTABLE].[SALESITEMSIZE], [INVENTTABLE].[CASTMETHOD], [INVENTTABLE].[INVENTPOSITIONID], [INVENTTABLE].[SANDPROCESS], [INVENTTABLE].[CORETYPE], [INVENTTABLE].[DEPOSITNOYES], [INVENTTABLE].[PAINTING], [INVENTTABLE].[PTMATERIAL], [INVENTTABLE].[PTLIFETIME], [INVENTTABLE].[PTPIECE], [INVENTTABLE].[PTRECORD], [INVENTTABLE].[HASDRAWING], [INVENTTABLE].[USEREDITDRW], [INVENTTABLE].[LASTDATEEDITDRW], [INVENTTABLE].[STANDARDID], [INVENTTABLE].[MAXPO], [INVENTTABLE].[REMARKITEMONHAND], [INVENTTABLE].[DATELASTWEIGHT], [INVENTTABLE].[WEIGHTLAST], [INVENTTABLE].[ITEMCORE], [INVENTTABLE].[MATERIALGROUPID], [INVENTTABLE].[ASTRAITEMTYPE], [INVENTTABLE].[DRWNO], [INVENTTABLE].[PURCHWEIGHT], [INVENTTABLE].[INVENTADJUSTDATE], [INVENTTABLE].[INVENTCOUNTDATE], [INVENTTABLE].[FILENO], [INVENTTABLE].[DATAAREAID], [INVENTTABLE].[RECID]

Code Query InventTableModule
  1. SELECT [INVENTTABLEMODULE].[ITEMID], [INVENTTABLEMODULE].[MODULETYPE], [INVENTTABLEMODULE].[UNITID], [INVENTTABLEMODULE].[PRICE], [INVENTTABLEMODULE].[PRICEUNIT], [INVENTTABLEMODULE].[MARKUP], [INVENTTABLEMODULE].[LINEDISC], [INVENTTABLEMODULE].[MULTILINEDISC], [INVENTTABLEMODULE].[ENDDISC], [INVENTTABLEMODULE].[QUANTITY], [INVENTTABLEMODULE].[LOWESTQTY], [INVENTTABLEMODULE].[HIGHESTQTY], [INVENTTABLEMODULE].[TAXITEMGROUPID], [INVENTTABLEMODULE].[BLOCKED], [INVENTTABLEMODULE].[DELIVERYTIME], [INVENTTABLEMODULE].[INVENTLOCATIONID], [INVENTTABLEMODULE].[MANDATORYINVENTLOCATION], [INVENTTABLEMODULE].[STANDARDQTY], [INVENTTABLEMODULE].[MARKUPGROUPID], [INVENTTABLEMODULE].[PRICEDATE], [INVENTTABLEMODULE].[PRICEQTY], [INVENTTABLEMODULE].[ALLOCATEMARKUP], [INVENTTABLEMODULE].[OVERDELIVERYPCT], [INVENTTABLEMODULE].[UNDERDELIVERYPCT], [INVENTTABLEMODULE].[SUPPITEMGROUPID], [INVENTTABLEMODULE].[CALENDARDAYS], [INVENTTABLEMODULE].[PRICEKGS], [INVENTTABLEMODULE].[WMSLOCATIONID], [INVENTTABLEMODULE].[DATAAREAID], [INVENTTABLEMODULE].[RECID], [INVENTTABLEMODULE].[MINORDERDATE]
  2. FROM [INVENTTABLEMODULE]
  3. WHERE [INVENTTABLEMODULE].[RECID]>180919239
  4. ORDER BY [INVENTTABLEMODULE].[ITEMID], [INVENTTABLEMODULE].[MODULETYPE], [INVENTTABLEMODULE].[UNITID], [INVENTTABLEMODULE].[PRICE], [INVENTTABLEMODULE].[PRICEUNIT], [INVENTTABLEMODULE].[MARKUP], [INVENTTABLEMODULE].[LINEDISC], [INVENTTABLEMODULE].[MULTILINEDISC], [INVENTTABLEMODULE].[ENDDISC], [INVENTTABLEMODULE].[QUANTITY], [INVENTTABLEMODULE].[LOWESTQTY], [INVENTTABLEMODULE].[HIGHESTQTY], [INVENTTABLEMODULE].[TAXITEMGROUPID], [INVENTTABLEMODULE].[BLOCKED], [INVENTTABLEMODULE].[DELIVERYTIME], [INVENTTABLEMODULE].[INVENTLOCATIONID], [INVENTTABLEMODULE].[MANDATORYINVENTLOCATION], [INVENTTABLEMODULE].[STANDARDQTY], [INVENTTABLEMODULE].[MARKUPGROUPID], [INVENTTABLEMODULE].[PRICEDATE], [INVENTTABLEMODULE].[PRICEQTY], [INVENTTABLEMODULE].[ALLOCATEMARKUP], [INVENTTABLEMODULE].[OVERDELIVERYPCT], [INVENTTABLEMODULE].[UNDERDELIVERYPCT], [INVENTTABLEMODULE].[SUPPITEMGROUPID], [INVENTTABLEMODULE].[CALENDARDAYS], [INVENTTABLEMODULE].[PRICEKGS], [INVENTTABLEMODULE].[WMSLOCATIONID], [INVENTTABLEMODULE].[DATAAREAID], [INVENTTABLEMODULE].[RECID], [INVENTTABLEMODULE].[MINORDERDATE]
  5.  

Code Query InventItemLocation
  1. SELECT [INVENTITEMLOCATION].[ITEMID], [INVENTITEMLOCATION].[DEL_CONFIGID], [INVENTITEMLOCATION].[DEL_INVENTLOCATIONID], [INVENTITEMLOCATION].[DEL_COVRULE], [INVENTITEMLOCATION].[DEL_COVPERIOD], [INVENTITEMLOCATION].[DEL_MININVENTONHAND], [INVENTITEMLOCATION].[DEL_MAXINVENTONHAND], [INVENTITEMLOCATION].[COUNTGROUPID], [INVENTITEMLOCATION].[DEL_DELIVERYTIME], [INVENTITEMLOCATION].[WMSPICKINGLOCATION], [INVENTITEMLOCATION].[COUNTINGSTARTED], [INVENTITEMLOCATION].[COUNTINGJOURNALID], [INVENTITEMLOCATION].[WMSLOCATIONIDDEFAULTISSUE], [INVENTITEMLOCATION].[WMSLOCATIONIDDEFAULTRECEIPT], [INVENTITEMLOCATION].[INVENTDIMID], [INVENTITEMLOCATION].[DATAAREAID], [INVENTITEMLOCATION].[RECID]
  2. FROM [INVENTITEMLOCATION]
  3. WHERE [INVENTITEMLOCATION].[RECID]>180919241
  4. ORDER BY [INVENTITEMLOCATION].[ITEMID], [INVENTITEMLOCATION].[DEL_CONFIGID], [INVENTITEMLOCATION].[DEL_INVENTLOCATIONID], [INVENTITEMLOCATION].[DEL_COVRULE], [INVENTITEMLOCATION].[DEL_COVPERIOD], [INVENTITEMLOCATION].[DEL_MININVENTONHAND], [INVENTITEMLOCATION].[DEL_MAXINVENTONHAND], [INVENTITEMLOCATION].[COUNTGROUPID], [INVENTITEMLOCATION].[DEL_DELIVERYTIME], [INVENTITEMLOCATION].[WMSPICKINGLOCATION], [INVENTITEMLOCATION].[COUNTINGSTARTED], [INVENTITEMLOCATION].[COUNTINGJOURNALID], [INVENTITEMLOCATION].[WMSLOCATIONIDDEFAULTISSUE], [INVENTITEMLOCATION].[WMSLOCATIONIDDEFAULTRECEIPT], [INVENTITEMLOCATION].[INVENTDIMID], [INVENTITEMLOCATION].[DATAAREAID], [INVENTITEMLOCATION].[RECID]
  5.  


2. PO : PurchTable เอาเข้าเฉพาะ เลขที่ PO ส่วน รายการ Purchline ให้ ฝจห. คีย์เพิ่มเติม
ทำตามข้อ 1 - 6
ข้อ 4 ใช้วิธี Query
ใช้ CreateDate เป็นตัวกรอกข้อมูล
Code Query
  1. SELECT [PURCHTABLE].[PURCHID], [PURCHTABLE].[PURCHNAME], [PURCHTABLE].[ORDERACCOUNT], [PURCHTABLE].[INVOICEACCOUNT], [PURCHTABLE].[FREIGHTZONE], [PURCHTABLE].[EMAIL], [PURCHTABLE].[DELIVERYDATE], [PURCHTABLE].[DELIVERYTYPE], [PURCHTABLE].[CURRENCYCODE], [PURCHTABLE].[PAYMENT], [PURCHTABLE].[CASHDISC], [PURCHTABLE].[PURCHPLACER], [PURCHTABLE].[VENDGROUP], [PURCHTABLE].[LINEDISC], [PURCHTABLE].[DISCPERCENT], [PURCHTABLE].[DIMENSION], [PURCHTABLE].[DIMENSION2_], [PURCHTABLE].[DIMENSION3_], [PURCHTABLE].[PRICEGROUPID], [PURCHTABLE].[MULTILINEDISC], [PURCHTABLE].[ENDDISC], [PURCHTABLE].[DELIVERYADDRESS], [PURCHTABLE].[TAXGROUP], [PURCHTABLE].[DLVTERM], [PURCHTABLE].[DLVMODE], [PURCHTABLE].[PURCHSTATUS], [PURCHTABLE].[MARKUPGROUP], [PURCHTABLE].[PURCHASETYPE], [PURCHTABLE].[URL], [PURCHTABLE].[POSTINGPROFILE], [PURCHTABLE].[TRANSACTIONCODE], [PURCHTABLE].[DELIVERYZIPCODE], [PURCHTABLE].[DLVCOUNTY], [PURCHTABLE].[DLVCOUNTRY], [PURCHTABLE].[DLVSTATE], [PURCHTABLE].[SETTLEVOUCHER], [PURCHTABLE].[DELIVERYNAME], [PURCHTABLE].[COVSTATUS], [PURCHTABLE].[PAYMENTSCHED], [PURCHTABLE].[ONETIMEVENDOR], [PURCHTABLE].[RETURNITEMNUM], [PURCHTABLE].[FREIGHTSLIPTYPE], [PURCHTABLE].[DOCUMENTSTATUS], [PURCHTABLE].[CONTACTPERSONID], [PURCHTABLE].[DEL_SUMINVOICEID], [PURCHTABLE].[DEL_SUMPACKINGSLIPID], [PURCHTABLE].[DEL_SUMPURCHASEORDERID], [PURCHTABLE].[INVENTLOCATIONID], [PURCHTABLE].[DEL_SUMRECEIPTSLISTID], [PURCHTABLE].[ITEMBUYERGROUPID], [PURCHTABLE].[PURCHPOOLID], [PURCHTABLE].[VATNUM], [PURCHTABLE].[PORT], [PURCHTABLE].[DEL_PURCHASEORDERORIGINALS], [PURCHTABLE].[DEL_PURCHASEORDERCOPIES], [PURCHTABLE].[INCLTAX], [PURCHTABLE].[NUMBERSEQUENCEGROUP], [PURCHTABLE].[LANGUAGEID], [PURCHTABLE].[AUTOSUMMARYMODULETYPE], [PURCHTABLE].[TRANSPORT], [PURCHTABLE].[PRINTMODULETYPE], [PURCHTABLE].[PAYMMODE], [PURCHTABLE].[PAYMSPEC], [PURCHTABLE].[FIXEDDUEDATE], [PURCHTABLE].[DELIVERYCITY], [PURCHTABLE].[DELIVERYSTREET], [PURCHTABLE].[STATPROCID], [PURCHTABLE].[REFDLVZIPCODE], [PURCHTABLE].[VENDORREF], [PURCHTABLE].[REMARKPO], [PURCHTABLE].[REMARKPLAN], [PURCHTABLE].[PAYMENTALL_DATE], [PURCHTABLE].[PAYMENTFIRST_DATE], [PURCHTABLE].[ETD_DATE], [PURCHTABLE].[CIFCOST], [PURCHTABLE].[COURIER], [PURCHTABLE].[CREATEDDATE], [PURCHTABLE].[DATAAREAID], [PURCHTABLE].[RECID]
  2. FROM [PURCHTABLE]
  3. WHERE [PURCHTABLE].[CREATEDDATE]>='2023-12-02' AND
  4. [PURCHTABLE].[CREATEDDATE]<='2023-12-11'
  5. ORDER BY [PURCHTABLE].[PURCHID], [PURCHTABLE].[PURCHNAME], [PURCHTABLE].[ORDERACCOUNT], [PURCHTABLE].[INVOICEACCOUNT], [PURCHTABLE].[FREIGHTZONE], [PURCHTABLE].[EMAIL], [PURCHTABLE].[DELIVERYDATE], [PURCHTABLE].[DELIVERYTYPE], [PURCHTABLE].[CURRENCYCODE], [PURCHTABLE].[PAYMENT], [PURCHTABLE].[CASHDISC], [PURCHTABLE].[PURCHPLACER], [PURCHTABLE].[VENDGROUP], [PURCHTABLE].[LINEDISC], [PURCHTABLE].[DISCPERCENT], [PURCHTABLE].[DIMENSION], [PURCHTABLE].[DIMENSION2_], [PURCHTABLE].[DIMENSION3_], [PURCHTABLE].[PRICEGROUPID], [PURCHTABLE].[MULTILINEDISC], [PURCHTABLE].[ENDDISC], [PURCHTABLE].[DELIVERYADDRESS], [PURCHTABLE].[TAXGROUP], [PURCHTABLE].[DLVTERM], [PURCHTABLE].[DLVMODE], [PURCHTABLE].[PURCHSTATUS], [PURCHTABLE].[MARKUPGROUP], [PURCHTABLE].[PURCHASETYPE], [PURCHTABLE].[URL], [PURCHTABLE].[POSTINGPROFILE], [PURCHTABLE].[TRANSACTIONCODE], [PURCHTABLE].[DELIVERYZIPCODE], [PURCHTABLE].[DLVCOUNTY], [PURCHTABLE].[DLVCOUNTRY], [PURCHTABLE].[DLVSTATE], [PURCHTABLE].[SETTLEVOUCHER], [PURCHTABLE].[DELIVERYNAME], [PURCHTABLE].[COVSTATUS], [PURCHTABLE].[PAYMENTSCHED], [PURCHTABLE].[ONETIMEVENDOR], [PURCHTABLE].[RETURNITEMNUM], [PURCHTABLE].[FREIGHTSLIPTYPE], [PURCHTABLE].[DOCUMENTSTATUS], [PURCHTABLE].[CONTACTPERSONID], [PURCHTABLE].[DEL_SUMINVOICEID], [PURCHTABLE].[DEL_SUMPACKINGSLIPID], [PURCHTABLE].[DEL_SUMPURCHASEORDERID], [PURCHTABLE].[INVENTLOCATIONID], [PURCHTABLE].[DEL_SUMRECEIPTSLISTID], [PURCHTABLE].[ITEMBUYERGROUPID], [PURCHTABLE].[PURCHPOOLID], [PURCHTABLE].[VATNUM], [PURCHTABLE].[PORT], [PURCHTABLE].[DEL_PURCHASEORDERORIGINALS], [PURCHTABLE].[DEL_PURCHASEORDERCOPIES], [PURCHTABLE].[INCLTAX], [PURCHTABLE].[NUMBERSEQUENCEGROUP], [PURCHTABLE].[LANGUAGEID], [PURCHTABLE].[AUTOSUMMARYMODULETYPE], [PURCHTABLE].[TRANSPORT], [PURCHTABLE].[PRINTMODULETYPE], [PURCHTABLE].[PAYMMODE], [PURCHTABLE].[PAYMSPEC], [PURCHTABLE].[FIXEDDUEDATE], [PURCHTABLE].[DELIVERYCITY], [PURCHTABLE].[DELIVERYSTREET], [PURCHTABLE].[STATPROCID], [PURCHTABLE].[REFDLVZIPCODE], [PURCHTABLE].[VENDORREF], [PURCHTABLE].[REMARKPO], [PURCHTABLE].[REMARKPLAN], [PURCHTABLE].[PAYMENTALL_DATE], [PURCHTABLE].[PAYMENTFIRST_DATE], [PURCHTABLE].[ETD_DATE], [PURCHTABLE].[CIFCOST], [PURCHTABLE].[COURIER], [PURCHTABLE].[CREATEDDATE], [PURCHTABLE].[DATAAREAID], [PURCHTABLE].[RECID]


3. PD : ProdTable จะใช้วิธีผ่าน Code เพื่อให้เกิด ProdBom และเกิด InventTrans ผ่านการ Insert Status จะเป็น Create ทั้งหมดโดย
*** สำคัญต้องรอ ฝอบ. สร้าง BOM และ Active BOM ให้เรียบร้อยก่อน จึงค่อยสร้าง ProdTable เพราะจะไม่เกิด ProdBom ***
3.1. ทำไฟล์ .CSV PD ที่จะนำเข้า โดยกรองข้อมูลเอาจากช่อง CreateDate ข้อมูลที่จะใช้ PordId,Qty
Selection_127.png
Selection_127.png (19.55 KB) Viewed 30 times

Code Query หรือจะไป Fielter จาก Table ProdTable ก็ได้
  1. PRODTABLE
  2. SELECT [PRODTABLE].[ITEMID], [PRODTABLE].[NAME], [PRODTABLE].[PRODGROUPID], [PRODTABLE].[PRODSTATUS], [PRODTABLE].[PRODPRIO], [PRODTABLE].[PRODLOCKED], [PRODTABLE].[PRODTYPE], [PRODTABLE].[SCHEDSTATUS], [PRODTABLE].[SCHEDDATE], [PRODTABLE].[QTYSCHED], [PRODTABLE].[QTYSTUP], [PRODTABLE].[DLVDATE], [PRODTABLE].[STUPDATE], [PRODTABLE].[FINISHEDDATE], [PRODTABLE].[SCHEDSTART], [PRODTABLE].[SCHEDEND], [PRODTABLE].[HEIGHT], [PRODTABLE].[WIDTH], [PRODTABLE].[DEPTH], [PRODTABLE].[DENSITY], [PRODTABLE].[QTYCALC], [PRODTABLE].[REALDATE], [PRODTABLE].[RESERVATION], [PRODTABLE].[PRODPOSTINGTYPE], [PRODTABLE].[INVENTTRANSID], [PRODTABLE].[DIMENSION], [PRODTABLE].[DIMENSION2_], [PRODTABLE].[DIMENSION3_], [PRODTABLE].[INVENTREFTYPE], [PRODTABLE].[INVENTREFID], [PRODTABLE].[INVENTREFTRANSID], [PRODTABLE].[COLLECTREFLEVEL], [PRODTABLE].[COLLECTREFPRODID], [PRODTABLE].[BOMDATE], [PRODTABLE].[BACKORDERSTATUS], [PRODTABLE].[PRODPOOLID], [PRODTABLE].[PROFITSET], [PRODTABLE].[CALCDATE], [PRODTABLE].[ROUTEJOBS], [PRODTABLE].[CHECKROUTE], [PRODTABLE].[PROPERTYID], [PRODTABLE].[REMAININVENTPHYSICAL], [PRODTABLE].[BOMID], [PRODTABLE].[ROUTEID], [PRODTABLE].[DEL_CONFIGID], [PRODTABLE].[REQPLANIDSCHED], [PRODTABLE].[REQPOID], [PRODTABLE].[REFLOOKUP], [PRODTABLE].[LATESTSCHEDDIRECTION], [PRODTABLE].[LATESTSCHEDDATE], [PRODTABLE].[PRODID], [PRODTABLE].[INVENTDIMID], [PRODTABLE].[SCHEDTOTIME], [PRODTABLE].[SCHEDFROMTIME], [PRODTABLE].[LATESTSCHEDTIME], [PRODTABLE].[DLVTIME], [PRODTABLE].[PRODORIGID], [PRODTABLE].[GANTTCOLORID], [PRODTABLE].[REFSALESID], [PRODTABLE].[ACTIONDATE], [PRODTABLE].[REMARKPD], [PRODTABLE].[SALESORDERLINE], [PRODTABLE].[SALESORDERLOT], [PRODTABLE].[PDEXTRA], [PRODTABLE].[PLANT], [PRODTABLE].[QTY2014], [PRODTABLE].[REPORTWEIGHTVALVE], [PRODTABLE].[HASCHECKVALVE], [PRODTABLE].[REMARKPDASSEMBLY], [PRODTABLE].[CHECKUPWL], [PRODTABLE].[CREATEDDATE], [PRODTABLE].[CREATEDTIME], [PRODTABLE].[CREATEDBY], [PRODTABLE].[DATAAREAID], [PRODTABLE].[RECID]
  3. FROM [PRODTABLE]
  4. WHERE [PRODTABLE].[CREATEDDATE]>='2023-12-02 00:00:00' AND
  5. [PRODTABLE].[CREATEDDATE]<='2023-12-11 00:00:00'
  6. ORDER BY [PRODTABLE].[RECID]

3.2. สร้าง Table ที่ Axapta Database จริง ที่จะใช้งาน เพื่อนำมาเปรียบเทียบข้อมูลและ Run Code นำเข้า Table ProdTable โดยสร้าง Table ชื่อ ProdTable2023
3.3. Import ข้อมูลโดยใช้วิธีข้อ 1 - 6
ข้อ 4 เลือกเป็น Copy table จาก AC_Local.ProdTable ไป Suwit_Local.ProdTable2023
3.4. เขียนโปรแกรมใน Job duplicateProdTable ตั้งชื่อไฟลื .CSV และนำไปไว้ที่ Path ที่ต้องการ
Code ทำงานโดย เอา PD กับ QTY จาก CSV ไฟล์ ไปหา ProdTable2023 ที่ Copy มาตามข้อ 3.3. เพื่อเอาข้อมูลที่ต้องการเข้า ProdTable ที่จะใช้งานจริง
Code
  1. static void duplicateProdTable(Args _args)
  2. {
  3.     ProdTable2023       prodTable2023;
  4.     ProdTable           selectProdTable;
  5.     ProdTable           updateProdTable;
  6.     InventTable         item;
  7.     int                 no;
  8.     ProdTable2023       myProd;
  9.     ProdTable           tmpProdTable;
  10.  
  11.     AsciiIO                 myFile;
  12.     str                     filename = "ProdTable_1";
  13.  
  14.     container               RecData;
  15.     int                     i;
  16.  
  17.     ProdId                  myProdId;
  18.     ItemId                  myItemId;
  19.     Qty                     myQty;
  20.     ;
  21. //  CREATE NEW LINE
  22.  
  23.         myFile=new AsciiIO(strfmt("C:\\%1.csv", filename),"r");
  24.         myfile.inFieldDelimiter(",");
  25.         while(myFile.status() == IO_Status::Ok)
  26.             RecData += myFile.read();
  27.         myFile = null;
  28.  
  29.  
  30.         ttsBegin;
  31.         for(i=1; i <= conlen(RecData); i++){
  32.  
  33.             myProdId = conpeek(RecData, i);
  34.             i++;
  35.  
  36.             myQty = conpeek(RecData, i);
  37.  
  38.             SELECT * FROM myProd WHERE myProd.ProdId == myProdId;
  39.  
  40.             item = InventTable::find(myProd.ItemId);
  41.  
  42.             tmpProdTable.clear();
  43.             tmpProdTable.initValue();
  44.             tmpProdTable.ProdId                = myProd.ProdId;
  45.             tmpProdTable.ItemId                = item.ItemId;
  46.             tmpProdTable.initFromInventTable(item);
  47.             tmpProdTable.Name                   = myProd.Name;
  48.             tmpProdTable.RefSalesId            = myProd.RefSalesId;
  49.             tmpProdTable.SalesOrderLine     = myProd.SalesOrderLine;
  50.             tmpProdTable.SalesOrderLot      = myProd.SalesOrderLot;
  51.             tmpProdTable.PdExtra            = myProd.PdExtra;
  52.             tmpProdTable.Plant              = myProd.Plant;
  53.             tmpProdTable.RemarkPD             = myprod.RemarkPD;
  54.  
  55.             tmpProdTable.QtySched              = myQty;
  56.             tmpProdTable.RemainInventPhysical  = myQty;
  57.             tmpProdTable.BOMId = BOMVersion::findActive(tmpProdTable.ItemId,
  58.                                                         tmpProdTable.BOMDate,
  59.                                                         myQty).BOMId;
  60.             tmpProdTable.RouteId = RouteVersion::findActive(tmpProdTable.ItemId,
  61.                                                             tmpProdTable.BOMDate,
  62.                                                             myQty).RouteId;
  63.             tmpProdTable.initRouteVersion();
  64.             tmpProdTable.initBOMVersion();
  65.             tmpProdTable.ProdPostingType       = ProdPostingType::ItemCategory;
  66.             tmpProdTable.type().insert();
  67.  
  68.             no++;
  69.             info(strfmt("%1 : %2 : %3 : %4  : %5", no, myProd.ProdId, myProd.ItemId, myQty, tmpProdTable.BOMId));
  70.         }
  71.         ttscommit;
  72. }


4. เอกสาร Transfer, Movement : InventJournalTable, InventJournalTrans โดย
จะทำคล้ายกับ ProdTable
4.1. นำเข้าข้อมูล InventJournalTable ตามข้อ Import ข้อมูลโดยใช้วิธีข้อ 1 - 6
ข้อ 4 ใช้วิธี Query
Code
  1. INVENTJOURNALTABLE
  2. SELECT [INVENTJOURNALTABLE].[JOURNALID], [INVENTJOURNALTABLE].[DESCRIPTION], [INVENTJOURNALTABLE].[POSTED], [INVENTJOURNALTABLE].[RESERVATION], [INVENTJOURNALTABLE].[SYSTEMBLOCKED], [INVENTJOURNALTABLE].[DEL_LOG], [INVENTJOURNALTABLE].[BLOCKUSERID], [INVENTJOURNALTABLE].[JOURNALTYPE], [INVENTJOURNALTABLE].[JOURNALNAMEID], [INVENTJOURNALTABLE].[INVENTDIMFIXED], [INVENTJOURNALTABLE].[EMPLID], [INVENTJOURNALTABLE].[BLOCKUSERGROUPID], [INVENTJOURNALTABLE].[VOUCHERDRAW], [INVENTJOURNALTABLE].[VOUCHERCHANGE], [INVENTJOURNALTABLE].[VOUCHERSEQID], [INVENTJOURNALTABLE].[SESSIONLOGINTIME], [INVENTJOURNALTABLE].[SESSIONLOGINDATE], [INVENTJOURNALTABLE].[SESSIONID], [INVENTJOURNALTABLE].[POSTEDUSERID], [INVENTJOURNALTABLE].[POSTEDDATE], [INVENTJOURNALTABLE].[NUMOFLINES], [INVENTJOURNALTABLE].[JOURNALIDORIGNAL], [INVENTJOURNALTABLE].[DETAILSUMMARY], [INVENTJOURNALTABLE].[DELETEPOSTEDLINES], [INVENTJOURNALTABLE].[LEDGERACCOUNTIDOFFSET], [INVENTJOURNALTABLE].[VENDACCOUNT], [INVENTJOURNALTABLE].[CREATEBY], [INVENTJOURNALTABLE].[SALESORDERLOT], [INVENTJOURNALTABLE].[RECEIVEDATE], [INVENTJOURNALTABLE].[REFSALESID], [INVENTJOURNALTABLE].[ITEMID], [INVENTJOURNALTABLE].[NOINSO], [INVENTJOURNALTABLE].[QTYINSO], [INVENTJOURNALTABLE].[TRANSDATE], [INVENTJOURNALTABLE].[PLANT], [INVENTJOURNALTABLE].[PICKINGBY], [INVENTJOURNALTABLE].[CAUSE], [INVENTJOURNALTABLE].[CREATEDATE], [INVENTJOURNALTABLE].[DATAAREAID], [INVENTJOURNALTABLE].[RECID]
  3. FROM [INVENTJOURNALTABLE]
  4. WHERE [INVENTJOURNALTABLE].[CREATEDATE]>='2023-11-02 00:00:00' AND
  5. [INVENTJOURNALTABLE].[CREATEDATE]<='2023-11-11 00:00:00'
  6. ORDER BY [INVENTJOURNALTABLE].[RECID]


กรณีนี้มีการใช้เลขที่ไปแล้วต้องเพิ่มเงื่อนไข ตัดเลขที่ ที่ใช้ไปแล้วออก แล้วให้คีย์เอง
Code
  1. SELECT     JOURNALID, DESCRIPTION, POSTED, RESERVATION, SYSTEMBLOCKED, DEL_LOG, BLOCKUSERID, JOURNALTYPE, JOURNALNAMEID,
  2.                       INVENTDIMFIXED, EMPLID, BLOCKUSERGROUPID, VOUCHERDRAW, VOUCHERCHANGE, VOUCHERSEQID, SESSIONLOGINTIME,
  3.                       SESSIONLOGINDATE, SESSIONID, POSTEDUSERID, POSTEDDATE, NUMOFLINES, JOURNALIDORIGNAL, DETAILSUMMARY, DELETEPOSTEDLINES,
  4.                       LEDGERACCOUNTIDOFFSET, VENDACCOUNT, CREATEBY, SALESORDERLOT, RECEIVEDATE, REFSALESID, ITEMID, NOINSO, QTYINSO, TRANSDATE,
  5.                       PLANT, PICKINGBY, CAUSE, CREATEDATE, DATAAREAID, RECID
  6. FROM         INVENTJOURNALTABLE
  7. WHERE     (CREATEDATE >= '2023-12-02 00:00:00') AND (CREATEDATE <= '2023-12-11 00:00:00') AND (JOURNALID <> '23-0020130') AND
  8.                       (JOURNALID <> '23-0020131') AND (JOURNALID <> '23-0020125') AND (JOURNALID <> '23-0020127') AND (JOURNALID <> '23-0020128') AND
  9.                       (JOURNALID <> '23-0020122') AND (JOURNALID <> '23-0020119') AND (JOURNALID <> '23-0020120')
  10. ORDER BY RECID

4.2. เปลี่ยน Status รายการที่ Post แล้วให้เป็น Create และ User ที่ Post , วันที่ Post นำออก
Code
  1. UPDATE    INVENTJOURNALTABLE
  2. SET              POSTED = 0, POSTEDUSERID = '', POSTEDDATE = '1900-01-01'
  3. WHERE     (CREATEDATE >= '2023-12-02 00:00:00') AND (CREATEDATE <= '2023-12-11 00:00:00')

4.3. เตรียมข้อมูลที่จะดึงเข้า InventJournalTrans เพื่อให้เกิด Transaction
4.3.1. สร้าง Table InventJournalTrans2023, InventDim2023 ที่ Axapta ที่จะใช้งานจริง Suwit_Local
ต้องใช้ InventDim ด้วยเพราะมีการคีย์การลบ เปลี่ยนแปลงไปแล้ว แต่ถ้าสั่งหยุดคีย์หรือ Post ก็ไม่ต้องใช้ InventDim
4.3.2. นำเข้าข้อมูล InventJournalTrans ตามข้อ Import ข้อมูลโดยใช้วิธีข้อ 1 - 6
ข้อ 4 ใช้วิธี Copy Table
ทั้ง AC_Local.InventJournalTrans --> Suwit_Local.InventJournalTranls
AC_Local.InventDim --> Suwit_Local.InventDim
4.3.3. เขียน Code Run Job นำข้อมูลเข้า InventJournalTrans
Code ทำงานโดย กรองเอาเฉพาะเล่ม ใน InventJournalTable ที่อยู่ในช่วงวันที่ ที่ต้องการ เอา JournalId ไปหา InventJournalTrans2023 เพื่อเอาข้อมูลที่ต้องการ
InventDim2023 ใช้สร้าง InventDim ใหม่ กรณีหาไม่เจอเพราะมีการใช้งานและเปลี่ยนแปลง
**** สำคัญ InventDim Code Form InventDimId กับ To InventDimId ดูให้ดี ถ้าเอาเข้าผิดต้อง Update ใหม่ ****
Code
  1.  
  2. static void duplicateInventJournalTrans(Args _args)
  3. {
  4.  
  5.     InventJournalTrans2023  queryInventJournalTrans;
  6.     //InventJournalTrans      queryInventJournalTrans;
  7.     InventJournalTrans      updateInventJournalTrans;
  8.     InventJournalTrans      deleteInventJournalTrans;
  9.  
  10.     InventJournalTable      myInventJournalTable;
  11.     int                     no = 1;
  12.  
  13.     InventDim               myInventDim;
  14.     InventDim               myInventDim2;
  15.  
  16.     InventDim               FromInventDim;
  17.     InventDim               ToInventDim;
  18.  
  19.     InventDim2023           myInventDim2023;
  20.     ;
  21.  
  22. ttsBegin;
  23.     WHILE
  24.     SELECT JournalId FROM myInventJournalTable
  25.     WHERE myInventJournalTable.CreateDate >= str2date("02/12/2023", 123)
  26.         && myInventJournalTable.CreateDate <= str2date("11/12/2023", 123)
  27.     {
  28.         WHILE
  29.         SELECT * FROM queryInventJournalTrans
  30.         WHERE queryInventJournalTrans.JournalId == myInventJournalTable.JournalId
  31.         {
  32.             //SELECT * FROM queryInventJournalTrans WHERE queryInventJournalTrans.RecId == inventJournalTrans2014.RecId;
  33.             //SELECT FORUPDATE deleteInventJournalTrans WHERE deleteInventJournalTrans.RecId == queryInventJournalTrans.RecId;
  34.             updateInventJournalTrans.clear();
  35.            
  36.             //insertInventJournalTrans.initFromInventJournalTrans(queryInventJournalTrans);
  37.             insertInventJournalTrans.JournalId          = queryInventJournalTrans.JournalId;
  38.             insertInventJournalTrans.JournalType        = queryInventJournalTrans.JournalType;
  39.             insertInventJournalTrans.LineNum            = queryInventJournalTrans.LineNum;
  40.             insertInventJournalTrans.ItemId             = queryInventJournalTrans.ItemId;
  41.             insertInventJournalTrans.FinishedCode       = queryInventJournalTrans.FinishedCode;
  42.             insertInventJournalTrans.OrderQty           = queryInventJournalTrans.OrderQty;
  43.             insertInventJournalTrans.Qty                = queryInventJournalTrans.Qty;
  44.             insertInventJournalTrans.CostAmount         = queryInventJournalTrans.CostAmount;
  45.        
  46.             SELECT * FROM myInventDim
  47.             WHERE myInventDim.inventDimId == queryInventJournalTrans.InventDimId;
  48.  
  49.             if(myInventDim.inventDimId != ""){
  50.                 insertInventJournalTrans.InventDimId  = queryInventJournalTrans.InventDimId;
  51.             } else {
  52.  
  53.                 SELECT * FROM myInventDim2023
  54.                 WHERE myInventDim2023.inventDimId == queryInventJournalTrans.InventDimId;
  55.  
  56.                 FromInventDim.InventLocationId = myInventDim2023.InventLocationId;
  57.                 FromInventDim.wMSLocationId   = myInventDim2023.wMSLocationId;
  58.                 FromInventDim.inventBatchId = "";
  59.                 FromInventDim.configId = "";
  60.                 FromInventDim.InventSizeId = "";
  61.                 FromInventDim.InventColorId = "";
  62.                 FromInventDim = InventDim::findOrCreate(FromInventDim);
  63.                 insertInventJournalTrans.InventDimId = FromInventDim.inventDimId;//Some line not invent batch fix use WH.
  64.  
  65.             }
  66.  
  67.             SELECT * FROM myInventDim2
  68.             WHERE myInventDim2.inventDimId == queryInventJournalTrans.ToInventDimId;
  69.             if(myInventDim2.inventDimId != ""){
  70.                 insertInventJournalTrans.ToInventDimId = queryInventJournalTrans.ToInventDimId;
  71.             } else {
  72.                 SELECT * FROM myInventDim2023
  73.                 WHERE myInventDim2023.inventDimId == queryInventJournalTrans.ToInventDimId;
  74.  
  75.                 ToInventDim.InventLocationId = myInventDim2023.InventLocationId;
  76.                 ToInventDim.wMSLocationId   = myInventDim2023.wMSLocationId;
  77.                 ToInventDim.inventBatchId = "";
  78.                 ToInventDim.configId = "";
  79.                 ToInventDim.InventSizeId = "";
  80.                 ToInventDim.InventColorId = "";
  81.                 ToInventDim = InventDim::findOrCreate(ToInventDim);
  82.  
  83.                 ttsBegin;
  84.                 SELECT FORUPDATE * FROM updateInventJournalTrans
  85.                 WHERE updateInventJournalTrans.JournalId == queryInventJournalTrans.JournalId
  86.                    && updateInventJournalTrans.ItemId == queryInventJournalTrans.ItemId
  87.                    && updateInventJournalTrans.LineNum == queryInventJournalTrans.LineNum;
  88.  
  89.                 updateInventJournalTrans.ToInventDimId = ToInventDim.ToInventDimId;
  90.                 updateInventJournalTrans.update();
  91.  
  92.                 ttsCommit;
  93.             }
  94.  
  95.             //insertInventJournalTrans.InventDimId        = "         06-00000001";
  96.             //insertInventJournalTrans.ToInventDimId      = "         06-00000010";
  97.  
  98.             insertInventJournalTrans.RefSalesId         = queryInventJournalTrans.RefSalesId;
  99.             insertInventJournalTrans.TransDate          = queryInventJournalTrans.TransDate;
  100.             //insertInventJournalTrans.TransDate          = today();
  101.             insertInventJournalTrans.DeliveryDate       = queryInventJournalTrans.DeliveryDate;
  102.             insertInventJournalTrans.Remark             = queryInventJournalTrans.Remark;
  103.  
  104.             //deleteInventJournalTrans.delete();
  105.             insertInventJournalTrans.insert();
  106.  
  107.         }
  108.     info(strfmt("%1 : %2", no, myInventJournalTable.JournalId));
  109.     no++;
  110.     }
  111. ttsCommit;
  112. }
  113.  

4.3.4. เอกสารที่ เป็น Movement จะ Post ไม่ได้จะ Error Offset Account ต้องกรอก LedgerAccountOffet เป็น 9000000
Code Update
  1. static void JobUpdateLedgerOffset(Args _args)
  2. {
  3.     InventJournalTable      InventJournalTable;
  4.     InventJournalTrans      InventJournalTrans;
  5.     InventJournalTrans      updateInventJournalTrans;
  6.     ;
  7.  
  8.     WHILE
  9.     SELECT JournalId FROM InventJournalTable
  10.     WHERE InventJournalTable.CreateDate >= str2date("02/12/2023", 123)
  11.         && InventJournalTable.CreateDate <= str2date("11/12/2023", 123)
  12.         && InventJournalTable.Posted == NoYes::No
  13.         && InventJournalTable.JournalType == InventJournalType::Movement
  14.         //&& InventJournalTable.JournalId == '23-0020140'
  15.     {
  16.         WHILE
  17.         SELECT * FROM InventJournalTrans
  18.         WHERE InventJournalTrans.JournalId == InventJournalTable.JournalId
  19.         {
  20.             ttsBegin;
  21.                 SELECT FORUPDATE * FROM updateInventJournalTrans
  22.                 WHERE updateInventJournalTrans.RecId == InventJournalTrans.RecId;
  23.  
  24.                 updateInventJournalTrans.LedgerAccountIdOffset = '9000000';
  25.                 updateInventJournalTrans.update();
  26.             ttsCommit;
  27.         }
  28.     }
  29.  
  30. }