Показать сообщение отдельно
Старый 14.02.2007, 15:09   #1  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Вопрос к знатокам алгоритма периодического сопоставления
В классе CustVendAutoSettlement_Cust_RU в методе query
существует код инициализации query:
X++:
protected Query query()
{
    Query                   query = new Query();
    QueryBuildDatasource    qbds;
    QueryBuildRange         qr;

    // CustTransOpen -->
    qbds = query.addDataSource(tableNum(CustTransOpen));
    qbds.addRange(fieldNum(CustTransOpen, DueDate)).value(SysQuery::range(dateFrom, dateTo));
    qbds.addRange(fieldNum(CustTransOpen, AccountNum));

    qbds.addSortField(fieldNum(CustTransOpen, AccountNum));
    qbds.addSortField(fieldNum(CustTransOpen, DueDate));
    qbds.orderMode(OrderMode::ORDERBY);

    // CustTrans -->
    qbds = qbds.addDataSource(tableNum(CustTrans));
    qbds.relations(true);
    qbds.joinMode(JoinMode::INNERJOIN);

    qr = qbds.addRange(fieldNum(CustTrans, Invoice));
    qr.value(SysQuery::valueNotEmptyString());
    qr.status(RangeStatus::LOCKED);

    qr = qbds.addRange(fieldNum(CustTrans, RContractCode));
    qr.status(autoSettleType == AutoSettleType_RU::Contract ? RangeStatus::OPEN : RangeStatus::LOCKED);

    qr = qbds.addRange(fieldNum(CustTrans, RContractAccount));
    qr.status(autoSettleType == AutoSettleType_RU::Contract ? RangeStatus::OPEN : RangeStatus::LOCKED);

    qr = qbds.addRange(fieldNum(CustTrans, AccountNum));
    qr.status(RangeStatus::HIDDEN);

    return query;
}
у меня возник вопрос к условию :

X++:
  qr = qbds.addRange(fieldNum(CustTrans, Invoice));
    qr.value(SysQuery::valueNotEmptyString());
    qr.status(RangeStatus::LOCKED);
Ведь если не указывать номера накладных, к примеру в общих журналах ГК,
по поступлениям и выбытиям ДС по конкретному клиенту, то периодическое сопоставление никогда не сопоставит такие проводки.
Мне интересно, какой потаенный смысл был заложен в это условие.