|
|
|
| Может кто подскажет что-нибудь симпотичнее?
Public PeriodNach_S As Date
Public PeriodNach_Po As Date
Public Function PERID_DATE(Dt1_begin As Date, Dt1_end As Date, Dt2_begin As Date, Dt2_end As Date)
If Dt2_end < Dt1_begin Then Exit Function
If Dt1_end < Dt2_begin Then Exit Function
If Dt2_begin <= Dt1_begin And Dt1_end <= Dt2_end Then 'отчетный месяц полностью попадает в период обязательств
PeriodNach_S = Dt1_begin
PeriodNach_Po = Dt1_end
ElseIf Dt2_begin <= Dt1_begin And Dt2_end <= Dt1_end Then 'с первого числа отчетного месяца до даты окончания обязательств
PeriodNach_S = Dt1_begin
PeriodNach_Po = Dt2_end
ElseIf Dt1_begin <= Dt2_begin And Dt1_end <= Dt2_end Then 'с даты начала обязательств до окончания отчетного месяца
PeriodNach_S = Dt2_begin
PeriodNach_Po = Dt1_end
ElseIf Dt1_begin <= Dt2_begin And Dt2_end <= Dt1_end Then 'даты начала и окончания обязательств попадают в отчетный период
PeriodNach_S = Dt2_begin
PeriodNach_Po = Dt2_end
End If
End Function | |
|
| |
|
|
|
| Lukas подскажет | |
|
| |
|
|
|
| Ну если только чуть иначе написать:
Public Type tPeriod
Begin As Date
End As Date
End Type
'A начало первого периода
'B конец первого периода
'C начало второго периода
'D конец второго периода
Public Function GetPeriod(A As Date, B As Date, C As Date, D As Date) As tPeriod
If D < A Or C > B Then
Exit Function
Else
With GetPeriod
.Begin = Major(A, C)
.End = Minor(B, D)
End With
End If
End Function
Public Function Minor(B As Date, D As Date) As Date 'Min
If D < B Then
Minor = D
Else
Minor = B
End If
End Function
Public Function Major(A As Date, C As Date) As Date 'Max
If C > A Then
Major = C
Else
Major = A
End If
End Function
|
| |
|
| |
|
|
|
| Большое спасибо, Lukas. Очень наглядно и компактно | |
|
| |