1

Тема: Контроль сроков исполнения документа

Данный кусок кода показывает, как можно устанавливать сроки исполнения для различных типов документов с учетом, что сроки могут быть указаны в календарных или рабочих днях.

В каждом номенклатурном деле (в моём случае отдельня база номенклатура) есть текстовые поля:
стандартно:SrokIspol   срочно:SrokIspol_sr  Оперативно: SrokIspol_oper
Так же в определенном настроечном документе есть множественное текстовое поле calendar - в нем список праздников и выходных, формат день.месяц.год (пример 26.04.2014).

Сам лотус скрипт:

'  -  СРОКИ ИСПОЛНЕНИЯ!
    Dim dateTime As New NotesDateTime( "" )
    Call dateTime.SetNow
    Dim values(2) As Variant
   
    If Cstr(DelDoc.SrokIspol(0)) <>"" Then
        days= DelDoc.SrokIspol(0) ' тянем срок исполнения с номенклатуры
        daytext$ = " дней"
        values(0) = "Стандартный срок исполнения - " +days + daytext$
    End If   
   
    If Cstr(DelDoc.SrokIspol_sr(0)) <>"" Then
        days= DelDoc.SrokIspol_sr(0) ' тянем срок исполнения с номенклатуры
        daytext$ = " дней"
        If days="1" Then daytext$ = " день"
        If (days="2") Or (days="3") Or (days="4") Then daytext$ = " дня"
        values(1) = "Срочно - "     +days + daytext$    
    End If   
   
    If Cstr(DelDoc.SrokIspol_oper(0)) <>"" Then
        days= DelDoc.SrokIspol_oper(0) ' тянем срок исполнения с номенклатуры
        daytext$ = " дней"
        If days="1" Then daytext$ = " день"
        If (days="2") Or (days="3") Or (days="4") Then daytext$ = " дня"
        values(2) = "Оперативно - "      +days + daytext$        
    Else
    '    values(2) = ""
    End If
   
    If (values(0)<>"") Or (values(1)<>"") Or (values(2)<>"") Then
        newvalues=Fulltrim (values)
        response = uiworkspace.Prompt (PROMPT_OKCANCELLIST,"Укажите срок исполнения",     "Сроки!", newvalues(0), newvalues)
        If Isempty (response) Then Exit Sub
        If Instr(response,"Стандартный")<>0 Then days= DelDoc.SrokIspol(0)
        If Instr(response,"Срочно")<>0 Then days= DelDoc.SrokIspol_sr(0)
        If Instr(response,"Оперативно")<>0 Then days= DelDoc.SrokIspol_oper(0)
       
        If Instr(days,"рабочих")<>0 Then 
            CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = Cdat(dateTime.DateOnly)   
           
            days = Trim(Strleft(days, "рабочих"))
            Dim IndexDoc As NotesDocument    ' документ с текущими индексами ГСС
            Set IndexDoc=SetsDataBase.getDocumentByUnID("3E4DB46--------------0034ADAF")
            calendar= IndexDoc.calendar
            Dim rabday As Integer
            rabday=0
            While rabday=<Cint(days)
                Call dateTime.AdjustDay(1)               
                If Arraygetindex(calendar,dateTime.DateOnly) Then ' если в массиве праздников
                Else   
                    rabday = rabday+1                   
                End If
            Wend
            days = dateTime.DateOnly ' общая дата исполнения с учетом праздников
            CurDoc.СРОК_ИСПОЛНЕНИЯ_= days
            CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days
           
        Else ' нет слова "рабочих"
            CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = Cdat(dateTime.DateOnly)   
            Call dateTime.AdjustDay(days) ' добавили дни
            days = dateTime.DateOnly ' общая дата исполнения
            CurDoc.СРОК_ИСПОЛНЕНИЯ_= days
            CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days
           
        End If

Поделиться

2

Re: Контроль сроков исполнения документа

Вариант 2 доработанный, с 3 полями и дополнительным полем "pernos" - перенос с выходными:

