Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Αφαίρεση ωρών και μετατροπή υπολοίπου σε ημέρες ώρες. (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/3751-afairesi-oron-kai-metatropi-ypoloipoy-se-imeres-ores.html)

kosta 06-07-15 11:34

Αφαίρεση ωρών και μετατροπή υπολοίπου σε ημέρες ώρες.
 
1 Συνημμένο(α)
Καλησπέρα σε όλη την κοινότητα:
χρειάζομαι την βοήθεια σας γιατί όσο και αν το προσπάθησα δεν κατάφερα τίποτα ανεβάζω ένα δείγμα αυτού που ζητάω ,στην φόρμα Πίνακας1 Ερώτημα θέλω την αφαίρεση ΔΙΚΑΙΟΥΜΕΝΑ-ΔΙΑΡΚΕΙΑΩΡΕΣ και αυτό που θα προκύψει το υπόλοιπο δηλαδή να μετατρέπεται σε ημέρες ώρες λεπτά εάν υπάρχουν , για παράδειγμα στην πρώτη εγγραφή 32-3=29 δηλαδή να φαίνεται 3ημέρες,5ώρες για κάθε ημέρα υπολογίζεται ένα 8ωρο γιατί πρόκειται για μεροκάματα σας ευχαριστώ .

Spirosgr 06-07-15 22:11

Κώστα, δοκίμασε στο ερώτημα, ένα νέο πεδίο με :
Κώδικας:

ΠΕΡΙΦΡΑΣΤΙΚΑ: Int(([ΔΙΚΑΙΟΥΜΕΝΑ]-[ΔΙΑΡΚΕΙΑ]*24)/8) & " οκτάωρα,
" & Int([ΔΙΚΑΙΟΥΜΕΝΑ]-[ΔΙΑΡΚΕΙΑ]*24)-Int(([ΔΙΚΑΙΟΥΜΕΝΑ]-[ΔΙΑΡΚΕΙΑ]*24)/8)*8 & " ώρες, "
& Round(([ΔΙΚΑΙΟΥΜΕΝΑ]-[ΔΙΑΡΚΕΙΑ]*24-Int([ΔΙΚΑΙΟΥΜΕΝΑ]-[ΔΙΑΡΚΕΙΑ]*24))*60;2) & " λεπτά."

Σύνδεσε το στην φόρμα και άλλαξε αν θέλεις την περιγραφή «οκτάωρα» σε «μέρες» ή ότι άλλο σε βολεύει.

kosta 06-07-15 23:10

1 Συνημμένο(α)
Σπύρο κατ’ αρχήν σ’ ευχαριστώ πάρα πολύ για την άμεση απάντηση σου, ομολογώ ότι εξεπλάγην με το αποτέλεσμα και σίγουρα όσο και να προσπαθούσα δεν θα τα κατάφερνα γιατί οι γνώσεις μου δεν είναι τέτοιου επιπέδου , χωρίς να γίνομαι φορτικός και δεν ξέρω αν γίνεται βέβαια ανεβάζω και πάλι το δείγμα έχοντας περάσει τον τύπο σου στην φόρμα στο αποτέλεσμα που θα δεις αντί να μου βγάζει 2 οκτάωρα, 7 ώρες, 60 λεπτά δεν θα μπορούσε να γράφει 3 οκτάωρα ;

kosta 07-07-15 10:19

1 Συνημμένο(α)
Σπύρο έχεις δίκιο μάλλον δεν το διευκρίνισα σωστά μετά από πολύωρη εργασία το έστησα όπως ακριβώς ήθελα το ζητούμενο είναι το εξής: χρησιμοποιώ των τύπο =Int(Άθροισμα([ΔΙΑΡΚΕΙΑ]))*24+Hour(Άθροισμα([ΔΙΑΡΚΕΙΑ])) & ":" & Minute(Άθροισμα([ΔΙΑΡΚΕΙΑ])) για να βρω το άθροισμα των ωρών στο πάνω μέρος της φόρμας, αυτό που ζητάω στο παράδειγμα της φωτογραφίας είναι οι δικαιούμενες 32 μείων σύνολο ωρών 18:15 = 13,85 δηλαδή να μου βγάζει 1οκτάωρα,6ώρες,25λεπτά

kapetang 07-07-15 19:48

Καλησπέρα

Κώστα κάνεις πολλές μετατροπές μονάδων με αποτέλεσμα σύγχυση και λάθη.

