@הפצת-אנקי
גילוי נאות: אינני מכיר את פייתון כלל
אשקף את הבנתי מהשאלה
הינך מעוניין שלחיצה על 'הדפס' תשלח ישירות את הקובץ להדפסה
במדפסת ברירת מחדל של המשתמש
ראה כאן
(חיפוש בגוגל: Python how to print file directly to default printer)
@הפצת-אנקי
גילוי נאות: אינני מכיר את פייתון כלל
אשקף את הבנתי מהשאלה
הינך מעוניין שלחיצה על 'הדפס' תשלח ישירות את הקובץ להדפסה
במדפסת ברירת מחדל של המשתמש
ראה כאן
(חיפוש בגוגל: Python how to print file directly to default printer)
@קינג-קומפיוטר
מבלי להכנס לנושא התמחור הספיציפי של התקנה
ישנם שירותים שהתמחור לוקח בחשבון
שעות עבודה עתידיות אופציונליות
לדוגמא:
הזמינו אצלך פיתוח כלשהו (הוספת פונקציה לתוכנה קיימת שלך)
להערכתך - זמן הכתיבה בפועל יעמוד על 40 דק'
הגיוני לחלוטין - שבהצעת מחיר - תחשבן כשעתיים
ולמה?
כי סביר להניח שהלקוח יחזור אליך עם 'מקצה שיפורים'
בדר"כ לקוחות רגילים שמבקשים פיתוח
לא תמיד יודעים לדייק ולאפיין היטב את הבקשה
ואח"כ יש להם הערות שאמור להיות בנוסף כך וכך
ומבחינתם זה כלול בהצעת מחיר הראשונית
כי לזה הם התכוונו (בראש שלהם, למרות שלא נכתב/נאמר)
ולכן גם בנידון דידן
טכנאי שמבצע תיקון / התקנה
שעלול להיות לזה 'המשך טיפול'
יכול לקחת את זה בחשבון התמחור הראשוני
זה גם נכון ברמה האישית
יותר חכם להגיד מראש מחיר שמגלם מבחינתך את הסיכון
מאשר התחושה שלך ושל הלקוחות - של ה'תוספות' כל הזמן (זה לא כלול, וזה לא כלול, וזה בכלל לא היה אמור להיות בחשבון)
אין באמור לגבי נושא ניצול מלקוחות, אלא דברים שעומדים בקשר ישיר לעבודה
(בהתקנת וינדוס, ברור שלקוח שרוצה אופיס/אדובי ישלם בנפרד,
ואם הוא רוצה שבהפעלת המחשב לא יצטרך להזין את הסיסמא פתיחה, יתכן וזה כן כלול במחיר הראשוני)
אביא דוגמא פרטנית המייצגת את נקודת השאלה
(מדגיש דוגמא, כי גם בדוגמא יש הרבה יותר רכיבים בשרת האמורים להיות בטבלה
וגם אצלי כך שהסברא זה סהכ 10 עמודות ולא נורא אינה אקטואלית)
מעבדת מחשבים המוכרת 'שרתים' בהרכבה אישית (כל חלק מוזמן פרטנית ולא מהמלאי)
הטבלה הדומיננטית הינה טבלת השרתים שנמכרו
טבלת הבסיס הינה:

בצד לקוח יוצג:

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

האם כדאי להוסיף אותם לטבלת שרתים
או לעשות לזה טבלת משנה
הנקודות שאשמח להתייחסות
בהנתן שבוודאות בטווח של עשר שנים לא אעבור את ה100,000 שורות
מה עדיף עבורי (יותר נכון - מה אתה היית עושה)
מבחינת קריאות
מיטוב ביצועים
(ופשטות יצירת שאילתות)
אשמח להתייעץ בנוגע לתכנון טבלאות בSQL
מה מומלץ לבצע בטבלה שבטווח של עשר שנים לא אמורה להכיל יותר מ100,000 שורות
מבחינת קריאות
מיטוב ביצועים
(ופשטות יצירת שאילתות)
כידוע ה'כלל אצבע' במסדי נתונים
הינו להימנע מהזנת נתון כפול ולבצע שימוש ב'מפתח זר'
שאלה:
לדוגמא:

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