'  -  СРОКИ ИСПОЛНЕНИЯ!
    Dim dateTime As New NotesDateTime( "" )
    Call dateTime.SetNow
    Dim values(2) As Variant
   
    If Cstr(DelDoc.SrokIspol(0)) <>"" Then
        days= DelDoc.SrokIspol(0) ' тянем срок исполнения с номенклатуры
        daytext$ = " дней"
       
        If Instr(days,"месяц")<>0 Then
            daytext$ = ""   
        End If
       
        values(0) = "Стандартный срок исполнения - " +days + daytext$
    End If   
   
    If Cstr(DelDoc.SrokIspol_sr(0)) <>"" Then
        days= DelDoc.SrokIspol_sr(0) ' тянем срок исполнения с номенклатуры
        daytext$ = " дней"
        If days="3" Or Instr(days,"3 ")<>0 Then daytext$ = " дня"
       
        If Instr(days,"месяц")<>0 Then
            daytext$ = ""   
        End If
       
        values(1) = "Срочно - "     +days + daytext$    
    End If   
   
    If Cstr(DelDoc.SrokIspol_oper(0)) <>"" Then
        days= DelDoc.SrokIspol_oper(0) ' тянем срок исполнения с номенклатуры
        daytext$ = " дней"
       
        If Instr(days,"месяц")<>0 Then
            daytext$ = ""   
        End If
       
        If days="1" Then daytext$ = " день"
        If (days="3") Or Instr(days,"3 ")<>0 Then daytext$ = " дня"
        values(2) = "Оперативно - "      +days + daytext$        
    End If
   
    If (values(0)<>"") Or (values(1)<>"") Or (values(2)<>"") Then
        newvalues=Fulltrim (values)
        response = uiworkspace.Prompt (PROMPT_OKCANCELLIST,"Укажите срок исполнения",     "Сроки!", newvalues(0), newvalues)
        If Isempty (response) Then Exit Sub
        If Instr(response,"Стандартный")<>0 Then days= DelDoc.SrokIspol(0)
        If Instr(response,"Срочно")<>0 Then days= DelDoc.SrokIspol_sr(0)
        If Instr(response,"Оперативно")<>0 Then days= DelDoc.SrokIspol_oper(0)
       
        Dim IndexDoc As NotesDocument    ' документ с текущими индексами ГСС
        Set IndexDoc=SetsDataBase.getDocumentByUnID("3E4DB461628E3F87C12579A50034ADAF")
        calendar= IndexDoc.calendar ' все выходные дни с номенклатуры
       
        If Instr(days,"рабочих")<>0 Then 
            CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = Cdat(dateTime.DateOnly)   
            days = Trim(Strleft(days, "рабочих"))
            Dim rabday As Integer
            rabday=1
            While rabday=<Cint(days)
                Call dateTime.AdjustDay(1)   
                If  Arraygetindex(calendar,dateTime.DateOnly) Then ' если dateTime нет в массиве праздников
                Else
                    rabday = rabday+1                   
                End If
            Wend
           
            days = dateTime.DateOnly ' общая дата исполнения с учетом праздников
            CurDoc.СРОК_ИСПОЛНЕНИЯ_= days
            CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days
           
        Else ' нет слова "рабочих"
            CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = Cdat(dateTime.DateOnly)   
           
            If Instr(days,"месяц")<>0 Then
                days = Trim(Strleft(days, "месяц"))
                Call dateTime.AdjustMonth(days) ' добавили месяц
            Else
                Call dateTime.AdjustDay(days) ' добавили дни   
            End If
           
            Call dateTime.AdjustDay(-1) ' сегодняшний день тоже считаем ((
           
            perenos = DelDoc.perenos(0)' если послед день нерабочий, для получений През.
            If perenos="после" Then
                While  Arraygetindex(calendar,dateTime.DateOnly) 
                    Call dateTime.AdjustDay(1)   
                Wend
            End If
           
            days = dateTime.DateOnly ' общая дата исполнения
            CurDoc.СРОК_ИСПОЛНЕНИЯ_= days
            CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days
           
        End If

