Преобразование данных SDT в BC в Genexus

Я заполнил SDT данными в Genexus 15, и мне нужно сохранить их в транзакции. SDT имеет двухуровневую структуру с информацией заголовка и подробными элементами.

Я пытался использовать этот DataProvider, но что-то не так, потому что я получаю ошибку нарушения внешнего ключа при попытке выполнить его:

Правила:

parm(in: &NewInvoice); // SDT variable

Источник:

DPInvoice 
{
    StampId = &NewInvoice.StampId
    InvoiceNumber = &NewInvoice.InvoiceNumber
    CustomerId = &NewInvoice.CustomerId
    Concept
    {
        ProductId = &NewInvoice.Concept.CurrentItem.ProductId
        ConceptQty = &NewInvoice.Concept.CurrentItem.ConceptQty
    }
}

Событие, запускающее DP в веб-панели:

&Invoice = DPInvoice(&NewInvoice)
&Invoice.Insert()
commit

Это структура транзакции

Это структура SDT

Помогите мне, пожалуйста!


person Diego Nuñez    schedule 03.12.2018    source источник


Ответы (1)


Вы должны перебрать второй уровень &NewInvoice.

Определите переменную &NewInvoiceItem типа SDTInvoiceCopy1.ConceptItem в DataProvider и используйте следующий исходный код:

DPInvoice 
{
    StampId = &NewInvoice.StampId
    InvoiceNumber = &NewInvoice.InvoiceNumber
    CustomerId = &NewInvoice.CustomerId
    Concept Input &NewInvoiceItem in &NewInvoice.Concept
    {
        ProductId = &NewInvoiceItem.ProductId
        ConceptQty = &NewInvoiceItem.ConceptQty
    }
}
person gusbro    schedule 04.12.2018