|
案例整理自其他客开老师的开发成果
一、场景
客开实现在销售订单新增时,通过excel导入子表数据,然后再点保存。
注意事项,标准版此种客开方案对单次导入的数据量有要求,每次最好不要超过200
二、开发步骤
1、引入三方js插件
从网上下载即可
2、设计器增加按钮
按钮增加后如果预览看不到
先在设计器-页面配置中调整显示
然后去“角色管理”菜单,给当前用户的角色勾选按钮权限
3、前端脚本
- loadJsXlsx(viewModel);
- //分录导入--单击
- createInput(viewModel);
- function loadJsXlsx(viewModel) {
- //动态引入js-xlsx库
- var secScript = document.createElement('script');
- //保存传入的viewModel对象
- // window.viewModelInfo = viewModel;
- secScript.setAttribute('type', 'text/javascript');
- //传入文件地址 subId:应用ID
- secScript.setAttribute('src', `/iuap-yonbuilder-runtime/opencomponentsystem/public/SCMSA/xlsx.core.min.js?domainKey=developplatform`);
- document.body.insertBefore(secScript, document.body.lastChild);
- }
- function createInput(viewModel) {
- var fileInput = document.createElement('input');
- fileInput.id = 'file_input_info';
- fileInput.type = 'file';
- fileInput.style = 'display:none';
- document.body.insertBefore(fileInput, document.body.lastChild);
- //给文件input注册改变事件
- document.getElementById('file_input_info').addEventListener('change', function (e) {
- var files = e.target.files;
- if (files.length == 0) return;
- var filesData = files[0];
- readWorkbookFromLocalFile(filesData, function (workbook) {
- readWorkbook(workbook, viewModel);
- document.getElementById('file_input_info').value = "";
- });
- });
- }
- //触发文件点击事件
- function selectFile() {
- document.getElementById('file_input_info').click();
- }
- //读取本地excel文件
- function readWorkbookFromLocalFile(file, callback) {
- var reader = new FileReader();
- reader.onload = function (e) {
- var localData = e.target.result;
- var workbook = XLSX.read(localData, { type: 'binary' });
- if (callback) callback(workbook);
- };
- reader.readAsBinaryString(file);
- }
- //读取excel里面数据,进行缓存
- function readWorkbook(workbook, viewModel) {
- var sheetNames = workbook.SheetNames; // 工作表名称集合
- const workbookDatas = [];
- let sheetNamesItem = sheetNames[0];
- workbookDatas[0] = XLSX.utils.sheet_to_json(workbook.Sheets[sheetNamesItem]);
- let workbookData = workbookDatas[0];
- let DataCount = workbookData.length;
- //循环获取的excel物料编码值,获取物料对应信息
- let QryMatInParm = [];
- for (let i = 0; i < DataCount; i++) {
- let workbookDataInfo = workbookData[i];
- let ProductCode = workbookDataInfo.商品编码;
- QryMatInParm.push(ProductCode);
- }
- let RtMatInfo = [];
- //根据物料编码集合获取物料的信息
- cb.rest.invokeFunction("SCMSA.BackScript.SOQueryMatInfo", { codes: QryMatInParm },
- function (err, res) {
- console.log(err);
- console.log(res);
- RtMatInfo = res["res"];
- //批量插入行传入参数
- let InParms = [];
- //获取单据日期
- const PlanDate = viewModel.get('vouchdate').getValue();
- //组织
- const salesOrgId = viewModel.get('salesOrgId').getValue();
- const salesOrgId_code = viewModel.get('salesOrgId_code').getValue();
- const salesOrgId_name = viewModel.get('salesOrgId_name').getValue();
- for (let i = 0; i < DataCount; i++) {
- let InParm = {};
- let workbookDataInfo = workbookData[i];
- let ProductCode = "";
- ProductCode = workbookDataInfo.商品编码;
- InParm.realProductCode = ProductCode;
- InParm.productCode = ProductCode;
- //根据物料获取物料的信息
- const MatResult = RtMatInfo.find(item => item.code == ProductCode);
- if (MatResult !== undefined) {
- //商品名称
- const name = MatResult.name;
- InParm.productName = name;
- //商品id
- let productId = MatResult.id;
- // productId="1944077975384227800";
- InParm.productId = productId;
- // InParm.realProductCode = productId;
- //销售单位
- const batchUnit = MatResult.batchUnitName;
- InParm.productAuxUnitName = batchUnit;
- //计价单位
- const batchPriceUnit = MatResult.batchPriceUnitName;
- InParm.productUnitName = batchPriceUnit;
- //税率
- const outTaxrate = MatResult.outTaxrate;
- const outTaxrateName = MatResult.outTaxrateName;
- const outTaxrateCode = MatResult.outTaxrateCode;
- if (outTaxrate !== undefined) {
- InParm.taxId = outTaxrate;
- }
- if (outTaxrate !== undefined) {
- InParm.taxRate = outTaxrateName;
- }
- if (outTaxrate !== undefined) {
- InParm.taxCode = outTaxrateCode;
- }
- }
- //计划发货日期
- InParm.consignTime = PlanDate;
- //库存组织
- InParm.stockOrgId_name = salesOrgId_name;
- InParm.stockOrgId_code = salesOrgId_code;
- InParm.stockOrgId = salesOrgId;
- //开票组织
- InParm.settlementOrgId_name = salesOrgId_name;
- InParm.settlementOrgId_code = salesOrgId_code;
- InParm.settlementOrgId = salesOrgId;
- // InParm.subQty = workbookDataInfo.数量;
- InParms.push(InParm);
- }
- //获取表格现有行数
- let AllRows = viewModel.getGridModel("orderDetails").getRows();
- let RowCount = AllRows.length;
- viewModel.getGridModel("orderDetails").insertRows(RowCount, InParms);
- let BatchSetArr = [];
- for (let j = 0; j < DataCount; j++) {
- let workbookDataInfo1 = workbookData[j];
- const subQty = workbookDataInfo1.数量;
- let IndexRow = j + RowCount;
- //批量更新数量字段
- viewModel.getGridModel("orderDetails").setCellValue(IndexRow, "subQty", subQty, true);
- let BatchSetObj = {};
- BatchSetObj.rowIndex = j;
- BatchSetObj.cellName = "subQty";
- BatchSetObj.value = subQty;
- BatchSetObj.check = true;
- BatchSetArr.push(BatchSetObj);
- }
- //设置表头本币信息
- viewModel.get('orderPrices!natCurrency').setValue('1915846150329466908');
- viewModel.get('orderPrices!domesticName').setValue('人民币');
- viewModel.get('orderPrices!domesticCode').setValue('CNY');
- // viewModel.getGridModel("orderDetails").setCellValues(BatchSetArr);
- });
- }
- //点击按钮上传excel
- viewModel.get('button138jf').on('click', function (data) {
- selectFile();
- });
复制代码
4、api函数
- let AbstractAPIHandler = require('AbstractAPIHandler');
- class MyAPIHandler extends AbstractAPIHandler {
- execute(request) {
- const matCodes = request.codes;
- let CodeCount = matCodes.length;
- let TotCodeStr = "";
- for (let i = 0; i < CodeCount; i++) {
- const MatCode = matCodes[i];
- TotCodeStr += "'" + MatCode + "',"
- }
- TotCodeStr += "'final'";
- //物料详情信息
- let QryInfos = ObjectStore.queryByYonQL("select id,code,name"
- + " from pc.product.Product where code in(" + TotCodeStr + ")", "productcenter");
- QryInfos.forEach(function (QryInfo) {
- let QryUnitInfos = ObjectStore.queryByYonQL("select batchPriceUnit,batchUnit,outTaxrate"
- + " from pc.product.ProductDetail where productId ='" + QryInfo.id + "'", "productcenter");
-
- const batchUnitId= QryUnitInfos[0].batchUnit;
- const batchPriceUnitId= QryUnitInfos[0].batchPriceUnit;
- const outTaxrateId= QryUnitInfos[0].outTaxrate;
-
- QryInfo.batchPriceUnit = batchPriceUnitId;
- QryInfo.batchUnit = batchUnitId;
- QryInfo.outTaxrate = outTaxrateId;
-
- //根据销售单位id获取单位名称和编码
- let QrybatchUnitInfos = ObjectStore.queryByYonQL("select code,name from pc.unit.Unit where id='" + batchUnitId + "'");
- const batchUnitName = QrybatchUnitInfos[0].name;
- const batchUnitCode = QrybatchUnitInfos[0].code;
- QryInfo.batchUnitName=batchUnitName;
- QryInfo.batchUnitCode=batchUnitCode;
-
- //根据计量单位id获取单位名称和编码
- let QrybatchPriceUnitInfos = ObjectStore.queryByYonQL("select code,name from pc.unit.Unit where id='" + batchPriceUnitId + "'");
- const batchPriceUnitName = QrybatchPriceUnitInfos[0].name;
- const batchPriceUnitCode = QrybatchPriceUnitInfos[0].code;
- QryInfo.batchPriceUnitName=batchPriceUnitName;
- QryInfo.batchPriceUnitCode=batchPriceUnitCode;
-
- if(outTaxrateId!==undefined){
- //根据税率id获取税率编码和名称
- let QryoutTaxrateInfos = ObjectStore.queryByYonQL("select code,ntaxrate from archive.taxArchives.TaxRateArchive where id='" + outTaxrateId + "'");
- const outTaxrateName = QryoutTaxrateInfos[0].ntaxrate;
- const outTaxrateCode = QryoutTaxrateInfos[0].code;
- QryInfo.outTaxrateName=outTaxrateName;
- QryInfo.outTaxrateCode=outTaxrateCode;
- }
- });
- return { res: QryInfos };
- }
- }
- exports({ "entryPoint": MyAPIHandler });
复制代码
|
本帖子中包含更多资源,您需要 登录 才可以下载或查看,没有帐号?立即注册
X
|