Постановка задачи
Справочник Поручения содержит информацию о поручениях, создаваемых в организации. В событиях справочника необходимо реализовать логику:
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
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |