Skip to content

Commit d311efd

Browse files
Groenbech96magnushar
and
magnushar
authored
Syncing with version 26.0.27457.0 (#27732)
Related to [AB#420000](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/420000) Co-authored-by: magnushar <[email protected]>
1 parent 8cb747a commit d311efd

File tree

52 files changed

+426
-164
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+426
-164
lines changed

.github/AL-Go-Settings.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"runs-on": "windows-latest",
66
"cacheImageName": "",
77
"UsePsSession": false,
8-
"artifact": "https://bcinsider-fvh2ekdjecfjd6gk.b02.azurefd.net/sandbox/26.0.27417.0/base",
8+
"artifact": "https://bcinsider-fvh2ekdjecfjd6gk.b02.azurefd.net/sandbox/26.0.27457.0/base",
99
"country": "base",
1010
"useProjectDependencies": true,
1111
"repoVersion": "26.0",

Apps/W1/BankAccRecWithAI/app/src/BankAccRecTransToAcc.Codeunit.al

+7-19
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,14 @@ codeunit 7251 "Bank Acc. Rec. Trans. to Acc."
9595

9696
[NonDebuggable]
9797
local procedure GetCompletionResponse(var AOAIChatMessages: Codeunit "AOAI Chat Messages"; var BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; var TempBankStatementMatchingBuffer: Record "Bank Statement Matching Buffer" temporary; var GLAccount: Record "G/L Account"; var AzureOpenAI: Codeunit "Azure OpenAi"; var AOAIChatCompletionParams: Codeunit "AOAI Chat Completion Params"; var AOAIOperationResponse: Codeunit "AOAI Operation Response")
98+
var
99+
SysMsg: Text;
100+
UserMsg: Text;
98101
begin
99-
AOAIChatMessages.AddSystemMessage(BuildMostAppropriateGLAccountPromptTask().Unwrap());
100-
AOAIChatMessages.AddUserMessage(BuildBankRecPromptUserMessage(BuildBankRecStatementLines(BankAccReconciliationLine, TempBankStatementMatchingBuffer), BuildGLAccounts(GLAccount)).Unwrap());
102+
SysMsg := BuildMostAppropriateGLAccountPromptTask().Unwrap();
103+
UserMsg := BuildBankRecPromptUserMessage(BuildBankRecStatementLines(BankAccReconciliationLine, TempBankStatementMatchingBuffer), BuildGLAccounts(GLAccount)).Unwrap();
104+
AOAIChatMessages.AddSystemMessage(SysMsg);
105+
AOAIChatMessages.AddUserMessage(UserMsg);
101106
AzureOpenAI.GenerateChatCompletion(AOAIChatMessages, AOAIChatCompletionParams, AOAIOperationResponse);
102107
end;
103108

@@ -247,36 +252,19 @@ codeunit 7251 "Bank Acc. Rec. Trans. to Acc."
247252

248253
procedure BuildBankRecStatementLines(var BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; var TempBankStatementMatchingBuffer: Record "Bank Statement Matching Buffer" temporary): Text
249254
var
250-
GLAccount: Record "G/L Account";
251255
BankRecAIMatchingImpl: Codeunit "Bank Rec. AI Matching Impl.";
252256
LocalStatementLines: Text;
253-
InitialGLAccountFound: Boolean;
254-
InitialGLAccountInsertDone: Boolean;
255257
begin
256258
if (LocalStatementLines = '') then
257259
LocalStatementLines := '**Statement Lines**:\n"""\n';
258260

259-
GLAccount.SetRange("Direct Posting", true);
260-
if GLAccount.FindFirst() then
261-
if not BankRecAIMatchingImpl.HasReservedWords(GLAccount.Name) then
262-
InitialGLAccountFound := true;
263-
264261
BankAccReconciliationLine.Ascending(true);
265262
if BankAccReconciliationLine.FindSet() then
266263
repeat
267264
if not BankRecAIMatchingImpl.HasReservedWords(BankAccReconciliationLine.Description) then begin
268265
TempBankStatementMatchingBuffer.Reset();
269266
TempBankStatementMatchingBuffer.SetRange("Line No.", BankAccReconciliationLine."Statement Line No.");
270267
if TempBankStatementMatchingBuffer.IsEmpty() then begin
271-
if InitialGLAccountFound then
272-
if not InitialGLAccountInsertDone then begin
273-
if BankAccReconciliationLine."Statement Line No." > 1 then begin
274-
LocalStatementLines += '#Id: ' + Format(BankAccReconciliationLine."Statement Line No." - 1);
275-
LocalStatementLines += ', Description: ' + GLAccount.Name;
276-
LocalStatementLines += '\n';
277-
end;
278-
InitialGLAccountInsertDone := true;
279-
end;
280268
LocalStatementLines += '#Id: ' + Format(BankAccReconciliationLine."Statement Line No.");
281269
LocalStatementLines += ', Description: ' + BankAccReconciliationLine.Description;
282270
LocalStatementLines += '\n';

Apps/W1/EDocument/app/src/Document/EDocument.Table.al

+6
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ table 6121 "E-Document"
153153
{
154154
Caption = 'Receiving Company Address';
155155
}
156+
field(31; "Receiving Company Id"; Text[250])
157+
{
158+
Caption = 'Receiving Company Id';
159+
ToolTip = 'Specifies the receiving company id, such as PEPPOL id, or other identifiers used in the electronic document exchange.';
160+
}
156161
field(26; "Currency Code"; Code[10])
157162
{
158163
Caption = 'Currency Code';
@@ -177,6 +182,7 @@ table 6121 "E-Document"
177182
{
178183
DataClassification = SystemMetadata;
179184
}
185+
180186
}
181187
keys
182188
{

Apps/W1/EDocument/app/src/Format/EDocImportPEPPOLBIS30.Codeunit.al

+39-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace Microsoft.eServices.EDocument.IO.Peppol;
22

33
using Microsoft.eServices.EDocument;
4+
using Microsoft.EServices.EDocument.Service.Participant;
45
using System.Utilities;
56
using Microsoft.Purchases.Document;
67
using System.IO;
@@ -110,16 +111,37 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
110111
local procedure ParseAccountingSupplierParty(var EDocument: Record "E-Document"; var TempXMLBuffer: Record "XML Buffer" temporary; DocumentType: Text)
111112
var
112113
Vendor: Record Vendor;
114+
ServiceParticipant: Record "Service Participant";
115+
EDocumentService: Record "E-Document Service";
116+
EDocumentHelper: Codeunit "E-Document Helper";
113117
VendorName, VendorAddress : Text;
114118
VATRegistrationNo: Text[20];
119+
VendorId: Text;
115120
VendorNo: Code[20];
116121
begin
117122
// Vendor
118123
VATRegistrationNo := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cbc:EndpointID'), 1, MaxStrLen(VATRegistrationNo));
119124
VendorNo := EDocumentImportHelper.FindVendor('', '', VATRegistrationNo);
125+
126+
if VendorNo = '' then begin
127+
VendorId := GetNodeAttributeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cbc:EndpointID/@schemeID') + ':';
128+
VendorId += this.GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cbc:EndpointID');
129+
130+
EDocumentHelper.GetEdocumentService(EDocument, EDocumentService);
131+
ServiceParticipant.SetRange("Participant Type", ServiceParticipant."Participant Type"::Vendor);
132+
ServiceParticipant.SetRange("Participant Identifier", VendorId);
133+
ServiceParticipant.SetRange(Service, EDocumentService.Code);
134+
if not ServiceParticipant.FindFirst() then begin
135+
ServiceParticipant.SetRange(Service);
136+
if ServiceParticipant.FindFirst() then;
137+
end;
138+
139+
VendorNo := ServiceParticipant.Participant;
140+
end;
141+
120142
if VendorNo = '' then begin
121-
VendorName := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Name'), 1, MaxStrLen(VATRegistrationNo));
122-
VendorAddress := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:StreetName'), 1, MaxStrLen(VATRegistrationNo));
143+
VendorName := GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Name');
144+
VendorAddress := GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cbc:StreetName');
123145
VendorNo := EDocumentImportHelper.FindVendorByNameAndAddress(VendorName, VendorAddress);
124146
EDocument."Bill-to/Pay-to Name" := CopyStr(VendorName, 1, MaxStrLen(EDocument."Bill-to/Pay-to Name"));
125147
end;
@@ -132,11 +154,16 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
132154
end;
133155

134156
local procedure ParseAccountingCustomerParty(var EDocument: Record "E-Document"; var TempXMLBuffer: Record "XML Buffer" temporary; DocumentType: Text)
157+
var
158+
ReceivingId: Text[250];
135159
begin
136160
EDocument."Receiving Company Name" := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Name'), 1, MaxStrLen(EDocument."Receiving Company Name"));
137161
EDocument."Receiving Company Address" := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cbc:StreetName'), 1, MaxStrLen(EDocument."Receiving Company Address"));
138162
EDocument."Receiving Company GLN" := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party/cbc:EndpointID'), 1, MaxStrLen(EDocument."Receiving Company GLN"));
139163
EDocument."Receiving Company VAT Reg. No." := CopyStr(GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID'), 1, MaxStrLen(EDocument."Receiving Company VAT Reg. No."));
164+
ReceivingId := CopyStr(this.GetNodeAttributeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party/cbc:EndpointID/@schemeID'), 1, (MaxStrLen(EDocument."Receiving Company Id") - 1)) + ':';
165+
ReceivingId += CopyStr(this.GetNodeByPath(TempXMLBuffer, '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party/cbc:EndpointID'), 1, MaxStrLen(EDocument."Receiving Company Id") - StrLen(ReceivingId));
166+
EDocument."Receiving Company Id" := ReceivingId;
140167
end;
141168

142169
local procedure CreateInvoice(var EDocument: Record "E-Document"; var PurchaseHeader: Record "Purchase Header" temporary; var PurchaseLine: record "Purchase Line" temporary; var TempXMLBuffer: Record "XML Buffer" temporary)
@@ -514,6 +541,16 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
514541
exit(TempXMLBuffer.Value);
515542
end;
516543

544+
local procedure GetNodeAttributeByPath(var TempXMLBuffer: Record "XML Buffer" temporary; XPath: Text): Text
545+
begin
546+
TempXMLBuffer.Reset();
547+
TempXMLBuffer.SetRange(Type, TempXMLBuffer.Type::Attribute);
548+
TempXMLBuffer.SetRange(Path, XPath);
549+
550+
if TempXMLBuffer.FindFirst() then
551+
exit(TempXMLBuffer.Value);
552+
end;
553+
517554
local procedure GetDocumentType(var TempXMLBuffer: Record "XML Buffer" temporary): Text
518555
var
519556
begin

Apps/W1/EDocument/app/src/Integration/Actions/EDocumentActionRunner.Codeunit.al

-9
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,6 @@ codeunit 6178 "E-Document Action Runner"
3434
this.EDocumentService.Copy(EDocumentService);
3535
end;
3636

37-
/// <summary>
38-
/// Gets the E-Document and the E-Document Service for the E-Document Action
39-
/// </summary>
40-
procedure GetEDocumentAndService(var EDocument: Record "E-Document"; var EDocumentService: Record "E-Document Service")
41-
begin
42-
EDocument.Copy(this.EDocument);
43-
EDocumentService.Copy(this.EDocumentService);
44-
end;
45-
4637
/// <summary>
4738
/// Returns if running action lead to update in service status.
4839
/// Certain actions dont need to update service status, like asking if document was approved.

Apps/W1/EDocument/app/src/Integration/EDocIntegrationManagement.Codeunit.al

+42-15
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,10 @@ codeunit 6134 "E-Doc. Integration Management"
305305
EDocServiceStatus := Enum::"E-Document Service Status"::Rejected
306306
end;
307307

308+
// After interface call, reread the EDocument and EDocumentService for the latest values.
309+
EDocument.Get(EDocument."Entry No");
310+
EDocumentService.Get(EDocumentService.Code);
311+
308312
if not IsHandled then begin
309313
AddLogAndUpdateEDocument(EDocument, EDocumentService, EDocServiceStatus);
310314
EDocumentLog.InsertIntegrationLog(EDocument, EDocumentService, HttpRequest, HttpResponse);
@@ -346,6 +350,10 @@ codeunit 6134 "E-Doc. Integration Management"
346350
EDocServiceStatus := Enum::"E-Document Service Status"::"Cancel Error";
347351
end;
348352

353+
// After interface call, reread the EDocument and EDocumentService for the latest values.
354+
EDocument.Get(EDocument."Entry No");
355+
EDocumentService.Get(EDocumentService.Code);
356+
349357
if not IsHandled then begin
350358
AddLogAndUpdateEDocument(EDocument, EDocumentService, EDocServiceStatus);
351359
EDocumentLog.InsertIntegrationLog(EDocument, EDocumentService, HttpRequest, HttpResponse);
@@ -355,51 +363,62 @@ codeunit 6134 "E-Doc. Integration Management"
355363

356364
#endregion
357365

358-
local procedure RunSend(EDocService: Record "E-Document Service"; var EDocument: Record "E-Document"; SendContext: Codeunit SendContext; var IsAsync: Boolean)
366+
local procedure RunSend(EDocumentService: Record "E-Document Service"; var EDocument: Record "E-Document"; SendContext: Codeunit SendContext; var IsAsync: Boolean)
359367
var
360368
SendRunner: Codeunit "Send Runner";
361369
TelemetryDimensions: Dictionary of [Text, Text];
362370
begin
363371
// Commit needed for "if codeunit run" pattern when catching errors.
364372
Commit();
365-
EDocumentProcessing.GetTelemetryDimensions(EDocService, EDocument, TelemetryDimensions);
373+
EDocumentProcessing.GetTelemetryDimensions(EDocumentService, EDocument, TelemetryDimensions);
366374
Telemetry.LogMessage('0000LBL', EDocTelemetrySendScopeStartLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All, TelemetryDimensions);
367-
OnBeforeSendDocument(EDocument, EDocService, SendContext.Http().GetHttpRequestMessage(), SendContext.Http().GetHttpResponseMessage());
375+
OnBeforeSendDocument(EDocument, EDocumentService, SendContext.Http().GetHttpRequestMessage(), SendContext.Http().GetHttpResponseMessage());
368376

369-
SendRunner.SetDocumentAndService(EDocument, EDocService);
377+
SendRunner.SetDocumentAndService(EDocument, EDocumentService);
370378
SendRunner.SetContext(SendContext);
371379
if not SendRunner.Run() then
372380
EDocumentErrorHelper.LogSimpleErrorMessage(EDocument, GetLastErrorText());
373381

374-
SendRunner.GetDocumentAndService(EDocument, EDocService);
382+
// After interface call, reread the EDocument and EDocumentService for the latest values.
383+
EDocument.Get(EDocument."Entry No");
384+
EDocumentService.Get(EDocumentService.Code);
375385
IsAsync := SendRunner.GetIsAsync();
376386

377-
OnAfterSendDocument(EDocument, EDocService, SendContext.Http().GetHttpRequestMessage(), SendContext.Http().GetHttpResponseMessage());
387+
OnAfterSendDocument(EDocument, EDocumentService, SendContext.Http().GetHttpRequestMessage(), SendContext.Http().GetHttpResponseMessage());
378388
Telemetry.LogMessage('0000LBM', EDocTelemetrySendScopeEndLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All);
379389
end;
380390

381-
local procedure RunSendBatch(EDocService: Record "E-Document Service"; var EDocuments: Record "E-Document"; SendContext: Codeunit SendContext; var IsAsync: Boolean)
391+
local procedure RunSendBatch(EDocumentService: Record "E-Document Service"; var EDocuments: Record "E-Document"; SendContext: Codeunit SendContext; var IsAsync: Boolean)
382392
var
383393
SendRunner: Codeunit "Send Runner";
384394
ErrorText: Text;
385395
TelemetryDimensions: Dictionary of [Text, Text];
396+
Sucecss: Boolean;
386397
begin
387398
// Commit needed for "if codeunit run" pattern when catching errors.
388399
Commit();
389-
EDocumentProcessing.GetTelemetryDimensions(EDocService, EDocuments, TelemetryDimensions);
400+
EDocumentProcessing.GetTelemetryDimensions(EDocumentService, EDocuments, TelemetryDimensions);
390401
Telemetry.LogMessage('0000LBN', EDocTelemetrySendBatchScopeStartLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All, TelemetryDimensions);
391402

392-
SendRunner.SetDocumentAndService(EDocuments, EDocService);
403+
SendRunner.SetDocumentAndService(EDocuments, EDocumentService);
393404
SendRunner.SetContext(SendContext);
394-
if not SendRunner.Run() then begin
405+
Sucecss := SendRunner.Run();
406+
407+
// Check filter exists
408+
if EDocuments.GetFilter("Entry No") = '' then
409+
Error(EDocNoFilterOnBatchSendErr);
410+
411+
if not Sucecss then begin
395412
ErrorText := GetLastErrorText();
396413
EDocuments.FindSet();
397414
repeat
398415
EDocumentErrorHelper.LogSimpleErrorMessage(EDocuments, ErrorText);
399416
until EDocuments.Next() = 0;
400417
end;
401418

402-
SendRunner.GetDocumentAndService(EDocuments, EDocService);
419+
// After interface call, reread the EDocument and EDocumentService for the latest values.
420+
EDocuments.FindSet();
421+
EDocumentService.Get(EDocumentService.Code);
403422
IsAsync := SendRunner.GetIsAsync();
404423

405424
Telemetry.LogMessage('0000LBO', EDocTelemetrySendBatchScopeEndLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All);
@@ -421,7 +440,8 @@ codeunit 6134 "E-Doc. Integration Management"
421440
if not ReceiveDocs.Run() then
422441
exit;
423442

424-
ReceiveDocs.GetService(EDocumentService);
443+
// After interface call, reread the EDocumentService for the latest values.
444+
EDocumentService.Get(EDocumentService.Code);
425445
Telemetry.LogMessage('0000O0B', EDocTelemetryReceiveDocsScopeEndLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All);
426446
end;
427447

@@ -440,7 +460,9 @@ codeunit 6134 "E-Doc. Integration Management"
440460
if not DownloadDoc.Run() then
441461
EDocumentErrorHelper.LogSimpleErrorMessage(EDocument, GetLastErrorText());
442462

443-
DownloadDoc.GetDocumentAndService(EDocument, EDocumentService);
463+
// After interface call, reread the EDocument and EDocumentService for the latest values.
464+
EDocument.Get(EDocument."Entry No");
465+
EDocumentService.Get(EDocumentService.Code);
444466
Telemetry.LogMessage('0000O0D', EDocTelemetryReciveDownloadDocScopeEndLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All);
445467
end;
446468

@@ -459,7 +481,9 @@ codeunit 6134 "E-Doc. Integration Management"
459481
if not MarkFetched.Run() then
460482
EDocumentErrorHelper.LogSimpleErrorMessage(EDocument, GetLastErrorText());
461483

462-
MarkFetched.GetParameters(EDocument, EDocumentService);
484+
// After interface call, reread the EDocument and EDocumentService for the latest values.
485+
EDocument.Get(EDocument."Entry No");
486+
EDocumentService.Get(EDocumentService.Code);
463487
Telemetry.LogMessage('0000O2Y', EDocTelemetryMarkFetchedScopeEndLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All);
464488
end;
465489

@@ -480,7 +504,9 @@ codeunit 6134 "E-Doc. Integration Management"
480504
if not Success then
481505
EDocumentErrorHelper.LogSimpleErrorMessage(EDocument, GetLastErrorText());
482506

483-
EDocumentActionRunner.GetEDocumentAndService(EDocument, EDocumentService);
507+
// After interface call, reread the EDocument and EDocumentService for the latest values.
508+
EDocument.Get(EDocument."Entry No");
509+
EDocumentService.Get(EDocumentService.Code);
484510
Telemetry.LogMessage('0000O09', EDocTelemetryActionScopeEndLbl, Verbosity::Normal, DataClassification::OrganizationIdentifiableInformation, TelemetryScope::All);
485511
exit(EDocumentActionRunner.ShouldActionUpdateStatus())
486512
end;
@@ -560,6 +586,7 @@ codeunit 6134 "E-Doc. Integration Management"
560586
EDocTelemetryReciveDownloadDocScopeEndLbl: Label 'E-Document Receive Download Doc: End Scope', Locked = true;
561587
EDocTelemetryMarkFetchedScopeStartLbl: Label 'E-Document Mark Fetched: Start Scope', Locked = true;
562588
EDocTelemetryMarkFetchedScopeEndLbl: Label 'E-Document Mark Fetched: End Scope', Locked = true;
589+
EDocNoFilterOnBatchSendErr: Label 'No Entry No. filter is set on the E-Document for batch to sending';
563590
#if not CLEAN26
564591
DocNotCreatedQst: Label 'Failed to create new Purchase %1 from E-Document. Do you want to open E-Document to see reported errors?', Comment = '%1 - Purchase Document Type';
565592
#endif

Apps/W1/EDocument/app/src/Integration/Receive/DownloadDocument.Codeunit.al

-6
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,6 @@ codeunit 6180 "Download Document"
4040
this.DocumentMetadata := DocumentMetadata;
4141
end;
4242

43-
procedure GetDocumentAndService(var EDocument: Record "E-Document"; var EDocumentService: Record "E-Document Service")
44-
begin
45-
EDocument.Copy(this.EDocument);
46-
EDocumentService.Copy(this.EDocumentService);
47-
end;
48-
4943
var
5044
EDocument: Record "E-Document";
5145
EDocumentService: Record "E-Document Service";

0 commit comments

Comments
 (0)