Adam Weaver
09/05/2025, 1:23 PMMGBC
09/05/2025, 1:24 PMMGBC
09/05/2025, 1:25 PMAdam Weaver
09/05/2025, 1:32 PMMGBC
09/05/2025, 1:33 PMAdam Weaver
09/05/2025, 1:33 PMAdam Weaver
09/05/2025, 1:57 PMMGBC
09/05/2025, 2:13 PMAdam Weaver
09/05/2025, 2:13 PMMGBC
09/05/2025, 2:15 PMMGBC
09/05/2025, 2:16 PMMGBC
09/05/2025, 2:16 PMMGBC
09/05/2025, 2:17 PMMGBC
09/05/2025, 2:17 PMAdam Weaver
09/05/2025, 2:17 PMAdam Weaver
09/05/2025, 2:17 PMMGBC
09/05/2025, 2:19 PMAdam Weaver
09/05/2025, 2:20 PM/**
* @NApiVersion 2.1
* @NScriptType ScheduledScript
*/
define(['N/search', 'N/record', 'N/log'], (search, record, log) => {
const FAILED_LOCATION = 13; // Internal ID of "Failed Inventory"
const REVIEW_BIN = 250; // Internal ID of "Review" bin
function execute() {
// 1. Load saved search of items with Inventory Failed status
const invSearch = search.load({ id: 'customsearch3117' });
invSearch.run().each(result => {
try {
const itemId = result.getValue({ name: 'item' });
const fromLocation = result.getValue({ name: 'Bin Number' });
const qty = result.getValue({ name: 'Quantity' });
const lot = result.getValue({ name: 'Lot Number' }); // if applicable
if (!qty || qty <= 0) return true; // skip empty
// 2. Create Inventory Transfer
const transfer = record.create({ type: record.Type.INVENTORY_TRANSFER, isDynamic: true });
transfer.setValue({ fieldId: 'location', value: fromLocation }); // From
transfer.setValue({ fieldId: 'transferlocation', value: FAILED_LOCATION }); // To
// Add line
transfer.selectNewLine({ sublistId: 'inventory' });
transfer.setCurrentSublistValue({ sublistId: 'inventory', fieldId: 'item', value: itemId });
transfer.setCurrentSublistValue({ sublistId: 'inventory', fieldId: 'adjustqtyby', value: qty });
// Inventory detail for bin/lot
const invDetail = transfer.getCurrentSublistSubrecord({
sublistId: 'inventory',
fieldId: 'inventorydetail'
});
invDetail.selectNewLine({ sublistId: 'inventoryassignment' });
invDetail.setCurrentSublistValue({ sublistId: 'inventoryassignment', fieldId: 'binnumber', value: REVIEW_BIN });
invDetail.setCurrentSublistValue({ sublistId: 'inventoryassignment', fieldId: 'quantity', value: qty });
if (lot) {
invDetail.setCurrentSublistValue({ sublistId: 'inventoryassignment', fieldId: 'issueinventorynumber', value: lot });
}
invDetail.commitLine({ sublistId: 'inventoryassignment' });
transfer.commitLine({ sublistId: 'inventory' });
const transferId = transfer.save();
log.audit('Transfer Created', `ID: ${transferId}, Item: ${itemId}, Qty: ${qty}`);
} catch (e) {
log.error('Error moving failed inventory', e.message);
}
return true; // continue loop
});
}
return { execute };
});
Adam Weaver
09/05/2025, 2:21 PMAdam Weaver
09/05/2025, 2:23 PMMGBC
09/05/2025, 2:23 PMAdam Weaver
09/05/2025, 2:24 PMMGBC
09/05/2025, 2:25 PMAdam Weaver
09/05/2025, 2:25 PMMGBC
09/05/2025, 2:26 PMAdam Weaver
09/05/2025, 2:27 PMMGBC
09/05/2025, 2:28 PMMGBC
09/05/2025, 2:28 PMMGBC
09/05/2025, 2:28 PMAdam Weaver
09/05/2025, 2:30 PMMGBC
09/05/2025, 2:31 PMAdam Weaver
09/05/2025, 2:35 PM