Добрый день всем, кто может помочь мне со следующим, пожалуйста,
У меня есть этот пакет, который имеет форму, создает поисковый фильтр и заполняет подсписок, этот подсписок имеет текстовое поле и должензаполнить числом, чтобы присвоить этой строке значение. Извините за мой английский.
//, Also specify which field does not work when I apply a filter,
// for example "campoitem". some filters work well for example "codigobarra"
/**
* @NApiVersion 2.0
* @NScriptType suitelet
* @NModuleScope public
*/
define(['N/ui/serverWidget', 'N/search', 'N/log'],
function(serverWidget, search, log) {
//1 - FUNCION DE CONTENIDO
function onRequest(context) {
// 2 - CARGAMOS LA BUSQUEDA GUARDAD ESTA BUSQUEDA GUARDAD FUE CREADA EN SUITELE
// Y CONTIENE UNO FILTRO EN CRITERIA YA DEFINIDOS QUE AFECTAN A ESTE SCRIPT
var busqueda = search.load({ id: 'customsearch_axa_lista_v5_ok' });
try {
//CREAMOS UN FORMULARIO
var formulario = serverWidget.createForm({ title: 'Formulario de Busqueda' });
// CREAMOS UN GRUPO DE BUSQUEDA INDIVIDUAL TEMPORAL
var GrupoBusqueda = formulario.addFieldGroup({ id: 'GrupoBusqueda', label: 'Grupo de Busqueda' });
GrupoBusqueda.isSingleColumn = true;
// CREAMOS LOS CAMPO QUE VAN A ENVIAR LOS VALORES
formulario.addField({ id: 'codigobarra', type: serverWidget.FieldType.TEXT, label: 'Codigo de Barras', container: 'GrupoBusqueda' });
formulario.addField({ id: 'nombrelinea', type: serverWidget.FieldType.TEXT, label: 'Linea de Producto', container: 'GrupoBusqueda' });
formulario.addField({ id: 'nombrelista', type: serverWidget.FieldType.TEXT, label: 'Lista de asociados', container: 'GrupoBusqueda' });
formulario.addField({ id: 'campoitem', type: serverWidget.FieldType.TEXT, label: 'Seleccionar Producto', source: 'item', container: 'GrupoBusqueda' });
formulario.addField({ id: 'formafarma', type: serverWidget.FieldType.TEXT, label: 'Seleccionar Tipo de producto ("Jarabe/tabletas etc..")', source: 'item', container: 'GrupoBusqueda' });
// CREAMOS UN GRUPO DE BUSQUEDA ENTRE CANTIDAD O PRECIOS COMO BETWEEN
var GrupoBusquedaDos = formulario.addFieldGroup({ id: 'GrupoBusquedaDos', label: ' AXA 2019' });
GrupoBusquedaDos.isSingleColumn = true;
// CREAMOS LOS CAMPOS QUE VAN A ENVIAR LOS VALORES
formulario.addField({ id: 'preciobase1', type: serverWidget.FieldType.CURRENCY, label: 'Precio desde', container: 'GrupoBusquedaDos' });
formulario.addField({ id: 'preciobase2', type: serverWidget.FieldType.CURRENCY, label: 'Precio hasta', container: 'GrupoBusquedaDos' });
formulario.addField({ id: 'ivaporcent1', type: serverWidget.FieldType.PERCENT, label: 'Promocion desde', container: 'GrupoBusquedaDos' });
formulario.addField({ id: 'ivaporcent2', type: serverWidget.FieldType.PERCENT, label: 'Promocion hasta', container: 'GrupoBusquedaDos' });
//CREAMOS LOS BOTONES DE ENVIO Y LIMPIAR
formulario.addSubmitButton({ id: 'markall', label: 'Enviar Filtro' });
formulario.addResetButton({ label: 'Limpiar Campos' });
//ENVIAMOS LOS DATOS A UNA PAGINA NUEVA DONDE PUEDO VISUALIZAR MIS CAMPOS
context.response.writePage(formulario);
//DEPUES DE CREADA LA PAGINA TOMO LOS VALORES AL EDITAR CADA CAMPO
// EJECUCION DE PRUEBA SOLO POR CAMPO INDIVIDUAL TEMPORALMENTE
var codigobarra = context.request.parameters.codigobarra;
var nombrelinea = context.request.parameters.nombrelinea;
var nombrelista = context.request.parameters.nombrelista;
var campoitem = context.request.parameters.campoitem;
var formafarma = context.request.parameters.formafarma;
var preciobase1 = context.request.parameters.preciobase1;
var preciobase2 = context.request.parameters.preciobase2;
var ivaporcent1 = context.request.parameters.ivaporcent1;
var ivaporcent2 = context.request.parameters.ivaporcent2;
// SI EL CODIGO DE BARRA CONTIENE UN VALOR ENVIAR EL FILTRO SINO PASA AL
// OTRO VALOR VALOR Y ASI SUCESIVAMENTE
// ESTE CODIGO FUNCIONA NOMBRELINEA
if (codigobarra) {
// EMPAQUETAMOS LA BUSQUEDA
var filtrosArray = busqueda.filters;
//CREAMOS EL FILTRO DE BUSQUEDA DEACUERDO AL VALOR OSEA CODIGO DE BARRA
var filterOne = search.createFilter({ name: 'upccode', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [codigobarra] });
// ENVIAMOS ESE FILTRO A NUESTRO ARRAY
filtrosArray.push(filterOne);
datos(filtrosArray) // INICIAMOS LA FUNCION DATOS CON EL FILTRO CREADO
} // ESTE CODIGO FUNCIONA NOMBRELINEA
else if (nombrelinea) {
var filterOne = search.createFilter({ name: 'vendorname', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [nombrelinea] });
var filtrosArray = busqueda.filters;
filtrosArray.push(filterOne);
datos(filtrosArray);
} // ESTE CODIGO FUNCIONA NOMBRELISTA
else if (nombrelista) {
var filterOne = search.createFilter({ name: 'name', join: 'CUSTRECORD_AXA_PRU_BOD_CLI', operator: search.Operator.STARTSWITH, values: [nombrelista] });
var filtrosArray = busqueda.filters;
filtrosArray.push(filterOne);
datos(filtrosArray);
} // ESTE CODIGO ACONTINUACION TIENE "ERROR CAMPOITEM"
else if (campoitem) {
var filterOne = search.createFilter({ name: 'displayname', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [campoitem] });
var filtrosArray = busqueda.filters;
filtrosArray.push(filterOne);
datos(filtrosArray);
} // ESTE CODIGO ACONTINUACION TIENE "ERROR FORMAFARMA"
else if (formafarma) {
var filterOne = search.createFilter({ name: 'custitem_nso_forma_farmaceutica', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [formafarma] });
var filtrosArray = busqueda.filters;
filtrosArray.push(filterOne);
datos(filtrosArray);
} // ESTE CODIGO FUNCIONA PRECIOBASE 1 Y 2
else if (preciobase1, preciobase2) {
var filterOne = search.createFilter({ name: 'formulanumeric', formula: 'ROUND(({custrecord_nso_costo_maestro}+({custrecord_nso_costo_maestro}*{custrecord_axa_pru_bod_cli.custrecord_nso_margen_2})),0)', operator: search.Operator.GREATERTHAN, values: [preciobase1] });
var filterTwo = search.createFilter({ name: 'formulanumeric', formula: 'ROUND(({custrecord_nso_costo_maestro}+({custrecord_nso_costo_maestro}*{custrecord_axa_pru_bod_cli.custrecord_nso_margen_2})),0)', operator: search.Operator.NOTGREATERTHAN, values: [preciobase2] });
var filtrosArray = busqueda.filters;
filtrosArray.push(filterOne, filterTwo);
datos(filtrosArray);
} // ESTE CODIGO ACONTINUACION TIENE "ERROR PORCENT1 Y PORCENT2"
else if (ivaporcent1, ivaporcent2) {
var filterOne = search.createFilter({ name: 'custitem_axa_edu_iva', join: 'CUSTRECORD_NSO_ITEM', operator: search.Operator.GREATERTHAN, values: [ivaporcent1] });
var filterTwo = search.createFilter({ name: 'custitem_axa_edu_iva', join: 'CUSTRECORD_NSO_ITEM', operator: search.Operator.NOTGREATERTHAN, values: [ivaporcent2] });
var filtrosArray = busqueda.filters;
filtrosArray.push(filterOne, filterTwo);
datos(filtrosArray);
}
return { formulario: formulario };
} catch (e) {
log.error('Error al crear el formuraio.', e);
}
// TERMINA LOS FILTROS DE BUSQUEDA
//FUNCION DATOS DONDE MOSTRAREMOS UNA SUBLISTA CON LOS DATOS ENCONTRADOS EN LOS FILTROS
function datos(filtrosArray) {
// CORREMOS LA BUSQUEDA PARA INGRESAR LA INFORMACION EN UNS SUBLISTA
var FiltrosV4 = busqueda.run().getRange({ start: 0, end: 70 });
// CFREAMOS UN NUEVO FORMULARIO QUE CONTENDRA LOS DATOS
var form = serverWidget.createForm({
title: 'Datos Filtrados: ' + codigobarra + ' ' + nombrelinea + ' ' + nombrelista + ' ' + campoitem + ' ' + formafarma
});
// ACCESO DIRECTO A UN NUEVO FILTRO - LINK
form.addPageLink({ type: serverWidget.FormPageLinkType.CROSSLINK, title: 'Nuevo Filtro', url: '/app/site/hosting/scriptlet.nl?script=1358&deploy=1' });
//LLAMO A UN ARCHIVO EXTERNO PARA PODER UTILIZAR LOS DATOS CON UN BOTON
form.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';
// CONTENEDOR DE LOS DATOS
var sublist = form.addSublist({
id: 'sublist',
type: serverWidget.SublistType.LIST, //INLINEEDITOR, LIST','EDITOR', or 'STATICLIST'
label: 'Listado de productos'
});
// creamos el ID interno de verificacion
var idField = sublist.addField({
id: 'custpage_registro_interno_id',
label: 'Internal ID',
type: serverWidget.FieldType.TEXT
});
// creamos el campo de ingreso cantidad
var cantidad = sublist.addField({
id: 'custpage_cantidad',
label: 'Cantidad Producto',
type: serverWidget.FieldType.INTEGER
});
cantidad.updateDisplayType({ displayType: serverWidget.FieldDisplayType.ENTRY });
// NOMBRE DE CADA COLUMNA DE LA SUBLISTA
sublist.addField({ id: 'custpage_empresa', label: 'Empresa', type: serverWidget.FieldType.TEXT });
sublist.addField({ id: 'custpage_codigobarra', label: 'Codigo de Barras', type: serverWidget.FieldType.TEXT });
sublist.addField({ id: 'custpage_producto', label: 'Producto', type: serverWidget.FieldType.TEXT });
sublist.addField({ id: 'custpage_linea', label: 'Linea', type: serverWidget.FieldType.TEXT });
sublist.addField({ id: 'custpage_precio', label: 'Precio Venta', type: serverWidget.FieldType.CURRENCY });
sublist.addField({ id: 'custpage_descuento', label: 'Decuento', type: serverWidget.FieldType.PERCENT });
sublist.addField({ id: 'custpage_predesc', label: 'Precio Descuento', type: serverWidget.FieldType.CURRENCY });
sublist.addField({ id: 'custpage_iva', label: 'IVA', type: serverWidget.FieldType.PERCENT });
sublist.addField({ id: 'custpage_preiva', label: 'Precio IVA', type: serverWidget.FieldType.CURRENCY });
sublist.addField({ id: 'custpage_promo', label: 'Fecha Promocion', type: serverWidget.FieldType.DATE });
sublist.addField({ id: 'custpage_generico', label: 'Generico', type: serverWidget.FieldType.TEXT });
sublist.addField({ id: 'custpage_farma', label: 'FormFarma', type: serverWidget.FieldType.TEXT });
sublist.addField({ id: 'custpage_saldo', label: 'Saldo', type: serverWidget.FieldType.INTEGER });
//sublist.addMarkAllButtons();
// CREAMOS UN CAMPO PARA INSERTAR INFORMACION DE CANTIDAD
// LA IDEA ESQUE ESTE CAMPO AL SER EDITADO CREE UN FIELDCHANGE QUIEN TOMARA LOS DATOS
// OSEA LA CANTIDAD Y TOMARA COMO REFERENCIA EL ID DE LA FILA DONDE SE ESCRIBIO.
//SECCIONAMOS LA BUSQUEDA CON SUS COLUMNAS
var sublist = form.getSublist({ id: 'sublist' });
for (var i = 0; i < FiltrosV4.length; i++) {
var columns = FiltrosV4[i].columns; // COLUMNA EN SU POSICION
sublist.setSublistValue({ id: 'custpage_empresa', line: i, value: [FiltrosV4[i].getValue(columns[0])] });
sublist.setSublistValue({ id: 'custpage_codigobarra', line: i, value: [FiltrosV4[i].getValue(columns[2])] });
sublist.setSublistValue({ id: 'custpage_producto', line: i, value: [FiltrosV4[i].getText(columns[3])] });
sublist.setSublistValue({ id: 'custpage_linea', line: i, value: [FiltrosV4[i].getValue(columns[4])] });
sublist.setSublistValue({ id: 'custpage_precio', line: i, value: [FiltrosV4[i].getValue(columns[5])] });
sublist.setSublistValue({ id: 'custpage_descuento', line: i, value: [FiltrosV4[i].getValue(columns[6])] });
sublist.setSublistValue({ id: 'custpage_predesc', line: i, value: [FiltrosV4[i].getValue(columns[7])] });
sublist.setSublistValue({ id: 'custpage_iva', line: i, value: [FiltrosV4[i].getValue(columns[8])] });
sublist.setSublistValue({ id: 'custpage_preiva', line: i, value: [FiltrosV4[i].getValue(columns[9])] });
sublist.setSublistValue({ id: 'custpage_promo', line: i, value: [FiltrosV4[i].getValue(columns[10])] });
sublist.setSublistValue({ id: 'custpage_generico', line: i, value: [FiltrosV4[i].getValue(columns[12])] });
sublist.setSublistValue({ id: 'custpage_farma', line: i, value: [FiltrosV4[i].getText(columns[13])] });
sublist.setSublistValue({ id: 'custpage_registro_interno_id', line: i, value: FiltrosV4[i].id });
}
// CREAMOS UN BOTON DONDE ESTE CAPTURA EL CLIENTSCRIPT EXTERNO
var botones = sublist.addButton({
id: 'custpage_buttonid',
label: 'Enviar Selección',
functionName: 'btnenvio' //LLAMO LA FUNCION DEL CLIENTSCRIP
});
// MUESTRO MI SUBLISTA EN UNA NUEVA PAGINA
context.response.writePage(form);
}
if (context.request.method === 'GET') {
datos();
}
}
return {
onRequest: onRequest
};
});
У меня есть этот клиентский скрипт, он должен поставить галочку в поле количества подсписка, вы должны взять все значения строки при наборе значения, когда вынажмите кнопку пакета, вы должны отправить это значение в инвентарь с идентификатором. Я не могу понять, как это сделать, кто-то может мне помочь, спасибо за сотрудничество.
/**
*@NApiVersion 2.0
*@NScriptType ClientScript
*/
define(["N/log", "N/ui/dialog", "N/record", "N/currentRecord"], function(log, dialog, record, currentRecord) {
//FUNCION PAGEINIT
var pageInit = function(context) {
console.log('entry 1');
} // contructor en blanco
var btnenvio = function(context) {
// MENSAJE DE CONFIRMACION DE CLICK EN EL BOTON
console.log('entry 2');
}
//VALIDACION DE LOS CAMPOS AUN NO DEFINIDO
// function validateField(context) {
// console.log('entry 3');
// }
// CAMBIO DE ESTADO CAMPO AUN NO DEFINIDO
function fieldChanged(context) {
//ingresa para hacer un debug y seguimiento = debugger;
var ObjetoRecibido = context.currentRecord;
if (context.fieldId == "custpage_cantidad") {
console.log('entry 3');
var field = ObjetoRecibido.getField("custpage_registro_interno_id");
// ???????
console.log('Ver datos: ' + JSON.stringify(field));
}
}
function validateField(context) {
if (context === 'custpage_cantidad') {
var isValid = validateTaxNum();
//una función devuelve booleano. Si devuelve false, proporciona un mensaje de alerta.//
return isValid;
}
return true;
}
return {
pageInit: pageInit,
btnenvio: btnenvio,
fieldChanged: fieldChanged,
validateField: validateField
}
});
это поле должно принимать значение количества, позднее оно принимает значение цифрового значения и по мере того, как оно индексирует внутренние идентификаторы строки, или две строки или три, так последовательно, Это изображение.
введите описание изображения здесь