Копировать ссылку на страницу

Постановка задачи

Справочник Поручения содержит информацию о поручениях, создаваемых в организации. В событиях справочника необходимо реализовать логику:

1.Управлять доступностью реквизитов и кнопок: при открытии карточки справочника реквизит Главное поручение (MainRRCAssignment) должен быть доступен, только если тип поручения Подчиненная резолюция, кнопка Запросить отчет (RequestState)– если поле Завершено (Дата3) еще не заполнено. Тип поручения хранится в реквизите Тип поручения (RRCAssignmentType).

Форма-карточка.Показ

 

// Отключить доступность реквизита Главное поручение (MainRRCAssignment),

//если Тип поручения (RRCAssignmentType) – не «Подчинённая резолюция»

    Control = Form.Controls.FindControlByRequisite(Object.Requisites('MainRRCAssignment'))

    if not VarIsNull(Control)

      Control.Enabled = Object.Requisites("RRCAssignmentType").AsString == 'SubordinateResolution'

    endif

  

    PerformerGridTable = Form.Controls.FindControl('PerformerGrid')

    if not VarIsNull(PerformerGridTable)

      AssignmentStatusT = PerformerGridTable.FindColumnByRequisiteName('AssignmentStatusT')

      if not VarIsNull(AssignmentStatusT)

        AssignmentStatusT.Enabled = FALSE

      endif

    endif

 

// Отключить видимость кнопки Запросить отчёт (RequestState),

//если реквизит Завершено (Дата 3) уже заполнен

    ReportAction = Actions.FindAction("RequestState")

    if not VarIsNull(ReportAction)      

      ReportAction.Visible = Object.Requisites("Дата3").AsString == ''

  endif

2.Очищать значения реквизитов при копировании записи: Завершено (Дата3), Исполнители (LongString), Дата последнего отчета (Дата4), Основание для снятия с контроля (Содержание2), На контроле (ControlType), Отправлено на исполнение (ДаНет2), а также весь детальный раздел Исполнители.

Запись.Добавление после

 

    // При копировании записи очистить значения некоторых реквизитов.

if Object.Copied

    UncopiedRequisiteArray = "Дата3|LongString|Дата4|Содержание2|ControlType|ДаНет2"

    // Пройтись по всем реквизитам и очистить те,

    // которые не надо копировать

foreach ReqName in CSubString(UncopiedRequisiteArray; '|')

      Req = Object.FindRequisite(ReqName)

      if not VarIsNull(Req)

        Req.Value = NULL

      endif

    endforeach

    // Очистить табличную часть

       ClearDataSet(Object.DetailDataSet(1))

  endif

3.Проверять реквизит Основание для снятия с контроля (Содержание2). Он должен быть заполнен у поручений, снятых с контроля.

Запись.Сохранение возможность

 

    // Снять поручение с контроля

  IsDiscard = Object.Requisites("ControlType").AsString == 'Discard'

  if IsDiscard

    // Требовать для поручений, снятых с контроля, заполнить реквизит

    //Основание для снятия с контроля

    if Object.Requisites("Содержание2").AsString == ''

      Raise(CreateException("EDIRInvalidRequisiteValue"; LoadString('DIR57718EA4_9FA7_4CDE_805B_B12FDF15783B'; 'COMMON'); ecWarning))

    endif

  endif

4.Автоматически формировать значение реквизита Наименование (Наименование) по формату: Поручение №<номер поручения> от <дата поручения>. <Содержание>. Номер поручения хранится в реквизите № поручения (Реквизит4), дата поручения – в реквизите Дата поручения (Дата), содержание – в реквизите *Содержание (Текст).

Запись.Сохранение до

 

    // Сформировать Наименование (Наименование) поручения

  // Получить номер поручения (Реквизит4), дату поручения (Дата) и содержание (Текст)

  Number = Object.Requisites('Реквизит4').AsString

  Date = Object.Requisites('Дата').AsString

  Text = Object.Requisites('Текст').AsString   

  // Если указан номер поручения  

  if Number <<>> ''

    // Поручение №%s от %s %s

    RecordName = LoadStringFmt('DIR1AEC53CB_62BB_4955_A1A7_DC40250D895A'; 'RM'; ArrayOf(Number; Date; Text))

  // Если номер поручения не указан        

  else

    // Поручение от %s %s

    RecordName = LoadStringFmt('DIR77BF4E98_3EAF_409F_80CF_D0D7C0EB0222'; 'RM'; ArrayOf(Date; Text))

  endif

  RecordID = Object.Requisites(SYSREQ_ID).AsString 

  ReqNameLength = Object.Requisites(SYSREQ_NAME).Length   

  SPEC_SYMBOLS_LENGTH = 3

  // Если сформированное название длиннее возможной длины значения реквизита,

  if Length(RecordName) >= (ReqNameLength - Length(RecordID) - SPEC_SYMBOLS_LENGTH)

    RecordName = FormatString(ReqNameLength - Length(RecordID) - SPEC_SYMBOLS_LENGTH; RecordName)

  endif

  // то сократить длину наименования до длины реквизита

  RecordName = Format('%s (%s)'; ArrayOf(RecordName; RecordID))

  Object.SYSREQ_NAME = RecordName

© 2016 Компания DIRECTUM Сообщество пользователей DIRECTUM