The client script that validates the line based on location on the purchase order and data is sourced to on hand field.
define(['N/currentRecord', 'N/record', 'N/search'],
    /**
     * @param{currentRecord} currentRecord
     * @param{record} record
     * @param{search} search
     */
    function (currentRecord, record, search) {
        "use strict"
        /**
         * @description checks the value
         * @param {string} parameter 
         * @returns boolean
         */
        function checkForParameter(parameter) {
            if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null" && parameter !== "undefined" && parameter !== " " && parameter !== 'false') {
                return true;
            } else {
                return false;
            }
        }
        /**
         * @description search to get on hand value
         * @param {string} item 
         * @returns array
         */
        function itemSearch(item, locationValue) {
            try {
                let itemSearchObj = search.create({
                    type: "item",
                    filters:
                        [
                            ["internalid", "is", item],
                            "AND",
                            ["inventorylocation.name", "is", locationValue]
                        ],
                    columns:
                        [
                            search.createColumn({ name: "type", label: "Type" }),
                            search.createColumn({ name: "locationquantityonorder", label: "Location On Order" }),
                        ]
                });
                let quantityOnOrder = null;
                itemSearchObj.run().each(function (result) {
                    quantityOnOrder = result.getValue({
                        name: "locationquantityonorder",
                    });
                    return false;
                });
                return quantityOnOrder;
            }
            catch (e) {
                console.log("error @itemSearch", e)
                return null;
            }
        }
        /**
         * Validation function to be executed when sublist line is committed.
         * @param {Object} scriptContext
         * @param {Record} scriptContext.currentRecord - Current form record
         * @param {string} scriptContext.sublistId - Sublist name
         * @returns {boolean} Return true if sublist line is valid
         * @since 2015.2
         */
        function validateLine(scriptContext) {
            try {
                let currentRecord = scriptContext.currentRecord;
                let locationValue = currentRecord.getText({
                    fieldId: "location"
                })
                let item = currentRecord.getCurrentSublistValue({
                    sublistId: "item",
                    fieldId: 'item'
                });
                if (checkForParameter(item) && checkForParameter(locationValue)) {
                    let itemRes = itemSearch(item, locationValue);
                    itemRes = checkForParameter(itemRes) ? itemRes : 0;
                    currentRecord.setCurrentSublistValue({
                        sublistId: "item",
                        fieldId: 'custcol_jj_on_order',
                        value: Number(itemRes),
                        ignoreFieldChange: true
                    });
                }
                return true;
            } catch (e) {
                console.log("error @validateLine", e);
                return true;
            }
        }
        return {
            validateLine: validateLine,
        };
    });