למעשה המזהה ספק ושם הספק הינו נתון כפול
כי ניתן לשלוף את שם הספק באמצעות JOIN לטבלת ספקים
מצד שני - שם הספק הינו שדה 'רזה'
@ארי כתב בשליפת נתונים מאתר:
גם אם יעלו על זה יש לי תירוץ טוב...
אני מצפה ממך ליותר
גם בחלק המוסרי (אתה בעצם אומר אולי אגנוב אנשים בגביית סכום שגוי, אבל יש לי תירוץ)
ובחלק הטכני
אתה הרי יודע את נקודת היעד
זאת אומרת מקום הקבורה זה נ.צ. שאתה יודע בוודאות
מה הנתון שחסר לך לחישוב התשלום? מה קצה תחום השיפוט של עיר הנפטר
כאן מגיע לך להתאמץ קצת בחיפוש הנתון
@יהודי-טוב
תפתח לכל אחד גליון שיטס עצמאי עם הרשאות מלאות עבורו
ועבורך לצורך קיבוץ הנתונים - תפתח קובץ נוסף שבו תאחד את המידע משאר הגליונות
למידע נוסף חפש בגוגל: Queries between two Google Sheets files
@dovid
בהחלט מסכים עם דבריך המפורטים והמוסברים בטוב טעם
בכ"ז ע"מ שלא להרפות את ידי @Sofer כפי שניסח בשאלה
שאנשים פרטיים פונים אליו עם בעיות כי יש לו חוש לזה
אציע דעה נוספת:
מה רע בלהיות חרטטן
זאת אומרת אם בנאדם פנה אלי עם בעיה שהמחשב נייד שלו לא עובד
הבאתי לו הצעת מחיר של 500 שקל
והלקוח שהחומר והמחשב חשובים לו הסכים לשלם
ואני בחוכמתי דבר ראשון שמתי מטען חילופי והמחשב נדלק
סוברני שבהחלט פתרתי בצורה מושלמת את הבעיה ללקוח
(לזכור שהצד השני הוא שעמלתי לילה שלם כדי לפתוח את המחשב כדי לגלות האם חוט הטענה ניתק או הדיסק התנתק)
החסרים אנו בחורי ישיבות שמחלטרים בשחזור קבצים מקצועי
שבעצם משתמשים בתוכנות הקיימות
ז"א כל זמן שמדובר בהסכמה מראש
של קבלת הצעת מחיר מראש והטכנאי נותן מענה מושלם לבעיה - הכל בסדר
כך שבמקום מסוים
יכול להיות שההצעה הכי רלוונטית עבורך @Sofer זה להשתפשף בחיפוש בגוגל
במקום ללמוד מראש חומר לימודים שלא כולו אקטואלי ורלוונטי
תתמקד כל פעם בחיפוש נקודתי על תוכן מסוים לפי אופי הדברים הבאים לפניך
תוך כדי שתקח בחשבון את התמחור
ז"א אתה צריך לדעת האם התקלה הנוכחית מוכרת לך ותקח לך X זמן
או שזה חומר חדש ותאלץ לשרוף זמן בחיפוש מקורות ידע (כמובן שאתה יכול (מומלץ?) להחשיב את זה כחלק מעלות הלימוד)
@חוקר
בהמשך להמלצות הנ"ל
(יש גם את קליאCRM)
במידה ולא תמצא את מבוקשך בפלטפורמות הקיימות
אשמח להציע לך את המערכת שבניתי
פרטים במייל: pooa.crm@gmail.com
המעלות במערכת שלי:
ניהול תהליכי ייצור / עבודה
ניהול משימות
גמישות מודולרית מלאה המאופיינת עבור הלקוח
כולל חיבור למרכזייה לקבלת/הוצאת שיחות (כולל הקפצת כרטיס לקוח)
מתאפשר סנכרון עם מגוון מקורות מידע קיימים (תוכנות/קבצים)
החסרון המרכזי:
מדובר בתוכנה לוקלית ולא ב'ווב'
הערה:
לפי תיאור השאלה יהיה עבורך
יותר נוח
יותר חכם
ויותר נכון
לנסות לגשת לאחד מההמלצות הנ"ל ולא אלי
במידה ובכ"ז ניסת ולא מצאת התאמה צור עימי קשר
אנקדוטה מעניינת לסיום השרשור
תראו איך האלגוריתם של גוגל פיענח את התוכן

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


