Показать сообщение отдельно
Старый 14.12.2006, 18:26   #9  
Vby is offline
Vby
Участник
 
25 / 10 (1) +
Регистрация: 28.11.2005
Подскажите как организовать такой функционал:
В строках заказа вводится в поле номенклатура штрих-код, по штрих-коду ищется номенклатура и подставляется в строку со всеми аналитиками.
Как добится того что бы подставлялась аналитика?
Как передать в salesline inventDimId?
Вот что получилось, но работает не совсем так, как хотелась бы.
X++:
boolean  validateField(fieldId  fieldId)
{
    boolean         ok = true;
    SalesLineType   salesLineType;
    RAssetTable     assetTable;    //valu FA (Viar)
    SalesLine       salesLineTmp;  //valu FA (Viar)

    InventItemBarcode inventItemBarcode;
    InventDim           inventDim;
    InventTable         inventTable;
    SalesLine           salesLine;
    ;



    if(fieldId == fieldnum(SalesLine, ItemId))
    {
        select firstonly InventItemBarcode
        where InventItemBarcode.itemBarCode ==  this.ItemId;

        if(inventItemBarcode)
        {
            this.ItemId = inventItemBarcode.itemId;
            if(inventItemBarcode.inventDimId)
            {
                ttsbegin;
                inventDim.clear();
                inventTable.clear();
                //inventItemBarcode.clear();

                inventTable = InventTable::find(this.ItemId);
                //inventItemBarcode = InventItemBarcode::findBarcode(inventTable.itemId);
                inventDim = inventItemBarcode.inventDim();

                inventDim.inventLocationId  = inventTable.salesInventLocationId(inventDim.inventLocationId);
                inventDim.configId          = inventDim.configId
                                ? inventDim.configId
                                : inventTable.standardConfigId;

                inventDim.inventSizeId      = inventDim.InventSizeId
                                ? inventDim.InventSizeId
                                : inventTable.standardInventSizeId;

                inventDim.inventColorId     = inventDim.InventColorId
                                ? inventDim.InventColorId
                                : inventTable.standardInventColorId;

                inventDim.InventLocationId  = inventDim.InventLocationId;

                salesLine.inventDimId       = InventDim::findOrCreate(inventDim).inventDimId;


                salesLine.inventDimId       = InventDim.inventDimId;

                salesLine.projCategoryId    = inventTable.projCategoryId;
                salesLine.setTaxItemGroup(inventTable.salesTaxItemGroupId());

                salesLine.salesUnit         = inventTable.salesUnitId();
                salesLine.overDeliveryPct   = inventTable.salesOverDeliveryPct();
                salesLine.underDeliveryPct  = inventTable.salesUnderDeliveryPct();

                salesLine.initName(inventTable);
                salesLine.initFromCustExternalItemDescription();

                salesLine.salesQty          = InventItemBarcode.Qty;

                salesLine.qtyOrdered        = InventItemBarcode.Qty;
                salesLine.CurrencyCode      = CompanyInfo::standardCurrency();
                salesLine.priceUnit         = inventTable.salesPriceUnit();
                salesLine.lineAmountModified();
                salesLine.barCode           = inventItemBarcode.itemBarCode;
                salesLine.barCodeType       = inventItemBarcode.barcodeSetupId;

                salesLine.dimension         = Dimensions::findDimension(salesLine, inventTable, inventTable.Dimension);

                salesLine.setPriceDisc(inventDim);
                salesLine.calcPackingUnit(inventDim);


                ttscommit;
            }
        }
    }

    ok = super(fieldId);

    if (ok)
    {
        salesLineType = this.type();
        ok = salesLineType.validateField(fieldId);
    }
    // Valu FA  (Viar) -->
    if (ok && fieldId == fieldnum(SalesLine, assetId_ru) && this.assetId_ru)
    {
        assetTable = RAssetTable::find(this.assetId_ru);
        ok = assetTable.isOkToSell();
        if (ok)
        {
            salesLineTmp = SalesLine::findAsset_RU(this.assetId_ru);
            if (salesLineTmp && salesLineTmp.recid != this.recId)
            {
                ok = checkfailed(strfmt("@FAV1297", salesLineTmp.salesId));
            }
        }
    }
    // <<-- Valu FA (Viar)

    return ok;
}