Вот вам пример рабочего кода (Аксапта 3.0 SP 2.0), выполняющего импорт в журнал инвентаризации строк из внешнего (текстового) файла:
	PHP код:
	
		
			
// Created on 22 Ноя 2004 at 12:22:09 by Dozer
void importInventoryQty()
{
    AsciiIO io = new AsciiIO( Path + "invent.dat", "R" ); // открываем файл для чтения
    InventJournalTrans          _inventJTrans, newtrans, _temp; // строки номенклатур
//    InventJournalTable          _inventJTable; // типа журналы тут все
    WMSPallet                   _wmsPallet;
    WMSLocation                 _wmsLocation;
    InventLocation              _invLocation;
    JournalTransMap             journalTrans_orig, journalTrans;
    FormDataSource              journalTrans_ds,
                                journalTable_ds,
                                inventDim_ds;
    InventColor                 _inventColor;
    Args  _args;
    Barcode                     barcode;
    container                   barCont;
    ItemBarcode                 itemBarcode;
    Object  InventTrans_ds,
             _transFormCaller,
             _tableFormCaller;
//FormRun
    container cnt;
    ItemId ItemId;
    TmpItemQty ItemQty;
    InventQty QtyToLoad, delta;
    int linenum;
    real qty;
    boolean _isAllLinesPassed = false,
            _isError = false,
            _isErrorRet = true;
    JournalTableData        journalTableData;
    JournalTransData        journalTransData;
    InventJournalFormTable  _inventJFTable;
    Dialog      _dBox = new Dialog('Выбор инвентаризационной единицы.');
    DialogField _fldInvLoc = _dBox.addField( typeId( inventLocationId ), 'Склад', 'Укажите склад для инвенторизации' );
    DialogField _fldWMSLoc = _dBox.addField( typeId( wMSLocationId ), 'Ячейка', 'Укажите ячейку для инвенторизации' );
    DialogField _fldPallet = _dBox.addField( typeId( wMSPalletId ), 'Палета', 'Укажите палету для инвентаризации' );
    InventDim       dim, newDim;
    InventDimID     dimID;
    ;
    if ( _dBox.run() )
        if ( _fldPallet.value() )
        {
            select _wmsPallet where _wmsPallet.wMSPalletId == _fldPallet.value();
            if ( !_fldWMSLoc.value() ) select _wmsLocation where _wmsLocation.wMSLocationId == _wmsPallet.wMSLocationId;
            else select _wmsLocation where _wmsLocation.wMSLocationId == _fldWMSLoc.value();
            if ( !_fldInvLoc.value() ) select _invLocation where _invLocation.InventLocationId == _wmsPallet.inventLocationId;
            else select _invLocation where _invLocation.InventLocationId == _fldInvLoc.value();
        }
        else if ( _fldWMSLoc.value() && _fldInvLoc.value() )
        {
            select _wmsLocation where _wmsLocation.wMSLocationId == _fldWMSLoc.value();
            select _invLocation where _invLocation.InventLocationId == _fldInvLoc.value();
        } else if ( _fldInvLoc.value() )
        {
            select _invLocation where _invLocation.InventLocationId == _fldInvLoc.value();
        }
        else throw error( 'Вы должны что нибудь выбрать!' );
    else return;
// init
    _temp = args.record();
    if (!_temp.JournalId) throw error ( 'Не выбран журнал инвентаризации!' );
    _transFormCaller = args.caller();
    _args = _transFormCaller.args();
    _tableFormCaller = _args.caller();
    InventTrans_ds = _temp.dataSource();
    _inventJFTable = _tableFormCaller.journalForm();
    journalTableData = _inventJFTable.JournalTableData();
    journalTable_ds = _inventJFTable.journalTable_DS();
    // Закачиваем данные из файла
    io.inFieldDelimiter( "," );
    ttsbegin;
    while ( true )
    {
        cnt = io.read();
        if ( io.status() != IO_Status::Ok )
            break;
        ItemId = conpeek( cnt, 2 );
        qty = str2num( conpeek( cnt, 6 ) );
        ItemQty.ItemId = ItemId;
        ItemQty.Qty = qty;
        itemBarcode = conpeek( cnt, 1 ); // Dozer добавочка
        info( ItemId );
        info( itemBarcode );
        barcode = Barcode::constructByUniqueStr( itemBarcode );
        barCont = barcode.findInventItem();
        dimID = conPeek( barCont, 4 );
        ItemQty.InventDimID = dimID;
        ItemQty.insert();
    }
    ttscommit;
    // Сворачиваем всю эту фигню и начинаем умопомрачительный процесс загрузки данных
    ttsbegin;
    select maxof( lineNum ) from _inventJTrans where _inventJTrans.journalId == _temp.journalId;
    lineNum = _inventJTrans.lineNum + 1;
    // сюда вставляем всякие дефолты для новой строки
    while select InventDimID, sum( Qty ) from ItemQty group by InventDimID, ItemId
    {
        QtyToLoad = ItemQty.Qty;
        _isAllLinesPassed = false;
        newDim.clear();
        newDim = InventDim::find( ItemQty.InventDimID );
        // если такой номенклатуры нету, то добавляем строку
            if ( _wmsPallet )
            {
                select _inventJTrans where _inventJTrans.journalId == _temp.journalId &&
                                _inventJTrans.itemId == ItemQty.ItemId
                        exists Join dim where dim.inventDimId == _inventJTrans.InventDimId &&
                                    dim.wMSPalletId == _wmsPallet.wMSPalletId &&
                                    dim.InventColorId == newDim.InventColorId &&
                                    dim.InventSizeId == newDim.InventSizeId &&
                                    dim.configId == newDim.configId;
            } else if ( _wmsLocation && _invLocation )
            {
                select _inventJTrans where _inventJTrans.journalId == _temp.journalId &&
                                _inventJTrans.itemId == ItemQty.ItemId
                        exists Join dim where dim.inventDimId == _inventJTrans.InventDimId &&
                                    dim.wMSLocationId == _wmsLocation.wMSLocationId &&
                                    dim.InventLocationId == _invLocation.InventLocationId &&
                                    dim.InventColorId == newDim.InventColorId &&
                                    dim.InventSizeId == newDim.InventSizeId &&
                                    dim.configId == newDim.configId;
            } else if ( _invLocation )
            {
                select _inventJTrans where _inventJTrans.journalId == _temp.journalId &&
                                _inventJTrans.itemId == ItemQty.ItemId
                        exists Join dim where dim.inventDimId == _inventJTrans.InventDimId &&
                                    dim.InventLocationId == _invLocation.InventLocationId &&
                                    dim.InventColorId == newDim.InventColorId &&
                                    dim.InventSizeId == newDim.InventSizeId &&
                                    dim.configId == newDim.configId;
            }
            else
                throw error( "Укажите склад!" );
        if ( !_inventJTrans )
        {
            info( 'Отсутствуют строки по номенклатуре ' + ItemQty.ItemId );
            journalTrans = newTrans;
            newdim.wMSLocationId = _wmsLocation.wMSLocationId;
            newdim.InventLocationId = _invLocation.InventLocationId;
            newdim.wMSPalletId = _wmsPallet.wMSPalletId;
//            _inventColor = InventColor::find( 'Норма', ItemQty.ItemId );
//            newDim.InventColorId = _inventColor.InventColorId;
            newDim = InventDim::findOrCreate( newDim );
                newtrans.clear();
                newtrans.journalId = _temp.JournalId;   // ---- mod
                newtrans.lineNum = lineNum;                     // ---- mod
                newtrans.JournalType = InventJournalType::Count;
                lineNum++;
                journalTransData = new JournalTransData( newtrans, journalTableData);
                journalTransData.initFromJournalTable();
                journalTrans.TransDate = systemDateGet();
                journalTransData.initFromJournalTable();
                newTrans.initValue();
                if (JournalTableData)
                {
//                    journalTrans.transDate   = journalTrans_last.recId ? journalTrans_last.transDate : systemdateGet();
                    if (journalTableData.journalVoucherNum() && journalTableData.journalTable().voucherDraw == JournalVoucherDraw::Entering)
                        journalTransData.initVoucher(journalTrans.voucher,true);
                }
                newtrans.InventDimId = newDim.inventDimId;
// конец создания. Дальше модифицируем.
                newtrans.itemId = ItemQty.ItemId; // ---- mod
                newTrans.inventMovement().JournalSetItemId(newDim);
//                newDim.initFromInventTable(newTrans.inventMovement().InventTable());
                if (journalTableData.journalVoucherNum() && journalTableData.journalTable().voucherDraw == JournalVoucherDraw::Entering)
                    journalTransData.initVoucher(journalTrans.voucher,true);
                newTrans.ProjLinePropertyId   = ProjLinePropertySetup::findLinePropertyId(newTrans.ProjId, newTrans.ProjCategoryId);
                newTrans.ProjTaxItemGroupId   = ProjParameters::taxItemGroupItem(newTrans.ProjCategoryId,newTrans.ItemId);
                newtrans.inventMovement().journalSetInventDimField(newDim);
                    // ---------- end mod
// validate
                if (! journalTrans.RecId && journalTableData.journalVoucherNum()                    &&
                    journalTableData.journalVoucherNum().voucherFetched()                           &&
                    journalTableData.journalVoucherNum().voucherFetched() != journalTrans.voucher   &&
                   !journalTableData.journalVoucherNum().checkChangeNumber(journalTrans.Voucher))
                {
                    journalTrans.Voucher = journalTableData.journalVoucherNum().voucherFetched();
//                    journalTrans_ds.refresh();
                    _isErrorRet = false;
                    if (InventItemLocation::isCountingStarted(newTrans.ItemId, newDim, newtrans.JournalId))
                        _isErrorRet = checkFailed(strFmt("@SYS59534", newTrans.itemId, newDim.inventLocationId));
                }
                if ( !_isErrorRet )
                    throw error( 'Ошибка при попытке создать новую строку.' );
// end of validate!
// -- а теперь запишем.
                newtrans.inventDimId = InventDim::findOrCreate(newDim).inventDimId;
//                journalTrans_orig = journalTrans.recId ? journalTrans.orig() : null;
                if (journalTableData.journalTable().posted)
                    throw error("@SYS21497");
            if (journalTableData.journalVoucherNum())
            {
                    if (! journalTableData.journalVoucherList().find(journalTrans.voucher))
                        journalTableData.journalVoucherList().addJournalTransData(journalTransData,journalTrans.voucher != journalTableData.journalVoucherNum().voucherFetched());
            }
                InventMovement::SetAutoReserving(newtrans);
                    newtrans.insert(); // -----------------------------------
                if (journalTableData.journalVoucherNum())
                {
                    if (journalTrans.voucher)
                    {
                        if (journalTrans.voucher == journalTableData.journalVoucherNum().voucherFetched())
                            journalTableData.journalVoucherNum().used(journalTrans.voucher);
                        else
                            journalTableData.journalVoucherNum().reserve(journalTrans.voucher);
                    }
                    if (journalTrans.voucher && journalTableData.journalVoucherList().find(journalTrans.voucher))
                        journalTableData.journalVoucherList().item().addTotal(journalTrans,false);
                }
                    journalTableData.addTotal(journalTrans,false);
//                    journalFormTable.updateFormCacheCurrent(journalTableData.journalTable(),true);
                    _inventJFTable.updateFormCacheCurrent(journalTableData.journalTable(),true);
//                    info( int2str(_inventJTable.NumOfLines) );
//                   _inventJTable.NumOfLines += 1;
//                    _inventJTable.update();
//                    info( int2str(_inventJTable.NumOfLines) );
//                    _inventJTable.data( journalTableData.journalTable() );
//                    _inventJTable.update();
//                journalTable_ds.setCurrent();
//                journalTable_ds.refresh();
//                if (newTrans.inventDimId != newDim.inventDimId)
//                {
//                    newDim.data(InventDim::find(newTrans.inventDimId));
//                    inventDim_ds.setCurrent();
//                }
// --- записали...
        }
// а теперь разноска количества наменклатуры по строкам
        do
        {
            if ( _wmsPallet )
            {
                select forupdate _inventJTrans where _inventJTrans.journalId == _temp.journalId &&
                                _inventJTrans.itemId == ItemQty.ItemId
                        exists Join dim where dim.inventDimId == _inventJTrans.InventDimId &&
                                    dim.wMSPalletId == _wmsPallet.wMSPalletId &&
                                    dim.InventColorId == newDim.InventColorId &&
                                    dim.InventSizeId == newDim.InventSizeId &&
                                    dim.configId == newDim.configId;
            } else if ( _wmsLocation && _invLocation )
            {
                select forupdate _inventJTrans where _inventJTrans.journalId == _temp.journalId &&
                                _inventJTrans.itemId == ItemQty.ItemId
                        exists Join dim where dim.inventDimId == _inventJTrans.InventDimId &&
                                    dim.wMSLocationId == _wmsLocation.wMSLocationId &&
                                    dim.InventLocationId == _invLocation.InventLocationId &&
                                    dim.InventColorId == newDim.InventColorId &&
                                    dim.InventSizeId == newDim.InventSizeId &&
                                    dim.configId == newDim.configId;
            } else if ( _invLocation )
            {
                select forupdate _inventJTrans where _inventJTrans.journalId == _temp.journalId &&
                                _inventJTrans.itemId == ItemQty.ItemId
                        exists Join dim where dim.inventDimId == _inventJTrans.InventDimId &&
                                    dim.InventLocationId == _invLocation.InventLocationId &&
                                    dim.InventColorId == newDim.InventColorId &&
                                    dim.InventSizeId == newDim.InventSizeId &&
                                    dim.configId == newDim.configId;
            }
            else
                throw error( "Укажите склад!" );
            while ( _inventJTrans )
            {
                journalTransData = new JournalTransData( _inventJTrans, journalTableData);
                journalTrans = _inventJTrans;
                dim = InventDim::find( _inventJTrans.InventDimId );
                if ( _inventJTrans.Counted < _inventJTrans.InventOnHand )
                {
                    // Будем добивать эту строку
                    if ( _inventJTrans.InventOnHand - _inventJTrans.Counted >= QtyToLoad )
                        delta = QtyToLoad;
                    else delta = _inventJTrans.InventOnHand - _inventJTrans.Counted;
                    _inventJTrans.Counted += delta;
//  .......................... modif
                    if (!_inventJTrans.EmplId)
                        _inventJTrans.EmplId = _inventJTrans.InventJournalTable().EmplId;
                    _inventJTrans.inventMovement().JournalSetCounted();
//  .......................... end modif; start write
                    _inventJTrans.inventDimId = InventDim::findOrCreate(dim).inventDimId;
                    journalTrans_orig = journalTrans.recId ? journalTrans.orig() : null;
                    if (journalTableData.journalTable().posted)
                        throw error("@SYS21497");
                    if (journalTableData.journalVoucherNum())
                    {
                        if (journalTrans_orig.recId)
                        {
                            if (! journalTableData.journalVoucherList().find(journalTrans.voucher))
                                journalTableData.journalVoucherList().addJournalTransData(journalTransData,true);
                            if (journalTrans.voucher != journalTrans_orig.voucher && journalTrans_orig.voucher)
                            {
                                if (! journalTableData.journalVoucherList().find(journalTrans_orig.voucher))
                                    journalTableData.journalVoucherList().addJournalTransData(journalTransData.newJournalTransDataOrig(journalTrans_orig),true);
                            }
                        }
                        else
                        {
                            if (! journalTableData.journalVoucherList().find(journalTrans.voucher))
                                journalTableData.journalVoucherList().addJournalTransData(journalTransData,journalTrans.voucher != journalTableData.journalVoucherNum().voucherFetched());
                        }
                    }
                    InventMovement::SetAutoReserving(_inventJTrans);
                    _inventJtrans.update(); // -----------------------------------
                    if (journalTableData.journalVoucherNum())
                    {
                        if (journalTrans.voucher)
                        {
                            if (journalTrans.voucher == journalTableData.journalVoucherNum().voucherFetched())
                                journalTableData.journalVoucherNum().used(journalTrans.voucher);
                            else
                                journalTableData.journalVoucherNum().reserve(journalTrans.voucher);
                        }
                        if (journalTrans_orig.recId) // update
                        {
                            if (journalTrans.voucher != journalTrans_orig.voucher && journalTrans_orig.voucher)
                                journalTableData.journalVoucherNum().Release(journalTrans_orig.voucher);
                            if (journalTrans_orig.voucher && journalTableData.journalVoucherList().find(journalTrans_orig.voucher))
                                journalTableData.journalVoucherList().item().addTotal(journalTrans_orig,true);
                        }
                        if (journalTrans.voucher && journalTableData.journalVoucherList().find(journalTrans.voucher))
                            journalTableData.journalVoucherList().item().addTotal(journalTrans,false);
                    }
// --------------------------------------
                    QtyToLoad -= delta;
                }
                else
                {
                    // в строке уже ровно или перебор,
                    // соответственно если еще что-то осталось сгрузить, сливаем в нее
                    if ( QtyToLoad > 0 && _isAllLinesPassed )
                    {
                        _inventJTrans.Counted += QtyToLoad;
                        if (!_inventJTrans.EmplId)
                            _inventJTrans.EmplId = _inventJTrans.InventJournalTable().EmplId;
                        _inventJTrans.inventMovement().JournalSetCounted();
//  ..........................
                    _inventJTrans.inventDimId = InventDim::findOrCreate(dim).inventDimId;
                    journalTrans_orig = journalTrans.recId ? journalTrans.orig() : null;
                    if (journalTableData.journalTable().posted)
                        throw error("@SYS21497");
                    if (journalTableData.journalVoucherNum())
                    {
                        if (journalTrans_orig.recId)
                        {
                            if (! journalTableData.journalVoucherList().find(journalTrans.voucher))
                                journalTableData.journalVoucherList().addJournalTransData(journalTransData,true);
                            if (journalTrans.voucher != journalTrans_orig.voucher && journalTrans_orig.voucher)
                            {
                                if (! journalTableData.journalVoucherList().find(journalTrans_orig.voucher))
                                    journalTableData.journalVoucherList().addJournalTransData(journalTransData.newJournalTransDataOrig(journalTrans_orig),true);
                            }
                        }
                        else
                        {
                            if (! journalTableData.journalVoucherList().find(journalTrans.voucher))
                                journalTableData.journalVoucherList().addJournalTransData(journalTransData,journalTrans.voucher != journalTableData.journalVoucherNum().voucherFetched());
                        }
                    }
                    InventMovement::SetAutoReserving(_inventJTrans);
                    _inventJtrans.update(); // -----------------------------------
                    if (journalTableData.journalVoucherNum())
                    {
                        if (journalTrans.voucher)
                        {
                            if (journalTrans.voucher == journalTableData.journalVoucherNum().voucherFetched())
                                journalTableData.journalVoucherNum().used(journalTrans.voucher);
                            else
                                journalTableData.journalVoucherNum().reserve(journalTrans.voucher);
                        }
                        if (journalTrans_orig.recId) // update
                        {
                            if (journalTrans.voucher != journalTrans_orig.voucher && journalTrans_orig.voucher)
                                journalTableData.journalVoucherNum().Release(journalTrans_orig.voucher);
                            if (journalTrans_orig.voucher && journalTableData.journalVoucherList().find(journalTrans_orig.voucher))
                                journalTableData.journalVoucherList().item().addTotal(journalTrans_orig,true);
                        }
                        if (journalTrans.voucher && journalTableData.journalVoucherList().find(journalTrans.voucher))
                            journalTableData.journalVoucherList().item().addTotal(journalTrans,false);
                    }
// --------------------------------------
// Кошмар! Если это заработает, значит есть все таки у программеров ангел хранитель...
                        QtyToLoad = 0;
                    }
                }
                _isAllLinesPassed = true;
                if ( QtyToLoad <= 0 )
                    break;
                next _inventJTrans;
            }
        } while ( QtyToLoad != 0 );
    }
    if ( _isError ) throw error( "Загрузка отменена!" );
    ttscommit;
    info( "Загрузка закончена успешно." );
//    journalTableData.updateBlock(JournalBlockLevel::None, JournalBlockLevel::None);
//    _inventJFTable.updateFormCacheCurrent(journalTableData.journalTable(), true);
    InventTrans_ds.research();
}