Как добавить сводку по новому типу документа
<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как добавить сводку по новому типу документа |
Ситуация
Предположим, нужно создать новый тип документа «Акт на списание основных средств» (WrittenOffAct). При согласовании документа по регламенту в заданиях на согласование и подписание, в области «Реквизиты документа» на контроле состояния должна отображаться краткая сводка по документу с реквизитами: краткое имя, содержание, инвентарный номер, материально ответственное лицо (МОЛ), центр затрат, остаточная стоимость и причины списания.
Сводка необходима, чтобы согласующий или подписант мог ознакомиться с документом, не открывая карточку и содержимое. Зачастую данных из сводки достаточно, чтобы принять решение по документу.
Решение
1.На основании базового типа «Внутренний документ» (InternalDocumentBase) создайте тип документа «Акт на списание основных средств» (WrittenOffAct).
2.В редакторе созданного типа заполните именование и параметры, как показано на рисунке:
3.Перейдите в узел «Свойства» и для свойства PreparedBy измените отображаемое имя с Подготовил на МОЛ (материально ответственное лицо).
Имя и отображаемое имя свойства |
Тип свойства |
Пояснение |
InventoryNumber (Инв. №) |
Строка |
Инвентарный номер списываемого основного средства. Например, 10/19-1569835426 |
ResidualValue (Ост. стоимость, руб) |
Вещественное |
Остаточная стоимость списываемого основного средства в рублях |
CostCentre (Центр затрат) |
Строка |
Единица деятельности организации, которую выделяют в бухгалтерском учете для контроля за затратами |
5.Настройте форму документа, как показано на скриншоте. Для этого:
•скройте неиспользуемые группы и удалите лишние контролы;
•добавьте созданные свойства в группы «Main» и «Additional»;
•переименуйте группу «Примечание» на «Причины списания».
6.Чтобы построить сводку по основным реквизитам акта, в серверном коде созданного типа документа переопределите функцию GetDocumentSummary():
/// <summary>
/// Построить сводку по документу.
/// </summary>
/// <returns>Сводка по документу.</returns>
public override StateView GetDocumentSummary()
{
var documentSummary = StateView.Create();
var block = documentSummary.AddBlock();
const string none = "-";
// Краткое имя документа.
var documentName = _obj.DocumentKind.ShortName;
if (!string.IsNullOrWhiteSpace(_obj.RegistrationNumber))
documentName += Sungero.Docflow.OfficialDocuments.Resources.Number + _obj.RegistrationNumber;
if (_obj.RegistrationDate != null)
documentName += Sungero.Docflow.OfficialDocuments.Resources.DateFrom + _obj.RegistrationDate.Value.ToString("d");
block.AddLabel(documentName);
block.AddLineBreak();
block.AddEmptyLine();
// Содержание.
var subject = !string.IsNullOrEmpty(_obj.Subject) ? _obj.Subject : none;
block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.Subject.LocalizedName, subject));
block.AddLineBreak();
// Инв. №.
block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.InventoryNumber.LocalizedName, _obj.InventoryNumber));
block.AddLineBreak();
// МОЛ – материально ответственное лицо.
var responsible = _obj.PreparedBy != null ? _obj.PreparedBy.Name : none;
block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.PreparedBy.LocalizedName, responsible));
block.AddLineBreak();
// Ост. стоимость.
var residualValue = _obj.ResidualValue != null ? _obj.ResidualValue.Value.ToString("N") : none;
block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.ResidualValue.LocalizedName, residualValue));
block.AddLineBreak();
// Центр затрат.
var costCentre = !string.IsNullOrEmpty(_obj.CostCentre) ? _obj.CostCentre : none;
block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.CostCentre.LocalizedName, costCentre));
block.AddLineBreak();
// Причины списания.
var note = !string.IsNullOrEmpty(_obj.Note) ? _obj.Note : none;
block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.Note.LocalizedName, note));
return documentSummary;
}
Область «Реквизиты документа» – это группа в карточках заданий. В ней находится контрол состояния с именем DocummentSummary:
Сводка по документу отображается в контроле состояния и формируется с помощью функции GetDocumentSummary().
7.В редакторе модуля, в котором создали тип документа, добавьте функции инициализации:
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
GrantRights();
CreateDocumentTypes();
}
/// <summary>
/// Выдача прав на тип документа "Акт на списание ОС".
/// </summary>
public static void GrantRights()
{
InitializationLogger.Debug("Init: Module DocSummary. Grant rights to all users.");
var allUsers = Sungero.CoreEntities.Roles.AllUsers;
DEV.DocSummary.WrittenOffActs.AccessRights.Grant(allUsers, DefaultAccessRightsTypes.Create);
DEV.DocSummary.WrittenOffActs.AccessRights.Save();
}
/// <summary>
/// Создание типа документа "Акт на списание ОС"
/// в служебном справочнике "Типы документов".
/// </summary>
public static void CreateDocumentTypes()
{
InitializationLogger.Debug("Init: Module DocSummary. Create document types.");
Sungero.Docflow.PublicInitializationFunctions.Module.
CreateDocumentType("Акт на списание ОС",
WrittenOffAct.ClassTypeGuid,
Sungero.Docflow.DocumentType.DocumentFlow.Inner, true);
}
8.Опубликуйте разработку.
В результате в заданиях на подписание и согласование акта на списание основных средств в области «Реквизиты по документу» появится сводка.
© Компания Directum, 2024 |