Показать сообщение отдельно
Старый 29.04.2009, 17:14   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Баг на форме "Проводки по сопоставлению"
Наткнулся на баг на форме 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();
}