Наткнулся на баг на форме CustVendTransPostingLog_RU (Проводки по сопоставлению).
Видимо для того чтобы была возможность переходить к проводкам по сопоставлению с обоих сопоставленных проводок, авторы отказались
X++:
this.query().dataSourceTable(tablenum(CustVendTransPostingLog_RU)).clearDynalinks();
от стандартного поведения Dynalink и запрограммировали собственное
X++:
public void linkActive()
{
transRecIdRange.value(strfmt('(' +
new DictField(tablenum(CustVendTransPostingLog_RU),
fieldnum(CustVendTransPostingLog_RU, TransRecId)).name() +
' == %1' + ')' + ' || ' +
'(' +
new DictField(tablenum(CustVendTransPostingLog_RU),
fieldnum(CustVendTransPostingLog_RU, OffSetRecId)).name() +
' == %1' + ')',
custVendTrans.RecId));
super();
}
Но т.к. эта форма общая и для поставщиков и для клиентов, связь с проводками должна происходить не только по RecId, но и по
TableId. Предлагаю пофиксить эту багу следующим образом:
X++:
public void linkActive()
{
transRecIdRange.value(strfmt('(((' +
new DictField(tablenum(CustVendTransPostingLog_RU),
fieldnum(CustVendTransPostingLog_RU, TransRecId)).name() +
' == %1' + ')' + ' || ' +
'(' +
new DictField(tablenum(CustVendTransPostingLog_RU),
fieldnum(CustVendTransPostingLog_RU, OffSetRecId)).name() +
' == %1' + '))' + ' && ' +
'(' +
new DictField(tablenum(CustVendTransPostingLog_RU),
fieldnum(CustVendTransPostingLog_RU, RefTableId)).name() +
' == %2' + '))',
custVendTrans.RecId,
custVendTrans.TableId)); // <--
super();
}