@dovid כתב בחובת הנגשת אתר והצהרת נגישות:
בכל מקרה, כל הסיפור האלה של התביעות משונה לי, למה שום דבר לא הפך לפסיקה? איומי תביעות זה משהו חינמי שאפשר להפעיל בכמויות של ספאם, ללא חוק שמגביל זאת.
כי לצערנו הרב
יותר זול ויותר נוח לחברות במשק לשלם דמי חסות ומגיעים לפשרה עם התובעים
האפשרות השניה של לזכות בדין צדק במערכת המשפט
אחרי שהחוק והתקנות מנוסחים בצורה כ"כ חד צדדית שאין לך שום סיכוי לצאת נקי לגמרי
נכרי ערל יכול כיום לפי החוק להסתובב בכמעט 98% מהחנויות במגזר החרדי
ולהגיש תביעות נגישות על עשרות פרטים קטנים
והוא זכאי לסעד מהחוק של זכאות לעד 50,000 ש"ח ללא הוכחת נזק
(בחנויות בקניון בדר"כ ההנגשה במקור ע"י מפעיל המתחם)
והתופעה קיימת
ובהיקף שהולך וגדל
ולכן במחשבה קדימה
לא חכם לבצע התעלמות מוחלטת מנושא הנגישות
לבין להצליח לעמוד בנגישות מלאה (קשה ומסובך)
לדעתי הנגשת אתר ועסק זה יותר מחובת השתדלות
(הנ"ל בדר"כ מעדיפים להתעסק במקרים שיכולת ההוכחה שלהם הינה קרובה ל100% ופחות מתאים להם להתפקשן איתך על האם מלאת את כל תנאי ההנגשה)
התיקון הנוסף שהוא:
if ((bool)dataGridView1.CurrentCell.EditedFormattedValue)
{
dataGridView1.CurrentRow.Cells["current_payment"].Value = Math.Min(tb1Val, debt_balance);
textBox1.Text = Math.Max(tb1Val - current_payment, 0).ToString();
}
מחזיר תוצאה שגויה,
היות שהמשתנה נשאר על ערך 0 ולא עובר השמה מחדש אחרי הכנסת הערך
בעקבות
@dovid אמר בc# winform - איך לעצור אירוע בלחיצת 'דאבל - קליק בdataGridView (1.כותרת נערכה, 2.נפתר):
ג. ביטויים שמשתמשים בהם יותר מפעם אחת רצוי לשים במשנה הן לביצועים והן לקריאות, לעומת ביטויים שמשתמשים רק פעם אחת שזה בהתאם לנסיבות
מסקרן אותי מה היית עושה
מצד אחד ניתן להשאיר את זה כמו בהתחלה (אומנם במקרה שבו שולם סכום נמוך מהיתרת חוב הtb1Val - current_payment מחזיר תוצאה שלילית,
אבל הגאונות בחשיבה להעביר את זה לMath. מחזירה תוצאה נכונה )
או שלמען הדיוק והסדר היית מאתחל את המשתנה
או מכניס את כל המסלול הארוך בשמו
תיקון טכני קטן:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.CurrentCell.OwningColumn.Name != "choose") return;
var tb1Val = Convert.ToDouble(textBox1.Text);
var cellVal = Convert.ToDouble(dataGridView1.CurrentRow.Cells["debt_balance"].Value);
var cellpay = Convert.ToDouble(dataGridView1.CurrentRow.Cells["current_payment"].Value);
if ((bool)dataGridView1.CurrentCell.EditedFormattedValue)
{
dataGridView1.CurrentRow.Cells["current_payment"].Value = Math.Min(tb1Val, cellVal);
textBox1.Text = Math.Max(tb1Val - cellVal, 0).ToString();
}
else
{
textBox1.Text = (tb1Val + cellpay).ToString();
dataGridView1.CurrentRow.Cells["current_payment"].Value = "0";
}
}
הסיבה שאתה משתמש בקביעות בvar
ולא קורא לילד בשמו (Double)
נובעת מצורכי קריאות גרידא
או שיש בזה תועלות נוספות?
@dovid
ברוח האתגרים וההצפנות השורה בימים האחרונים
זה היה המפתח להבנת השאלה המקורית
<חופש>. <ילדים>.<בלאגן>. <עייפות>.<מחשב_נייד_שונה_מהמחשב_הרגיל>.<נטסיק>.
שלחתי את השאלה ברגע של חלשות הדעת
ולאחר שהתפקחתי ראיתי שכבר צבר צפיות
בהתלבטות האם למחוק או לערוך
חשבתי שלמחוק לאחר צפייה - אינו מן ההגינות והיושר
אולי ה'מנ-דהו' שצפה יושב כעת לכתוב תשובה, שכידוע לפעמים לוקחת כמה דק'
ולכן ערכתי מעט את השאלה
ע"מ שתשאר בצורה מועילה
נ.ב.
א. לקח לי זמן להבין שזה בכלל קשור ל'דאבל - קליק'
היות ולפקד checkBox אין בכלל מאפיין שכזה
ב. הרווחתי מהשארת השאלה
כי החכמתני כאן במספר נקודות לגבי ה'קליק' והמסתעף
ובפרט בסעיף ג שהתחבטתי בזה בעבר
@נפש-האדם אמר בעזרה בקניית נטסטיק:
שיהיה גלישה מהירה ואיכותית
תזכור לבדוק פרמטר חשוב נוסף
של הקליטה באזור השימוש השוטף
כדי לדעת לבחור איזה סים לקחת
ניתן להעזר כאן
שפה: c# winform
עריכה:
בקצרה:
אני מנסה ליצור אירוע בעת לחיצה על תיבת סימון
והבעיה כשלוחצים 'דאבל-קליק' התהליך אינו מושלם כרצוני
בהרחבה:
אני מנסה לבצע פעולה חשבונאית של פיזור סכום בשורות בטבלה
בהתבסס על סכום שקיים ב textBox
החישוב מתבצע בעת שינוי בעמודה מסוג checkBox הנמצאת בתוך dataGridView
באמצעות הקוד דלהלן:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
_ = dataGridView1.Enabled = false;
if (string.Compare(dataGridView1.CurrentCell.OwningColumn.Name, "choose") == 0)
{
bool checkBoxStatus = Convert.ToBoolean(dataGridView1.CurrentCell.EditedFormattedValue);
if (checkBoxStatus)
{
if (Convert.ToDouble(dataGridView1.CurrentRow.Cells["debt_balance"].Value) <= Convert.ToDouble(textBox1.Text))
{
dataGridView1.CurrentRow.Cells["current_payment"].Value = dataGridView1.CurrentRow.Cells["debt_balance"].Value;
textBox1.Text = (Convert.ToDouble(textBox1.Text) - Convert.ToDouble(dataGridView1.CurrentRow.Cells["current_payment"].Value)).ToString();
}
else if (Convert.ToDouble(dataGridView1.CurrentRow.Cells["debt_balance"].Value) > Convert.ToDouble(textBox1.Text))
{
dataGridView1.CurrentRow.Cells["current_payment"].Value = textBox1.Text;
textBox1.Text = "0";
}
}
else
{
textBox1.Text = (Convert.ToDouble(textBox1.Text) + Convert.ToDouble(dataGridView1.CurrentRow.Cells["current_payment"].Value)).ToString();
dataGridView1.CurrentRow.Cells["current_payment"].Value = "0";
}
}
_ = dataGridView1.Enabled = true;
}
אממה
שאם אני מסמן את התא לאט ובעדינות בקצב סביר (קצב סביר = אינו דאבל / תלת קליק)
הפעולה מתרחשת בצורה תקינה
אבל אם אני מקליק עליו ברצף
הוא מפספס חלק מהלחיצות ומפחית מהסכום המופיע בtextBox שלא לפי התנאי
(הסכום בtextBox פוחת לפי הערך, אבל הסימון נשאר, כך שבלחיצה חוזרת הסכום פוחת שוב)
בהתחלה סברתי שאולי קצב ההקלקה יותר מהיר מהחישוב
ולכן הוספתי מייד בהתחלה את dataGridView1.Enabled = false
מה שאמור למנוע את הלחיצה הבאה עד לסיום הריצה
אבל זה עדיין לא עזר
היכן שגיתי?
והתשובה הינה:
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1_CellContentClick(sender, e);
}