CIM file

gichee

New Member
Hi everyone, I am a junior programmer. I need to created a
Text file for a CIM load. Can any one help me with a sample code.
 

Tim Ryan

New Member
CIM sample

This is probably way mor than you want - but here is a program I had written that updates 5 tables in MFG/PRO. The inout was a supplied spreadsheet, saved in csv format. I hope it helps.

/****************************************************************************/
/* nucorupd.p Tim Ryan 06/03/99 */
/* This program was written to update information for NUCOR. */
/* It was requested by XXXXX. He will periodically supplying */
/* spreadsheets to be updated. The screens to be updated are as follows: */
/* 1.19 (Supplier Item) */
/* 1.4.18 (Standard Cost) sct_det */
/* 1.10.2.1 (Price Tables) pc_mstr */
/* 1.4.17 (Order Mult & Pur Lead Time) ptp_det */
/* 1.4.1 (Weights) pt_mstr. */
/* The csv file must be arranged in the following manner: */
/* vp_vend */
/* cust-part */
/* qad-part */
/* sup-part */
/* desc */
/* wgt */
/* ord-mult */
/* price */
/* lead-time */
/* */
/****************************************************************************/

{mfdtitle.i "b+ "}
/* Price Table Files */
DEFINE STREAM ptout.
OUTPUT STREAM ptout to /dskd/home/ryant/ptout.cim.
/* Cost Files */
DEFINE STREAM cstout.
OUTPUT STREAM cstout to /dskd/home/ryant/cstout.cim.
/* Supplier Item Files */
DEFINE STREAM supout.
OUTPUT STREAM supout to /dskd/home/ryant/supout.cim.
/* Error Files */
DEFINE STREAM errfile.
OUTPUT STREAM errfile to /dskd/home/ryant/errfile.out.
DEFINE STREAM sofile.
OUTPUT STREAM sofile to /dskd/home/ryant/sofile.out.

DEFINE VARIABLE rec-cnt AS INT INIT 0.
DEFINE VARIABLE tday AS DATE.
DEFINE VARIABLE ytday AS DATE.
DEFINE VARIABLE good-cnt AS INT INIT 0.
DEFINE VARIABLE bad-cnt AS INT INIT 0.
DEFINE VARIABLE lineout AS CHAR.

DEFINE VARIABLE price-per AS INT FORMAT "ZZZZ9" INIT 1000 LABEL "Price Per".
DEFINE VARIABLE wgt-per AS INT FORMAT "ZZZZ9" INIT 1000 LABEL "Weight Per".
DEFINE VARIABLE upd-weights AS LOG INIT NO LABEL "Update Weights?".
DEFINE VARIABLE upd-costs AS LOG INIT NO LABEL "Update Costs?".
DEFINE VARIABLE upd-ptables AS LOG INIT NO LABEL "Update Prices Tables?".
DEFINE VARIABLE upd-supitems AS LOG INIT NO LABEL "Update Supplier Items?".
DEFINE VARIABLE upd-pos AS LOG INIT NO LABEL "Update Open P/O's".
DEFINE VARIABLE strt-date AS DATE INIT TODAY LABEL "Start Date".

DEFINE VARIABLE infld01 LIKE vp_vend.
DEFINE VARIABLE infld02 LIKE cp_cust_part.
DEFINE VARIABLE infld03 LIKE pt_part.
DEFINE VARIABLE infld04 LIKE vp_vend_part.
DEFINE VARIABLE infld05 LIKE pt_desc2.
DEFINE VARIABLE infld06 LIKE pt_net_wt.
DEFINE VARIABLE infld07 LIKE ptp_ord_mult.
DEFINE VARIABLE infld08 LIKE pi_list_price.
DEFINE VARIABLE infld09 LIKE ptp_pur_lead.


DEFINE VARIABLE t-table-cnt AS INT INIT 0.
DEFINE VARIABLE t-table-rem AS INT INIT 0.

DEFINE TEMP-TABLE t_indata
FIELD vend-num LIKE vp_vend
FIELD cust-part LIKE cp_cust_part
FIELD qad-part LIKE pt_part
FIELD sup-part LIKE vp_part
FIELD descr LIKE pt_desc2
FIELD wgt LIKE pt_net_wt
FIELD ord-mult LIKE ptp_ord_mult
FIELD price LIKE pi_list_price
FIELD lead-time LIKE ptp_pur_lead.


FOR EACH t_indata:
DELETE t_indata.
END.

UPDATE price-per wgt-per upd-weights upd-costs
upd-ptables upd-supitems upd-pos
strt-date
WITH 2 COL 5 DOWN CENTERED.

tday = strt-date.
ytday = (strt-date - 1).

INPUT FROM "/dskd/home/ryant/y2klejudy.csv" NO-ECHO.
REPEAT: /* Read in the .csv file */
IMPORT DELIMITER ","
infld01
infld02
infld03
infld04
infld05
infld06
infld07
infld08
infld09.