Поделиться

3

Re: Контроль сроков исполнения документа

Окончательный вариант, при котором в поле SrokIsp (диалоглист) вносится массив  сроков исполнения.

Вот код:

    '  -  СРОКИ ИСПОЛНЕНИЯ!
    Dim dateTime As New NotesDateTime( "" )
    Call dateTime.SetNow
   
   
    If Cstr(DelDoc.SrokIsp(0)) <>"" Then
        values = DelDoc.SrokIsp' тянем срок исполнения с номенклатуры
    End If   
    values=Fulltrim (values)
    response = uiworkspace.Prompt (PROMPT_OKCANCELLIST,"Укажите срок исполнения",     "Сроки!", values(0), values)
    If Isempty (response) Then Exit Sub
   
    Dim IndexDoc As NotesDocument    ' документ с текущими индексами ГСС
    Set IndexDoc=SetsDataBase.getDocumentByUnID("3E4DB461628E3F87C12579A50034ADAF")
    calendar= IndexDoc.calendar ' все выходные дни с номенклатуры
   
    days=response
   
    If Instr(days,"рабочих")<>0 Then 
        CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = Cdat(dateTime.DateOnly)   
        days = Trim(Strleft(days, "рабочих"))
        Dim rabday As Integer
        rabday=2
        While rabday=<Cint(days)
            Call dateTime.AdjustDay(1)   
            If  Arraygetindex(calendar,dateTime.DateOnly) Then ' если dateTime нет в массиве праздников
            Else
                rabday = rabday+1                   
            End If
        Wend
       
        days = dateTime.DateOnly ' общая дата исполнения с учетом праздников
        CurDoc.СРОК_ИСПОЛНЕНИЯ_= days
        CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days
       
    Else ' нет слова "рабочих"
        CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = Cdat(dateTime.DateOnly)   
       
        If Instr(days,"месяц")<>0 Then
            days = Trim(Strleft(days, "месяц"))
            Call dateTime.AdjustMonth(days) ' добавили месяц
        Else
            days = Trim(Strleft(days, "календарных"))
            Call dateTime.AdjustDay(days) ' добавили календарные дни   
        End If
       
        Call dateTime.AdjustDay(-1) ' сегодняшний день тоже считаем ((
       
        perenos = DelDoc.perenos(0)' если послед день нерабочий, для получений През.
        If perenos="после" Then
            While  Arraygetindex(calendar,dateTime.DateOnly) 
                Call dateTime.AdjustDay(1)   
            Wend
        End If
       
        days = dateTime.DateOnly ' общая дата исполнения
        CurDoc.СРОК_ИСПОЛНЕНИЯ_= days
        CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days
       
    End If

Поделиться

4

Re: Контроль сроков исполнения документа

Делаем 4 вида лампочек для сроков исполнения во вьюшках:

@If(expir_date<=@Now;115;@Adjust(expir_date;0;0;-2;0;0;0)<=@Now;119;@Adjust(expir_date;0;0;-4;0;0;0)<=@Now;120;114)

Контроль и сроки исполнения электронных документов.

    У каждого электронного документа в системе ответственным сотрудником может быть предусмотрен срок исполнения, который виден в поле «Срок исполнения». Для документов, срок исполнения которых подходит или уже вышел, предусмотрена соответствующая индикация. Так у документов, срок исполнения которых выходит через 4 (четыре) дня в представлениях зажигается желтая лампочка, за 2 (два) дня - фиолетовая лампочка, у просроченных документов красная, а у документов, на рассмотрение которых имеется более (4) четырех дней – зеленая.

Post's attachments

Сроки исполнения документа.JPG, 36.25 kb, 583 x 168
Сроки исполнения документа.JPG 36.25 kb, 309 downloads since 2017-01-31 

Поделиться