Για παράδειγμα:

1) οι 18:15 (18 ώρες και 15 λεπτά) ισούνται με 18 +15/60 ώρες =18,25.

Η διαφορά 32-18,25=13,75 ώρες και όχι 13,85 που γράφεις.

2) Οι 13,85 ώρες, όταν εκφραστούν σε οκτάωρα, ώρες και λεπτά είναι 1 οκτάωρο, 5 ώρες και 51 (0,85*60) λεπτά και όχι 1 οκτάωρο, 6 ώρες και 25 λεπτά.

Προτείνω:

1) Να προσθέσεις στη φόρμα σου ένα πεδίο (μπορεί να είναι και κρυφό) οποίο θα ονομάσεις Η (αγγλικό) και στο οποίο θα υπολογίζεται η διαφορά= [ΔΙΚΑΙΟΥΜΕΝΕΣ]- Άθροισμα([ΔΙΑΡΚΕΙΑ])*24 σε ώρες (δεκαδικός αριθμός).

2) Το πεδίο Η είναι βοηθητικό και θα χρησιμοποιηθεί για να πάρεις την έκφραση, που θέλεις.

Βάλε στο πεδίο που θέλεις την έκφραση τον τύπο:

=H\8 & " Οκτάωρα, " & int(H-(H\8)*8) & " ώρες, " & (H-(H\8)*8-INT(H-(H\8)*8))*60 & " λεπτά"

Φιλικά/Γιώργος

kosta 07-07-15 22:01

3 Συνημμένο(α)
Γιώργο καλησπέρα σ’ ευχαριστώ πολύ για την βοήθεια σου, έχεις απόλυτο δίκιο είναι αυτό που ζητάω όμως αν δεις τα παραδείγματα που ανέβασα χρειάζεται μια στρογγυλοποίηση ή εγώ δεν εφαρμόζω κάτι καλά;

kapetang 08-07-15 00:18

Κώστα χρειάζεται στρογγυλοποίηση.

Είναι δύσκολο να δημιουργηθεί ένας τύπος λαμβάνοντας υπόψη μας και τις στρογγυλοποιήσεις.

Για το λόγο αυτό προτείνω μια λύση με κώδικα VBA.

1) Θα πρέπει να αντιγράψεις την παρακάτω συνάρτηση σε μια μονάδα κώδικα (Module).
Κώδικας:

Public Function Expression(T As Variant) As Variant
    Dim O As Long, H As Long, m As Long, x As Double
    If Nz(T, "") <> "" Then
        O = Int(T / 8)
        x = T - CInt(O * 8)
        H = Int(x)
        m = CInt((x - H) * 60)
        If m >= 60 Then
            H = H + Int(m / 60)
            m = m Mod 60
            If H >= 8 Then
                O = O + Int(H / 8)
                H = H Mod 8
            End If
        End If
        Expression = O & " οκτάωρα, " & H & " ώρες, " & m & " λεπτά"
    End If
End Function

2) Στο πεδίο που θα εμφανίζεται η έκφραση πρέπει να βάλλεις τον τύπο: =Expression([H])

kosta 08-07-15 14:45

Γιώργο για μια φορά ακόμη θέλω να σε ευχαριστήσω με έβγαλες από πολύ κόπο γιατί θα αναγκαζόμουν χιλιάδες εγγραφές να τις κάνω χειροκίνητα μία προς μία αυτό ακριβώς ζητούσα.
Να ΄σαι καλά.

kapetang 08-07-15 15:54

Κώστα δοκίμασε και την παρακάτω συνάρτηση, που είναι πιο σύντομη.

Κώδικας:

Public Function Expression(T As Variant) As Variant
    Dim O As Long, H As Long, m As Long, x As Long
    If Nz(T, "") <> "" Then
        x = CInt(T * 60)    'σύνολο λεπτών
        m = x Mod 60        'λεπτά
        H = Int(x / 60)
        O = Int(H / 8)      'Οκτάωρα
        H = H Mod 8        'ώρες
        Expression = O & " οκτάωρα, " & H & " ώρες, " & m & " λεπτά"
    End If
End Function


kosta 08-07-15 16:42

Οκ όλα καλά.


Η ώρα είναι 02:25.

Ms-Office.gr - ©2000 - 2025, Jelsoft Enterprises Ltd.


Content Relevant URLs by vBSEO 3.3.2