Программный запрет создания новых версий документов. 

Алексей Долгих
Дата создания: 7 июля 2011 в 09:44

Защита от "дурака" спасает только от неизобретательного дурака.
(С) Постулаты Трумена по программированию.

Любая система, зависящая от человеческой надежности, ненадежна.
(С) Законы ненадежности Джилба.

 

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

Рассмотрим 2 метода исключения достаточно серьезного случая вероятного нарушения логики любого типового маршрута и, как следствие, построения листов согласования.

1. Запрет создания новой версии документа, вложенного в задачу (с разрешением в определенных заданиях).

Для запрета создания новой версии нам будет необходимы свойства 2го табличного раздела карточки документа (Информация о версиях хранится во 2ой табличной части карточки документа).

Добавляем в событие "Добавление После" Таблицы 2 карточки электронного документа:

  CanCreateVersion = TRUE  // изначально, при создании документа, новые версии создавать можно

  if not Object.Inserted  // необходимое условие для создания первой версии
    // Поиск задач "в работе"
    Search = Searches.Load('ATTACHED_TO_TASK_SEARCH')
    EDocInfo = EDocuments.ObjectInfo(Object.ID)
    Search.InitializeSearch(EDocInfo)
    Criteria = Search.SearchCriteria
    StateCriterion = Criteria.Add("TaskState")
    StateCriterion.Add("В работе") 
    StateCriterion.ValuesBuildType = btOnly 
    StandardRouteCriterion = Criteria.Add("StandardRoute")
    // код ТМ, по которому ищем вложенным наш документ    
    StandardRouteCriterion.Add(Конст("CMAgreementStandardRoute"))
    StandardRouteCriterion.ValuesBuildType = btOnly      
    TasksInWork = Searches.Execute(Search)
    // Анализ
    if TasksInWork.Count > 0
      CanCreateVersion = FALSE  // если есть задачи в работе - запретим создавать новые версии
      // пройдемся по всем найденным задачам
      foreach TaskInfo in TasksInWork
        Task = TaskInfo.Task   
        Jobss = Task.DetailDataSet(3)
        if Jobss.RecordCount > 0   
          Jobss.First()    
          While not Jobss.EOF
            // разрешим создание новых версий только на определенных этапах ТМ
            if ((SubString(Jobss.Subject; ' '; 1) == 'Доработка') 
             or (SubString(Jobss.Subject; ' '; 1) == 'Контроль')) 
              and (Jobss.JobState == "В работе")
                CanCreateVersion = TRUE
            endif
            Jobss.Next()
          endwhile       
        endif 
      endforeach
    endif
  endif  

  // Запретим создание новых версий документа  
  if not CanCreateVersion
    Raise(CreateException(''; 
         'Создавать новые версии можно только на этапах доработки документа по ТМ.'; ecWarning))
  endif

2. Запрет создания новой версии документа.

Запретим создавать новые версии документам по произвольным условиям без привязки к типовым маршрутам.

а) Набор реквизитов карточки электронного документа:

Добавить новый реквизит типа Признак со значениями "Да/Нет", допустим, "ДаНет5".

б) Событие "Добавление После" карточки электронного документа:

Object.ДаНет5 = 'Да'   // Разрешим создавать новые версии документа

в) Событие "Добавление После" Таблицы 2 карточки электронного документа:

if Object.ДаНет5 == 'Нет'
  Raise(CreateException(''; 'Создание новых версий запрещено.'; ecWarning))
endif

г) В необходимых вычислениях, например, при расчете какого-либо реквизита, присваеваем реквизиту "ДаНет5" значение "Нет", это не позволит пользователям создавать новые версии документов.

понравилась 5 пользователям

Находится в рубриках:
Комментарии (2)
Комментарии доступны только для зарегистрированных пользователей.




Теги
4.7 4.8 awards isbl is-builder sql server бизнес-решение введение в is-builder видео дайджест документ интеграция клик настройка отчет разработка сообщество справочник сценарий функция
показать все теги