Вместо
Код:
inventJournalTrans.JournalId = #JournalNum;
inventJournalTrans.JournalType = inventJournalTable.JournalType;
правильнее было бы использовать
Код:
journalTransData.initFromJournalTable();
В этом случае будут так же инициализированы поля EmplId и LedgerAccountIdOffset. Возможно, для данного примера это не принципиально. Тем не менее стоит учитывать, что в дальнейшем возможны изменения приложения, которые затронут как раз процедуру создания строк журналов (например, в строки журнала будет добавлено новое поле, которое будет инициализироваться из заголовка журнала). Тогда после такого обновления Вам придется переписывать Вашу процедуру создания строк, чтобы включить в нее новую логику работы.
Кстати, можно обойтись без всех этих ритуальных танцев в JournalTableData и JournalTransData, а просто использовать
Код:
inventJournalTrans.initFromInventJournalTable(inventJournalTable);
Аналогично, вместо
Код:
inventJournalTrans.itemId = inventTable.itemId;
inventJournalTrans.dimension = inventTable.dimension;
inventJournalTrans.projCategoryId = inventTable.projCategoryId;
лучше
Код:
inventJournalTrans.initFromInventTable(inventTable);
А вот так делать не стоит:
Код:
//Инициализируем складскую аналитику
...
Дело в том, что складскую аналитику таким образом Вы полностью затрете своим складом. А как быть с конфигурацией, например? В общем, перед тем, как инициализировать складскую аналитику, неплохо бы добавить еще одну строчку:
Код:
inventDim = inventJournalTrans.inventDim();
Код:
//Инициализируем активную аналитику из настроке журнала для расчета количества
inventDimParm = InventJournalTable::journalId2inventDimParm(inventJournalTable.JournalId);
//*** Специфика заполнения строки для журнала инвентаризации ***
//Подсчитаем и запишем значение количества запасов в наличии на текущую дату
inventJournalTrans.inventOnHand = InventSumDatePhysicalDim::onHandQty(
inventJournalTrans.transDate,
inventJournalTrans.itemId,
inventDim,
inventDimParm);
Очень сложно. Можно просто вот так:
Код:
inventJournalTrans.inventMovement().journalSetInventDimField();
Код:
//Заполним номер документа ГК (если необходимо)
if (inventJournalTable.voucherDraw == JournalVoucherDraw::Entering)
journalTransData.initVoucher(voucher_last,false);
//Присвоим номер строки журнала
inventJournalTrans.lineNum = InventJournalTrans::lastLineNum(#JournalNum) + 1;
//Добавим запись
// !!! Внимание - по умолчанию при добавлении записи в строку журнала формируется
// складская проводка. Чтобы этого избежать, необходимо вызывать insert c параметром true.
inventJournalTrans.insert();
//Подсчитаем итоги по журналу
journalTransData.addTotal(false,false);
Опять же, все придумано до нас. Используйте
Код:
inventJournalTrans.insertFromCode();
Кроме того, не понял, а почему может понадобиться не создавать складскую проводку при создании журнала?
В целом, хотелось бы отметить, что для работы с журналами в Аксапте уже существует очень широкий набор функций. Создание строк журнала из кода - вполне типичная задача, которая решена много раз. Стоит посмотреть, как это делается в стандартном приложении.