· 9 years ago · Nov 21, 2016, 10:26 AM
1// Modification History
2// Date Who SDR What
3// 25oct16 nb Initial Version
4
5
6//TODO
7//Are all incoming records INSERT functions in Pronto?
8//have a copy of exports in processed
9
10//DONE
11//Go through all files that are *.csv and NOT ack*.csv
12//GUID for the first line and true to send something back
13//1 record is exported, not 3
14//If new record from biztalk creates an insert, DO NOT EXPORT
15//Change to export and import
16
17
18//Setup
19//1. Create dictionary triggers that track the deb-master, name-and-address-master, and system-table tables. They should call the salesforce-change procedure below
20//2. Setup module function codes for exporting the data
21//3. Setup the SF_EXPORTDIR environment variable
22//4. Create the template account. Dont forget to set deb-status = "N" and accountcode to be "Z_SF_TEMP"
23//5. Create the z-salesforce-change-log table in the dictionary according to commented out schema code below
24//6. Create the ZSF system table entry in the YY table for a counter for the export files
25//7. Create the salesforce-data table in the dictionary according to the commented out schema code below
26
27//object z-salesforce-change-log
28// type is memory
29// record is
30// scl-type pic X //'D'eb-master, 'N'ame-and-address-master, 'S'ystem-table
31// scl-date type date
32// scl-time type time
33// scl-processed type boolean
34// scl-key-1 like accountcode
35// scl-key-2 like sys-tbl-code
36// scl-change-type pic X //'I'nsert, 'U'pdate, 'D'elete
37// endrecord
38// key is scl-type scl-date scl-time unique
39
40// object z-salesforce-data
41// type is memory
42// record is
43// sd-accountcode pic X(10)
44// sd-salesforce-account-id pic X(20)
45// sd-salesforce-user-id pic X(20)
46// endrecord
47// key is sd-accountcode unique
48
49link 'clib/clibtax'
50
51#include "../include/bmsdef.spl"
52#include "../include/i8trigtags.spl"
53
54object tmp-customer-object
55 type is csv
56 separator is "|"
57 record is
58 sd-salesforce-account-id //AccountID
59 shortname //AccountName
60 accountcode //ProntoID
61 sd-salesforce-user-id //AccountOwner
62 tci-account-source pic X //Not stored in Pronto
63 na-street //BillingStreet
64 na-country //BillingCity
65 na-address-6 //BillingState
66 postcode //BillingPostalCode
67 na-address-7 //BillingCountry
68 na-fax-no //Fax
69 dr-marketing-flag //Parent
70 na-phone //Phone
71 tco-cust-type like sys-description //dr-cust-type //CustomerType
72 tco-terms-disc like sys-description //terms-disc //PaymentType
73 tci-first-name pic X //Not stored in Pronto
74 tci-last-name pic X //Not stored in Pronto
75 territory //TerritoryCode
76 tci-territory-description like sys-description //TerritoryDescription
77 tci-region-code like sys-tbl-code //RegionCode
78 tci-region-description like sys-description //RegionDescription
79 endrecord
80
81object tmp-acknowledge
82 type is csv
83 record is
84 ta-data pic X(256)
85 endrecord
86
87
88field
89 ws-template-deb-status like deb-status
90 ws-template-dr-clearflag like dr-clearflag
91 ws-template-price-code like price-code
92 ws-template-warehouse like warehouse
93 ws-template-rep-code like rep-code
94 ws-template-territory like territory
95 ws-template-na-tax-group like na-tax-group
96 ws-template-dr-industry-code like dr-industry-code
97 ws-template-dr-cust-type like dr-cust-type
98 ws-template-dr-part-shipment-allowed like dr-part-shipment-allowed
99 ws-template-dr-order-priority like dr-order-priority
100 ws-template-dr-price-disc-by-bill-to like dr-price-disc-by-bill-to
101 ws-template-dr-ageing-code like dr-ageing-code
102 ws-report-started type boolean
103 ws-error-message pic X(256)
104
105procedure library-init
106 get system-control
107 first
108endprocedure
109
110
111procedure main export
112
113 get system-control
114 first
115
116 get deb-master
117 on index accountcode
118 key is "S_SF_TEMP"
119 on error
120 message "The S_SF_TEMP customer template account does not exist. Please create it."
121 else
122 set ws-template-deb-status = deb-status
123 set ws-template-dr-clearflag = dr-clearflag
124 set ws-template-price-code = price-code
125 set ws-template-warehouse = warehouse
126 set ws-template-rep-code = rep-code
127 set ws-template-territory = territory
128 get name-and-address-master
129 on index accountcode na-type
130 key is "S_SF_TEMP" "C"
131 on error
132 set ws-template-na-tax-group = spaces
133 else
134 set ws-template-na-tax-group = na-tax-group
135 endon
136 set ws-template-dr-industry-code = dr-industry-code
137 set ws-template-dr-cust-type = dr-cust-type
138 set ws-template-dr-part-shipment-allowed = dr-part-shipment-allowed
139 set ws-template-dr-order-priority = dr-order-priority
140 set ws-template-dr-price-disc-by-bill-to = dr-price-disc-by-bill-to
141 set ws-template-dr-ageing-code = dr-ageing-code
142 endon
143
144 command 'sh'
145 parameter "-c" concat("mkdir $SF_EXPORTDIR > /dev/null 2>&1")
146 command 'sh'
147 parameter "-c" concat("mkdir $SF_EXPORTDIR/export > /dev/null 2>&1")
148 command 'sh'
149 parameter "-c" concat("mkdir $SF_EXPORTDIR/export/processed > /dev/null 2>&1")
150 command 'sh'
151 parameter "-c" concat("mkdir $SF_EXPORTDIR/import > /dev/null 2>&1")
152
153
154 if get-param(1) = 'export' //Export Customer
155 do export-customer
156 elseif get-param(1) = "import" //Import Customer
157 do import-customer
158 endif
159
160endprocedure
161
162
163procedure get-counter
164 returning lr-counter like sys-money-value
165
166 get system-table
167 on index sys-tbl-type sys-tbl-code
168 key is "YY" "ZSF"
169 on error
170 message "Please initialize the YY/ZSF system table entry with 0"
171 set lr-counter = 0
172 else
173 serial system-table sys-money-value
174 on index sys-tbl-type sys-tbl-code
175 key is "YY" "ZSF"
176 set lr-counter = sys-money-value
177 endon
178
179endprocedure
180
181procedure import-customer export
182 local field
183 lf-ic-filename pic X(256)
184 lf-ack-filename like lf-ic-filename
185 lf-ok type boolean
186 lf-first-record type boolean
187 lf-session-id pic X(256)
188 lf-counter like sys-money-value
189 lf-dir pic X(300)
190 lf-search-pattern pic X(5)
191 lf-file-name pic X(300)
192 lf-dir-ok type boolean
193
194 set lf-dir = concat(get-env("SF_EXPORTDIR"),"/import/")
195 set lf-search-pattern = '*.csv' // Find Report files whose names contain
196
197 if start-dir-search(lf-dir, lf-search-pattern)
198 set lf-dir-ok = TRUE
199 else
200 set lf-dir-ok = FALSE
201 endif
202 while lf-dir-ok
203 set lf-file-name = next-dir-entry()
204 if lf-file-name = SPACES // Search exhausted - No more files
205 elseif pattern(lf-file-name,"ack") = 1 //Dont pick up "ack"nowledge files
206 else
207 set lf-ic-filename = concat(get-env("SF_EXPORTDIR"),"/import/",lf-file-name)
208
209 open tmp-customer-object
210 file is lf-ic-filename
211
212 set lf-first-record = true
213
214 extract tmp-customer-object all
215 detail
216 //The first record contains only the session id, which is in the first column
217 if lf-first-record = true
218 set lf-session-id = sd-salesforce-account-id
219 set lf-first-record = false
220 continue
221 endif
222 do validate-lines
223 returning lf-ok
224 if lf-ok
225 open deb-master no-triggers
226 //The tables we are using already have the correct fields defined
227 set terms-disc = tco-terms-disc
228 set dr-cust-type = tco-cust-type
229 insert deb-master
230 on error
231 endon
232
233 open z-salesforce-data no-triggers
234 set sd-accountcode = accountcode
235 insert z-salesforce-data
236 on error
237 endon
238
239 open name-and-address-master no-triggers
240 insert name-and-address-master
241 on error
242 endon
243 endif
244 endextract
245
246 do get-counter
247 returning lf-counter
248 set lf-ack-filename = concat(get-env("SF_EXPORTDIR"),"/import/ack-",str(lf-counter),".csv.wip")
249
250 open tmp-acknowledge create
251 file is lf-ack-filename
252
253 set ta-data = lf-session-id
254 insert tmp-acknowledge
255 on error
256 endon
257 set ta-data = "true"
258 insert tmp-acknowledge
259 on error
260 endon
261
262 command 'sh'
263 parameter "-c" concat("cd $SF_EXPORTDIR/import; mv ack-",str(lf-counter),".csv.wip ack-",str(lf-counter),".csv")
264
265 endif
266 end-while
267
268 if ws-report-started = true
269 report finished
270 endif
271endprocedure
272
273procedure salesforce-change-dm export
274 parameters are
275 lp-old.* like deb-master.*
276 lp-new.* like deb-master.*
277 lp-trigger-type pic 9(4)
278 local field
279 lf-change-type pic X
280
281 if pattern(lp-new.accountcode,"SF_") = 1
282 if lp-trigger-type = TRIGGER_AFTER_INSERT
283 set lf-change-type = "I"
284 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
285 set lf-change-type = "U"
286 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
287 set lf-change-type = "D"
288 endif
289 do salesforce-change
290 parameters are "D" //deb-master
291 lp-new.accountcode
292 spaces
293 lf-change-type
294 endif
295endprocedure
296
297procedure salesforce-change-naam export
298 parameters are
299 lp-old.* like name-and-address-master.*
300 lp-new.* like name-and-address-master.*
301 lp-trigger-type pic 9(4)
302 local field
303 lf-change-type pic X
304
305 if pattern(lp-new.accountcode,"SF_") = 1 or
306 pattern(lp-old.accountcode,"SF_") = 1
307 if lp-trigger-type = TRIGGER_AFTER_INSERT
308 set lf-change-type = "I"
309 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
310 set lf-change-type = "U"
311 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
312 set lf-change-type = "D"
313 endif
314 do salesforce-change
315 parameters are "N" //name-and-address-master
316 lp-new.accountcode
317 lp-new.na-type
318 lf-change-type
319 endif
320
321endprocedure
322
323procedure salesforce-change-st export
324 parameters are
325 lp-old.* like system-table.*
326 lp-new.* like system-table.*
327 lp-trigger-type pic 9(4)
328 local field
329 lf-change-type pic X
330
331 if lp-trigger-type = TRIGGER_AFTER_INSERT
332 set lf-change-type = "I"
333 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
334 set lf-change-type = "U"
335 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
336 set lf-change-type = "D"
337 endif
338 do salesforce-change
339 parameters are "S" //system-table
340 lp-new.sys-tbl-code
341 lp-new.sys-tbl-type
342 lf-change-type
343
344endprocedure
345
346procedure salesforce-change export
347 parameters are lp-type like scl-type
348 lp-key-1 like scl-key-1
349 lp-key-2 like scl-key-2
350 lp-change-type like scl-change-type
351
352 set scl-type = lp-type
353 set scl-date = today()
354 set scl-time = tod()
355 set scl-processed = false
356 set scl-key-1 = lp-key-1
357 set scl-key-2 = lp-key-2
358 set scl-change-type = lp-change-type
359 insert z-salesforce-change-log
360 on error
361 endon
362
363endprocedure
364
365
366procedure export-customer
367 local field
368 lf-filename pic X(256)
369 lf-counter like sys-money-value
370
371 do get-counter
372 returning lf-counter
373 set lf-filename = concat(get-env("SF_EXPORTDIR"),"/export/pronto-sf-export-",str(lf-counter),".csv.wip")
374
375 open tmp-customer-object create permanent
376 file is lf-filename
377
378 extract z-salesforce-change-log all
379 on index scl-type scl-date scl-time
380 where scl-processed = false
381 detail
382 get deb-master
383 on index accountcode
384 key is scl-key-1
385 on error
386 else
387 endon
388 get name-and-address-master
389 on index accountcode na-type
390 key is scl-key-1 "C"
391 on error
392 else
393 endon
394 get z-salesforce-data
395 on index sd-accountcode
396 key is scl-key-1
397 on error
398 else
399 endon
400 //We also need to find the territory description
401 get system-table
402 on index sys-tbl-type sys-tbl-code
403 key is "TC" territory
404 on error
405 else
406 set tci-territory-description = sys-description
407 endon
408 get system-table
409 on index sys-tbl-type sys-tbl-code
410 key is "CT" tco-cust-type
411 on error
412 else
413 set tco-cust-type = sys-description
414 endon
415 get system-table
416 on index sys-tbl-type sys-tbl-code
417 key is "DD" tco-terms-disc
418 on error
419 else
420 set tco-terms-disc = sys-description
421 endon
422 insert tmp-customer-object
423 on error
424 else
425 set scl-processed = true
426 update z-salesforce-change-log
427 on error
428 endon
429 endon
430 endextract
431
432 command 'sh'
433 parameter "-c" concat("cd $SF_EXPORTDIR/export; mv pronto-sf-export-",str(lf-counter),".csv.wip pronto-sf-export-",str(lf-counter),".csv")
434 command 'sh'
435 parameter "-c" concat("cd $SF_EXPORTDIR/export; cp pronto-sf-export-",str(lf-counter),".csv processed/pronto-sf-export-",str(lf-counter),".csv")
436
437endprocedure
438
439procedure validate-lines
440 returning lr-ok type boolean
441
442 do validate-record
443 returning lr-ok
444
445 if lr-ok = false
446 //ws-error-message has the current error
447 if ws-report-started = false
448 report "Salesforce - Customer Import"
449 width is 200
450 endif
451 print ws-error-message col 1
452 endif
453
454endprocedure
455
456procedure validate-record
457 returning lr-ok type boolean
458 local field
459 lf-tax-group-ok type boolean
460 lf-tax-group-error-message pic X(256)
461 lf-tax-group-error-title pic X(256)
462
463 set lr-ok = true
464 get deb-master
465 on index accountcode
466 key is accountcode
467 on error
468 //Good. We want a unique new accountcode
469 else //Account exists
470 set ws-error-message = "Account code already exists"
471 set lr-ok = false
472 exit
473 endon
474
475// if deb-status = 'I' and credit-limit between '0' and '9'
476 if deb-status != spaces
477// set ws-error-message = 'WARNING - Can only use limits "A" - "Z" with "Insured Debt" '
478 set deb-status = ws-template-deb-status
479 set ws-error-message = 'deb-status should be blank. Copied from template account.'
480 //set lr-ok = false
481 //exit
482 endif
483 if dr-clearflag != 'O'
484 set dr-clearflag = ws-template-dr-clearflag
485 set ws-error-message = "Clear flag should be O. Copied from template account."
486 //set lr-ok = false
487 //exit
488 endif
489 if warehouse = spaces
490 set warehouse = ws-template-warehouse
491 set ws-error-message = "Warehouse can not be spaces. Copied from template account."
492 //set lr-ok = false
493 //exit
494 endif
495 if warehouse != spaces
496 get system-table
497 on index sys-tbl-type sys-tbl-code
498 key is 'WH' warehouse
499 on error
500 set ws-error-message = "Warehouse not found"
501 set lr-ok = false
502 exit
503 endon
504 endif
505 if rep-code = spaces
506 set rep-code = ws-template-rep-code
507 set ws-error-message = "Rep code can not be spaces. Copied from template account."
508 //set lr-ok = false
509 //exit
510 endif
511 if rep-code != spaces
512 get rep-master
513 key is rep-code
514 on error
515 set ws-error-message = 'Rep code not valid'
516 set lr-ok = false
517 exit
518 endon
519 endif
520 if territory = spaces
521 set territory = ws-template-territory
522 set ws-error-message = "Territory can not be spaces. Copied from template account."
523 //set lr-ok = false
524 //exit
525 endif
526 if territory != spaces
527 get system-table
528 on index sys-tbl-type sys-tbl-code
529 key is 'TC' territory
530 on error
531 set ws-error-message = "Territory not valid"
532 set lr-ok = false
533 exit
534 endon
535 endif
536 if na-tax-group = SPACES
537 set na-tax-group = ws-template-na-tax-group
538 set ws-error-message = "Tax group can not be spaces. Copied from template account."
539 //set lr-ok = false
540 //exit
541 endif
542 if na-tax-group != SPACES
543 do clibtax-validate-tax-group
544 parameters
545 na-tax-group
546 returning
547 lf-tax-group-ok
548 lf-tax-group-error-message
549 lf-tax-group-error-title
550 if not lf-tax-group-ok
551 set ws-error-message = lf-tax-group-error-message
552 set lr-ok = false
553 exit
554 endif
555 endif
556 if dr-industry-code = spaces
557 set dr-industry-code = ws-template-dr-industry-code
558 set ws-error-message = "Industry Code can not be spaces. Copied from template account."
559 //set lr-ok = false
560 //exit
561 endif
562 if dr-industry-code != spaces
563 get system-table
564 on index sys-tbl-type sys-tbl-code
565 key is 'CI' dr-industry-code
566 on error
567 set ws-error-message = "Industry code not valid"
568 set lr-ok = false
569 exit
570 endon
571 endif
572 if dr-cust-type = spaces
573 set dr-cust-type = ws-template-dr-cust-type
574 set ws-error-message = "Cust type can not be spaces. Copied from template account."
575 //set lr-ok = false
576 //exit
577 endif
578 if dr-cust-type != spaces
579 get system-table
580 on index sys-tbl-type sys-tbl-code
581 key is 'CT' dr-cust-type
582 on error
583 set ws-error-message = "Cust type not valid"
584 set lr-ok = false
585 exit
586 endon
587 endif
588 if dr-part-shipment-allowed not in {'Y' 'N'}
589 set dr-part-shipment-allowed = ws-template-dr-part-shipment-allowed
590 set ws-error-message = "Part shipment allowed should be 'Y' or 'N'. Copied from template account."
591 //set lr-ok = false
592 //exit
593 endif
594 if dr-order-priority > 9
595 set dr-order-priority = ws-template-dr-order-priority
596 set ws-error-message = "Order Priority should be between 0-9. Copied from template account."
597 //set lr-ok = false
598 //exit
599 endif
600 if dr-price-disc-by-bill-to not in {'Y' 'N' ' '}
601 set dr-price-disc-by-bill-to = ws-template-dr-price-disc-by-bill-to
602 set ws-error-message = "Price disc by bill-to should be 'Y' , 'N' or blank. Copied from template account."
603 //set lr-ok = false
604 //exit
605 endif
606 if dr-ageing-code = spaces
607 set dr-ageing-code = ws-template-dr-ageing-code
608 set ws-error-message = "Ageing code can not be spaces. Copied from template account."
609 //set lr-ok = false
610 //exit
611 endif
612 if dr-ageing-code != spaces
613 get system-table
614 on index sys-tbl-type sys-tbl-code
615 key is 'DK' dr-ageing-code
616 on error
617 set ws-error-message = "Ageing code not valid"
618 set lr-ok = false
619 exit
620 endon
621 endif
622
623 //Left here in case of future need...
624 // ////////////////// Other field validations///////////////////
625 // //z-terms-disc
626 // if terms-disc != SPACES
627 // get system-table
628 // on index sys-tbl-type sys-tbl-code
629 // key is "DD" terms-disc
630 // on error
631 // set ws-error-code = "0020"
632 // set ws-error-message = "Invalid terms code"
633 // //message "Invalid terms code"
634 // set lr-ok = false
635 // //exit(1)
636 // endon
637 // endif
638 // //z-dr-marketing-flag
639 // if dr-marketing-flag != SPACES
640 // get system-table
641 // key is 'CM' dr-marketing-flag
642 // on error
643 // set ws-error-code = "0021"
644 // set ws-error-message = 'Invalid marketing flag'
645 // //message 'Invalid marketing flag'
646 // set lr-ok = false
647 // //exit(1)
648 // endon
649 // endif
650 // //z-dr-company-mask
651 // if dr-company-mask != SPACES
652 // get system-table
653 // key is 'BC' dr-company-mask
654 // on error
655 // set ws-error-code = "0022"
656 // set ws-error-message = 'Invalid company flag'
657 // //message 'Invalid company flag'
658 // set lr-ok = false
659 // //exit(1)
660 // endon
661 // endif
662 // //z-dr-credit-letter-status
663 // if dr-credit-letter-status not in {'Y' 'N' 'X' ' '}
664 // set ws-error-code = "0023"
665 // set ws-error-message = "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
666 // //message "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
667 // set lr-ok = false
668 // //exit(1)
669 // endif
670 // //z-dr-pricing-category
671 // if dr-pricing-category != SPACES
672 // get system-table
673 // key is 'PE' dr-pricing-category
674 // on error
675 // set ws-error-code = "0024"
676 // set ws-error-message = 'Invalid pricing category '
677 // //message 'Invalid pricing category '
678 // set lr-ok = false
679 // //exit(1)
680 // endon
681 // endif
682 // //z-dr-curr-code
683 // if dr-curr-code != SPACES
684 // // get system-iso4217-currency-codes
685 // // on index si4217cc-currency-code
686 // // key is dr-curr-code
687 // get system-table
688 // key is 'CU' dr-curr-code
689 // on error
690 // set ws-error-code = "0025"
691 // set ws-error-message = 'Invalid currency code'
692 // //message 'Invalid currency code'
693 // set lr-ok = false
694 // //exit(1)
695 // endon
696 // endif
697 // //z-dr-delivery-route-code
698 // if dr-delivery-route-code != SPACES
699 // get system-carrier
700 // key is dr-delivery-route-code
701 // on error
702 // set ws-error-code = "0026"
703 // set ws-error-message = 'Invalid carrier code '
704 // //message 'Invalid carrier code '
705 // set lr-ok = false
706 // //exit(1)
707 // endon
708 // endif
709 // //z-dr-delivery-sequence-no
710 // if dr-delivery-sequence-no != 0
711 // if dr-delivery-route-code = SPACES
712 // set ws-error-code = "0027"
713 // set ws-error-message = 'Carrier code is blank, can not set route sequence no'
714 // //message 'Carrier code is blank, can not set route sequence no'
715 // set lr-ok = false
716 // //exit(1)
717 // else
718 // get system-carrier
719 // key is dr-delivery-route-code
720 // on error
721 // else
722 // if carrier-charge-method in {'R' 'X' 'S'}
723 // get system-carrier-routes
724 // on index car-route-code carrier-code
725 // key is str(z-dr-delivery-sequence-no) dr-delivery-route-code
726 // on error
727 // set ws-error-code = "0028"
728 // set ws-error-message = 'Invalid route sequence code for this carrier'
729 // //message 'Invalid route sequence code for this carrier'
730 // set lr-ok = false
731 // //exit(1)
732 // endon
733 // endif
734 // endon
735 // endif
736 // endif
737 // //z-dr-credit-id-no
738 // if dr-credit-id-no != SPACES
739 // get system-table
740 // key is 'DE' dr-credit-id-no
741 // on error
742 // set ws-error-code = "0029"
743 // set ws-error-message = 'Invalid customer extra code'
744 // //message 'Invalid customer extra code '
745 // set lr-ok = false
746 // //exit(1)
747 // endon
748 // endif
749 // //z-dr-mail-control-code
750 // if dr-mail-control-code not in {' ' 'N' 'I' 'J' 'S' 'D' 'L' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'C' 'F' 'R' 'B'}
751 // set ws-error-code = "0030"
752 // set ws-error-message = "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
753 // //message "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
754 // set lr-ok = false
755 // //exit(1)
756 // endif
757 // //z-dr-industry-sub-group
758 // if dr-industry-sub-group != SPACES
759 // get system-table
760 // key is 'CG' dr-industry-sub-group
761 // on error
762 // set ws-error-code = "0031"
763 // set ws-error-message = 'Invalid industry sub group '
764 // //message 'Invalid industry sub group '
765 // set lr-ok = false
766 // //exit(1)
767 // endon
768 // endif
769endprocedure