NoamN

Forum Replies Created

מוצגות 15 תגובות – 91 עד 105 (מתוך 442 סה״כ)
  • Replies
    • in reply to: PRIFORM
    NoamN
    משתתף
    none
    כעת הפקודה נראית כך

    X:\BIN.95\WINRUN "" tabula 123456 x:\system\prep demo WINACTIV -P TEST_UPDCONST set TABULAINI=x:\1\tabula.ini set tabulainiorig=x:\1\tabula.ini

    כאשר לקחתי את tabula.ini מהשרת עצמו, כך שם המשתמש בפנים tabula. זה לא עזר.

    האם צריך להיות SET באמצע הפקודה? אם או בלי, זה לא עזר.

    NoamN
    משתתף
    none
    דרך אגב, $ פירושו "שם התכנית הנוכחית". לפעמים אפשר לנצל את העובדה הזו ולפעמים זה יוצר בעיות. פעם נדרשתי להכין ברקוד שהכיל את כתובת החברה, אבל אין בגופן הברקוד אפשרות להדפיס את @, לכן זה הוחלף ב-$. בהתחלה כמובן תוכן הברקוד הכיל את שם התכנית באמצע הכתובת.

    לקח לי קצת זמן למצוא שיטה להתגבר על זה – בסוף הגדרתי הודעה לפרוצדורה שהמלל שלו $ והטענתי אותו באמצעות SELECT ENTMESSAGE שבעצמו משתמש ב-$.

    NoamN
    משתתף
    none
    היה עוזר לו היינו רואים את הקוד כי אחרת אנחנו מגששים באפלה. אתה כותב שיש לינק לטבלת SUPPLIERS. אפשר לכתוב משהו שנראה מוזר אבל יכול לעבוד – במקום לכתוב

    LINK SUPPLIERS TO :$.SUP

    תכתוב :MYSUP = :$.SUP בפרוצדורה שלך, ובקוד המשותף תכתוב LINK SUPPLIERS TO :MYSUP

    הרי בפנים :$.SUP מכיל שם של קובץ במערכת הקבצים וניתן להעתיק אותו.

    • in reply to: PRIFORM
    NoamN
    משתתף
    none
    כמה נתונים נוספים: אנחנו עובדים עם הממשק הקלאסי, עם טרמינל סרברים. פקודת ה-WINRUN עובדת נכון כאשר אני מריץ אותה מהטרמינל.
    • in reply to: PRIFORM
    NoamN
    משתתף
    none
    בניתי את המחרוזת הנדרשת ל-WINRUN, כולל שם משתמש tabula וסיסמא. אני מריץ את הפקודה ומקבל את תיבת השיחה LOG ON TO PRIORITY עם שדות לשם משתמש וסיסמא. זאת אומרת, אפילו שאני רושם את הנתונים האלה כפרמטרים, יש התעלמות. הפקודה נראית משהו כזה

    x:\bin.95\winrun "" tabula 123456 x:\system\prep WINACTIV -P TEST_PROCEDURE

    (הסיסמא של טבולה לא באמת 123456!). אולי צריך להגדיר tabula.ini? ואם כן, של מי? הפקודה מופעלת מתחנה שמחוברת לרשת אבל אינה מפעילה את פריוריטי (כל הרעיון של התכנית הינו לא להפעיל את הממשק של פריוריטי).

    • in reply to: PRIFORM
    NoamN
    משתתף
    none
    זה בדיוק מה שאני מחפש (WINRUN). לא הכרתי את הקטע הזה ב-SDK.
    NoamN
    משתתף
    none
    אני לא מסכים אתך: יש קוד מסוים ששמרתי כהפעלה מתוך מסך func אשר משתמש בקורסור עם הפקודה DECLARE @NCRC1 CURSOR  ואין בעיה בפרוצדורה שקוראת להפעלה הזו באמצעות #INCLUDE func/TEST_NEWCALCRELCOST.

    אני לא כל כך אוהב את הטכניקה הזו מפני שהקוד נמצא במסך: לאחר עריכה, עלי להריץ בניית מסכים מחדש, וזה גורם להודעה מסוימת אצל המשתמשים (לכן אני מוסיף/מתקן/משפר מסכים רק בערב או בסוף השבוע). לעומת זאת, פיתחתי טכניקה של קריאת פרוצדורה נוספת לבצע עבודה משותפת. לדוגמא, אפשר לכתוב קוד כמו

    LINK ORDERS TO :$.ORD;
    ERRMSG 1 WHERE :RETVAL <= 0;
    INSERT INTO ORDERS (ORD, ORDNAME)
    SELECT ORIG.ORD, ORIG.ORDNAME
    FROM ORDERS ORIG, STACK
    WHERE ORIG.ORD = STACK.ELEMENT
    AND ORIG.ORD > 0;
    EXECUTE WINACTIV '-P', 'TEST_MUTUALCODE', 'ORDERS',
    :$.ORD;
    UNLINK ORDERS;

    • in reply to: PRIFORM
    NoamN
    משתתף
    none
    אחרי ששאלתי את השאלה (בפעם השניה – הפעם הראשונה לא נקלטה), הבנתי שמדובר בהפעלת התכנית "בסביבת" פריוריטי, כאשר מפעיל התכנית כבר מחובר (לכן אין צורך בשם משתמש או סיסמא). זה לא עוזר לי בכלום.

    בסופו של דבר, התפשרתי על המצב בו תכנית חיצונית שומרת קובץ בתיקיה ידועה כאשר פרוצדורה בתוך פריוריטי סורקת את אותה התיקיה בתדירות הדומה לתדירות הפקת הקובץ. אבל זה לא מה שרציתי. המצב האידיאלי היה שהתכנית החיצונית יוצרת את הקובץ ומפעילה בעצמה את התכנית לקליטה בפריוריטי. יש לכך השלכות לגבי הנתונים הכלולים בתוך הקובץ.

    לעומת זאת, אני יודע שהפעלה מרחוק אפשרית מפני שאנחנו מפעילים את מערכת סמדר, אשר סורקת מסמכים ובאמצעות הברקוד יודעת לשייך את הסריקה לנספחים של התעודה עצמה (המסמך בדרך תעודת משלוח חתומה ע"י הלקוח וכך התעודה החתומה נשמרת בנספחים של התעודה). אני זוכר שהגדרתי שם את הסיסמא של טבולה.

    NoamN
    משתתף
    none
    INSERT INTO STACK4 (KEY, REALDATA)
    SELECT WARHSBAL.PART, REALQUANT (SUM (WARHSBAL.BALANCE))
    FROM WARHSBAL, WAREHOUSES
    WHERE WARHSBAL.WARHS = WAREHOUSES.WARHS
    AND WAREHOUSES.WARHSNAME IN (‘Main’, ‘WHS2’, ‘WH3’)
    AND WARHSBAL.BALANCE > 0
    AND WARHSBAL.CUST = -1 /* Goods */
    GROUP BY 1;
    INSERT INTO STACK2 (ELEMENT, TYPE)
    SELECT PART, SUM (REALQUANT (TBALANCE))
    FROM ORDERITEMS
    AND TBALANCE > 0
    AND CLOSED <> ‘C’
    GROUP BY 1;

    נניח שביצענו את ה-LINKS הנדרשים בהתחלה. בדו"ח צריך להשתמש בחיתוך מותנה – STACK4.KEY = STACK2.ELEMENT ? כדי שיהיו כל הפריטים שיש להם מלאי אפילו אם אין להם הזמנות פתוחות.

    אולי יותר מהר בביצוע אבל פחות ברור לתכנות וגם קצת "שביר". ומה קורה כאשר רוצים להציג נתן נוסף כמו שימוש ממוצע (גריעות במלאי) על פני תקופה נוספת? במקרים כאלה, הפתרון הראשון שלי עדיף כי בגוף הקורסור ניתן לאסוף כל מיני נתונים שאינם קשורים אחד לשני, מלבד הפריט.

    NoamN
    משתתף
    none
    למדתי מאד מוקדם בקרירה שאין לכתוב דו"ח שמסוכם שני דברים לא קשורים אלא צריך לכתוב פרוצדורה שתעשה זאת. נניח שיש קורסור שעובר על פריטים: בתוך הלולאה אתה סוכם את המלאי בשאילתא אחת, סוכם את ההזמנות בשאילתא ואז כותב את הנתונים לבטלת מעבר. אפשר להקל קצת אם אתה רוצה רק פריטים שנמצאים במלאי כלהלן

    DECLARE CUR CURSOR FOR
    SELECT WARHSBAL.PART, REALQUANT (SUM (WARHSBAL.BALANCE))
    FROM WARHSBAL, WAREHOUSES
    WHERE WARHSBAL.WARHS = WAREHOUSES.WARHS
    AND WAREHOUSES.WARHSNAME IN ('Main', 'WHS2', 'WH3')
    AND WARHSBAL.BALANCE > 0
    AND WARHSBAL.CUST = -1 /* Goods */
    GROUP BY 1;
    OPEN CUR;
    GOTO 300 WHERE :RETVAL <= 0;
    LABEL 100;
    FETCH CUR INTO :PART, :STOCK;
    GOTO 200 WHERE :RETVAL <= 0;
    :ORD = 0.0;
    SELECT SUM (REALQUANT (TBALANCE)) INTO :ORD
    FROM ORDERITEMS
    WHERE PART = :PART
    AND TBALANCE > 0
    AND CLOSED <> 'C';
    INSERT INTO STACK4 (KEY, REALDATA, REALDATA2)
    VALUES (:PART, :STOCK, :ORD);
    LOOP 100;
    LABEL 200;
    CLOSE CUR;
    LABEL 300;

    בקורסור אתה סוכם את הכמות במלאי. אחר כך אתה סוכם את הכמות בהזמנות ושומר אותה במשתנה שאופס בכל סיבוב בלולאה, כך לפריט שאין הזמנות פתוחות תהיה כמות 0.

    NoamN
    משתתף
    none
    עלי להזהיר מראש ששינוי כותרת במסך סטנדרטי אינו פעולה שקיבלה "הכשר" מפריוריטי.

    משנים במסך מנהל המערכת > מחוללים > מסכים > מחולל מסכים, או על ידי לחיצת F6 בתפריט. מגיעים אל השדה ורושמים את התאור החדש בשדה "כותרת חדשה".

    יחד עם זאת, יש כמה רמות של שינוי. השינוי הזה יבוא לידי ביטוי במסך "כרטיס פריט" בלבד, לא במסך "מוצרים" ולא בדו"חות שמציגים את השדה. כדי לשנות באופן גורף, צריך להפעיל את מנהל המערכת > מחוללים > טבלאות > מחולל עמודות > שנוי כותרת עמודה.

    NoamN
    משתתף
    none
    אני משער שהבעיה נמצאת בשורה FROM ZZZ_ALINE: האם את יודעת בוודאות שיש רשומה מתאימה בטבלה הזו? אני משער שאין. יהיה יותר פשוט לכתוב

    :TTIME = SQL.DATE MOD 24:00

    בלי ה-SELECT ו-FROM. אפשר לבצע SELECT מטבלת DUMMY שאמור להצליח אבל לא צריך ללכת כל כך רחוק.

    אפשר גם לבטל את כל ה-GOTO למיניהם באמצעות תנאי משולש שלא יוצא טוב כאן.

    :$.SHIFT = (:TTIME BETWEEN 06:00 AND 17:59 ? 1 : 2);

    NoamN
    משתתף
    none
    בשדה "תעודה" (זאת אומרת, איפה שמוצג מספר הזמנה, מספר תעודה וכו') את אמורה להגדיר מסך יעד ZOOM1 ואז מסך היעד נפתח עם התעודה המתאימה. אולי הגדרת את ה"מסך" הזה בשדה אחר?
    NoamN
    משתתף
    none
    הגישה של IVTYPES/DOCTYPES לא עוזרת ברגע שיש משהו בנוסף.

    יש לך ביטוי כלשהו שמבדיל בין הזמנות לבין תעודות משלוח (נניח שיש רק שתי טבלאות). לצורך הענין נגיד שהמבדיל נמצא בשדה :$.A. אם כך, את צריכה כך:

    עמודת המסך :$.ENAME. עמודת טבלה ENAME, שם טבלה EXEC. ביטוי

    = (:$.A = 1 ? 'ORDERS' : (:$.A = 2 ? 'DOCUMENTS_D' ?
    (:$.A = 3 ? 'CINVOICES' : 'NULL')))

    כמוכן נדרש שורה EXEC.TYPE = 'F'. בביטוי למעלה, רושמים את שם מסך היעד. תסתכלי על הבלוג שכתבתי בהתחלה, https://progpitfalls.blogspot.com/2021/08/defining-dynamic-target-form-name-for.html

    NoamN
    משתתף
    none
    אפילו בלי PART = 1412, הקוד מציג אי הבנה לגבי LINK וקורסור. אם יש רק פריט אחד בטבלה המלוננקת, אתה לא צריך את הקורסור. אם יש יותר מפריט אחד בטבלה, הקורסור יפעל על פריט אחד בלבד – בגלל התנאי WHERE PART = :PARTID. בכל מקרה העדכון לא יעשה כלום כי אתה מעדכן את הטבלה המלונקקת, לא את הטבלה האמיתית.

    להלן קוד נכון, בלי קשר אם יש רק פריט אחד או רבים

    LINK PART TO :$.PAR;
    ERRMSG 1 WHERE :RETVAL <= 0;
    DECLARE BSH_CUR CURSOR FOR
    SELECT PART
    FROM PART
    WHERE PART > 0;
    OPEN BSH_CUR;
    GOTO 940 WHERE :RETVAL <= 0;
    LABEL 140;
    FETCH BSH_CUR INTO :BSH_PART;
    GOTO 840 WHERE :RETVAL <= 0;
    UPDATE PART ORIG
    SET ZMAN_LASTTRANSDATE = SQL.DATE8
    WHERE PART = :BSH_PART;
    LOOP 140;
    LABEL 840;
    CLOSE BSH_CUR;
    LABEL 940;
    UNLINK PART;

מוצגות 15 תגובות – 91 עד 105 (מתוך 442 סה״כ)