/*message infld06 (infld06 / 100) wgt-per. pause. */
CREATE t_indata.
ASSIGN
t_indata.vend-num = infld01
t_indata.cust-part = infld02
t_indata.qad-part = infld03
t_indata.sup-part = infld04
t_indata.descr = infld05
t_indata.wgt = (infld06 / wgt-per)
t_indata.ord-mult = infld07
t_indata.price = (infld08 / price-per)
t_indata.lead-time = infld09.

t-table-cnt = t-table-cnt + 1.
t-table-rem = t-table-rem + 1.
END.
INPUT CLOSE.

IF upd-weights = YES THEN
DO:
PUT SCREEN ROW 15 COL 25 "Loading Weights ".
RUN load-wgt.
END.

IF upd-costs = YES THEN
DO:
PUT SCREEN ROW 15 COL 25 "Loading Costs ".
good-cnt = 0.
bad-cnt = 0.
RUN load-costs.
END.

IF upd-ptables = YES THEN
DO:
PUT SCREEN ROW 15 COL 25 "Loading Price Tables ".
good-cnt = 0.
bad-cnt = 0.
RUN load-ptable.
END.

IF upd-supitems = YES THEN
DO:
PUT SCREEN ROW 15 COL 25 "Loading Supplier Items ".
good-cnt = 0.
bad-cnt = 0.
RUN load-supitem.
END.

IF upd-pos = YES THEN
DO:
PUT SCREEN ROW 15 COL 25 "Updating Open P/O's ".
good-cnt = 0.
bad-cnt = 0.
RUN upd-openpos.

END.

FOR EACH t_indata:
FIND FIRST sod_det
WHERE sod_part = t_indata.qad-part
NO-LOCK NO-ERROR.
IF AVAIL sod_det THEN
DO:
FIND so_mstr
WHERE so_nbr = sod_nbr
NO-LOCK NO-ERROR.
PUT STREAM sofile
sod_part ',' so_ord_date ',' sod_nbr ',' sod_line ','
sod_std_cost ',' t_indata.price ',' sod_sched
'\n'.
END.
END.
/********************************************************/
/* This procedure loads the wgt in pt_mstr and */
/* the Pur LT and Ord Mult into ptp_det. */
/* It's a slam - not a CIM. Similar to aftrload4.p. */
/********************************************************/
PROCEDURE load-wgt:
FOR EACH t_indata:
PUT SCREEN ROW 16 COL 25 TRIM(t_indata.qad-part).
/*
PUT SCREEN ROW 17 COL 20 "Records to process".
PUT SCREEN ROW 17 COL 39 STRING(t-table-cnt).
t-table-rem = t-table-rem - 1.
PUT SCREEN ROW 18 COL 20 "Records left".
PUT SCREEN ROW 18 COL 39 " ".
PUT SCREEN ROW 18 COL 39 STRING(t-table-rem).
*/

FIND FIRST pt_mstr WHERE
pt_part = t_indata.qad-part
USE-INDEX pt_part
NO-ERROR.

IF AVAILABLE pt_mstr THEN
DO:
IF /* pt_net_wt = 0.00 AND */ t_indata.wgt NE 0.00 THEN
DO:
pt_ship_wt = t_indata.wgt.
pt_net_wt = t_indata.wgt.
END.
END. /* END IF AVAIL pt_mstr */

FOR EACH ptp_det WHERE
ptp_part = t_indata.qad-part:

IF t_indata.lead-time NE 0 THEN
DO:
ptp_pur_lead = t_indata.lead-time.
END.

IF t_indata.ord-mult NE 0.00 THEN
DO:
ptp_ord_mult = t_indata.ord-mult.

IF ptp_ord_min < ptp_ord_mult AND
ptp_ord_min NE 0 THEN
DO:
ptp_ord_mult = ptp_ord_min.
END.
END. /* END IF t_afterload_ord_mult NE 0.00 */
END. /* END FOR EACH ptp_det */
END. /* END FOR EACH t_indata */
END PROCEDURE.


/********************************************************/
/* This procedure loads costs in 1.4.18. */
/********************************************************/
PROCEDURE load-costs:
PUT STREAM cstout UNFORMATTED
"N " /* NO */
SKIP.
FOR EACH t_indata:
PUT SCREEN ROW 16 COL 25 TRIM(t_indata.qad-part).
FOR EACH ptp_det
WHERE ptp_part = t_indata.qad-part
AND ptp_site NE "2200"
AND ptp_site NE "2210":
FOR EACH sct_det
WHERE sct_site = ptp_site AND
sct_part = ptp_part AND
sct_sim = "STANDARD":


PUT STREAM cstout UNFORMATTED
'"' TRIM(t_indata.qad-part) '" ' /* Part */
'"' ptp_site '" ' /* Site */
SKIP.

PUT STREAM cstout UNFORMATTED
"STANDARD " /* */
SKIP.

PUT STREAM cstout UNFORMATTED
"MATERIAL " /* */
'"' t_indata.price '" ' /* Price */
SKIP.
PUT STREAM cstout UNFORMATTED
". " /* */
SKIP.

END. /* END FOR EACH sct_det */
END. /* END FOR EACH ptp_det */
END. /* END FOR EACH t_indata */

