Как создать отметку об оплате входящих счетов
<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как создать отметку об оплате входящих счетов |
![]() ![]() ![]() |
Ситуация
Необходимо создать отметку, подтверждающую оплату входящего счета.
Требования к положению отметки:
•отступ от левого края страницы – 12 см;
•отступ от верхнего края страницы – 20 см;
•номер страницы – последняя.
Отметка содержит надпись «Оплачено».
СОВЕТ. Чтобы использовать отметку об оплате в редакторе отметок, перекройте разделяемую функцию GetAvailableMarkKindsSids() типа документа «Официальный документ» (OfficialDocument).
Решение
1.Перекройте тип документа «Входящий счет» (IncomingInvoice).
2.Отметка формируется на основе данных, получаемых из HTML-кода. В ресурсах типа документа «Входящий счет» добавьте HTML-код отметки. Для этого в дереве решений в контекстном меню перекрытого типа документа выберите пункт Открыть ресурсы. Далее в контекстном меню табличной части выберите пункт Добавить строку. Укажите название нового ресурса, например HtmlMarkTemplatePaymentApprove, и добавьте код для изображения отметки:
ВАЖНО. Чтобы после преобразования документа в PDF отметка в нем отображалась корректно, необходимо использовать язык разметки HTML5 для задания ее внешнего вида.
Пример для ресурса с кодом отметки
|
3.В тип документа «Входящий счет» добавьте серверные функции:
UpdateInvoicePaymentMark() – сохраняет экземпляр отметки для ее добавления в оплаченный входящий счет или удаления, если состояние документа изменилось с Оплачено на другое;
GetPaymentMarkAsHtml() – получает изображение отметки в виде HTML-кода для оплаченного входящего счета.
/// <summary>
/// Сохранить экземпляр отметки для ее добавления во входящий счет
/// с состоянием "Оплачено".
/// Удалить отметку, если состояние входящего счета изменено
/// с "Оплачено" на другое.
/// </summary>
[Public]
public virtual void UpdateInvoicePaymentMark()
{
if (_obj.LifeCycleState == Sungero.Contracts.IncomingInvoice.LifeCycleState.Paid)
{
var mark = GetOrCreateMark(IncomingInvoiceConstants.PaymentMarkKindSid);
mark.XIndent = 12;
mark.YIndent = 20;
mark.Page = -1;
mark.Save();
}
else
{
var paymentMark = GetVersionMarks(_obj.LastVersion.Id, IncomingInvoiceConstants.PaymentMarkKindSid).SingleOrDefault();
Docflow.PublicFunctions.Module.DeleteMark(_obj, paymentMark);
}
}
/// <summary>
/// Получить изображение отметки в виде HTML-кода для входящего счета с состоянием "Оплачено".
/// </summary>
/// <returns>Изображение отметки в виде HTML-кода.</returns>
public virtual string GetPaymentMarkAsHtml(long versionId)
{
return Examples.IncomingInvoices.Resources.HtmlMarkTemplatePayment;
}
4.В тип документа «Входящий счет» добавьте одну из серверных функций:
•UpdateMarksBeforeConversion(), если преобразование документа в PDF с добавлением отметок будет выполняться вручную, например в редакторе отметок или в прикладном блоке «Преобразование в PDF»:
public override void UpdateMarksBeforeConversion(long versionId)
{
Functions.IncomingInvoice.Remote.UpdateInvoicePaymentMark(_obj);
}
•ConvertToPdfWithMarks(), если пользователь не сможет скорректировать расположение отметок при преобразовании документа в PDF с ними:
public override Sungero.Docflow.Structures.OfficialDocument.IConversionToPdfResult ConvertToPdfWithMarks(long versionId)
{
this.UpdateInvoicePaymentMark();
return base.ConvertToPdfWithMarks(versionId);
}
5.В перекрытый тип документа «Входящий счет» добавьте константы:
•PaymentMarkKindSid – уникальный идентификатор отметки;
•PaymentMarkKindClass – полное имя класса, из которого вызывается метод получения отметки;
•PaymentMarkKindMethod – имя метода получения отметки.
public static class IncomingInvoice
{
// SID отметки "Оплачено".
[Public]
public const string PaymentMarkKindSid = "A89D9F46-9065-422A-B6CA-DED9D29EEDC7";
// Полное имя класса, из которого вызывается метод получения отметки "Оплачено".
[Public]
public const string PaymentMarkKindClass = "Sungero.Examples.Functions.IncomingInvoice";
// Имя метода получения отметки "Оплачено".
[Public]
public const string PaymentMarkKindMethod = "GetPaymentMarkAsHtml";
}
6.Задайте название для нового вида отметки (MarkKind). Для этого добавьте строку в ресурсах типа документа «Входящий счет»:
7.Перекройте модуль «Документооборот» (Docflow). В нем переопределите функцию инициализации Initializing() и добавьте функцию CreateCustomMarkKinds(), чтобы новый вид отметки создался в системе автоматически:
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
base.Initializing(e);
CreateCustomMarkKinds();
}
public static void CreateCustomMarkKinds()
{
InitializationLogger.Debug("Init: Create custom mark kinds.");
CreateMarkKind(Sungero.Examples.IncomingInvoices.Resources.PaymentMarkName, Sungero.Examples.Constants.Contracts.IncomingInvoice.PaymentMarkKindSid, Sungero.Examples.Constants.Contracts.IncomingInvoice.PaymentMarkKindClass, Sungero.Examples.Constants.Contracts.IncomingInvoice.PaymentMarkKindMethod);
}
В результате при преобразовании оплаченных входящих счетов в формат PDF добавится соответствующая отметка:
© Компания Directum, 2025 |