ייבוא תנועות שנכשל חלקית הוא המצב המסוכן: חלק נקלט וחלק לא. איך בונים קובץ דחייה עם מזהה מקור, למה שידור חוזר יוצר כפילויות, ומה עושים עם כרטיס שלא קיים.
עיקרי הדברים
- ייבוא חלקי הוא ברירת המחדל, לא מקרה קצה. תכננו אליו מראש.
- לכל שורה חייב להיות מזהה מקור יציב, שנשמר בקובץ ובמערכת שממנה הוא הופק.
- חשבשבת בודקת בקליטה אם כרטיסי החשבון קיימים, ומציגה חלון של רשומות שגויות שצריך לפתור לפני שממשיכים.
- הסעיף שפותח כרטיסים חדשים לפי הצורך חוסך זמן וגם יוצר עץ חשבונות שאיש לא תכנן.
- לפני שידור חוזר מתאימים שלושה מספרים: ספירת רשומות, סכום חובה וסכום זכות.
ייבוא תנועות שנכשל חלקית מסוכן יותר מייבוא שנכשל כולו, מפני שחלק מהשורות כבר נקלטו. שידור חוזר של אותו קובץ אחרי תיקון אחד מייצר כפילויות בהנהלת החשבונות במקום לפתור דחיות. הצעד הראשון אינו לנסות שוב, אלא לייצר רשימת הדחיות ולהתאים ספירה וסכומים.
למה ניסיון חוזר מסוכן יותר מהכישלון עצמו
כי הקובץ אינו יחידה אטומית. בקליטה השורות התקינות נכנסות והשגויות נדחות, וכעת בסיס הנתונים מכיל חלק מהקובץ. מי שמתקן שורה אחת ומשדר את אותו קובץ במלואו מכניס שנית את כל השורות שכבר נקלטו.
הנזק לא מתגלה בייבוא עצמו. הוא מתגלה בהתאמת בנק שלא נסגרת, בכרטיס ספק שמראה יתרה כפולה, או בדוח מע"מ עם מסמכים שמופיעים פעמיים. בשלב הזה כבר קשה להפריד בין המקור לעותק, כי לשתי התנועות אין שום סימן שמבדיל ביניהן.
מה חייב להיות בקובץ הדחייה
קובץ דחייה טוב הוא זה שאפשר לחקור ממנו בלי לפתוח את המערכת. אלה השדות שמחזירים את רוב הזמן:
| השדה | למה הוא נחוץ |
|---|---|
| מזהה מקור | לקשור את השורה למסמך במערכת שממנה יוצאה |
| מספר שורה בקובץ | לאתר את השורה עצמה בקובץ המקורי |
| סוג התנועה או המסמך | לקבץ דחיות דומות במקום לטפל אחת-אחת |
| כרטיס חובה וכרטיס זכות | הגורם הנפוץ ביותר לדחייה |
| תאריך התנועה | לזהות תקופה סגורה או תאריך מחוץ לטווח |
| סכום | להתאמה מול סכומי הבקרה |
| סיבת הדחייה כפי שחזרה | הניסוח המדויק, ולא סיכום שלכם |
| חותמת זמן וניסיון מספר | להבחין בין הדחייה המקורית לבין חזרה עליה |
השדה שנוטים לוותר עליו הוא מזהה המקור, והוא בדיוק זה שמאפשר לשדר מחדש רק את מה שנדחה.
אילו כשלים הם מבניים ואילו הם חשבונאיים?
זו ההפרדה שקובעת מי מתקן. כשל מבני נפתר בקוד או בקובץ, כשל חשבונאי נפתר בהנהלת החשבונות.
- מבני: עמודה חסרה, פורמט תאריך שגוי, מפריד עשרוני לא נכון, קידוד שהרס תווים בעברית, סכום עם סימן הפוך.
- חשבונאי: כרטיס שאינו קיים, תקופה סגורה, מספר אסמכתה שכבר נקלט, חובה שאינו שווה לזכות, סעיף שאינו מתאים לסוג התנועה.
- תהליכי: אותה תנועה שהופקה פעמיים מהמערכת התפעולית, או קובץ שנשלח מחדש כי מישהו לא ידע שהראשון נקלט.
ההבחנה הזו אינה תיאורטית. כשל מבני חוזר על עצמו בכל השורות מאותו סוג, ולכן מספר הדחיות בו גדול והתיקון אחד. כשל חשבונאי מופיע בשורות בודדות ודורש החלטה נפרדת לכל אחת. אם מאה שורות נדחו מאותה סיבה, כמעט תמיד מדובר בעמודה או בפורמט, ולא במאה תקלות בהנהלת החשבונות.
שלוש הקטגוריות מייצרות הודעות שנראות דומות, ולכן שווה לסווג כל סיבת דחייה לאחת מהן בטבלת מיפוי, פעם אחת, ולהשתמש בה בכל ייבוא.
הסעיף "פתיחת חשבונות חדשים לפי הצורך" - מה הוא עולה
בקליטת ממשק חשבשבת בודקת אם כרטיסי החשבון שבכל תנועה קיימים במסד הנתונים, ומאפשרת להגדיר מה לעשות כשכרטיס אינו קיים. אם מסמנים את הסעיף שפותח כרטיסים חדשים, התוכנה תפתח כרטיס; אם לא, התנועה לא תיקלט ותדווח כשגויה.
שתי האפשרויות לגיטימיות, ולכל אחת מחיר:
- מסומן. הייבוא עובר, אבל עץ החשבונות גדל לפי שמות שהגיעו ממערכת אחרת. חודשיים אחר כך יש שלושה כרטיסים לאותו ספק.
- לא מסומן. מקבלים דחיות, וזה בדיוק מה שרוצים בייבוא חוזר - אבל רק אם מישהו קורא את רשימת הרשומות השגויות ומטפל בה.
בייבוא חד-פעמי של המרה, סימון הסעיף סביר. בממשק שרץ מדי יום, הוא בדרך כלל טעות.
איך מתאימים ייבוא חלקי לפני שמשדרים שוב?
- הפיקו שלושה מספרים מהקובץ המקורי: מספר רשומות, סך חובה וסך זכות.
- הפיקו את אותם שלושה מספרים מהתנועות שנקלטו בפועל, מסוננות לפי מזהה האצווה או תאריך הקליטה.
- חסרו. ההפרש חייב להיות שווה בדיוק לסך שורות הדחייה. אם לא, יש שורה שלא נספרה באף צד וצריך למצוא אותה לפני כל דבר אחר.
- תקנו את מקור הנתונים, לא את הקובץ. קובץ מתוקן ידנית מייצר ייבוא שאי אפשר לשחזר.
- הפיקו קובץ חדש שמכיל אך ורק את מזהי המקור שנדחו, ושדרו אותו.
- הריצו את אותה התאמה שוב על האצווה החדשה, וסגרו את המחזור רק כשההפרש אפס.
איך מתכננים ממשק שייבוא חלקי לא כואב בו
אם הממשק רץ יותר מפעם אחת, כדאי לתכנן אותו כך שדחייה תהיה אירוע שגרתי ולא משבר. שלוש החלטות ארכיטקטוניות עושות את רוב ההבדל:
- טבלת ביניים. הקובץ נכנס קודם לטבלה משלכם, עם סטטוס לכל שורה: ממתין, נקלט, נדחה, בבדיקה. מכאן נבנה קובץ הייבוא, ולא מהמערכת התפעולית ישירות.
- מזהה אצווה. לכל הרצה מזהה יחיד שנשמר על כל שורה. בלעדיו אי אפשר לענות על השאלה "מה בדיוק נכנס אתמול בשלוש".
- מפתח ייחודיות. צירוף של מזהה מקור וסוג תנועה שמונע קליטה כפולה, גם כשמישהו מריץ את אותו קובץ בטעות.
היתרון המעשי הוא שהתיקון קורה בטבלת הביניים ולא בקובץ. שורה נדחית מתוקנת, מקבלת סטטוס "ממתין", והריצה הבאה אוספת אותה יחד עם החדשות. אף אחד לא עורך קובץ טקסט ביד, ואף אחד לא משדר את אותו קובץ פעמיים.
מה שומרים אחרי שהכול עבר
ייבוא שהצליח הוא עדיין אירוע שצריך להיות ניתן לשחזור. שמרו את הקובץ כפי שנשלח, את מזהה האצווה, את שלושת סכומי הבקרה, את רשימת הדחיות ואת הקובץ החוזר. כשרואה החשבון ישאל בעוד חצי שנה מאיפה הגיעה תנועה מסוימת, זו התשובה.
זהו תיאור טכני של תהליך ייבוא ובקרה, ולא ייעוץ חשבונאי. את אופן הרישום והדרישות המחייבות יש לקבוע מול רואה החשבון.
קשור: אינטגרציה ל-API של חשבשבת, אוטומציה בחשבשבת וריווחית, תהליך התאמת בנק יומי.
מקורות
שאלות נפוצות
אפשר פשוט לשדר את הקובץ שוב אחרי שתיקנתי שורה?
לא. השורות שנקלטו בניסיון הראשון ייקלטו שוב וייצרו כפילויות בהנהלת החשבונות. משדרים מחדש רק את מזהי המקור שנדחו, בקובץ חדש. אם אין מזהה מקור בשורות, זו הבעיה שצריך לפתור לפני כל ניסיון נוסף.
למה מופיעה שגיאה שהכרטיס אינו קיים?
מפני שבקליטת הממשק חשבשבת בודקת אם כרטיסי החשבון שבתנועה קיימים במסד הנתונים. אם הכרטיס אינו קיים והסעיף לפתיחת כרטיסים חדשים אינו מסומן, התנועה נדחית ומופיעה ברשימת הרשומות השגויות שצריך לטפל בה.
מה עושים כשסכום החובה אינו שווה לסכום הזכות?
בודקים את מקור הנתונים ולא את הקובץ. הפרש כזה מגיע כמעט תמיד מעיגול, ממטבע שהומר בשלב הביניים, או משורה שסוננה החוצה בייצוא. תיקון הסכום ידנית בקובץ יעביר את הייבוא ויותיר את התקלה בכל אצווה עתידית.
כמה זמן צריך לשמור את קובצי הייבוא והדחייה?
מבחינה טכנית, לפחות עד שכל התקופה שאליה הם נוגעים נסגרה ואושרה, ובפועל כל עוד המערכת התפעולית עשויה להישאל מאיפה הגיעה תנועה. משך השמירה המחייב לצורכי הנהלת חשבונות הוא שאלה לרואה החשבון ולא לצוות הפיתוח.
להמשך קריאה
שירות רלוונטי
אוטומציה לעסקים
אני בונה אוטומציות מותאמות שמורידות עבודה חוזרת מקצה לקצה.
על הכותב
יהונתן סעדיה
מפתח פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מפתח בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה רוצה לבנות או איזה תהליך להפוך לאוטומטי. אני חוזר תוך 24 שעות עסקים עם כמה שאלות ממוקדות, ואז עוברים על זה יחד בשיחת היכרות חינמית של 30 דקות, בלי התחייבות. בסוף יש לך היקף עבודה, לוח זמנים ומחיר קבוע - או תשובה כנה שלא שווה לבנות את זה.