OUTPUT STREAM cstout CLOSE.

PUT SCREEN ROW 16 COL 25 "Processing CIM file".
INPUT FROM "/dskd/home/ryant/cstout.cim".
OUTPUT TO "/dskd/home/ryant/cstout.out".
RUN "us/pp/ppcsbtld.p".
INPUT CLOSE.
OUTPUT CLOSE.
END PROCEDURE. /* END PROCEDURE load-ptable */


/********************************************************/
/* This procedure loads price table records in 1.10.2.1 */
/********************************************************/
PROCEDURE load-ptable:
FOR EACH t_indata:
PUT SCREEN ROW 16 COL 25 TRIM(t_indata.qad-part).
/* This first section expires any existing records */
FIND LAST pc_mstr
WHERE pc_list = TRIM(t_indata.vend-num) AND
pc_curr = "usd" AND
pc_part = TRIM(t_indata.qad-part) AND
pc_um = "ea"
NO-ERROR.
IF AVAIL pc_mstr THEN
DO:
ASSIGN pc_expire = ytday.
END.

PUT STREAM ptout UNFORMATTED
'"' t_indata.vend-num '" ' /* Price List */
"USD " /* Curr */
"- " /* Prod Line:Blank */
'"' TRIM(t_indata.qad-part) '" ' /* Part */
"EA " /* UOM */
'"' tday '" ' /* Start Date */
SKIP.
PUT STREAM ptout UNFORMATTED
"- " /* Desc. Blank */
"P " /* */
SKIP.
PUT STREAM ptout UNFORMATTED
"- " /* Min */
'"' t_indata.price '" ' /* Price */
SKIP.

END. /* END FOR EACH t_indata */
OUTPUT STREAM ptout CLOSE.
INPUT FROM "/dskd/home/ryant/ptout.cim".
OUTPUT TO "/dskd/home/ryant/ptout.out".
RUN "us/pp/pppcmt.p".
END PROCEDURE.


/********************************************************/
/* This procedure loads the the 1.19(Suplier Item scn) */
/********************************************************/
PROCEDURE load-supitem:
FOR EACH t_indata:
PUT SCREEN ROW 16 COL 25 TRIM(t_indata.qad-part).
FIND FIRST vp_mstr
WHERE vp_part = TRIM(t_indata.qad-part) AND
vp_vend = TRIM(t_indata.vend-num) AND
vp_vend_part = TRIM(t_indata.sup-part)
NO-ERROR.
IF AVAIL vp_mstr THEN
DO:
ASSIGN
vp_um = "EA"
vp_vend_lead = t_indata.lead-time
vp_curr = "USD"
vp_q_price = t_indata.price.
END. /* END IF AVAIL vp_mstr */
ELSE
DO:
CREATE vp_mstr.
ASSIGN
vp_part = TRIM(t_indata.qad-part)
vp_vend = TRIM(t_indata.vend-num)
vp_vend_part = TRIM(t_indata.sup-part)
vp_um = "EA"
vp_vend_lead = t_indata.lead-time
vp_curr = "USD"
vp_q_price = t_indata.price.

END. /* END IF NOT AVAIL vp_mstr */

/*
PUT STREAM supout UNFORMATTED
'"' TRIM(t_indata.qad-part) '" ' /* Part */
'"' t_indata.vend-num '" ' /* Vend */
'"' TRIM(t_indata.sup-part) '" ' /* Supplier Part */
SKIP
SKIP
SKIP
SKIP.
*/
END. /* END FOR EACH t_indata */
/*
OUTPUT STREAM supout CLOSE.
INPUT FROM "/dskd/home/ryant/supout.cim".
OUTPUT TO "/dskd/home/ryant/supout.out".
RUN "us/pp/ppcn012.w".
*/
END PROCEDURE.


/************************************************************/
/* This procedure looks for openpo_mstr records that have */
/* pod_det records that contain the qad-part. */
/* If any are found then the po_mstr is updated. */
/************************************************************/
PROCEDURE upd-openpos:
FOR EACH t_indata:
FOR EACH po_mstr
WHERE po_stat NE "C" AND po_stat NE "X" AND
po_vend = t_indata.vend-num:
FIND FIRST pod_det
WHERE pod_nbr = po_nbr AND
pod_part = t_indata.qad-part
NO-ERROR.
IF AVAIL pod_det THEN
DO:
PUT SCREEN ROW 16 COL 25 TRIM(pod_part).
ASSIGN
po_pr_list = TRIM(t_indata.vend-num)
/* Changed from YES to NO per Corri */
po_fix_pr = NO.
END.
END.
END. /* END FOR EACH t_indata */
END PROCEDURE.
 

gichee

New Member
Hi Tim,
Your program is helping me a lot; but I am sure,
How you represent a tab, F2, Enter, and ESC in a CIM load file
 

Tim Ryan

New Member
Are you running this in a GUI or CHUI environment? CIM only works in CHUI. As for a Tab key - I'm not sure. When you say escape - do you mean F4. An F4 is a period '.' in a CIM file.
 
Top